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

Slack Bolt for Python如何监听message_deleted消息删除事件

问题根因

你在Bot Events、Workspace Events的可选事件列表里找不到message_deleted是正常现象:Slack并没有将消息删除作为独立事件开放订阅,所有消息类变更(包括删除、编辑、线程回复等)都归属于message主事件类型,通过事件payload里的subtype字段区分具体行为。
你之前写的@app.event("message_deleted")监听器完全不触发,本质是Slack从来不会推送事件类型为message_deleted的请求,装饰器自然匹配不到任何推送。

正确实现步骤
  1. 进入Slack应用的Event Subscriptions配置页,在Bot Events分类下订阅对应范围的消息事件:
    • 公开频道消息:订阅message.channels
    • 私有频道消息:额外订阅message.groups
    • 私信消息:额外订阅message.im
      保存配置后,必须重新将应用安装到工作区,新增的事件权限才会生效。
  2. 将事件监听器改为监听message主事件,在内部逻辑中过滤出subtype为message_deleted的事件即可,参考代码:
@app.event("message")
async def handle_message_events(body, logger):
    event_data = body.get("event", {})
    # 过滤消息删除事件
    if event_data.get("subtype") == "message_deleted":
        deleted_channel = event_data.get("channel")
        deleted_message_ts = event_data.get("deleted_ts")
        logger.info(f"检测到频道 {deleted_channel} 内的消息 {deleted_message_ts} 被删除")
        # 若要判断是否为应用自身发送的消息,可提前将应用发信成功返回的ts、channelID存在本地缓存/数据库,在这里做比对即可

注意: 使用Bolt for Python时不需要在事件处理函数里手动调用ack(),框架会自动在Slack要求的3秒窗口期内返回接收确认,手动调用ack()反而可能触发重复响应报错。

自发布消息删除检测的补充说明

如果仅需要检测应用自身发布的消息被删除的场景,不需要申请额外权限:只要你订阅了对应频道范围的message事件,应用自己发出的消息被删除时,你一定会收到带message_deleted子类型的事件推送。你只需要在应用发送消息成功时,把返回的消息唯一标识ts和对应频道ID做持久化存储,收到删除事件时比对deleted_ts和频道ID,就能精准命中目标场景。

内容的提问来源于stack exchange,提问作者soapergem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:30:54