Slack应用程序:如何管理到不同团队的bot连接?

时间:2017-04-17 09:16:14

标签: slack-api slack

我正在尝试使用僵尸程序构建Slack应用程序以与用户进行交互。

我想在Slack app目录中分发这个应用程序。我必须为每个团队获得一个oauth授权令牌,我将其存储在我的数据库中。

事情是我不确定我是否真的理解我应该如何管理SlackClient与每个团队的连接。让我解释一下我现在看到的事情。

  • 我可以通过使用Slack按钮获取授权令牌来授权我的应用访问和发布不同团队中的内容。这为每个已启用的团队提供了访问令牌和bot_token。
  • 要在团队中发帖,我应该使用这些生成的令牌将SlackClient连接到这个特定的团队吗?所以是我的应用程序应该在每次收到来自其他团队的请求时断开/重新连接我的SlackClient ?或者SlackClient可以同时连接多个团队吗?

我遵循本教程首先要做的事情,但它并没有真正解释如何管理我认为的不同团队连接(https://github.com/slackapi/Slack-Python-Onboarding-Tutorial)。

由于

1 个答案:

答案 0 :(得分:2)

没有。连接由运行slackclient的Web服务器管理。所以你不必处理它们。您只需要对他将从Slack收到的每个事件请求单独作出反应。其他所有内容都由Web服务器管理。(*)

以下是它的详细工作原理:

你提到的机器人正在使用Slack的Events API与Slack团队进行沟通。为团队安装僵尸程序后,只要您订阅的事件发生,Slack就会开始向您的机器人发送事件请求。例如如果您订阅message events,您的机器人将收到您的机器人被邀请到的所有渠道中发送的每条消息的请求。

来自Slack的事件请求包含团队的团队ID,因此您只需要从他的数据库中选择相应的访问令牌,并且其回复(例如使用所选令牌发送消息)将转到正确的团队。在消息事件的情况下,事件请求还将包含频道和用户ID,因此您的机器人可以将他的回复发送到正确的频道和用户。

以下是Slack的事件请求如下所示的示例:(来自官方文档)

{
        "token": "z26uFbvR1xHJEdHE1OQiO6t8",
        "team_id": "T061EG9RZ",
        "api_app_id": "A0FFV41KK",
        "event": {
                "type": "reaction_added",
                "user": "U061F1EUR",
                "item": {
                        "type": "message",
                        "channel": "C061EG9SL",
                        "ts": "1464196127.000002"
                },
                "reaction": "slightly_smiling_face"
        },
        "event_ts": "1465244570.336841",
        "type": "event_callback",
        "authed_users": [
                "U061F7AUR"
        ]
}

(*)从技术上讲,Web服务器将生成机器人的多个实例,以处理多个并行事件请求。