| name | feishu-cli-approval |
| description | 飞书审批操作(查询 + 写入)。读:definition detail / instance get / task query。 写:instance {create,cancel,cc} + task {approve,reject,transfer}。 instance get、task query、instance cancel/cc、task approve/reject/transfer 需要 User Token; instance create 使用 tenant_access_token。 当用户请求"提交审批"、"审批通过/拒绝"、"撤回审批"、"转交审批"、"抄送"、"审批查询"时使用。 |
| argument-hint | instance get/create/cancel/cc | task query/approve/reject/transfer | definition detail |
| user-invocable | true |
| allowed-tools | Bash(feishu-cli approval:*), Bash(feishu-cli auth:*), Read, Write |
飞书审批技能(查询 + 写入)
通过 feishu-cli 完成审批全生命周期:查询审批定义 / 审批实例 / 待办任务,发起 / 撤回 / 抄送审批实例,通过 / 拒绝 / 转交审批任务。
feishu-cli:如尚未安装,请前往 riba2534/feishu-cli 获取安装方式。
核心概念
飞书审批由四级对象组成,命令按对象分组:
| 对象 | 说明 | 唯一 ID | CLI 子命令 |
|---|
| definition | 审批定义(审批流模板,行政/财务后台配置) | approval_code | approval get |
| instance | 审批实例(一次具体的发起,绑定一个 definition + 一份 form) | instance_code | approval instance {get,create,cancel,cc} |
| task | 审批任务(实例分发到每个审批节点上的待办) | task_id | approval task {query,approve,reject,transfer} |
| cc | 抄送(把实例送到其他用户阅知,非审批节点) | — | approval instance cc |
生命周期:get definition → 提交 form 触发 instance create → 节点用户 task approve/reject → 发起人可中途 instance cancel 或 instance cc 抄送他人。
身份说明(Token 策略)
approval get 与 approval instance create 使用 Tenant Token(应用身份),依赖本地 app_id/app_secret 换取 tenant_access_token。approval instance get、approval task query、approval instance cancel/cc、approval task approve/reject/transfer 使用 User Token,必须先 auth login。
所需 scope
| 命令 | scope | Token 类型 |
|---|
approval get | approval:approval:readonly | Tenant 即可 |
approval instance get | approval:instance:read | User Token 必需 |
approval task query | approval:task:read | User Token 必需 |
approval instance create | approval:approval | Tenant |
approval instance {cancel,cc} | approval:instance:write | User Token 必需 |
approval task {approve,reject} | approval:task:write | User Token 必需 |
approval task transfer | approval:task:write | User Token 必需 |
feishu-cli auth check --scope "approval:task:read approval:instance:read approval:instance:write approval:task:write"
feishu-cli auth login --scope "approval:task:read approval:instance:read approval:instance:write approval:task:write offline_access"
命令速查
读
feishu-cli approval get <approval_code>
feishu-cli approval get <approval_code> --output raw-json
feishu-cli approval task query --topic todo
feishu-cli approval task query --topic done
feishu-cli approval task query --topic started
feishu-cli approval task query --topic cc-unread
feishu-cli approval task query --topic cc-read
feishu-cli approval instance get --instance-code <ic>
feishu-cli approval instances get --instance-code <ic> --output raw-json
写(v1.23+ 新增)
feishu-cli approval instance create \
--approval-code <code> \
--user-id ou_xxx \
--form-file form.json
feishu-cli approval instance cancel \
--instance-code <ic>
feishu-cli approval instance cc \
--instance-code <ic> \
--cc-user-ids ou_a,ou_b \
--comment "请知悉"
feishu-cli approval task approve \
--instance-code <ic> --task-id <task> \
--comment "同意"
feishu-cli approval task reject \
--instance-code <ic> --task-id <task> \
--comment "金额超预算"
feishu-cli approval task transfer \
--instance-code <ic> \
--task-id <task> \
--transfer-user-id ou_target \
--comment "请代审"
关键 flag
--approval-code(instance create 必填)
审批定义 code,可从 approval get 输出或飞书后台审批管理页 URL 拿到。CLI 会先用 isValidToken 校验格式。instance cancel/cc 与 task approve/reject/transfer 走官方 uat_* 用户态接口,只需 --instance-code(task 系列额外要 --task-id),不接收 --approval-code。
--user-id + --user-id-type
instance create 中表示发起人用户 ID,默认 --user-id-type open_id(ou_xxx),create endpoint 仅支持 open_id / user_id,不支持 union_id。
官方 uat_* 的撤回、抄送、通过、拒绝会按当前 User Token 身份执行,不再传 --user-id。task transfer 的 --transfer-user-id 表示被转交人,--user-id-type 用于说明这个 ID 的类型。
--form 与 --form-file
instance create 支持 --form / --form-file 二选一;task approve 支持 --form 直接传 JSON 字符串;task reject 不支持 form(官方 uat_reject schema 没有该字段)。
form 必须是 JSON 数组,否则 CLI 在客户端先报 "表单数据必须是 JSON 数组,解析失败"。每个元素对应审批定义中的一个 widget:
[
{"id": "widget_1", "type": "input", "value": "差旅报销 1500"},
{"id": "widget_2", "type": "number", "value": 1500},
{"id": "widget_3", "type": "textarea", "value": "上海出差 3 天"}
]
widget 的 id / type 从 approval get --output raw-json 的 form 字段读,不要手编。常见 type:input / textarea / number / radio / checkbox / date / attachmentV2 / fieldList(明细控件,value 是数组的数组)。
--cc-user-ids(instance cc 必填)
逗号分隔列表,例如 ou_a,ou_b,ou_a。CLI 通过 parseCommaSeparatedIDs 自动 trim + 去重,保留首次出现顺序,所以重复传同一个 ID 只会抄送一次。空字符串会被过滤。
--comment(可选,approve/reject/transfer/cc 共用)
审批意见 / 抄送备注。task reject 建议必填拒绝原因;task approve 通常可省;task transfer 可写明转交原因。
--open-chat-id(仅 instance create)
审批结果推送到的群 ID,发起后自动在该群发卡片更新审批状态。可选。
--user-access-token
覆盖 token 解析链最顶端。多数情况无需指定,自动从 ~/.feishu-cli/token.json 读已登录态。
完整用例
例 1:从零到通过一条报销审批
feishu-cli auth login --scope "approval:task:read approval:task:write approval:instance:read approval:instance:write offline_access"
feishu-cli approval get 7AB12C... --output raw-json | jq '.form'
cat > /tmp/form.json <<'EOF'
[
{"id": "widget_1", "type": "input", "value": "差旅报销"},
{"id": "widget_2", "type": "number", "value": 1500}
]
EOF
feishu-cli approval instance create \
--approval-code 7AB12C... \
--user-id ou_self \
--form-file /tmp/form.json
feishu-cli approval task query --topic todo
feishu-cli approval task approve \
--instance-code 8XY99Z... \
--task-id 99TASK... \
--comment "同意"
feishu-cli approval instance get --instance-code 8XY99Z... --output json
例 2:发起后撤回 + 抄送
feishu-cli approval instance cancel \
--instance-code <ic>
feishu-cli approval instance cc \
--instance-code <ic> \
--cc-user-ids ou_a,ou_b,ou_a \
--comment "供参考"
feishu-cli approval task transfer \
--instance-code <ic> --task-id <task> \
--transfer-user-id ou_target \
--comment "请代审"
踩坑
| 问题 | 原因 | 解决 |
|---|
表单数据必须是 JSON 数组,解析失败 | --form 传了 {...} 对象 | 包成数组 [{...}],飞书 form 顶层永远是数组 |
--cc-user-ids 重复 ID 抄送多次 | 不会,CLI 已去重(parseCommaSeparatedIDs) | 如需多次提示,多次执行 instance cc |
task approve 返回 forbidden | 当前登录用户不是节点审批人 / scope 不足 / 实例已结束 | 先 task query --topic todo 确认 task 还在,并确认当前 auth login 用户就是审批人 |
instance cancel 失败 | 当前登录用户不是发起人 / 实例已审批完成 | 只有发起人能撤;已通过/拒绝的实例无法撤 |
widget id 找不到 | 手编 ID,没对上后台定义 | 先 approval get --output raw-json 看 form 字段 |
auth login 没传 offline_access | token 1h 后过期不能自动刷新 | 重新 login 显式加 --scope "... offline_access",Device Flow 已自动注入但确认下 |
| User Token 缺失 | 当前命令走官方 uat_* 用户态接口 | 先 feishu-cli auth login,或显式传 --user-access-token |
输出格式
写命令默认输出单行成功摘要:
审批实例已创建
instance_code: 8XY99Z...
读命令 approval get / approval instance get / task query 支持:
- 不传
--output:人类可读文本摘要
--output json:CLI 归一化 JSON
--output raw-json:飞书 API 原始响应(拿 widget 结构 / debug 必备)
approval instance create 和 approval task transfer 都支持 --output json(两者对齐,便于脚本消费返回字段);其他写命令输出文本状态,失败时返回非 0。
不在本技能范围
| 需求 | 走哪里 |
|---|
| 审批流可视化设计(拖拽节点、配置审批人、设置可见范围) | 飞书后台「审批管理」Web UI,CLI 不覆盖 |
退回 / 加签 / 催办(tasks/rollback / add_sign / remind) | 当前官方可执行 schema 未开放,按需走后续 PR |
| 审批回调订阅 / Webhook 处理 | 不属于 CLI 职责,走开放平台事件订阅 |
| 审批结果通知到群(消息卡片) | instance create --open-chat-id <chat> 内置;或 feishu-cli-msg 发自定义卡片 |
| 给审批文档评论 / 加权限 | feishu-cli-perm / 评论命令;审批本身不挂在云文档体系 |
相关 skill
/feishu-cli-auth — OAuth 登录、scope 预检、token 状态
/feishu-cli-toolkit — 综合查询入口(也有 approval get / task query 速查段)
/feishu-cli-msg — 审批结果二次通知到群 / 个人