群组私信 - Message Bus 问题

背景
我们有一个系统,通过 API 以编程方式将用户添加到群组,并自动为各个群组创建私信,全部通过 API 完成。

例如,我们可能有一个名为 cooking-class-101 的群组。
我们会为该群组创建一条私信,参与者为 cooking-class-101system

这种方式为我们自动为人群创建私密群聊提供了非常有效的解决方案。

问题
我们遇到的问题是:对于属于该群组的普通用户,当话题中新增帖子时,消息总线(message bus)不会返回任何更新。

例如,我们有一条群组私信,其话题 ID 为 123。我们可以确认消息总线已订阅通道 topic/123,但如果其他用户在该话题中发布新帖子,消息总线不会返回任何数据,因此最新帖子不会自动显示。

我们已确认消息总线整体运行正常,因为它确实能正确返回 topic/presence/123 通道上的数据。

与之相对的是:对于属于该群组且已被加入私信的管理员用户,消息总线确实能正确返回 topic/123 通道上的数据,因此新帖子能够实时正确显示在话题中。

我们还确认,如果一位属于该群组的普通用户被单独邀请参与该话题(此时参与者包括 cooking-class-101system 和该普通用户),那么他们就能开始正确接收来自 topic/123 通道的消息总线响应,从而实时看到新帖子。

研究
深入查阅 Discourse 代码后,我发现了以下内容,看起来对于私信话题,系统可能并未通知群组有关新帖子发布的信息:

我不太确定在将群组加入私信话题的情况下,上述链接中的 topic.allowed_users 应该返回什么内容,但我怀疑它并未包含作为该组成员的用户列表。

我已将此问题标记为 bug,但这也有可能属于预期行为?

2 个赞

这在我看来更像是支持问题,而不是 bug。

请从后往前排查,先在 UI 中完成所有操作。

它是否正常工作?

例如:

  • user1 是群组 A 的成员
  • 向群组 A 发送消息
  • user1 查看该消息
  • user2 在该消息下回复
  • 你能实时看到回复出现吗?

如果能看到,那么问题可能出在你调用 API 的方式上。

3 个赞

谢谢你的回复,Sam。

我们在 Discourse 界面内部进行了测试,发现出现了同样的错误行为——即回复不会实时显示,只会收到通知或提醒。

需要刷新页面才能看到最新的帖子。

不过,在你上面的示例中,如果 user1 是管理员,则一切运行正常。

2 个赞

这听起来确实是个 bug,我们会进行测试,可能需要几天时间。

4 个赞

太棒了,谢谢!如果您需要任何进一步的信息,请随时告知。

1 个赞

嗨,Sam - 留言想问问是否有地方可以跟踪这个 bug 的进展?我对 Discourse 的 bug 报告和修复流程还不太熟悉 - 谢谢!

2 个赞

我相当确定 Kris 已经修复了这个问题,建议你重新测试一下。

3 个赞

@danjw

抱歉,我忘了告诉你。Sam 说得对,这个问题已经在下面的 PR 中修复了:

3 个赞