You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Slack机器人触发message事件后重复发送图片问题求助

问题原因及解决方案

核心原因

出现重复发送的情况,主要有两个常见诱因:

  • Slack的message事件可能因网络波动或平台机制重复投递同一事件,导致你的处理函数多次执行
  • 未过滤message事件的子类型,机器人上传文件后产生的message.file_share等关联事件,可能被误触发(尽管这类事件的user_id通常是机器人,但不排除特殊场景下的异常)

修复步骤

  1. 添加事件去重机制:
    每个Slack事件都有唯一的event_id,用集合记录已处理的ID,避免重复处理同一事件。

  2. 过滤消息子类型:
    只处理用户主动发送的普通消息(无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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:25:06