`/discourse post` 命令在“正在加载对话记录...”时挂起

Discourse 帖子命令仅在一个频道中生效

现在,这很可能是我的问题,但我无法弄清楚。我已经查阅了所有相关主题的讨论帖,非常希望能得到一些帮助。我已检查并反复确认了 Slack 应用的权限设置,可以确认它确实 100% 有效……但仅限于我的一个频道!

/discourse post 20

因此,我知道访问令牌已正确设置并正常工作。然而,在我的 Slack 团队的所有其他频道中,上述命令仅输出:

正在加载记录...

然后就结束了。这些全都是公共频道,我尝试了各种设置组合。唯一生效的频道是今天新创建的,但当我创建另一个新频道进行测试时,它却无法工作。我甚至不知道该如何开始排查问题。据我所知,Discourse 中唯一的日志是:

./launcher logs app

但那里似乎没有任何相关信息。我可能忽略了哪个设置,导致仅允许在一个频道中发布帖子?我又该从哪里入手进行调试呢?

本主题从以下链接拆分而来:

检查您是否可以从 Discourse 发布到您尝试向其发布到 Discourse 的频道。我猜测问题在于,在能够向该频道发布或从该频道发布之前,您需要将您创建的应用添加到该频道中。

@simon 我想那可能就是原因!老实说,我对 Slack 应用的工作原理有些困惑。既然我能够在任何 Slack 频道中运行 /discourse ... 命令,而且该“应用”似乎已在全球级别安装,我认为我已经以所有必要的方式“添加”了该应用。然而,当我显式地 /invite 我的 Discourse 应用用户进入另一个频道时,它就开始工作了!

/invite @Discourse 
/discourse post 20

这非常令人烦恼的是,在我添加 @discourse 用户后,Slack 甚至没有显示该用户已加入我的频道。Slack UI 中的用户数量没有变化,如果我查看该频道的所有成员,我的应用用户也没有列在其中。我想这是 Slack 本身的一个缺陷,而不是 Discourse 的问题。

如果能不需要将 Discourse 用户邀请到我团队中的每个 Slack 频道就好了(天知道,我们有大量的频道),但我认为这必须是 Slack 对应用的限制?另外,我们能否为 Discourse 聊天插件添加一个增强功能,以检测此问题并显示更有用的错误消息?

我第一次尝试设置时,惊讶地发现必须将 Discourse 应用添加到每个频道。我会留意是否有办法绕过这一要求。

当应用因没有权限向频道发布或从频道接收消息而导致操作失败时,Slack 可能会向 Discourse 返回错误信息。如果是这种情况,利用该错误在 Discourse 的频道条目中添加提示,将有助于调试此类问题。我不确定这是否可行,但我会查看 Slack 是否会在该情况下向 Discourse 返回任何有用的信息。

这似乎是正确的。我仅在 Slack 上进行了测试。当 Discourse 尝试向尚未添加该应用的 Slack 频道发布消息时,“聊天集成”页面会显示警告,并且出现问题的频道上方会显示错误消息:

点击尚未添加该应用的频道的错误图标,即可显示具体问题:

{
  "error_key": null,
  "request": "",
  "response_code": "200",
  "response_body": "{\"ok\":false,\"error\":\"not_in_channel\"}"
}

Discourse 或许可以解析该错误消息,向用户提供关于如何解决该问题的详细信息。

当我尝试在尚未添加该应用的频道中通过斜杠命令向 Discourse 发布消息时,slack_command_controller.rb:86 会在 Discourse 上抛出 Job exception: break from proc-closure 错误。我不确定 Slack 是否返回了足够的信息,以便针对此情况生成有意义的错误消息。

我们也可以尝试通过请求 channels.join 权限来响应此错误,以加入该频道。