Configure notificações do Matrix (element.io) usando o plugin discourse-chat-integration

Este howto descreve como configurar o provedor Matrix (element.io) incluído no discourse-chat-integration.

\u003e Agradecimentos a @ara4n e aos membros da sala #matrix-dev:matrix.org pela ajuda com esta integração :slight_smile:

Instalação

O plugin discourse-chat-integration vem bundled com o Discourse. Certifique-se de que ele está habilitado definindo chat_integration_enabled como true nas configurações do seu site. Para mais detalhes, consulte o tópico do plugin discourse-chat-integration.

Configurar o Matrix

Estas instruções assumem que você está usando o cliente web element.io. Passos equivalentes devem ser possíveis usando outras interfaces.

  1. Abra https://app.element.io/ em uma nova janela anônima (você verá o porquê mais tarde)

  2. Crie uma conta de usuário para seu bot. Provavelmente você vai querer anotar a senha em algum lugar caso queira fazer login novamente mais tarde. O Discourse não precisa dela.

  3. Use a interface para entrar em qualquer sala para a qual você queira poder enviar notificações

  4. Abra as configurações do usuário clicando no seu avatar no canto superior esquerdo, depois \u003ckbd\u003eTodas as Configurações\u003c/kbd\u003e

  5. Configure o nome de exibição e o avatar do bot

  6. Mude para a aba “Ajuda e Sobre”, role até “Avançado” e copie o endereço do Servidor Doméstico (Homeserver) e seu “Token de Acesso” - você precisará deles mais tarde.

  7. NÃO CLIQUE EM SAIR. Se você fizer isso, o Token de Acesso será invalidado e não funcionará. Em vez disso, apenas feche a janela anônima. Se você esqueceu de abrir uma janela anônima, volte ao passo 1 :wink:

Configurar o Discourse

  1. Nas configurações do seu site Discourse, insira o endereço do seu servidor doméstico na configuração chat_integration_matrix_homeserver. Certifique-se de incluir o protocolo. (ex. https://matrix.org). Não inclua uma barra no final.

  2. Cole o token de acesso que você copiou anteriormente na configuração do site chat_integration_matrix_access_token

  3. Habilite chat_integration_matrix_enabled

  4. Vá para a aba \u003ckbd\u003ePlugins\u003c/kbd\u003e, depois \u003ckbd\u003eIntegrações de Chat\u003c/kbd\u003e

  5. Vá para a aba \u003ckbd\u003eMatrix\u003c/kbd\u003e, depois \u003ckbd\u003eCriar Canal\u003c/kbd\u003e

  6. Insira um nome para o canal (isso é exibido apenas na interface de administração, pode ser qualquer coisa)

  7. Insira o “ID da Sala” de uma sala para a qual você queira enviar notificações. No cliente web Element, você pode encontrá-lo abrindo sua sala, clicando no nome no topo e depois rolando até o final. Ele se parecerá com algo assim:

    !cdGUowUAqlgLHVerqE:matrix.org
    

    Nota: IDs de Sala do Matrix v12 mais recentes podem não incluir o sufixo :servidor (ex. !abcdefghijkl). Ambos os formatos são suportados.

  8. \u003ckbd\u003eSalvar Canal\u003c/kbd\u003e

  9. Use o botão \u003ckbd\u003eTestar\u003c/kbd\u003e no canal que você acabou de criar para verificar se tudo está funcionando. Você deve ver algo assim:

  10. Configure algumas “Regras” para seu canal, de acordo com as instruções do discourse-chat-integration.

Notas Técnicas
  • No momento da escrita, não parece haver uma maneira de obter um “token de acesso” para um “bot” de forma amigável ao usuário. A solução da janela anônima é a maneira mais amigável ao usuário que pude encontrar

  • Este plugin envia mensagens de texto rico usando o formato org.matrix.custom.html, que faz parte da especificação do Matrix. Clientes que não suportam mensagens formatadas voltarão para uma mensagem de texto simples.

  • Por padrão, as mensagens são enviadas como m.notice (que os clientes do Matrix geralmente renderizam de forma mais silenciosa). Você pode alterar isso para m.text desabilitando a configuração do site chat_integration_matrix_use_notice.

  • Não há previsão nesta implementação para “atualizar” tokens de acesso. Isso se baseia no entendimento de que a maioria dos servidores domésticos atualmente em uso não expira tokens. Se isso mudar no futuro, isso precisará ser revisitado.

19 curtidas

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 curtidas

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 curtidas

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

4 curtidas

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 curtidas

I’m also interested in updated instructions about getting an access token…

1 curtida

Atualmente chamado de Configurações da sala no Element (rebranding do Riot).

Funciona perfeitamente.

2 curtidas

Atualizei esta página para refletir essa mudança.

O token de acesso está, aparentemente, agora em "Ajuda e Sobre" na parte inferior de Configurações.

Tenho o mesmo problema de spinner infinito. :frowning:

Tentei com salas tanto em matrix.org quanto em fedora.im.

1 curtida

Acabei de executar a configuração e parece ter funcionado bem. Algumas teorias:

  • Seus salas estão criptografadas? Não tenho certeza se precisamos fazer um trabalho extra para suportar salas criptografadas.

  • Talvez os tokens de acesso expirem após algum tempo. Isso não acontecia quando eu construí a integração em 2017, mas isso foi há muito tempo :older_man:. Tentarei minha configuração local novamente esta semana e verei se ainda funciona.

1 curtida

Eles não são.

Talvez, mas eu estava copiando o token de acesso e usando-o basicamente imediatamente e isso não ajudou.

3 curtidas

Para constar, @mattdm e eu conseguimos rastrear isso até uma barra final na URL do Homeserver nas configurações do Discourse.

Adicionei uma nota sobre isso às instruções no OP e também atualizei as instruções do token de acesso para funcionar com a interface mais recente do element.io.

5 curtidas

Alguém teve sucesso com o suporte a threads?

Ao instalar a versão mais recente do plugin de chat (commit ba40ede510986f74a23345082ac578e126467b97) e configurar uma sala de teste do Matrix (sala pública, sem criptografia), recebo um erro HTTP 500 ao tentar um teste conforme descrito acima. O mesmo sintoma de spinner infinito que requer a atualização da página.

O token de acesso da conta do bot foi verificado independentemente enviando uma mensagem para a sala usando a API (_matrix/client/r0/rooms/{room_id}/send/m.room.message) para o nosso próprio servidor Matrix.

Os logs do Discourse mostram

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 curtida

Não tentei, mas seria interessante. Você quer dizer colocar todas as postagens em um único thread para reduzir a desordem do canal, ou isso seria postar respostas de tópicos em um thread do matrix?

2 curtidas

Postar respostas de tópicos em um thread do matrix.
(Mesmo fluxo do que o Slack tem atualmente)

1 curtida

Tenho curiosidade se houve algum desenvolvimento na adição de suporte a respostas encadeadas para o Matrix. Alguns de nossos usuários apreciariam isso.

3 curtidas