当(slack)机器人离开频道时,我如何在机器人中获取一个事件来告诉它已经发生了? 我已经在处理 member_left_channel 但当我从通道中删除机器人时,它不会收到此事件(可能是因为当事件被触发流动时机器人已经离开通道)。
听起来您的应用程序代表机器人用户事件订阅了
member_left_channel
。在应用程序的配置站点上,转到 事件订阅 并选择 代表用户订阅事件下的
member_left_channel
。如果您在经过身份验证的用户下订阅 member_left_channel
,只要该用户位于频道中,当机器人离开频道时,您应该收到一个事件。在大多数情况下,除非您的应用程序配置为支持 OAuth,否则唯一经过身份验证的用户将是您,因此请确保您位于频道中。
您可以通过保存机器人的用户 ID,然后从指定频道检索所有成员的列表来完成此操作。之后,您可以检查机器人的 userId 是否包含在 API 响应返回的成员数组中。
代码示例-
const checkChannelBotStatus = async (botUserId, channelId, slackTeamId) => {
try {
const response = await client.conversations.members({
channel: channelId,
});
const botIsInChannel = response.members.includes(botUserId);
if (botIsInChannel) return botIsInChannel;
return await handleBotLeftChannel({
channel: channelId,
team: slackTeamId,
});
} catch (error) {
return false;
}
};