很遗憾,目前这两件事都无法实现。
你好,我正在设置这个,我不确定界面是否发生了变化,但这些范围是在Bot Token Scopes下设置,还是在User Token Scopes下设置?
谢谢。
这两项功能都可以通过 Zapier 集成来实现。我知道这并非最理想的方案,但既然我一直在将其作为该插件的替代方案进行研究,所以想与大家分享。
你好!
我尝试按照此帖中的说明配置插件,但当我尝试发布转录内容时,Slack 机器人仅回复:
“正在加载转录内容…”
我的 Discourse 托管在 “discourse.group” 子域名下。以下是我从错误日志中获取的信息:
/var/www/discourse/plugins/discourse-chat-integration/lib/discourse_chat/provider/slack/slack_command_controller.rb:86:in `block in process_post_request’
/var/www/discourse/lib/scheduler/defer.rb:94:in `block in do_work’
rails_multisite-2.1.0/lib/rails_multisite/connection_management.rb:252:in `with_connection’
rails_multisite-2.1.0/lib/rails_multisite/connection_management.rb:61:in `with_connection’
/var/www/discourse/lib/scheduler/defer.rb:89:in `do_work’
/var/www/discourse/lib/scheduler/defer.rb:79:in `block (2 levels) in start_thread’
您知道如何解决这个问题吗?
错误发生的位置表明您在站点设置页面中输入的 Slack 凭据不正确。要找到“聊天集成”设置,请前往您的“管理/设置”页面,并滚动到左侧菜单的底部。您将在列表底部看到一个“聊天集成”按钮。
在该设置页面上,请确保以下设置正确:
chat integration discourse usernamechat integration slack access tokenchat integration slack incoming webhook token
如果上述操作未能解决问题,请告诉我们。由于您的站点由我们托管,我们可以协助排查问题所在。
错误解决方案:
1) DiscourseChat::ProviderError
2) {"ok":false,"error":"not_in_channel"}
为了让这个问题更显而易见,因为之前很难找到答案。自从这些说明发布以来,Slack 应用的创建过程发生了一些变化。而且,似乎将机器人集成到 Slack 频道中也需要更多的设置步骤。
在我的 Slack 工作区中,我可以通过向机器人 @discourse 发送私信以及运行命令 /discourse 来确认应用是否正常工作。但在 Discourse 插件设置中,我收到了错误,无法设置频道或发送测试消息。
如何实施
编辑:回复中已有更新的信息。我已尝试将这些额外步骤整合到这里(截至 2020 年 4 月 6 日)。如有需要,请评论或修改。- dp
- 机器人权限:为了使
/discourse斜杠命令正常工作,需要添加chat:write.customize权限。我还添加了chat:write权限。 - 您需要在 Slack 中创建频道。然后,要么从该频道运行
/discourse命令,要么在 Discourse 中设置规则。 - 您需要手动将机器人添加到目标频道(至少为了发布转录内容)!您可以在与机器人的私人对话中完成此操作:
“对话设置” > “将此应用添加到频道”。 - 然后,重要的是,您需要将 Discourse 机器人用户添加到频道中。我无法通过正常的频道“添加用户”或“添加应用”按钮完成此操作。但我通过向频道中的
@discourse发送消息成功了——随后 Slack 提示我:“@discourse 不在此频道中,您想添加吗?” - 之后,我可以成功从插件设置中运行测试消息:rocket:
注意:在 Slack 应用设置中,我将应用名称设置为 @discourse
感谢 @thedavidprice 和 @simon 的大力支持!
我已经修复了这个问题!一切正常,但机器人需要被添加到频道中才能发布转录内容。或许你可以将这一点添加到上面的指令列表中?
另外,我注意到 chat:write:bot 权限范围已不再可用,你必须选择 chat:write!
你好 @Vincenzo_Lomonaco,为确认一下,您的意思是插件本身现在会将机器人添加到频道中(例如,在创建规则时)吗?
确实,Slack 设置方面似乎发生了很多变化。我可以确认已添加了 chat:write 权限,同时也添加了 chat:write.customize 权限。
通过 Slack API 创建应用后,我不太确定是否还需要在“工作区设置”中的“应用”部分将应用添加到某个频道。在我的情况下,我确实选择了一个频道。
最后,我还对是否需要在 Slack 应用设置页面添加“显示信息”有些困惑。我添加了,这似乎是用于 Slack 应用目录以及 Slack 左侧栏中“最近应用”的信息。我在 Discourse 中为机器人消息输入的图片 URL 似乎无法正常工作。不过,机器人的名称可以正常显示。
再次感谢!总体而言,我对目前的进展非常满意。
你好 @thedavidprice,
不,你需要手动将机器人添加到目标频道(至少为了发布转录内容)!你可以在 Slack 中与机器人的私人对话中完成此操作:“对话设置” > “将此应用添加到频道”。
感谢你的付出。我已根据你的帖子和我的测试更新了指南。我可以确认,必须将 chat:write.customize 权限添加到 Bot Token Scopes 设置中,/discourse post 斜杠命令才能正常工作。
我曾以为 channels:join 范围可能足以让机器人自动加入频道,但根据我的测试,这并不奏效。我认为现在将机器人添加到频道最简单的方法已在指南的第 15 步中说明。如果有更好的方法,请告诉我。
几天后,一旦我们确认当前版本的指南对大家都有效,我会清理本主题中的回复。
大家好,我想为安全限制较严格的场所配置这个。在对比文档中列出的必需权限范围(OP)与当前允许的权限范围后,我看到的如下:
chat:write # ?不明确,但 chat:write:bot 可以
chat:write.customize ? 不明确,但 chat:write:bot 可以
users:read # X 被拒绝
channels:history X 被拒绝
groups:history # 可以,谨慎接受
im:history # 可以,接受
如果应用仅配置以下权限范围,哪些功能会正常工作,哪些会失效?
chat:write:bot
groups:history
im:history
例如,我可以接受放弃转录功能……
距离我第一次实现这个功能已经有一段时间了,看起来 Slack 的权限范围(scopes)自那时起发生了很大变化。我看到有人一直在维护原始帖子的 wiki,这太棒了!![]()
我认为 chat:write:bot 和 chat:write:user 已被弃用,取而代之的是 chat:write。
看起来 chat:write.customize 是必需的,因为我们自定义了消息的 author_name 和 author_icon 以匹配 Discourse 用户。
users:read 和 *:history 权限范围仅用于发布转录内容。我意识到这看起来好像很多!但本质上,Discourse 需要访问您的聊天记录才能构建转录。如果您不想授予这些权限,完全可以跳过它们,继续在不支持转录发布的情况下使用。
当我使用斜杠命令时,会出现以下错误:/hub 执行失败,错误信息为 “dispatch_failed”。
(我们使用 /hub 而不是 /discourse)
我已经成功将应用添加到频道中,也能从 Discourse 向我们的 Slack 发送测试帖子,但一直无法解决 / 命令的问题。希望能得到一些排查帮助!
请检查您在 Slack 应用中已添加的权限。上次我尝试配置时,指南中第 5 步和第 6 步列出的所有权限都需要添加到应用的权限范围(Scopes)中:
chat:writechat:write.customizeusers:readchannels:historygroups:historyim:history
如果这仍无法解决问题,请告知我们。
我已再次查阅了设置指南,并创建了 /hub 斜杠命令。在我已添加该应用的所有频道中,调用 /hub post 都能正常工作。我使用的权限与您截图中显示的一致。
请确认您是否已完成指南中的第 8 步?该部分指示您:
前往 <kbd>交互性与快捷方式</kbd> 页面,通过将 <kbd>交互性</kbd> 部分切换为 <kbd>开启</kbd> 来启用它,并在“请求 URL”下输入以下 URL:
<your-discourse-url>/chat-integration/slack/interactive
此外,最好也确认一下您能否从 Discourse 向尝试运行 /hub post 命令的 Slack 频道发布消息。
如果您仍无法解决此问题,请告知我们。
我检查过了,我相信我确实遵循了该步骤。
这是一张截图。
不过,我认为错误发生在与第 7 步相关的某个地方。
以下是我的设置。
当我尝试在 Slack 上使用斜杠命令时,显示如下:
是的,那部分工作完美。
不行,还是不行。![]()
您截图中的“编辑命令”部分里的“请求 URL”未使用 HTTPS。这可能是问题所在。
搞定啦,非常感谢!!!!
我已经按照本指南中的说明操作,我的 Discourse/Slack 集成(大部分)已能正常工作。这个插件做得非常棒!不过我有三个问题/观察结果。
无法通过订阅父类别来订阅子类别中的消息
这可能是设计如此,但起初并不明显。我有包含子类别的父类别。我原本以为,如果我为父类别创建一条过滤“所有帖子和回复”的规则,那么它会自动包含每个子类别。但实际情况并非如此,我不得不为每个(众多的)子类别分别创建规则。如果能在 Discourse 安装中存在多个子类别归属于少数几个父类别的情况下简化设置,这将是一个极好的功能增强请求。
无法通过单条规则订阅所有类别
我找到了一些相互矛盾的信息,我猜旧的 Slack 插件可能支持此功能,但我找不到创建单条规则的方法,使其能够订阅站点中所有类别的所有帖子和回复。我原本希望仅用一条简单的规则就能实现这一目标。但由于上述问题以及这一点,为了在我的整个 Discourse 平台与一个 Slack 频道之间建立基本连接,我不得不创建了 31 条独立的规则,而不是仅仅一条。除非我遗漏了什么,否则也请将此视为一项功能增强请求。
Discourse 帖子命令仅在一个频道中有效
现在,这可能是我的问题,但我无法弄清楚。我已经查阅了所有相关主题的讨论帖,非常希望能得到一些帮助。我已检查并反复核对了我的 Slack 应用的权限,可以确认它完全 100% 有效……但仅在我的一个频道中有效!
/discourse post 20
因此我知道访问令牌已设置好并正常工作。然而,在我的 Slack 团队的所有其他频道中,上述命令仅输出
正在加载转录内容...
然后就结束了。这些都是公共频道,我尝试了各种设置组合。唯一有效的那个频道是今天新创建的,但当我创建另一个新频道进行测试时,它却无法工作。我甚至不知道从哪里开始排查这个问题。我所知道的 Discourse 日志只有
./launcher logs app
但那里似乎没有任何相关内容。我可能忽略了哪项设置,导致仅允许在一个频道中发布帖子?我又应该在哪里查找以进行调试?




