Microsoft Teams Benachrichtigungen mit dem discourse-chat-integration Plugin einrichten

Diese Anleitung beschreibt, wie Sie den Microsoft Teams-Anbieter einrichten, der in discourse-chat-integration enthalten ist.

Microsoft Teams einrichten

In Microsoft Teams:

  1. Klicken Sie in der vertikalen Navigationsleiste auf der linken Seite auf die Auslassungsschaltfläche () und wählen Sie im Menü Workflows.

  2. Klicken Sie auf der Seite Workflows oben rechts auf die Schaltfläche + Von Grund auf neu erstellen.

  3. Suchen Sie im Modal für benutzerdefinierte Workflows nach webhook und wählen Sie die Aktion Wenn eine Teams-Webhook-Anforderung empfangen wird als Auslöser.

  4. Wählen Sie im Feld Wer den Flow auslösen kann die Option Jeder aus. [1]

  5. Klicken Sie auf + Neuer Schritt.

  6. Suchen Sie als Nächstes nach card und wählen Sie die Aktion Karte in einem Chat oder Kanal posten.

  7. Füllen Sie die Felder wie folgt aus:

  • Posten als: Wählen Sie aus, von wem die Nachrichten gesendet werden sollen; Sie können diesen Wert auf dem Standardwert belassen oder Benutzer wählen, damit die Nachricht von Ihnen erscheint.

  • Posten in: Wählen Sie Kanal, wodurch weitere Felder angezeigt werden:

    • Team: Wählen Sie das gewünschte Team aus.
    • Kanal: Wählen Sie den gewünschten Kanal aus.
    • Adaptive Card: Klicken Sie in die Eingabe, wodurch ein Pop-up geöffnet wird (wird im nächsten Schritt beschrieben).

  1. Klicken Sie in das Feld Adaptive Card, um ein Pop-up zu öffnen [2], um dynamische Inhalte oder einen Ausdruck einzufügen. Wechseln Sie zur Registerkarte Ausdruck und geben Sie triggerBody() in das Ausdrucksfeld ein.

  2. Klicken Sie auf Speichern.

  3. Sie sollten nun einen Workflow mit dem Namen manual → Karte in einem Chat oder Kanal posten in Ihrer Liste sehen. Klicken Sie auf die vertikale Auslassungsschaltfläche dieses Workflows und wählen Sie im Dropdown-Menü Details.

  4. Klicken Sie auf dieser Seite auf Webhook-Link kopieren, um den Link für die nächsten Schritte zu erhalten. Während Sie hier sind, können Sie optional den Workflow-Namen bearbeiten, um seinen Zweck für andere in Ihrem Team widerzuspiegeln.

Discourse einrichten

Nun zurück zu Discourse:

  1. Aktivieren Sie im Discourse-Adminbereich die Einstellung Chat integration enabled, um das Plugin für die Chat-Integration zu aktivieren, und die Einstellung Chat integration Teams enabled, um Microsoft Teams zu unterstützen.

  2. Suchen Sie in der Seitenleiste den Abschnitt Plugins und klicken Sie auf Chat Integrations, dann klicken Sie auf + Kanal erstellen.

  3. Füllen Sie im Modal Kanal bearbeiten die Felder wie folgt aus:

  • Name: Geben Sie einen Namen ein, der verdeutlicht, mit welchem Microsoft Teams-Kanal Sie sich verbinden. Er muss keine exakte Übereinstimmung sein.
  • Webhook-URL: Fügen Sie die Webhook-URL ein, die Sie in Schritt 11 des obigen Abschnitts zur Einrichtung von Teams kopiert haben.
  1. Klicken Sie auf Kanal speichern.

Die Integration testen

Jetzt ist es an der Zeit zu überprüfen, ob alles wie erwartet funktioniert.

  1. Klicken Sie in Discourse auf Test für den neu erstellten Kanal.

  2. Suchen Sie nach einem Thema anhand der ID, des Titels oder der URL; wählen Sie das gewünschte Thema aus; und klicken Sie auf Testnachricht senden.

  3. In Microsoft Teams sollte eine neue Nachricht mit Informationen aus dem Thema im Kanal gepostet werden:

Optional: Regeln für Ihren Kanal einrichten

Nachdem Sie bestätigt haben, dass alles funktioniert, können Sie in Discourse zurückgehen und zusätzliche Regeln für Ihren Kanal einrichten, um die Nachricht anzupassen.

Fehlerbehebung

Wenn die Nachricht nicht wie erwartet in Microsoft Teams angezeigt wird, gehen Sie zur Seite Workflowdetails (siehe Schritt 10 im obigen Abschnitt zur Einrichtung von Teams) und überprüfen Sie den Abschnitt Ausführungsverlauf. Dieser sollte Protokolle jeder Nachrichten-Ausführung anzeigen.

Klicken Sie auf die fehlgeschlagene Ausführung, die Sie zum Power Automate-Bereich führt, wo Sie oben auf der Seite eine Fehlermeldung sehen können. (Im folgenden Screenshot war die Ausführung erfolgreich, aber der Pfeil zeigt an, wo der Fehler bei einer fehlgeschlagenen Ausführung angezeigt wird.)

Dies sollte das Problem detailliert beschreiben, das Sie dann beheben oder hier mit uns teilen können, damit wir helfen können.


    1. Discourse unterstützt derzeit keine authentifizierten Webhooks für Teams, daher funktioniert nur die Option „Jeder“.
    ↩︎
  1. Wenn das Popup nicht angezeigt wird, geben Sie vorübergehend etwas in das Feld Adaptive Card ein, speichern Sie den Workflow, öffnen Sie ihn erneut zur Bearbeitung, und das Popup sollte erscheinen. ↩︎

12 „Gefällt mir“

Just tried it out and it seemed to work at first, but only the first time I clicked on the test button.
Rules are set up as follows:

  • Type: normal
  • Filter: All topics(?) and replies (translating from German here)
  • Category: Sandbox

When I wrote a reply to the test topic in my Sandbox category I got a warning sign when I went to my chat integrations, but when clicking on the warning triangle it says unknown error... with the error message bein null.

When I try to send another test notification it gives me another error 500 internal server error

Any hints on where to start trouble shooting this are welcome. If this should be posted elsewhere (e.g. under the chat integration plugin page), or made a separate topic, feel free to move it accordingly or let me know.

3 „Gefällt mir“

Hi @SHilser - please can you check /logs on your site, and see if there is anything relevant there?

2 „Gefällt mir“

There’s two things that seem relevant.

  • Socket Error
  • Internal Server Error

I copied the logs below (I replaced my domain name with mydomain.tld)

Socket Errror

Message (4 copies reported)

SocketError (Failed to open TCP connection to outlook.office.com:443 (getaddrinfo: Temporary failure in name resolution))
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

Internal Server Error

Message (4 copies reported)

Error: Internal Server Error
Url: https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js
Line: 1
Column: 267890
Window Location: 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
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

Thanks for the help :slight_smile:

2 „Gefällt mir“

That suggests that your server is having trouble with DNS resolution. Are you using a standard docker-based installation? Or is this in development?

3 „Gefällt mir“

Just set it up about a week ago on a separate DigitalOcean droplet (one-click installation, now I’m on Version: 2.6.0.beta1 (310952fd6a). I use a subdomain and have the DNS records also on DigitalOcean. I have an A-Record, pointing to the IP, MX-Record pointing to the sub-domain name for reply by email as per these instruction). Only thing there is that I don’t have a DMARC Record published.

That’s all I can think of that I did in relation to DNS stuff. However, so far everything worked as expected. The site is set up, I can reach it via the sub-domain name, log-in, create topics (even via email), etc.

I’m just startled the first message made it through, but subsequent ones didn’t :man_shrugging:

2 „Gefällt mir“

When I say DNS resolution, I mean your server is having trouble contacting outlook.office.com. The setup of your forum’s DNS records shouldn’t affect that.

Can you try connecting to your server via SSH and running

host outlook.office.com

You should get something like

outlook.office.com is an alias for substrate.office.com.
substrate.office.com is an alias for substrate.ms-acdc.office.com.
substrate.ms-acdc.office.com is an alias for afd-k.office.com.
afd-k.office.com is an alias for outlook-office-com.k-0002.k-msedge.net.
outlook-office-com.k-0002.k-msedge.net is an alias for k-0002.k-msedge.net.
k-0002.k-msedge.net has address 13.107.18.11
k-0002.k-msedge.net has IPv6 address 2620:1ec:c::11
3 „Gefällt mir“

When I enter

host -d outlook.office.com

I get the following:

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

When adding port :443 I get another error

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

For other domains like google.com or the domain of my discourse instance in question (h-da.transformative-praxis.cc), or other sites I get the expected output similar to what you describe.

I did some search for the first error, but I’m still not sure about its source. I’ve read the following, but wasn’t able to judge, if this is actually relevant to my problem:

1 „Gefällt mir“

I kept retrying it and this time I got the results you described when typing

host outlook.office.com

So everything seemed fine at this point. I’ve repeated that many times in a row to make sure (like around 15 times with an interval of around 10 seconds) and at some point I got the same servfail error as before. But mostly it worked.

The opposite is the case when I try to send a test message. It maybe works one out of ten times. The other times I get the same errors as before. And when I post a regular message that fits to the rule I’ve set for the channel, I don’t get a notification, nor an error message in the logs.
It just seems so random to me that I can’t find out what causes it.

I kept suspecting my setup with two droplets for each subdomain and two respective A-Records, plus one set of NS-records for my main domain pointing to ns1.digitalocean.com. So I tried out dnsstuff for my site getting a Fail for the SOA record check and whatsmydns.net for my NS records, but I still couldn’t figure out any possible connections to my problem.

At this point I’m totally confused who’s causing the error, me having made some wrong DNS settings (which shouldn’t affect it according to @david), server settings/issues, or is it just MS-Teams (outlook.office.com) acting up, or blocking me in some way?

Any hints for what I could check/do to find the error are appreciated, including where else to go and ask, if you think this is beyond what you can do to help me here.

Thanks a lot for all the help so far.

1 „Gefällt mir“

Hi, thanks for this. I keep failing at step Discourse 5: The dialogue box says my incoming Webhooks URL is invalid?

Any help appreciated!

Dan

1 „Gefällt mir“

Would you mind sharing what your webhook URL looks like? Either via PM to me or, if you can invalidate it first, here in the topic?

1 „Gefällt mir“

Thanks @Dan_Turner, I just relaxed our validation a little which should help the situation. Please give it a try and let me know if it works better for you

https://github.com/discourse/discourse-chat-integration/commit/00ec1f486a3fd1dc523cdf242cfb1c78baaa407e

2 „Gefällt mir“

Thanks! Will give it a try.

Dan

1 „Gefällt mir“

Sorry to be thick but do I need to update Discourse or edit the file directly as detailed in the fix?
Thanks, Dan

1 „Gefällt mir“

You need to update the plugin. Visit /admin/upgrade, and press the update button next to “Discourse-chat-integration”

2 „Gefällt mir“

Hey - so sorry for being incompetent but - how do I actually try this as I’m on a hosted discourse instance? Thanks. Dan

1 „Gefällt mir“

You will need to ask your hosting provider to update the plugin for you. At discourse.org this change has already gone out to all our customers, so I guess you must be hosted elsewhere?

1 „Gefällt mir“

yeah, discourse hosting for me. which version is it in please and I will ask them to update?

1 „Gefällt mir“

We don’t have version numbers for plugins, but you can share this commit link with them: https://github.com/discourse/discourse-chat-integration/commit/00ec1f486a3fd1dc523cdf242cfb1c78baaa407e

2 „Gefällt mir“

Vielen Dank für dieses – sehr nützliche – Plugin.
Eine großartige Verbesserung wäre: Gruppen-Erwähnung in der Nachricht hinzufügen, um Benachrichtigungen auf der Teams-Seite zu generieren.
Es scheint, dass die Webhook-API diese Funktion (nicht) implementiert hat, aber einige sagen, sie wurde kürzlich implementiert.
Glauben Sie, dass dies einfach implementiert werden könnte?