首页 > 解决方案 > 带有事件订阅的 Webhook 传入创建循环

问题描述

我正在使用 Web 服务 api 从松弛通道(事件订阅)接收消息,并使用相同的 Web 服务 api 在同一松弛通道上向用户发送消息(传入 webhook)。

但是当我发送一条消息时,这条消息会通过 slack 事件订阅发送回我的 api。这会创建一个无限循环。

如何声明我发送到频道的消息,当我收到事件订阅返回时可以检查?

标签: webhooksslackslack-api

解决方案


这是 Slack 的正常行为,不能通过任何配置更改。当您订阅消息事件时,您将收到所有消息的事件,包括来自您自己的应用程序的消息。

因此,为避免无限循环,您需要在继续处理之前检测并过滤掉来自您自己的机器人的消息。这可以很容易地完成,因为所有消息都包含发件人的姓名。例如,您可以过滤掉所有具有bot_idSlack 应用程序的消息或来自机器人的所有消息(具有subtype= bot_message)。

以下是一些示例消息的外观以及来自真实用户的消息与来自 Slack 应用程序的消息有何不同:

来自真实用户的示例消息:

 {
      "type": "message",
      "user": "U12345467",
      "text": "Good read for some of guys",
      "ts": "1531745292.000021"
 }

来自 Slack 应用程序或机器人的示例消息

{
      "text": "Hey guys",
      "bot_id": "B12345678",          
      "type": "message",
      "subtype": "bot_message",
      "ts": "1531700187.000049"
 }

另请参阅此答案


推荐阅读