Configurer les notifications Matrix (element.io) avec le plugin discourse-chat-integration

Ce howto décrit comment configurer le fournisseur Matrix (element.io) inclus dans discourse-chat-integration.

Merci à @ara4n et aux membres de la salle #matrix-dev:matrix.org pour leur aide dans cette intégration :slight_smile:

Installation

Le plugin discourse-chat-integration est inclus dans Discourse. Assurez-vous qu’il est activé en définissant chat_integration_enabled à true dans vos paramètres du site. Pour plus de détails, consultez le sujet du plugin discourse-chat-integration.

Configurer Matrix

Ces instructions supposent que vous utilisez le client web element.io. Des étapes équivalentes devraient être possibles avec d’autres interfaces.

  1. Ouvrez https://app.element.io/ dans une nouvelle fenêtre de navigation privée (vous comprendrez pourquoi plus tard)

  2. Créez un compte utilisateur pour votre bot. Il est probable que vous souhaitiez noter le mot de passe quelque part au cas où vous souhaiteriez vous reconnecter plus tard. Discourse n’en a pas besoin.

  3. Utilisez l’interface pour rejoindre toutes les salles auxquelles vous souhaitez pouvoir envoyer des notifications

  4. Ouvrez les paramètres de l’utilisateur en cliquant sur votre avatar en haut à gauche, puis Tous les paramètres

  5. Configurez le nom d’affichage et l’avatar du bot

  6. Passez à l’onglet « Aide et À propos », faites défiler jusqu’à « Avancé », puis copiez l’adresse du serveur d’accueil et votre « jeton d’accès » (Access Token) — vous en aurez besoin plus tard.

  7. NE CLIQUEZ PAS SUR DÉCONNEXION. Si vous le faites, le jeton d’accès sera invalidé et cela ne fonctionnera plus. Fermez simplement la fenêtre de navigation privée. Si vous avez oublié d’ouvrir une fenêtre de navigation privée, retournez à l’étape 1 :wink:

Configurer Discourse

  1. Dans les paramètres de votre site Discourse, entrez l’adresse de votre serveur d’accueil dans le paramètre chat_integration_matrix_homeserver. Assurez-vous d’inclure le protocole. (par exemple https://matrix.org). N’incluez pas de barre oblique à la fin.

  2. Collez le jeton d’accès que vous avez copié précédemment dans le paramètre du site chat_integration_matrix_access_token

  3. Activez chat_integration_matrix_enabled

  4. Allez dans l’onglet Plugins, puis Intégrations de chat

  5. Allez dans l’onglet Matrix, puis Créer une chaîne

  6. Entrez un nom pour la chaîne (celui-ci n’est affiché que dans l’interface d’administration, il peut être n’importe quoi)

  7. Entrez l’« ID de la salle » pour une salle vers laquelle vous souhaitez envoyer des notifications. Dans le client web Element, vous pouvez le trouver en ouvrant votre salle, en cliquant sur le nom en haut, puis en faisant défiler jusqu’en bas. Cela ressemblera à quelque chose comme

    !cdGUowUAqlgLHVerqE:matrix.org
    

    Remarque : Les nouveaux ID de salle Matrix v12 peuvent ne pas inclure le suffixe :serveur (par exemple !abcdefghijkl). Les deux formats sont pris en charge.

  8. Sauvegarder la chaîne

  9. Utilisez le bouton Tester sur la chaîne que vous venez de créer pour vérifier que tout fonctionne. Vous devriez voir quelque chose comme ceci :

  10. Configurez quelques « Règles » pour votre chaîne, conformément aux instructions de discourse-chat-integration.

Notes techniques
  • Au moment de la rédaction, il ne semble pas y avoir de moyen d’obtenir un « jeton d’accès » pour un « bot » de manière conviviale. La solution de la fenêtre de navigation privée est la méthode la plus conviviale que j’ai pu trouver.

  • Ce plugin envoie des messages riches au format org.matrix.custom.html, qui fait partie de la spécification Matrix. Les clients ne prenant pas en charge les messages formatés reviendront à un message en texte brut.

  • Par défaut, les messages sont envoyés sous forme de m.notice (que les clients Matrix affichent généralement de manière plus discrète). Vous pouvez le changer en m.text en désactivant le paramètre du site chat_integration_matrix_use_notice.

  • Cette implémentation ne prévoit pas de « rafraîchir » les jetons d’accès. Cela repose sur le fait que la majorité des serveurs d’accueil actuellement utilisés n’expirent pas les jetons. Si cela change à l’avenir, cela devra être réexaminé.

19 « J'aime »

The test is not working for us:

422 No Reason Phrase

and the spinner will keep on turning indefinitely until full page reload. How can we triage the error?

4 « J'aime »

I just tried setting up a matrix integration using the instructions above, and it all worked ok. Can you confirm that you’re running the latest version of Discourse and this plugin?

Are you using the matrix.org homeserver, or your own homeserver? The 422 error is coming from that server.

I would suggest double checking your channel identifier, and also your matrix access token in your Discourse site settings.

4 « J'aime »

Thanks for the hints. I’ll try that out, before reporting back here.

4 « J'aime »

I have absolutely the same issue as @almereyda has.
@david, can you update obtaing “Access Token”, please? (Riot seems to be intensively developed :+1:)
+“Doctor log

2 « J'aime »

Je suis également intéressé par des instructions mises à jour sur l’obtention d’un jeton d’accès…

1 « J'aime »

Actuellement appelé Paramètres de la salle dans Element (rebranding de Riot).

Fonctionne parfaitement.

2 « J'aime »

J’ai mis à jour cette page pour refléter ce changement.

Le jeton d’accès est, apparemment, maintenant sous “Aide et à propos” en bas des Paramètres.

J’ai le même problème de chargeur infini. :frowning:

J’ai essayé avec des salons sur matrix.org et fedora.im.

1 « J'aime »

Je viens de refaire la configuration moi-même et cela semble avoir fonctionné correctement. Quelques théories :

  • Vos salons sont-ils chiffrés ? Je ne suis pas sûr si nous devons faire un travail supplémentaire pour prendre en charge les salons chiffrés.

  • Peut-être que les jetons d’accès expirent après un certain temps. Cela n’arrivait pas quand j’ai construit l’intégration en 2017, mais c’était il y a longtemps :older_man:. J’essaierai à nouveau ma configuration locale plus tard cette semaine et je verrai si elle fonctionne toujours.

1 « J'aime »

Elles ne le sont pas.

Peut-être, mais je copiais le jeton d’accès puis l’utilisais pratiquement immédiatement et cela n’a pas aidé.

3 « J'aime »

Pour information, @mattdm et moi avons pu identifier que cela était dû à une barre oblique finale sur l’URL du serveur d’accueil dans les paramètres de Discourse.

J’ai ajouté une note à ce sujet dans les instructions de la publication initiale, et j’ai également mis à jour les instructions relatives aux jetons d’accès pour qu’elles fonctionnent avec la dernière interface utilisateur d’element.io.

5 « J'aime »

Quelqu’un a-t-il eu de la chance avec la prise en charge des threads ?

Installation de la dernière version du plugin de chat (commit ba40ede510986f74a23345082ac578e126467b97), et configuration d’une salle Matrix de test (salle publique non chiffrée), je reçois une erreur HTTP 500 lorsque j’essaie un test tel que décrit ci-dessus. Même symptôme de spinner infini nécessitant un rafraîchissement de la page.

Le jeton d’accès du compte bot a été vérifié indépendamment en envoyant un message à la salle via l’API (_matrix/client/r0/rooms/{room_id}/send/m.room.message) à notre propre serveur Matrix.

Les journaux Discourse montrent

Started POST "/admin/plugins/chat-integration/test" for 141.142.60.55 at 2022-11-16 18:16:47 +0000
Processing by DiscourseChatIntegration::ChatController#test as */*
  Parameters: {"channel_id"=>"107", "topic_id"=>"466"}
Completed 500 Internal Server Error in 62ms (ActiveRecord: 0.0ms | Allocations: 10109)
NameError (uninitialized constant FinalDestination::HTTP)
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/middleware/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:361:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'
1 « J'aime »

Je n’ai pas essayé, mais ce serait intéressant. Voulez-vous dire mettre tous les messages dans un seul fil pour réduire l’encombrement du canal, ou s’agirait-il de publier les réponses aux sujets dans un fil matrix ?

2 « J'aime »

Poster des réponses de sujet dans un fil matrix.
(Même flux que Slack actuellement)

1 « J'aime »

Je suis curieux de savoir s’il y a eu des développements concernant l’ajout de la prise en charge des réponses dans les fils de discussion pour Matrix. Certains de nos utilisateurs l’apprécieraient.

3 « J'aime »