Configurar notificações do Microsoft Teams usando o plugin discourse-chat-integration

Este guia descreve como configurar o provedor do Microsoft Teams incluído em discourse-chat-integration.

Configuração do Microsoft Teams

No Microsoft Teams:

  1. Na barra de navegação vertical à esquerda, clique no botão de reticências () e selecione Fluxos de trabalho no menu.

  2. Clique no botão + Criar do zero no canto superior direito da página Fluxos de trabalho.

  3. No modal de fluxo de trabalho personalizado, pesquise por webhook e selecione o gatilho Quando uma solicitação de webhook do Teams for recebida.

  4. No campo Quem pode acionar o fluxo, selecione Qualquer pessoa. [1]

  5. Clique em + Nova etapa.

  6. Em seguida, pesquise por card e selecione a ação Publicar cartão em um bate-papo ou canal.

  7. Preencha os campos da seguinte forma:

  • Publicar como: Escolha de quem as mensagens devem vir; você pode deixar o valor padrão ou escolher Usuário para que a mensagem apareça como se fosse sua.

  • Publicar em: Selecione Canal, o que fará com que mais campos apareçam:

    • Equipe: Selecione a equipe desejada.
    • Canal: Selecione o canal desejado.
    • Cartão Adaptável: Clique no campo de entrada, o que abrirá um pop-up (descrito na próxima etapa).

  1. Clique no campo Cartão Adaptável para abrir um pop-up [2] para inserir conteúdo dinâmico ou uma expressão. Mude para a guia Expressão e digite triggerBody() no campo de expressão.

  2. Clique em Salvar.

  3. Você deverá ver agora um fluxo de trabalho chamado manual → Publicar cartão em um bate-papo ou canal na sua lista. Clique no botão de reticências verticais neste fluxo de trabalho e selecione Detalhes no menu suspenso.

  4. Nesta página, clique em Copiar link do webhook para obter o link para as próximas etapas. Enquanto estiver aqui, você pode opcionalmente editar o nome do fluxo de trabalho para refletir sua finalidade para outras pessoas da sua equipe.

Configuração do Discourse

Agora, de volta ao Discourse:

  1. Na área de administração do seu Discourse, ative a configuração Chat integration enabled para ligar o plugin de Integração de Chat e a configuração Chat integration Teams enabled para suportar o Microsoft Teams.

  2. Na barra lateral, encontre a seção Plugins e clique em Integrações de Chat, depois clique em + Criar Canal.

  3. No modal Editar Canal, preencha os campos da seguinte forma:

  • Nome: Insira um nome que deixe claro a qual canal do Microsoft Teams você está se conectando; não precisa ser uma correspondência exata.
  • URL do Webhook: Cole a URL do webhook que você copiou na etapa 11 da seção de configuração do Teams acima.
  1. Clique em Salvar Canal.

Teste a integração

Agora é hora de garantir que tudo esteja funcionando como esperado.

  1. No Discourse, clique em Testar no canal recém-criado.

  2. Pesquise um tópico por ID, título ou URL; selecione o tópico desejado; e clique em Enviar Mensagem de Teste.

  3. No Microsoft Teams, uma nova mensagem com informações do tópico deve ser postada no canal:

Opcional: Configure Regras para seu canal

Agora que você confirmou que tudo está funcionando, você pode voltar ao Discourse e configurar regras adicionais para seu canal para personalizar a mensagem.

Depuração

Se você não vir a mensagem no Microsoft Teams como esperado, vá para a página Detalhes do Fluxo de Trabalho (consulte a etapa 10 na seção de configuração do Teams acima) e verifique a seção Histórico de Execuções. Isso deve mostrar logs de cada execução de mensagem.

Clique na execução com falha, o que o levará para a área Power Automate, onde você poderá ver uma mensagem de erro na parte superior da página. (Na captura de tela abaixo, a execução foi bem-sucedida, mas a seta indica onde o erro aparecerá em uma execução com falha.)

Isso deve detalhar o problema, que você pode então corrigir ou compartilhar conosco aqui para que possamos ajudar.


    1. O Discourse atualmente não suporta webhooks autenticados para o Teams, então apenas a opção “Qualquer pessoa” funciona.
    ↩︎
  1. se o pop-up não aparecer, digite algo temporariamente no campo Cartão Adaptável, salve o fluxo de trabalho, abra-o novamente para edição e o pop-up deverá aparecer ↩︎

12 curtidas

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 curtidas

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

2 curtidas

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 curtidas

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 curtidas

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 curtidas

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 curtidas

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 curtida

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 curtida

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 curtida

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 curtida

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 curtidas

Thanks! Will give it a try.

Dan

1 curtida

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

1 curtida

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

2 curtidas

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

1 curtida

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 curtida

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

1 curtida

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 curtidas

Obrigado por este plugin - tão útil.
Uma grande melhoria seria: adicionar menção de grupo na mensagem para gerar notificações no lado do Teams.
Parece que a API de webhook não está (estava?) implementando este recurso, mas alguns dizem que foi implementado recentemente.
Você acha que poderia ser implementado facilmente?