使用“订阅bot事件”限制bot的权限

时间:2018-02-12 21:18:51

标签: slack-api

情况:

  • 我们的机器人应该为松散团队中的选定用户提供管理信息
  • 因此,我们希望将对机器人的访问权限限制为由松散团队的管理员定义的用户
  • 我们希望机器人只能通过私人频道或多方直接消息对话进行寻址
  • 我们知道机器人应用程序本身无法创建这样的私人频道
  • “默认”bot事件是im_created,message.channels,message.groups,message.im

问题:

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

1 个答案:

答案 0 :(得分:0)

您在技术上是正确的,即通过不订阅链接到某些会话类型的事件,您的机器人将不会接收来自这些会话的消息,因此显然不会对其做出反应。

但是,在我看来,这不是一个好方法,因为你希望你的机器人始终能够响应用户而不会显得“死”。至少告诉用户他没有被授权。还要考虑您的僵尸用户仍然可以被邀请加入所有会话类型。

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

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

示例消息事件:

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

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

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

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