7.2 KiB
7.2 KiB
name, description
| name | description |
|---|---|
| zentao-ai-channel | 禅道 AI 通道接口技能(生产环境直连)。封装禅道 AI 通道的三个接口: ①评估结果提交(工作量指标/验收标准写入需求扩展信息); ②AI 批量创建任务(为需求批量建研发/测试任务,重名自动跳过); ③文件上传并绑定(PRD/代码审查报告/工作日志/测试文档/会议纪要等上传到需求或会议)。 三个接口可在需求生命周期中组合使用,也可独立调用任意一个。 触发关键词:提交评估结果到禅道、禅道批量建任务/拆任务、上传文档到禅道/绑定需求、 代码审查报告上传、验收标准提交、/zentao |
zentao-ai-channel
定位
禅道系统(ITSM)AI 对接通道的统一入口。所有调用通过客户端脚本完成:
python .agents/skills/zentao-ai-channel/zentao_client.py <子命令> [参数...]
子命令与接口一一对应,可独立使用:submit(接口一)、batch-add-tasks(接口二)、upload(接口三)。
接入信息(公共)
- Base URL(生产):
https://itsm.sino-assist.com/zentao(脚本默认值,可用环境变量ZENTAO_BASE_URL覆盖) - 鉴权:请求头
Authorization: <token>,直接放 token 原文,不要加 "Bearer " 前缀。令牌为 ai 账号永久令牌,已内置在脚本中,可用环境变量ZENTAO_AI_TOKEN覆盖 - 统一响应:
{"code": 0, "message": "成功", "data": {...}};code=0成功,code=-1失败(message 为失败原因) - 令牌问题排查:
请登录= 未带或无效 token;该接口仅AI框架通道可用= 非 ai 账号令牌
接口一:评估结果提交(submit)
POST /zt-story-expand/saveOrUpdate — 需求评估完成后,将工作量评估指标与验收标准写入需求扩展信息。同一需求重复提交 = 覆盖更新(幂等)。
python .agents/skills/zentao-ai-channel/zentao_client.py submit \
--story-id <需求ID> \
--number-units <S> \
--b <单元业务复杂度B> \
--ft <技术复杂度系数F(T)> \
--ga <AI效率系数G(A)> \
--w <评估工时W,人日> \
--status <inProgress|finished> \
[--completion-degree <0~100>] \
[--acceptance-criteria <Markdown文本> | --acceptance-criteria-file <md文件路径>] \
[--product-person <中文名>] [--develop-person <中文名>] [--test-person <中文名>]
注意事项:
storyId为空时接口返回成功但不处理——务必确认已传--status finished会锁定记录(后续提交被拒绝,提示"该需求已完成,不可再修改")并结算当月工作量;未确认完成前一律用inProgressfinished时完成度由服务端自动置 100,无需传--completion-degree- 验收标准为可选;若 Spec 工作区存在
02_acceptance产物,建议用--acceptance-criteria-file一并提交
接口二:AI 批量创建任务(batch-add-tasks)
POST /zt-task/aiBatchAdd — 为指定需求批量创建研发/测试任务。
python .agents/skills/zentao-ai-channel/zentao_client.py batch-add-tasks \
--story-id <需求ID> \
--tasks-json '[{"name":"后端接口开发","type":"devel","desc":"实现 xx 接口","assignedTo":"zhangsan","aiEvaluationTime":8,"planStartDate":"2026-08-10","deadline":"2026-08-11"},{"name":"接口测试","type":"test","aiEvaluationTime":4}]'
tasks[] 字段:
| 字段 | 必填 | 说明 |
|---|---|---|
| name | 是 | 任务名称 |
| type | 是 | devel=开发 / test=测试,其他值整批拒绝 |
| desc | 否 | 任务描述,写入任务描述 |
| assignedTo | 否 | 指派人登录账号(非中文名) |
| aiEvaluationTime | 否 | AI 评估工时(小时),写入任务预计工时 |
| planStartDate / deadline | 否 | 日期格式 yyyy-MM-dd |
注意事项:
- 整批拒绝:任一任务不合法(类型错误/名称为空/日期格式错误),本批全部不创建
- 需求状态拦截:需求为 已发布(含待验收/验收不通过,其 status 均为
released)/ 已完成(验收通过,finished)/ 已关闭(closed)时整批拒绝,报错"需求已发布/已完成/已关闭,不允许创建任务"(仅 AI 通道拦截,人工拆任务不受此限) - 防重:同需求下已存在同名同类型(未删除)任务 → 跳过并记入响应
skipped,不算失败;全部命中防重时返回code:0, created:0 - 新任务初始状态"未开始",创建人显示为 ai;响应
data.taskIds为新建任务 ID 列表
接口三:文件上传并绑定(upload)
POST /common/uploadBind(multipart/form-data)— 上传文件并一步绑定到需求/会议,页面即时可见,操作记录留痕。
python .agents/skills/zentao-ai-channel/zentao_client.py upload \
--file <文件路径> \
--object-type <见下表> \
--object-id <需求ID或会议ID> \
[--title <文件标题>] \
[--review-result <pass|reject>] # 仅 aiCodeReview 有效
--object-type 对照表:
| objectType | 含义 | 绑定后效果 |
|---|---|---|
| story | 需求文档(PRD 等) | 需求文档链接更新 |
| aiCodeReview | 代码审查报告 | 审查报告链接更新;带 --review-result 时同步审查状态 |
| aiWorkLog | 工作日志 | 工作日志链接更新 |
| aiDocUpdate | AI 项目文档更新记录 | 更新记录链接更新 |
| testCase | 测试用例 | 测试用例链接更新 |
| testReport | 测试报告模版 | 报告模版链接更新 |
| testReportSubmit | 测试报告提交 | 报告提交链接更新(SOP 流程卡点依据) |
| testOther | 其他测试文档 | 其他文档链接更新 |
| meeting | 会议纪要 | 会议纪要链接更新(object-id 填会议 ID) |
注意事项:
- 同一对象同一类型可多次上传形成文件列表,业务对象链接字段始终指向最新一份
- objectType/objectId 错误、对象不存在均会拒绝且不落盘
- 响应
data.url为相对路径,拼在系统域名后即可访问
组合使用(需求生命周期动线)
三个接口常在同一会话按序使用,但每步都可独立执行:
- 需求评估完成 →
submit(status=inProgress)→ 可用upload --object-type story上传 PRD - 进入开发 →
batch-add-tasks拆分研发/测试任务 - 过程中 →
upload上传审查报告(aiCodeReview + review-result)、工作日志(aiWorkLog)、测试文档(testCase/testReportSubmit 等) - 需求完成 →
submit(status=finished,锁定,最后一步执行)
常见错误速查
| code | message | 处理 |
|---|---|---|
| -1 | 请登录 | 检查 Authorization 头 / token |
| -1 | 该接口仅AI框架通道可用(需ai账户token) | 换用 ai 账号令牌(脚本默认已内置) |
| -1 | 该需求已完成,不可再修改 | 需求已 finished 锁定(接口一) |
| -1 | 需求不存在:xxx / 会议不存在:xxx | 核对 storyId / objectId |
| -1 | uploadBind不支持的objectType:xxx | 对照接口三取值表 |
| -1 | 任务类型仅支持devel/test:xxx | 修正 tasks[].type(接口二) |
| -1 | 日期格式错误,应为yyyy-MM-dd:xxx | 修正日期格式(接口二) |