使用 discourse-chat-integration 插件设置 Matrix (element.io) 通知

howto 描述了如何设置 discourse-chat-integration 中内置的 Matrix (element.io) 提供商。

感谢 @ara4n 以及 #matrix-dev:matrix.org 房间的成员在此集成方面提供的帮助 :slight_smile:

安装

discourse-chat-integration 插件已随 Discourse 捆绑。请确保在站点设置中将 chat_integration_enabled 设置为 true 以启用它。更多详情,请参阅 discourse-chat-integration 插件主题。

设置 Matrix

以下说明假设您使用的是 element.io 网页客户端。使用其他界面也应能执行等效步骤。

  1. 无痕窗口 中打开 https://app.element.io/(稍后您会知道原因)

  2. 为您的机器人创建一个用户账户。您可能需要记下密码,以防以后需要重新登录。Discourse 不需要它。

  3. 使用界面加入您希望向其发送通知的任何房间

  4. 点击左上角的头像打开用户设置,然后点击 所有设置

  5. 配置机器人的显示名称和头像

  6. 切换到“帮助和关于”选项卡,向下滚动到“高级”,然后复制 Homeserver 地址和您的“访问令牌”——稍后您需要它们。

  7. 不要点击退出登录。如果点击,访问令牌将失效,导致无法工作。相反,只需关闭无痕窗口。如果您忘记打开无痕窗口,请返回步骤 1 :wink:

设置 Discourse

  1. 在您的 Discourse 站点设置中,在 chat_integration_matrix_homeserver 设置项中输入您的 Homeserver 地址。务必包含协议(例如 https://matrix.org)。不要包含末尾的斜杠。

  2. 将之前复制的访问令牌粘贴到 chat_integration_matrix_access_token 站点设置中

  3. 启用 chat_integration_matrix_enabled

  4. 进入 插件 选项卡,然后进入 聊天集成

  5. 进入 Matrix 选项卡,然后进入 创建频道

  6. 输入频道的名称(这仅在管理界面中显示,可以是任何内容)

  7. 输入您希望向其发送通知的房间的“房间 ID”。在 Element 网页客户端中,您可以通过打开房间、点击顶部的名称,然后滚动到底部来找到它。它看起来像这样:

    !cdGUowUAqlgLHVerqE:matrix.org
    

    注意:较新的 Matrix Room v12 ID 可能不包含 :server 后缀(例如 !abcdefghijkl)。两种格式均受支持。

  8. 保存频道

  9. 使用您刚创建的频道上的 测试 按钮检查一切是否正常。您应该看到类似以下内容:

  10. 根据 discourse-chat-integration 说明为您的频道设置一些“规则”。

技术说明
  • 截至撰写本文时,似乎没有以用户友好的方式获取“机器人”的“访问令牌”的方法。无痕窗口解决方案是我能找到的最用户友好的方法。

  • 此插件使用 org.matrix.custom.html 格式发送富文本消息,这是 Matrix 规范的一部分。不支持格式化消息的客户端将回退到纯文本消息。

  • 默认情况下,消息作为 m.notice 发送(Matrix 客户端通常以更安静的方式渲染)。您可以通过禁用 chat_integration_matrix_use_notice 站点设置将其更改为 m.text

  • 此实现中没有提供“刷新”访问令牌的机制。这是基于目前大多数 Homeserver 不会使令牌过期的理解。如果未来情况发生变化,则需要重新审视这一点。

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

我也对获取访问令牌的更新说明感兴趣…

1 个赞

目前在 Element(Riot 的重新品牌化)中称为 房间设置

运行完美。

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

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

2 个赞

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

1 个赞

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

3 个赞