钉钉个人 IM 事件监听
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_fccf428b/dingtalk-event。
技能介绍
解决什么问题
钉钉的很多状态变化不会长期保留在普通聊天记录里:消息被已读、被撤回、收到表情回应,或者成员加入、退出、群标题变更、群解散,往往只在事件发生时可见。用轮询或“查聊天记录”的方式模拟,要么拿不到准确时间,要么会持续请求接口、容易触发风控。这个技能把个人 IM 事件当作长连接事件流来处理,适合做实时提醒、自动回复、群生命周期统计和 Agent 触发源。
技能如何工作
核心命令是 dws event consume:它通过 DWS bus 建立当前用户的个人 Stream 长连接,订阅指定事件,并把事件以 NDJSON 写到 stdout。常用流程如下:
- 先从用户意图选择事件码,而不是运行
dws event list当菜单。 - 人名先用
dws aisearch person解析 userId;群名先用dws chat search解析 openConversationId;多候选必须让用户确认。 - 了解输出字段时运行
dws event schema <event_key> --flatten,从schema.properties编写解析逻辑。 - 启动
dws event consume <event_key>... --flatten -f ndjson;单事件等待[event] ready,多事件先记录每条[event] subscription,再等待最终 ready。 - 需要确认订阅时运行
dws event status --event <event_key>。
覆盖的 16 类事件包括被 @、单聊/群聊消息、指定发送人消息、全部单聊/群消息、已读、撤回、表情回应,以及群标题变更、成员加入、成员退出、群解散。--user 与 --open-dingtalk-id 严格二选一;企业内部用户优先 --user,外部联系人或机器人使用 --open-dingtalk-id。同一用户或同一群的兼容事件可以放在同一个 consume 命令里;用户类与群类事件不能混在同一命令。消息接收类事件可共享 --query / --filter-json,已读、撤回、表情回应和群生命周期事件不能使用消息过滤参数。
适用边界与注意点
这个技能只处理当前用户在个人 IM 场景下的事件,不覆盖应用凭证模式、机器人身份或其他组织管理事件。bus 后台进程持有个人 Stream;consume 只读事件,回复消息要另用 dws chat message send。自己发出的消息不会回传,边监听边回复不会形成回环。监听非默认组织必须传 --profile。停止监听应先 dws event stop <event_key> --dry-run 预览,再确认后加 --yes,避免残留订阅;不要直接 kill -9。涉及自动回复、外部写入、个人信息或群解散测试时,要先展示目标和影响并取得明确确认。
使用场景
- 当单聊中有人撤回消息时,需要按撤回事件触发告警并记录撤回者和时间。
- 需要监听自己所在指定群的成员加入或退出,用于维护群成员变动记录。
- 当收到指定同事发来的消息时,要按发送人过滤事件并驱动后续处理流程。
- 需要监控指定单聊中自己消息的已读状态,用于判断对方是否已查看回复。
适合人员
- 需要在值班群中按被 @ 消息自动创建跟进任务的运维值班人员。
- 需要把钉钉单聊已读状态同步到内部系统的客户成功工程师。
- 需要按群成员加入事件自动添加成员到知识库权限的团队管理员。
- 需要消费钉钉消息事件并触发自动回复逻辑的 Agent 后端开发者。