Imposta le notifiche di Microsoft Teams usando il plugin discourse-chat-integration

Questa guida descrive come configurare il provider Microsoft Teams incluso in discourse-chat-integration.

Configurazione di Microsoft Teams

In Microsoft Teams:

  1. Dalla barra di navigazione verticale a sinistra, fai clic sul pulsante puntini di sospensione () e seleziona Flussi di lavoro dal menu.

  2. Fai clic sul pulsante + Crea da zero nell’angolo in alto a destra della pagina Flussi di lavoro.

  3. Nel modale del flusso di lavoro personalizzato, cerca webhook e seleziona il trigger Quando viene ricevuto un webhook di Teams.

  4. Nel campo Chi può attivare il flusso, seleziona Chiunque. [1]

  5. Fai clic su + Nuovo passaggio.

  6. Successivamente, cerca scheda e seleziona l’azione Pubblica scheda in una chat o in un canale.

  7. Compila i campi come segue:

  • Pubblica come: Scegli da chi devono provenire i messaggi; puoi lasciare questo valore predefinito o scegliere Utente per far apparire il messaggio da te.

  • Pubblica in: Seleziona Canale, il che farà apparire altri campi:

    • Team: Seleziona il team desiderato.
    • Canale: Seleziona il canale desiderato.
    • Scheda adattiva: Fai clic all’interno dell’input, che aprirà un pop-up (descritto nel passaggio successivo).

  1. Fai clic all’interno del campo Scheda adattiva per aprire un pop-up [2] per inserire contenuto dinamico o un’espressione. Passa alla scheda Espressione e digita triggerBody() nel campo espressione.

  2. Fai clic su Salva.

  3. Dovresti ora vedere un flusso di lavoro denominato manuale → Pubblica scheda in una chat o in un canale nel tuo elenco. Fai clic sul pulsante puntini di sospensione verticali su questo flusso di lavoro e seleziona Dettagli dal menu a discesa.

  4. In questa pagina, fai clic su Copia collegamento webhook per ottenere il collegamento per i passaggi successivi. Mentre sei qui, puoi facoltativamente modificare il nome del flusso di lavoro per riflettere il suo scopo per gli altri membri del tuo team.

Configurazione di Discourse

Ora, torniamo a Discourse:

  1. Nell’area di amministrazione di Discourse, abilita l’impostazione Chat integration enabled per attivare il plugin Integrazione chat e l’impostazione Chat integration Teams enabled per supportare Microsoft Teams.

  2. Nella barra laterale, trova la sezione Plugin e fai clic su Integrazioni chat, quindi fai clic su + Crea canale.

  3. Nel modale Modifica canale, compila i campi come segue:

  • Nome: Inserisci un nome che renda chiaro a quale canale Microsoft Teams ti stai connettendo; non è necessario che corrisponda perfettamente.
  • URL webhook: Incolla l’URL webhook che hai copiato al passaggio 11 della sezione di configurazione di Teams sopra.
  1. Fai clic su Salva canale.

Prova l’integrazione

Ora è il momento di assicurarsi che tutto funzioni come previsto.

  1. In Discourse, fai clic su Test sul canale appena creato.

  2. Cerca un argomento tramite ID, titolo o URL; seleziona l’argomento desiderato e fai clic su Invia messaggio di prova.

  3. In Microsoft Teams, un nuovo messaggio con le informazioni dell’argomento verrà pubblicato nel canale:

Facoltativo: Imposta regole per il tuo canale

Ora che hai confermato che tutto funziona, puoi tornare a Discourse e impostare regole aggiuntive per il tuo canale per personalizzare il messaggio.

Debug

Se non vedi il messaggio in Microsoft Teams come previsto, vai alla pagina Dettagli flusso di lavoro (vedi passaggio 10 nella sezione di configurazione di Teams sopra) e controlla la sezione Cronologia esecuzioni. Questa dovrebbe mostrare i log di ogni esecuzione del messaggio.

Fai clic sull’esecuzione fallita, che ti porterà all’area Power Automate dove potrai vedere un messaggio di errore nella parte superiore della pagina. (Nello screenshot seguente, l’esecuzione è riuscita, ma la freccia indica dove apparirà l’errore in caso di esecuzione fallita.)

Questo dovrebbe dettagliare il problema, che puoi quindi correggere o condividere con noi qui in modo che possiamo aiutarti.


    1. Discourse attualmente non supporta webhook autenticati su Teams, quindi funziona solo l’opzione “Chiunque”.
    ↩︎
  1. se il popup non appare, digita temporaneamente qualcosa nel campo Scheda adattiva, salva il flusso di lavoro, aprilo di nuovo per la modifica e il popup dovrebbe apparire ↩︎

12 Mi Piace

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 Mi Piace

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

2 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

Thanks! Will give it a try.

Dan

1 Mi Piace

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

1 Mi Piace

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

2 Mi Piace

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

1 Mi Piace

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 Mi Piace

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

1 Mi Piace

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 Mi Piace

Grazie per questo plugin, è molto utile.
Un grande miglioramento sarebbe: aggiungere la menzione di gruppo nel messaggio per generare notifiche sul lato Teams.
Sembra che l’API webhook non implementasse (o non implementi più?) questa funzionalità, ma alcuni dicono che è stata implementata di recente.
Pensi che potrebbe essere implementata facilmente?