我试图找出如何通过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方法时,是否有任何用于订阅状态更新的文档或示例?
答案 0 :(得分:0)
我认为首先我们应该将这两个概念分开:presence_sub
和batch_presence_aware
。
presence_sub
是一种RTM消息类型,您的应用可以将其发送给Slack,以指明您的客户希望更新相关内容的用户。
batch_presence_aware
是您的应用在调用rtm.start
时可以设置的参数,如果您希望将有关不同用户的状态更新分组到单个消息中。每次更新都以presence_change
事件的形式到达。权衡是您的应用程序可能不会尽快获得presence_change
,但它会处理更少的可以提高性能的消息。这是可选的,但建议使用。
您所指的“新方式”是自2018年1月以来的行为更改。在更改之前,您的应用可能向presence_sub
提供rtm.start
参数},这将选择您的连接仅接收上一个presence_change
消息中指示的用户的presence_sub
个事件;否则您的应用程序将为工作区中的每个用户接收这些更新。自所有连接发生更改presence_sub=true
后,这实际上意味着您的应用必须发送presence_sub
消息以获取任何presence_change
个事件。
现在让我们来看看如何在Botkit中使用这些信息。
设置控制器以通过RTM发送消息。
var controller = Botkit.slackbot({
// ...
send_via_rtm: true,
});
在启动器仓库中,控制器在bot.js
中创建,并且已在bot_options
中包含一些选项。您需要添加send_via_rtm
选项,以允许您发送的邮件通过RTM。不幸的是,Botkit没有允许您使用我知道的batch_presence_aware
的API。如果这是你想要的,我建议在项目上打开一个问题。
为您想要更新的用户设置在线订阅。
controller.say({
type: "presence_sub",
ids: [
"U061F7AUR",
"W123456"
]
});
您希望尽可能早地在程序中执行此操作。在启动器仓库中,您可能希望将此分组和下一步分组为“技能”,因此将其放在该目录中的新文件中,在导出的函数内部将是一个不错的选择。请注意,您需要一个您想要订阅的用户ID列表。这取决于您希望如何获取该列表。 每次要添加或删除订阅时,您还希望执行相同操作,并提供完整的用户列表。
侦听在场变化事件
controller.on('presence_change', (bot, event) => {
// `event` contains presence information
console.log(event);
});
一旦您为其设置了状态订阅的用户更改了状态,您将在此回调中收到一个事件。这里描述了确切的结构:https://api.slack.com/events/presence_change。