Files
2026-09-02 11:44:52 +08:00

3.8 KiB
Raw Permalink Blame History

IM 事件任务路由

本页是任务索引,不再混放 16 个 EventKey、输出字段和运维细节。先用上层 SKILL.md 的 Golden Route;只加载当前任务对应的一份子 reference。

消息、reaction、已读和撤回默认使用 `dws event +listen-im` 长连接;

群生命周期、显式 EventKey、Filter DSL、原始 envelope 或底层订阅控制才使用 event consume。不要写轮询脚本。

选择哪一页

任务 Reference
选择 16 个 EventKey、区分 user/group/all 规则、组合底层 consume event-im-keys.md
等待 ready、多事件回滚、bounded consume、退出清理 event-im-lifecycle.md
扁平字段、引用/转发、动作与群成员事件、事件驱动回复 event-im-output.md
Filter、status/stop、重试预算、本地保护与排障 event-im-operations.md

共同硬规则

  • 个人事件使用当前用户 OAuth;解析、consume、status、stop 必须是同一 --profile
  • +listen-im --user-query/--chat-query 在 CLI 内唯一解析;零命中、多候选或分页不完整时, 在创建订阅前停止。底层 fallback 只传真实稳定 ID。
  • 默认 --flatten -f ndjsonstdout 只处理事件,stderr 等待明确 ready marker。
  • 指定目标优先于 *_all;只有用户明确说“全部单聊/全部群消息”才订阅全量事件。
  • 当前用户自己发送的消息会被 self-loop 过滤;自测由另一用户或机器人触发。
  • 事件只负责监听。回复必须使用事件里的真实 conversation_idsender_open_dingtalk_id,禁止把展示名重新做自然查询。

跨页契约索引

以下索引保留跨页必须一致的机器可检验契约;解释、示例和操作步骤仍按上表按需加载:

  • 16 个事件都使用同一 --profile。就绪以 [event] ready 为准;全量事件是 user_im_message_receive_o2o_all / user_im_message_receive_group_all,群生命周期是 user_im_group_updated / user_im_group_member_added / user_im_group_member_exited / user_im_group_disbanded
  • 扁平动作字段包括 reader_open_dingtalk_idrecaller_open_dingtalk_idoperator_open_dingtalk_idreaction_nameoperation_typemembers;媒体 lower fallback 是 dws chat message download-media,外部身份参数是 --open-dingtalk-id
  • 创建失败遵循 Agent/host 的 0/2/1 预算:retryable=false 对应 max_additional_attempts=0retryable=true 对应 max_additional_attempts=2 retryable=unknown 对应 max_additional_attempts=1,并遵守 retry_after_seconds / next_retry_at。这不是 CLI 持久化硬总次数上限;进程内不会自动重试,也不持久化或计算跨调用的 Agent/host 尝试次数。subscribe_id / trace_id 不重置预算,in_flight / cooldown / terminal_hold 不得被并发绕过。
  • open 版保护文件是 ~/.dws/events/open/personal_stream/<identity_hash>/personal_subscription_attempts.json DWS_CONFIG_DIR 可改变根目录。目录权限 0700personal_subscription_attempts.jsonpersonal_subscription_attempts.lock 权限 0600;连续 24h 无失败后重置, terminal_hold1h。紧急恢复只删除 personal_subscription_attempts.json, 不要删除 lock 文件;这会清空该 identity 的全部保护记录。

Schema 边界

  • 业务 payloaddws event schema <event_key> --flatten
  • CLI 参数/安全:dws schema --cli-path "event +listen-im" --compact -f json 或精确 compact consume leaf。
  • --flattenjq_root_path.;兼容 transport envelope 才使用 .data | fromjson