Slack机器人触发message事件后重复发送图片问题求助
问题原因及解决方案
核心原因
出现重复发送的情况,主要有两个常见诱因:
- Slack的
message事件可能因网络波动或平台机制重复投递同一事件,导致你的处理函数多次执行 - 未过滤
message事件的子类型,机器人上传文件后产生的message.file_share等关联事件,可能被误触发(尽管这类事件的user_id通常是机器人,但不排除特殊场景下的异常)
修复步骤
添加事件去重机制:
每个Slack事件都有唯一的event_id,用集合记录已处理的ID,避免重复处理同一事件。过滤消息子类型:
只处理用户主动发送的普通消息(无subtype字段的事件),排除文件分享、回复、编辑等衍生消息事件。
修改后的代码如下:
BOT_ID = client.api_call('auth.test')['user_id'] file_name = "./cards/card3.png" # 用于记录已处理的event_id,避免重复执行 processed_events = set() @slack_event_adapter.on('message') def message(payload): print('MESSAGE HAPPENED') event = payload.get('event', {}) event_id = payload.get('event_id') # 跳过已处理过的事件 if event_id in processed_events: return processed_events.add(event_id) channel_id = event.get('channel') user_id = event.get('user') # 仅处理无subtype的普通用户消息 message_subtype = event.get('subtype') if BOT_ID != user_id and user_id and not message_subtype: print(f'user_id: {user_id}, bot_id: {BOT_ID}, channel_id: {channel_id}') res = client.files_upload( channels=channel_id, initial_comment="Here's my file :smile:", file=file_name, )
额外验证点
- 打印
BOT_ID和触发事件的user_id,确认两者确实不同,排除BOT_ID获取错误的问题 - 查看Slack事件日志,确认是否存在重复的
event_id投递,或非预期的子类型事件触发
内容的提问来源于stack exchange,提问作者mhawk
相关产品推荐
相关产品推荐

