我正在使用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 app或bot的示例消息
{
"text": "Hey guys",
"bot_id": "B12345678",
"type": "message",
"subtype": "bot_message",
"ts": "1531700187.000049"
}
另见this answer。