Webhook 传入事件订阅创建循环
Webhook incoming with event subscription create loop
我正在使用 Web 服务 api 从松弛通道(事件订阅)接收消息,并使用相同的 Web 服务 api 向用户发送消息(Incoming webhook)松弛通道。
但是,当我发送消息时,松弛事件订阅会将该消息发回我的 api。这会造成无限循环。
我如何声明我发送到频道的消息,当我通过事件订阅收到返回时我可以查看?
这是 Slack 的正常行为,无法通过任何配置更改。当您订阅消息事件时,您将收到 所有 条消息的事件,包括来自您自己的应用程序的消息。
因此,为避免无限循环,您需要在继续处理之前检测并过滤掉来自您自己的机器人的消息。这很容易完成,因为所有消息都包含发件人的姓名。例如您可以过滤掉所有具有您的 Slack 应用程序 bot_id
的消息或来自机器人的所有消息(具有 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"
}
另见 this answer。
我正在使用 Web 服务 api 从松弛通道(事件订阅)接收消息,并使用相同的 Web 服务 api 向用户发送消息(Incoming webhook)松弛通道。
但是,当我发送消息时,松弛事件订阅会将该消息发回我的 api。这会造成无限循环。
我如何声明我发送到频道的消息,当我通过事件订阅收到返回时我可以查看?
这是 Slack 的正常行为,无法通过任何配置更改。当您订阅消息事件时,您将收到 所有 条消息的事件,包括来自您自己的应用程序的消息。
因此,为避免无限循环,您需要在继续处理之前检测并过滤掉来自您自己的机器人的消息。这很容易完成,因为所有消息都包含发件人的姓名。例如您可以过滤掉所有具有您的 Slack 应用程序 bot_id
的消息或来自机器人的所有消息(具有 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"
}
另见 this answer。