使用Botkit startRtm进行Slack User Presence订阅

时间:2018-05-24 18:50:35

标签: node.js slack-api botkit

我试图找出如何通过Botkit的startRTM调用订阅Slack中的状态更改。目前我正在使用Botkit's starter slack bot,它有一个rtm_manager脚本来处理所有rtm启动和关闭。

bot.startRTM(function(err, bot) {
   ...do stuff
});

我已经研究了Slack订阅状态事件的新方式,并了解我需要发送 presence_sub batch_presence_aware 参数才能订阅< em> presence_change 事件。

我还查看了用于处理状态更新的node-slack-sdk rtm客户端的documentation,它使用了rtm.start本身

rtm.start({
   batch_presence_aware: true
}); 

由于我使用的是使用startRTM方法的botkit,因此我很难理解如何组合所有这些信息。 在使用botkit的startRTM方法时,是否有任何用于订阅状态更新的文档或示例?

1 个答案:

答案 0 :(得分:0)

我认为首先我们应该将这两个概念分开:presence_subbatch_presence_aware

  1. presence_sub是一种RTM消息类型,您的应用可以将其发送给Slack,以指明您的客户希望更新相关内容的用户。

  2. batch_presence_aware是您的应用在调用rtm.start时可以设置的参数,如果您希望将有关不同用户的状态更新分组到单个消息中。每次更新都以presence_change事件的形式到达。权衡是您的应用程序可能不会尽快获得presence_change,但它会处理更少的可以提高性能的消息。这是可选的,但建议使用。

  3. 您所指的“新方式”是自2018年1月以来的行为更改。在更改之前,您的应用可能presence_sub提供rtm.start参数},这将选择您的连接仅接收上一个presence_change消息中指示的用户的presence_sub个事件;否则您的应用程序将为工作区中的每个用户接收这些更新。自所有连接发生更改presence_sub=true后,这实际上意味着您的应用必须发送presence_sub消息以获取任何presence_change个事件。

    现在让我们来看看如何在Botkit中使用这些信息。

    1. 设置控制器以通过RTM发送消息。

      var controller = Botkit.slackbot({
        // ...
        send_via_rtm: true,
      });
      

      在启动器仓库中,控制器在bot.js中创建,并且已在bot_options中包含一些选项。您需要添加send_via_rtm选项,以允许您发送的邮件通过RTM。不幸的是,Botkit没有允许您使用我知道的batch_presence_aware的API。如果这是你想要的,我建议在项目上打开一个问题。

    2. 为您想要更新的用户设置在线订阅。

      controller.say({
        type: "presence_sub",
        ids: [
          "U061F7AUR",
          "W123456"
        ]
      });
      

      您希望尽可能早地在程序中执行此操作。在启动器仓库中,您可能希望将此分组和下一步分组为“技能”,因此将其放在该目录中的新文件中,在导出的函数内部将是一个不错的选择。请注意,您需要一个您想要订阅的用户ID列表。这取决于您希望如何获取该列表。 每次要添加或删除订阅时,您还希望执行相同操作,并提供完整的用户列表。

    3. 侦听在场变化事件

      controller.on('presence_change', (bot, event) => {
        // `event` contains presence information
        console.log(event);
      });
      

      一旦您为其设置了状态订阅的用户更改了状态,您将在此回调中收到一个事件。这里描述了确切的结构:https://api.slack.com/events/presence_change