Repository navigation
[Bug] DWS app创建机器人应用发布和权限挂钩,无法完全自动化,且不会给管理员发通知审批 #590
Copy link
Copy link
Closed as not planned
Description
DWS dev app version publish 审批流程 Bug 报告
环境
- DWS 版本:v1.0.47 (b63e1b4, 2026-07-05)
- 企业:*** (ding***)
- 问题用户:用户A
正常流程(有开发者权限的用户,如用户B)
用户B 在钉钉开放平台有开发者权限,版本发布直接通过,无需审批。
# 1. 创建应用
dws dev app create --name "用户B的HermesBot" --desc "群内智能答疑" --format json --yes
# → unifiedAppId: <app-id>
# 2. 配置机器人
dws dev app robot config --unified-app-id <id> --name "用户B的HermesBot" --mode STREAM --format json --yes
# → configured: true, robotCode: ding***
# 3. 创建版本
dws dev app version create --unified-app-id <id> --desc "启用机器人" --format json --yes
# → versionId: <vid>, versionStatus: INIT
# 4. 发布版本(无需审批)
dws dev app version publish --unified-app-id <id> --version-id <vid> --format json --yes
# → published: true, versionStatus: RELEASE ← 直接成功
# 5. 获取凭证
dws dev app credentials get --unified-app-id <id> --format json
# → appKey + appSecret问题流程(无开发者权限的用户,如用户A)
用户A 无开发者权限,版本发布需要选择审批人。前 3 步相同,第 4 步出现差异:
dws dev app version publish --unified-app-id <app-id> \
--version-id <vid> --format json --yes实际返回(已精简,敏感信息脱敏):
{
"published": false,
"requiresApproval": true,
"publishable": false,
"versionStatus": "INIT",
"approvalMode": "SELECT_APPROVER",
"terminal": false,
"mustAskUser": true,
"message": "版本发布需要选择审批人",
"approvalOptions": [
{"index": 1, "key": "A", "name": "***", "userId": "***"},
{"index": 2, "key": "B", "name": "***", "userId": "***"}
// ... 共 20 位候选人
],
"nextSteps": [{
"command": "dws dev app version publish --unified-app-id <id> --version-id <vid> --approver-user-id <userId> --yes --format json",
"doneWhen": "published=true 或 versionStatus=RELEASE"
}]
}调用链复现
通过非交互式环境(--format json --yes)调用:
DWS <user>: dev app create --name *** --desc ***
DWS result [<user>] exit=2 0b: ← 前3次失败
DWS stderr [<user>]: { ← stderr 不完整
DWS result [<user>] exit=0 269b: {...} ← 第4次成功
DWS result [<user>] exit=0 193b: {...} ← robot config OK
DWS result [<user>] exit=0 106b: {...} ← version create OK
DWS result [<user>] exit=0 7767b: { ← publish 返回审批列表(7767 bytes)
"published": false,
"requiresApproval": true,
...
}
问题总结
| 问题 | 详情 |
|---|---|
--yes 未生效 |
带了 --yes 仍要求交互式选择审批人,自动化场景无法继续 |
| exit=0 但 published=false | 调用方判断 published 为 false,认为发布失败,实际版本停留在 INIT |
无 --approver-user-id 自动化路径 |
nextSteps 提示需要指定审批人,但自动化工具无法预知审批人 ID |
create_app 间歇性失败 |
同一用户、同一参数,前 3 次 exit=2(stderr 不完整),第 4 次 exit=0 |
期望行为
--yes应跳过审批人选择,自动提交审批或自动选第一个可用审批人- 或提供
--approver-user-id auto自动选择任一审批人 create_app失败的 stderr 应完整输出错误原因
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
haofeng0705 commentedon Oct 20, 2026
Hi @Suprock,感谢你提供完整的调用链和返回,理解发布流程卡在审批这一步的困扰。
--yes只确认本次写操作,不会授予开发者权限、绕过审批或自动选择审批人。 你贴出的SELECT_APPROVER/INIT表示仍在等待选人,不能证明审批已提交,也不能据此判断通知失效。--approver-user-id已受支持,候选人的userId就在返回的approvalOptions中;审批人需要由你们明确指定,我们不计划增加自动选第一位或--approver-user-id auto。发布流程
建议先更新。独立安装可使用
dws upgrade;npm 安装可使用npm install -g dingtalk-workspace-cli。本次核对的正式版为 v1.0.64,beta 为 v1.0.65-beta.2。用已有的应用和版本 ID 预检,查看审批要求与候选人:
需要选人时,从
data.approvalOptions[].userId中明确选择一位,再预览本次提交:确认目标、版本和审批人后,把同一命令的
--dry-run换成--yes执行。approvalSubmitted=true/versionStatus=AUDIT/processStatus=UNDER_REVIEW表示已提交、等待审批;published=true/versionStatus=RELEASE才表示已发布。提交后查询状态,不要在审核中重复 publish:
v1.0.58 起,
dev app引入了统一 JSON 结果,业务字段位于data。exit 0 不等于已发布:发布响应的outcome=pending表示仍需选人或等待审批,可结合meta.operation.state判断。check-approval的outcome=success只表示预检完成。返回的后续命令不含--yes,需要确认后再追加。本次本地模拟响应检查还发现:响应未回传 ID,或已提交后仍带选人字段时,CLI 可能报内部错误或误标待选人。因此若返回异常,请先查询真实版本状态并保留完整响应,不要直接重试发布。这些边界情况尚未在你的组织验证。
关于 create 失败和通知
v1.0.47 的 exit 2 属于认证/权限类错误。它的 JSON 错误写在 stderr,是多行内容,第一行就是
{;目前的dev app --format json则把完整失败结果写在 stdout。请确认调用方记录了两个流的完整内容,而不是只取第一行。v1.0.54 的 PR #687 改进了凭证解析及被拒绝后的刷新,但没有足够证据确认这就是你遇到的原因。本次按“审批选人符合设计、不采纳自动选人”关闭,不代表创建失败或提交后无通知已经验证修复。 我们没有在你的组织执行真实创建或审批。如果最新版仍失败,或明确提交后审批人仍未收到通知,欢迎继续回复或另开 Issue,附上版本、操作系统、完整脱敏 stdout/stderr、错误码/追踪号(如有)、提交回执和时间。请不要包含 token、appSecret 等密钥,我们继续按具体阶段排查。