Set up Matrix (element.io) notifications using the discourse-chat-integration plugin

This howto describes how to setup the Matrix (element.io) provider included in discourse-chat-integration.

Thanks to @ara4n and members of the #matrix-dev:matrix.org room for their help with this integration :slight_smile:

Install

If you haven’t already, install the discourse-chat-integration plugin

Set up Matrix

These instructions assume you are using the element.io web client. Equivalent steps should be possible using other interfaces.

  1. Open https://app.element.io/ in a new incognito window (you’ll see why later)

  2. Create a user account for your bot. You’ll probably want to write down the password somewhere in case you want to log back in later. Discourse does not need it.

  3. Use the interface to join any rooms that you want to be able to send notifications to

  4. Open the user settings by clicking your avatar in the top left, then All Settings

  5. Configure the bot’s display name and avatar

  6. Switch to the “Help and About” tab, scroll down to “Advanced”, and copy the Homeserver address and your “Access Token” - you’ll need them later.

  7. DO NOT CLICK LOG OUT. If you do, the Access Token will be invalidated, and it won’t work. Instead, just close the incognito window. If you forgot to open an incognito window, go back to step 1 :wink:

Set up Discourse

  1. In your Discourse site settings, enter your home server address in the chat_integration_matrix_homeserver setting. Make sure to include the protocol. (e.g. https://matrix.org). Do not include a trailing slash.

  2. Paste the access token you copied earlier into the chat_integration_matrix_access_token site setting

  3. Enable chat_integration_matrix_enabled

  4. Go to the Plugins tab, then Chat Integration

  5. Go to the Matrix tab, then Add Channel

  6. Enter a name for the channel (this is only displayed in the admin interface, it can be anything)

  7. Enter the “Room ID” for a room that you want to send notifications to. In the Element web client, you can find it by opening your room, clicking the name at the top, then scroll to the bottom. It will look something like

    !cdGUowUAqlgLHVerqE:matrix.org
    
  8. Save Channel

  9. Use the Test button on the channel you just created to check that everything’s working. You should see something like this:
    17

  10. Set up some “Rules” for your channel, according to the discourse-chat-integration instructions.

  11. giphy-downsized (1)

Technical Notes
  • At the time of writing, there does not seem to be a way of obtaining an “access token” for a “bot” in a user-friendly way. The incognito window solution is the most user-friendly way I could find

  • The matrix spec does not currently define a way of providing “rich text” messages. There is a spec under development, but for now this plugin uses the “unofficial” method which has been adopted in the element.io client. Clients that do not support this will simply fall back to a plain text message

  • There is no provision in this implementation for ‘refreshing’ access tokens. This is based on the understanding that the majority of homeservers currently in use do not expire tokens. If this changes in the future, this will need to be revisited.

Last edited by @JammyDodger 2024-05-26T07:09:39Z

Check documentPerform check on document:
19 个赞

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 个赞

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 个赞

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

4 个赞

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 个赞

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

1 个赞

Currently called Room settings in Element (rebranding of Riot).

Works perfectly.

2 个赞

我已经更新了此页面以反映此更改。

访问令牌似乎现在位于“设置”底部的“帮助与关于”下。

我也遇到了同样的无限旋转器问题。 :frowning:

我尝试了 matrix.org 和 fedora.im 上的房间。

1 个赞

我刚自己试了一下设置,似乎运行正常。有几个猜测:

  • 您的房间是否加密?我不确定我们是否需要做额外的工作来支持加密房间

  • 也许访问令牌会随着时间过期。在我 2017 年构建集成时,这种情况以前不会发生,但那已经是很久以前的事了 :older_man:。我这周晚些时候会再试一下我的本地配置,看看它是否仍然有效。

1 个赞

它们没有。

也许吧,但我当时复制了访问令牌,然后几乎立即使用了它,但没有帮助。

3 个赞

为了记录在案,@mattdm 和我能够将此问题追溯到 Discourse 设置中 Homeserver URL 末尾的斜杠。

我已在 OP 的说明中添加了关于此问题的注释,并更新了访问令牌说明,以兼容最新的 element.io UI。

5 个赞

有人在线程支持方面取得进展吗?

安装最新版本的聊天插件(提交 ba40ede510986f74a23345082ac578e126467b97),并配置了一个测试 Matrix 房间(未加密的公共房间),当我尝试进行测试时(如上所述 https://meta.discourse.org/t/set-up-matrix-element-io-notifications-using-the-discourse-chat-integration-plugin/66944/2?u=manning-ncsa),我收到一个 500 HTTP 错误。相同的无限加载图标需要刷新页面。

机器人账户的访问令牌已通过 API(_matrix/client/r0/rooms/{room_id}/send/m.room.message)向我们自己的 Matrix 服务器发送消息进行了独立验证。

Discourse 日志显示

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/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'

我还没试过,但这会很有趣。你是想把所有帖子都放到一个线程里以减少频道混乱,还是想把主题回复发布到 Matrix 线程?

2 个赞

将主题回复发布到 Matrix 线程。
(与 Slack 当前的流程相同)

1 个赞

我很想知道关于为 Matrix 添加线程回复支持是否有任何进展。我们的一些用户会很欣赏它。

3 个赞