Configurer les notifications Microsoft Teams avec le plugin discourse-chat-integration

Ce guide décrit comment configurer le fournisseur Microsoft Teams inclus dans discourse-chat-integration.

Configuration de Microsoft Teams

Dans Microsoft Teams :

  1. Dans la barre de navigation verticale à gauche, cliquez sur le bouton points de suspension () et sélectionnez Workflows dans le menu.

  2. Cliquez sur le bouton + Build from scratch (Créer à partir de zéro) dans le coin supérieur droit de la page Workflows.

  3. Dans la fenêtre modale de flux de travail personnalisé, recherchez webhook et sélectionnez le déclencheur When a Teams webhook request is received (Lorsqu’une demande de webhook Teams est reçue).

  4. Dans le champ Who can trigger the flow (Qui peut déclencher le flux), sélectionnez Anyone (N’importe qui). [1]

  5. Cliquez sur + New step (Nouvelle étape).

  6. Ensuite, recherchez card et sélectionnez l’action Post card in a chat or channel (Publier une carte dans une conversation ou un canal).

  7. Remplissez les champs comme suit :

  • Post as: (Publier en tant que :slight_smile: Choisissez qui doit envoyer les messages ; vous pouvez laisser la valeur par défaut ou choisir User (Utilisateur) pour que le message apparaisse comme venant de vous.

  • Post in: (Publier dans :slight_smile: Sélectionnez Channel (Canal), ce qui fera apparaître plus de champs :

    • Team: (Équipe :slight_smile: Sélectionnez l’équipe souhaitée.
    • Channel: (Canal :slight_smile: Sélectionnez le canal souhaité.
    • Adaptive Card: (Carte Adaptative :slight_smile: Cliquez dans le champ de saisie, ce qui ouvrira une fenêtre contextuelle (décrite à l’étape suivante).

  1. Cliquez dans le champ Adaptive Card pour ouvrir une fenêtre contextuelle [2] pour insérer du contenu dynamique ou une expression. Basculez vers l’onglet Expression et tapez triggerBody() dans le champ d’expression.

  2. Cliquez sur Save (Enregistrer).

  3. Vous devriez maintenant voir un flux de travail nommé manual → Post card in a chat or channel dans votre liste. Cliquez sur le bouton points de suspension vertical de ce flux de travail et sélectionnez Details (Détails) dans le menu déroulant.

  4. Sur cette page, cliquez sur Copy webhook link (Copier le lien webhook) pour récupérer le lien pour les étapes suivantes. Pendant que vous êtes ici, vous pouvez facultativement modifier le nom du flux de travail pour refléter son objectif pour les autres membres de votre équipe.

Configuration de Discourse

Maintenant, retournons à Discourse :

  1. Dans votre zone d’administration de Discourse, activez le paramètre Chat integration enabled (Intégration de chat activée) pour activer le plugin Chat Integration et le paramètre Chat integration Teams enabled (Intégration Teams de chat activée) pour prendre en charge Microsoft Teams.

  2. Dans la barre latérale, trouvez la section Plugins et cliquez sur Chat Integrations (Intégrations de chat), puis cliquez sur + Create Channel (Créer un canal).

  3. Dans la fenêtre modale Edit Channel (Modifier le canal), remplissez les champs comme suit :

  • Name: (Nom :slight_smile: Entrez un nom qui indique clairement le canal Microsoft Teams auquel vous vous connectez ; il n’a pas besoin d’être une correspondance parfaite.
  • Webhook URL: (URL du webhook :slight_smile: Collez l’URL du webhook que vous avez copiée à l’étape 11 de la section de configuration de Teams ci-dessus.
  1. Cliquez sur Save Channel (Enregistrer le canal).

Test de l’intégration

Il est maintenant temps de s’assurer que tout fonctionne comme prévu.

  1. Dans Discourse, cliquez sur Test (Tester) sur le canal nouvellement créé.

  2. Recherchez un sujet par ID, titre ou URL ; sélectionnez le sujet souhaité ; et cliquez sur Send Test Message (Envoyer un message de test).

  3. Dans Microsoft Teams, un nouveau message contenant des informations sur le sujet doit être publié dans le canal :

Optionnel : Configuration de règles pour votre canal

Maintenant que vous avez confirmé que tout fonctionne, vous pouvez revenir à Discourse et configurer des règles supplémentaires pour votre canal pour personnaliser le message.

Dépannage

Si vous ne voyez pas le message dans Microsoft Teams comme prévu, accédez à la page Workflow Details (Détails du flux de travail) (voir l’étape 10 dans la section de configuration de Teams ci-dessus) et vérifiez la section Run history (Historique d’exécution). Celle-ci devrait afficher les journaux de chaque exécution de message.

Cliquez sur l’exécution ayant échoué, ce qui vous mènera à la zone Power Automate où vous pourrez voir un message d’erreur en haut de la page. (Dans la capture d’écran ci-dessous, l’exécution a réussi, mais la flèche indique où l’erreur apparaîtra lors d’une exécution ayant échoué.)

Ceci devrait détailler le problème, que vous pourrez ensuite corriger ou partager avec nous ici afin que nous puissions vous aider.


    1. Discourse ne prend actuellement pas en charge les webhooks authentifiés vers Teams, donc seule l’option « Anyone » fonctionne.
    ↩︎
  1. si la fenêtre contextuelle n’apparaît pas, tapez temporairement quelque chose dans le champ Adaptive Card, enregistrez le flux de travail, ouvrez-le à nouveau pour le modifier et la fenêtre contextuelle devrait apparaître ↩︎

12 « J'aime »

Je viens de l’essayer et cela semblait fonctionner au début, mais uniquement la première fois que j’ai cliqué sur le bouton de test.
Les règles sont configurées comme suit :

  • Type : normal
  • Filtre : Tous les sujets (?) et les réponses (traduit de l’allemand)
  • Catégorie : Bac à sable

Lorsque j’ai répondu au sujet de test dans ma catégorie Bac à sable, j’ai vu un signe d’avertissement dans mes intégrations de chat, mais en cliquant sur le triangle d’avertissement, il est indiqué erreur inconnue... avec le message d’erreur étant null.

Lorsque j’essaie d’envoyer une autre notification de test, une autre erreur apparaît : erreur interne du serveur 500.

Toute suggestion sur la marche à suivre pour résoudre ce problème est la bienvenue. Si cela devrait être publié ailleurs (par exemple, sur la page du plugin d’intégration de chat) ou faire l’objet d’un nouveau sujet, n’hésitez pas à le déplacer en conséquence ou à me le faire savoir.

3 « J'aime »

Bonjour @SHilser - pouvez-vous s’il vous plaît vérifier /logs sur votre site et voir s’il y a quelque chose de pertinent là-bas ?

2 « J'aime »

Il y a deux éléments qui semblent pertinents.

  • Erreur de socket
  • Erreur interne du serveur

J’ai copié les journaux ci-dessous (j’ai remplacé mon nom de domaine par mydomain.tld)

Erreur de socket

Message (4 copies signalées)

SocketError (Échec de l'ouverture de la connexion TCP vers outlook.office.com:443 (getaddrinfo : échec temporaire de la résolution du nom))
app/controllers/application_controller.rb:340:in `block in with_resolved_locale'
app/controllers/application_controller.rb:340:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:336:in `call'
config/initializers/100-quiet_logger.rb:19:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:22:in `call'
lib/middleware/request_tracker.rb:176:in `call'

Backtrace

/usr/local/lib/ruby/2.6.0/net/http.rb:949:in `rescue in block in connect'
/usr/local/lib/ruby/2.6.0/net/http.rb:946:in `block in connect'
/usr/local/lib/ruby/2.6.0/timeout.rb:93:in `block in timeout'
/usr/local/lib/ruby/2.6.0/timeout.rb:103:in `timeout'
/usr/local/lib/ruby/2.6.0/net/http.rb:945:in `connect'
/usr/local/lib/ruby/2.6.0/net/http.rb:930:in `do_start'
/usr/local/lib/ruby/2.6.0/net/http.rb:919:in `start'
/usr/local/lib/ruby/2.6.0/net/http.rb:1470:in `request'
rack-mini-profiler (2.0.4) lib/patches/net_patches.rb:19:in `block in request_with_mini_profiler'
rack-mini-profiler (2.0.4) lib/mini_profiler/profiling_methods.rb:33:in `step'

Env

HTTP HOSTS: mysite.tld

Erreur interne du serveur

Message (4 copies signalées)

Erreur : Erreur interne du serveur
Url : https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js
Ligne : 1
Colonne : 267890
Emplacement de la fenêtre : https://mysite.tld/admin/plugins/chat/teams

Backtrace

o/t</<@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:267890
o/t<@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:267993
o@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:268074
t trigger@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:545343
A</e._onError/<@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:550189
f</t.invoke@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:490190
f</t.flush@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:489198
p</t.flush@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:491205
t</t._end@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:496596Here
t</t.end@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:493157

Env

HTTP HOSTS: mysite.tld

Merci pour votre aide :slight_smile:

2 « J'aime »

Cela suggère que votre serveur rencontre des problèmes de résolution DNS. Utilisez-vous une installation standard basée sur Docker ? Ou s’agit-il d’un environnement de développement ?

3 « J'aime »

Je l’ai simplement configuré il y a environ une semaine sur un droplet DigitalOcean séparé (installation en un clic, je suis maintenant sur la version : 2.6.0.beta1 (310952fd6a). J’utilise un sous-domaine et j’ai également les enregistrements DNS sur DigitalOcean. J’ai un enregistrement A pointant vers l’adresse IP, un enregistrement MX pointant vers le nom du sous-domaine pour les réponses par e-mail, conformément à ces instructions). La seule chose est que je n’ai pas publié d’enregistrement DMARC.

C’est tout ce dont je me souviens avoir fait en relation avec les éléments DNS. Cependant, jusqu’à présent, tout a fonctionné comme prévu. Le site est configuré, je peux y accéder via le nom du sous-domaine, me connecter, créer des sujets (même par e-mail), etc.

Je suis simplement surpris que le premier message ait passé, mais que les suivants n’aient pas passé :man_shrugging:

2 « J'aime »

Lorsque je parle de résolution DNS, je veux dire que votre serveur a du mal à contacter outlook.office.com. La configuration des enregistrements DNS de votre forum ne devrait pas avoir d’impact là-dessus.

Pourriez-vous essayer de vous connecter à votre serveur via SSH et d’exécuter

host outlook.office.com

Vous devriez obtenir quelque chose comme

outlook.office.com est un alias pour substrate.office.com.
substrate.office.com est un alias pour substrate.ms-acdc.office.com.
substrate.ms-acdc.office.com est un alias pour afd-k.office.com.
afd-k.office.com est un alias pour outlook-office-com.k-0002.k-msedge.net.
outlook-office-com.k-0002.k-msedge.net est un alias pour k-0002.k-msedge.net.
k-0002.k-msedge.net a l'adresse 13.107.18.11
k-0002.k-msedge.net a l'adresse IPv6 2620:1ec:c::11
3 « J'aime »

Lorsque je saisis

host -d outlook.office.com

je obtiens le résultat suivant :

Trying "outlook.office.com"
Host outlook.office.com not found: 2(SERVFAIL)
Received 36 bytes from 127.0.0.53#53 in 43 ms

Lorsque j’ajoute le port :443, je reçois une autre erreur :

Trying "outlook.office.com:443"
Host outlook.office.com:443 not found: 3(NXDOMAIN)
Received 40 bytes from 127.0.0.53#53 in 3 ms
Received 40 bytes from 127.0.0.53#53 in 3 ms

Pour d’autres domaines comme google.com ou le domaine de mon instance Discourse concernée (h-da.transformative-praxis.cc), ou d’autres sites, j’obtiens le résultat attendu, similaire à ce que vous décrivez.

J’ai effectué quelques recherches sur la première erreur, mais je ne suis toujours pas certain de sa source. J’ai lu les articles suivants, mais je n’ai pas pu déterminer s’ils sont réellement pertinents pour mon problème :

1 « J'aime »

J’ai continué à réessayer et cette fois, j’ai obtenu les résultats que vous avez décrits en tapant

host outlook.office.com

Donc, tout semblait correct à ce stade. Je l’ai répété de nombreuses fois de suite pour m’assurer (environ 15 fois avec un intervalle d’environ 10 secondes) et à un moment donné, j’ai obtenu la même erreur servfail qu’auparavant. Mais la plupart du temps, cela a fonctionné.

C’est le contraire lorsque j’essaie d’envoyer un message de test. Cela fonctionne peut-être une fois sur dix. Les autres fois, j’obtiens les mêmes erreurs qu’auparavant. Et lorsque je publie un message régulier qui correspond à la règle que j’ai définie pour le canal, je ne reçois ni notification ni message d’erreur dans les journaux.
Tout me semble si aléatoire que je ne parviens pas à déterminer la cause.

J’ai continué à suspecter ma configuration avec deux droplets pour chaque sous-domaine et deux enregistrements A respectifs, plus un jeu d’enregistrements NS pour mon domaine principal pointant vers ns1.digitalocean.com. J’ai donc essayé dnsstuff pour mon site et obtenu un échec pour la vérification de l'enregistrement SOA, ainsi que whatsmydns.net pour mes enregistrements NS, mais je n’ai toujours pas pu identifier de liens possibles avec mon problème.

À ce stade, je suis totalement confus quant à qui cause l’erreur : moi, ayant fait des paramètres DNS incorrects (ce qui ne devrait pas avoir d’impact selon @david), des paramètres ou problèmes de serveur, ou s’il s’agit simplement de MS-Teams (outlook.office.com) qui dysfonctionne ou me bloque d’une manière ou d’une autre ?

Toute suggestion sur ce que je pourrais vérifier ou faire pour trouver l’erreur est la bienvenue, y compris où aller et demander si vous pensez que cela dépasse ce que vous pouvez faire pour m’aider ici.

Merci beaucoup pour toute l’aide apportée jusqu’à présent.

1 « J'aime »

Bonjour, merci pour cela. J’échoue constamment à l’étape Discourse 5 : la boîte de dialogue indique que mon URL de webhooks entrants est invalide.

Toute aide est la bienvenue !

Dan

1 « J'aime »

Pourriez-vous partager à quoi ressemble votre URL de webhook ? Soit par MP à moi, soit, si vous pouvez l’invalider au préalable, ici dans le sujet ?

1 « J'aime »

Merci @Dan_Turner, j’ai juste assoupli notre validation, ce qui devrait aider à résoudre la situation. Veuillez essayer et me dire si cela fonctionne mieux pour vous.

2 « J'aime »

Merci ! Je vais essayer.

Dan

1 « J'aime »

Désolé d’être un peu lent, mais dois-je mettre à jour Discourse ou modifier directement le fichier comme indiqué dans la correction ?
Merci, Dan

1 « J'aime »

Vous devez mettre à jour le plugin. Rendez-vous sur /admin/upgrade et cliquez sur le bouton de mise à jour à côté de « Discourse-chat-integration ».

2 « J'aime »

Salut — désolé d’être incompétent, mais comment puis-je réellement essayer cela, puisque j’utilise une instance Discourse hébergée ? Merci. Dan

1 « J'aime »

Vous devrez demander à votre hébergeur de mettre à jour le plugin pour vous. Sur discourse.org, ce changement a déjà été déployé pour tous nos clients, donc je suppose que vous êtes hébergé ailleurs ?

1 « J'aime »

Oui, l’hébergement de Discourse pour moi. Quelle version est-ce, s’il vous plaît, et je leur demanderai de mettre à jour ?

1 « J'aime »

Nous n’avons pas de numéros de version pour les plugins, mais vous pouvez leur partager ce lien de commit : https://github.com/discourse/discourse-chat-integration/commit/00ec1f486a3fd1dc523cdf242cfb1c78baaa407e

2 « J'aime »

Merci pour ce plugin - très utile -.
Une amélioration majeure serait : d’ajouter la mention de groupe dans le message pour générer des notifications côté Teams.
Il semble que l’API webhook n’implémente pas (ou plus ?) cette fonctionnalité, mais certains disent qu’elle a été implémentée récemment.
Pensez-vous que cela pourrait être implémenté facilement ?