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

7.6 KiB
Raw Permalink Blame History

OA 个人审批事件

先读事件产品入口 SKILL.md 的命令规则、调用流和子进程契约。本参考覆盖当前公开的七个 OA 个人事件:审批实例发起、抄送、终止和完成,以及审批任务创建、完成和转交。

实时监听审批事件必须使用 `dws event consume` 长连接,不要轮询 OA 待办或审批实例列表来模拟事件。

Prerequisite

OA 个人事件使用当前用户 OAuth 登录态。未登录或 token 失效时,先执行:

dws auth login

非默认组织使用全局 --profile <corpId 或 profile 名>。事件范围始终是该 OAuth 用户相关的全部 OA 事件,不需要也不接受审批人、发起人或审批模板选择参数。

Event catalog

事件码 订阅规则 接收语义 必填参数
user_oa_approval_task_created all 审批任务创建,发送给审批人
user_oa_approval_task_finished all 审批任务已完成
user_oa_approval_task_redirected all 审批任务已转交
user_oa_approval_instance_started all 审批实例已发起
user_oa_approval_instance_cc all 审批实例到达抄送节点,发送给被抄送人
user_oa_approval_instance_terminated all 审批实例已终止
user_oa_approval_instance_finished all 审批实例完成,发送给审批单发起人

只承认上表 7 个 OA 事件码。CLI 为每个事件发送 ruleType=allfilterRule={} 的独立订阅请求;不要添加 --user--open-dingtalk-id--group--query--filter-json

Intent mapping

用户说 下一步
“监听新的待我审批任务” / “有审批任务创建时通知我” dws event consume user_oa_approval_task_created --flatten -f ndjson
“审批任务完成时通知我” dws event consume user_oa_approval_task_finished --flatten -f ndjson
“审批任务被转交时通知我” dws event consume user_oa_approval_task_redirected --flatten -f ndjson
“有审批单发起时通知我” dws event consume user_oa_approval_instance_started --flatten -f ndjson
“有审批抄送给我时通知我” dws event consume user_oa_approval_instance_cc --flatten -f ndjson
“有审批单终止时通知我” dws event consume user_oa_approval_instance_terminated --flatten -f ndjson
“监听我发起的审批何时完成” / “审批实例完成时通知我” dws event consume user_oa_approval_instance_finished --flatten -f ndjson
“同时监听全部已公开 OA 事件” 一个 consume 放入七个 OA event key,不加目标或过滤参数
“查看 OA 事件目录” dws event list --category oa
“查看 OA 事件输出字段” 对对应事件运行 dws event schema <event_key> --flatten

三个审批任务事件分别表达任务已创建、已完成和已转交;四个审批实例事件分别表达实例已发起、到达抄送节点、已终止和已完成。statusresult 保留服务端原值,不把当前样本值推断为完整枚举。

Commands

查看稳定的扁平输出 schema

dws event schema user_oa_approval_task_created --flatten
dws event schema user_oa_approval_task_finished --flatten
dws event schema user_oa_approval_task_redirected --flatten
dws event schema user_oa_approval_instance_started --flatten
dws event schema user_oa_approval_instance_cc --flatten
dws event schema user_oa_approval_instance_terminated --flatten
dws event schema user_oa_approval_instance_finished --flatten

单独监听一种事件:

dws event consume user_oa_approval_task_created --flatten -f ndjson
dws event consume user_oa_approval_task_finished --flatten -f ndjson
dws event consume user_oa_approval_task_redirected --flatten -f ndjson
dws event consume user_oa_approval_instance_started --flatten -f ndjson
dws event consume user_oa_approval_instance_cc --flatten -f ndjson
dws event consume user_oa_approval_instance_terminated --flatten -f ndjson
dws event consume user_oa_approval_instance_finished --flatten -f ndjson

同时监听七种事件:

dws event consume \
  user_oa_approval_task_created \
  user_oa_approval_task_finished \
  user_oa_approval_task_redirected \
  user_oa_approval_instance_started \
  user_oa_approval_instance_cc \
  user_oa_approval_instance_terminated \
  user_oa_approval_instance_finished \
  --flatten \
  -f ndjson

多事件 consume 会为七个 event key 分别创建订阅和逻辑 consumer,并共享当前组织的 personal bus、远程连接、stdout 和生命周期。不要给 OA 命令加 --query--filter-json;这两个 flag 只用于兼容的 IM 消息接收事件。

Output contract

--flatten 模式的所有 OA 事件都包含以下顶层字段:

{
  "type": "user_oa_approval_task_created",
  "event_id": "...",
  "timestamp": 0,
  "subscribe_id": "...",
  "process_instance_id": "...",
  "process_code": "...",
  "title": "...",
  "status": "RUNNING",
  "create_time": 0,
  "event_time": 0
}
  • type 是当前 event keyevent_id 可用于去重;timestamp 是 transport 事件发生时间;subscribe_id 标识对应的独立订阅。
  • process_instance_id 是审批实例 ID,可传给 OA 审批命令的 --instance-idprocess_code 是审批流程模板编码。
  • create_timefinish_timeevent_time 都是毫秒时间戳。event_time 是审批业务事件时间,timestamp 是 transport 事件时间。
  • 七类事件的额外字段如下;具体事件始终以 dws event schema <event_key> --flatten 为准。
事件 额外顶层字段
user_oa_approval_task_created task_id
user_oa_approval_task_finished task_idresultfinish_time
user_oa_approval_task_redirected task_idresultfinish_time
user_oa_approval_instance_started
user_oa_approval_instance_cc
user_oa_approval_instance_terminated finish_time
user_oa_approval_instance_finished resultfinish_time

任务完成事件示例:

{
  "type": "user_oa_approval_task_finished",
  "event_id": "...",
  "timestamp": 0,
  "subscribe_id": "...",
  "process_instance_id": "...",
  "process_code": "...",
  "task_id": "...",
  "title": "测试审批",
  "status": "FINISHED",
  "result": "agree",
  "create_time": 0,
  "finish_time": 0,
  "event_time": 0
}
  • task_id 是当前审批任务 ID,可传给接受任务 ID 的 OA 审批命令。
  • statusresult 是服务端字符串;不要只根据当前样本把 RUNNING/FINISHED/TERMINATEDagree/redirect 写成封闭枚举。
  • payload 缺失、为空、缺少对应事件的稳定 ID 或无法解析时,consume 会在 stderr 记录 warning,并把原始 transport envelope 写到 stdout,保证事件不被静默丢弃。
  • 不传 --flatten 时保持兼容 transport envelope,业务 payload 位于 .data | fromjson。需要联调完整原始协议时使用不带 --flatten-f raw--debug-raw-events

Lifecycle

  • 单事件等待 [event] ready event_key=<key> bus_pid=<pid> subscribe_id=<id>
  • 七事件先保存七条 [event] subscription event_key=<key> subscribe_id=<id>,再等待 [event] ready event_count=7 bus_pid=<pid>
  • 临时验证使用 --max-events 1--duration 10m;任务完成后优雅结束 consume,本次新建的订阅会自动取消。
  • 外部停止已有订阅时先运行 dws event stop <subscribe_id> --dry-run,确认后再加 --yes。不要 kill -9,否则会跳过自动退订。