django - 松弛事件 API : Events are posted (multiple times) for responses of own bot user

标签 django events bots slack slack-api

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

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

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

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

但是:在那之后,事件 API 不断发布我自己的 bot 用户已在此 channel 中发布消息的事件...

此外,事件通常只发布 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 用这些东西来轰炸我是不是很奇怪 来 self 自己的机器人用户的 POST 请求?

<强>2。除了过滤掉我自己的机器人用户 ID 并在后端忽略这些请求之外,我能否避免这种行为?

最佳答案

Events API 的标准行为是您的机器人将接收所有消息事件,包括来自它自己的帖子的消息事件。通过对它们使用react,您已经创建了无限循环。

要解决此问题,您需要停止对机器人自己的消息使用react,方法是按照您在 #2 中的建议将其过滤掉。这是标准方法。

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

关于django - 松弛事件 API : Events are posted (multiple times) for responses of own bot user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59489908/

相关文章:

django - django rest 框架中 ModelSerializer 的不同字段设置

Jquery循环插件: Event on pause/continue?

python - 输入通知事件信号不适用于 gtk.ToolButton

python - 带有 python : xmpp. 协议(protocol)的 xmpp.InvalidFrom : (u'invalid-from', '' )

javascript - 我需要 Node 客户端中客户端之间的路由数据来纠正连接的用户

python - Django 管理员自动保存

python - 使用 Python 验证和转换音频文件的快速方法?

django - 如何在不反转 Django 数据库中的对象值的情况下制作 obj.save()

javascript - 事件是否通过操作系统传递?

python - Discord - 仅从 python 应用程序向不和谐 channel 发送消息(单向通信)