Slack Events API:发布事件(多次)以响应自己的机器人用户的响应

问题描述 投票:1回答:1

通过Slack Events API(im.message event)响应传入消息时,我似乎有问题

  • 当用户(在本例中为UQ364CBPF)向我的App Home发送消息时,事件API会将事件正确发布到我的后端(=下面日志的第一行)。

  • 我用HTTP 200 OK响应事件,并且在我的代码(见下文)中,我触发了Bot用户的响应。

  • 此响应在Slack中正确发送。

但是:之后,事件API会继续发布我自己的机器人用户已在此频道中发布消息的事件...

而且,事件通常只发布3次,而这些事件只会不断发布。即使机器人用户仅在Slack中发送了一条响应消息。

User UQ364CBPF has posted message: I'm typing a message to my Slack bot. in DQ5FF35N2 of channel type: im
[26/Dec/2019 15:16:30] "POST /slack/events/ HTTP/1.1" 200 0
User UQ5529KTR has posted message: Thank you for your message! We will get back to you soon! in DQ5FF35N2 of channel type: im
[26/Dec/2019 15:16:32] "POST /slack/events/ HTTP/1.1" 200 0
User UQ5529KTR has posted message: Thank you for your message! We will get back to you soon! in DQ3KX0NPJ of channel type: im
[26/Dec/2019 15:16:33] "POST /slack/events/ HTTP/1.1" 200 0
User UQ5529KTR has posted message: Thank you for your message! We will get back to you soon! in DQ3KX0NPJ of channel type: im
[26/Dec/2019 15:16:35] "POST /slack/events/ HTTP/1.1" 200 0
User UQ5529KTR has posted message: Thank you for your message! We will get back to you soon! in DQ3KX0NPJ of channel type: im
[26/Dec/2019 15:16:37] "POST /slack/events/ HTTP/1.1" 200 0
User UQ5529KTR has posted message: Thank you for your message! We will get back to you soon! in DQ3KX0NPJ of channel type: im
[26/Dec/2019 15:16:39] "POST /slack/events/ HTTP/1.1" 200 0
User UQ5529KTR has posted message: Thank you for your message! We will get back to you soon! in DQ3KX0NPJ of channel type: im
[26/Dec/2019 15:16:40] "POST /slack/events/ HTTP/1.1" 200 0
User UQ5529KTR has posted message: Thank you for your message! We will get back to you soon! in DQ3KX0NPJ of channel type: im
[26/Dec/2019 15:16:42] "POST /slack/events/ HTTP/1.1" 200 0
User UQ5529KTR has posted message: Thank you for your message! We will get back to you soon! in DQ3KX0NPJ of channel type: im
[26/Dec/2019 15:16:43] "POST /slack/events/ HTTP/1.1" 200 0
User UQ5529KTR has posted message: Thank you for your message! We will get back to you soon! in DQ3KX0NPJ of channel type: im

在我的代码中,这是处理Slack事件的较大函数的一部分,相关部分:

@csrf_exempt
def slack_events(request):
    if request.method == 'POST':
        json_data = json.loads(request.body)
        event_callback_type = json_data['event']['type']
        if event_callback_type == 'message':
                user_id = json_data['event']['user']
                text = json_data['event']['text']
                channel_id = json_data['event']['channel']
                channel_type = json_data['event']['channel_type']
                timestamp = json_data['event']['ts']
                print ('User ' + user_id + ' has posted message: ' + text + ' in ' + channel_id + ' of channel type: ' + channel_type)
                slack_message_received(user_id, channel_id, channel_type, team_id, timestamp, text)
                return HttpResponse(status=200)

这里(或函数slack_message_received中没有任何东西可以触发此重复流...

所以

1。 Slack用所有这些轰炸我是不是很奇怪的行为来自我自己的机器人用户的POST请求?

2。除了过滤掉自己的Bot用户ID并在后端忽略这些请求之外,我是否可以避免这种行为?

谢谢!

django events bots slack slack-api
1个回答
0
投票

根据事件API的标准行为,您的漫游器将接收所有消息事件,包括其自身帖子中的事件。通过对它们的反应,您已经创建了无尽的循环。

要解决此问题,您需要按照#2中的建议将其过滤掉,以停止对机器人自身的消息做出反应。这是标准方法。

最简单的方法是,如果您不需要听其他机器人,则只过滤掉所有机器人消息。然后,您可以忽略所有具有subtype属性的消息。另外,您当然可以从您自己的漫游器中过滤我们的消息。

© www.soinside.com 2019 - 2024. All rights reserved.