使用 "subscribe to bot events" 限制机器人的权限

Restrict permissions for bot with "subscribe to bot events"

情况:

问题:

  1. 我们尝试通过事件限制对机器人的访问是否正确?
  2. 如果我们只订阅 message.groups 和 message.im 就够了吗?
  3. 当我们不订阅 im_created 和 message.channels 时,我们的机器人不会回复发送给它的直接消息是否正确?

你在技术上是正确的,如果不订阅与某些对话类型相关联的事件,你的机器人将不会收到来自这些对话的消息,因此显然无法对其做出反应。

但是,在我看来这不是一个好方法,因为您希望您的机器人始终能够响应用户而不是出现 "dead"。至少告诉用户他没有被授权。还要考虑到您的 bot 用户仍然可以被邀请参加所有对话类型。

相反,您的机器人应该订阅所有相关事件,然后根据他获得的事件做出反应并应用限制。

只需检查调用用户是否经过身份验证,即可限制对您的机器人的访问。例如消息事件始终包含用户 ID。您可以通过检查当前请求的通道 ID 来进一步限制,例如表明它是否用于 public 或私人频道。

示例消息事件:

{
    "type": "message",
    "channel": "C2147483705",
    "user": "U2147483697",
    "text": "Hello world",
    "ts": "1355517523.000005"
}

请注意,订阅 message.groups 等事件意味着您的机器人将收到发送到您的机器人用户所属频道的所有消息。然后,您的机器人应用程序需要过滤它们并选择正确的消息来做出反应。如果您只想对 @botuser 做出反应,您可能需要考虑仅订阅 app_mention.

一个更正:虽然您不能使用机器人令牌创建新的私人频道,但您的 Slack 应用程序将始终接收机器人、机器人令牌和用户令牌。使用后者,您可以代表安装用户创建新的私人频道。

请注意,您可能还想考虑为您的机器人(例如 /mgmtbot info)使用 slash commands 而不是机器人用户/事件。您可以根据类似于事件的呼叫者的用户 ID 和频道来限制您的响应,并且斜线命令可供用户使用,而无需先邀请您的 bot 用户加入对话/频道。