chat.postMessage xoxb令牌,用于向所有工作区中的所有用户发布消息

时间:2019-06-08 08:06:20

标签: slack-api

我为Slack / Node.js机器人使用了https://www.npmjs.com/package/@slack/interactive-messageshttps://www.npmjs.com/package/@slack/events-api。我使用以下命令捕获了与机器人的任何交互:

slackEvents.on(‘message’, (message: any, body: any) => …);

在Slack用户与机器人聊天之前,他们必须使用:https://api.slack.com/docs/sign-in-with-slack将其集成到其工作区中:https://api.slack.com/methods/chat.postMessage在我的网站上可供登录的用户使用。成功响应后,我将获得两个不同的访问令牌:

    来自bot_access_token的
  1. 基于xoxb的身份验证令牌(如果不正确,则为基于工作区的访问令牌)
  2. access_token中基于xoxp的身份验证令牌(如果不正确,这是基于用户的访问令牌)

我将上述令牌存储在数据库中的用户记录中。我使用xoxb令牌从也可以访问数据库的bot引擎执行方法,例如:enter image description here

但是,一旦集成了僵尸程序,该僵尸程序就会暴露给许多用户。没有执行“以松弛方式登录”过程并且在数据库中的用户记录中没有任何xoxp或xoxb令牌的用户。我可以使用什么xoxb令牌与他们进行chat.postMessage?

我看到Slack API Bot仪表板的“ OAuth和权限”链接下有一个OAuth访问令牌(xoxp)和Bot用户OAuth访问令牌(xoxb)。这是一个主要的xoxb令牌,可用于在集成了我的应用的任何工作区中向Slack中的所有用户chat.postMessage吗?

1 个答案:

答案 0 :(得分:1)

令牌始终绑定到一个工作空间和一个用户。没有适用于多个工作空间的“主”令牌。

但是,应用程序通常每个工作空间只需要一个令牌,它可以在按时安装过程中收到(如您所述)。您显然想在应用数据库中存储该令牌(机器人用户令牌和访问令牌,如果您有机器人用户的话)。

只要您的应用具有必要的范围,它就可以将该令牌用于涉及该工作区的所有API调用。例如您可以将消息发送给具有相同令牌的任何用户。要使它与不同的工作空间一起使用,您需要做的就是将传入请求中的团队ID与正确的令牌相匹配,以进行响应。

要将直接消息发送给任何用户,只需使用该用户的ID作为chat.postMessage的通道即可。您可以在消息事件中获得该ID。

由于您拥有机器人用户,因此建议您尽可能使用机器人令牌,并且仅在机器人令牌不起作用(并非所有API方法都适用于机器人令牌)的情况下使用访问令牌。

有关这些标记之间差异的详细描述,请参见here

另请参阅How to get a workspace agnostic Slack bot token?