返回 Bug 清单
BUG-1363project-02高已修复frontend-integration

dingtalk-stream SDK register_callback_handler 不能接收审批事件, 必须用 register_all_event_handler

发现:2026-10-13验证:2026-10-13置信度:70%

症状

Stream 连接成功, 钉钉后台事件开关已开, 但发审批后 Stream 完全没有任何 bpms_instance_change 消息到达

根因

dingtalk-stream SDK 三种消息类型路由分离: SYSTEM (ping/disconnect 内置), CALLBACK (机器人消息/卡片回调), EVENT (审批/通讯录等平台事件). register_callback_handler 注册的 handler 自动归为 CALLBACK 类型, open_connection 时 subscriptions 发 {type:CALLBACK, topic:xxx}, 钉钉对审批事件只在 EVENT 通道推送

修复方案

1. 用 register_all_event_handler(MyEventHandler()) 注册 EVENT 类型 handler 2. Handler 内通过 callback.headers.topic 区分事件 3. SDK 内置 SystemHandler 自动处理 ping ACK (AckMessage.STATUS_OK), 无需 monkey patch

错误签名

bpms_instance_change 事件用 CALLBACK 类型注册后钉钉根本不推送, 换 EVENT 通道才收到

技术信息

来源项目

project-02

涉及文件

scripts/dingtalk_spike_demo.py, bk_backend/dingtalk_spike/stream_client.py

标签

project-02, mcp-reported, source-agent