禅道自动记工时
功能
用户说「今天做了xxx,花了x小时」,自动:
- 查询用户所有任务
- 智能匹配:将用户描述匹配到对应的任务
- 向用户确认:匹配结果是否正确
- 确认后自动记录工时:
- 重新登录获取最新有效的
zentaosid(防止过期) - 查询任务当前剩余工时
- 计算新剩余 = 当前剩余 - 本次消耗
- 调用
recordworkhour接口提交 - 返回成功结果
- 重新登录获取最新有效的
配置要求
使用前必须询问用户获取:
ZENTAO_URL- 禅道服务器地址(如https://zentao.example.com/)ZENTAO_ACCOUNT- 登录用户名ZENTAO_PASSWORD- 登录密码
配置保存到 /root/.config/zentao/.env
工作流程
1. 初始化
- 如果配置文件不存在 → 询问用户获取配置
- 如果配置文件存在 → 直接使用
2. 用户输入
用户提供今天做的工作描述(可多个),例如:
我今天做了数据治理的现场对接问题,帮我记录一下工时 2小时
或者:
今天做了:
1. 数据治理现场对接 2小时
2. 需求评审 1小时
3. 匹配任务
- 获取用户所有任务
- 语义匹配工作描述到任务
- 列出匹配结果,向用户确认
- 如果用户说不对 → 重新匹配或让用户指定任务ID
4. 记录工时
确认后,对每个任务:
- 重新登录获取最新
zentaosid(防止过期) - 查询任务当前
left(剩余工时) - 计算
newLeft = left - consumed - 调用接口:
curl -X POST "$ZENTAO_URL/index.php?m=task&f=recordworkhour&taskID=$taskId" \ -H "Content-Type: multipart/form-data" \ -H "X-Requested-With: XMLHttpRequest" \ -b "zentaosid=$SID" \ -F "date[0]=$(date +%Y-%m-%d)" \ -F "consumed[0]=$consumed" \ -F "left[0]=$newLeft" \ -F "work[0]=$workDesc" - 检查返回结果是否
{"result":"success"}
5. 返回结果
汇总所有记录,告诉用户成功/失败
脚本
执行时优先检查 Python 环境,如果有 Python 则使用 .py 版本,否则使用 .sh 版本。
scripts/report.py/scripts/report.sh- 主要执行脚本,处理一条工时记录scripts/match-tasks.py/scripts/match-tasks.sh- 获取所有任务并匹配
接口说明
使用禅道 21.x 开源版正确的 recordworkhour 接口,适配全新 RND UI:
- 接口路径:
index.php?m=task&f=recordworkhour&taskID={taskID} - 需要
zentaosidcookie(每次重新登录获取最新) - 支持指定日期(默认今天)
- 返回 JSON
result: success表示成功
使用示例
用户说:
我今天做了数据治理现场对接,花了2小时
AI:
匹配结果:任务 356 - 数据治理协助(张三),匹配度 100%,确认记录吗?
用户:
可以
AI:
🎉 成功记录!
- 任务 356:2小时,"数据治理现场对接"
- 当前累计:36小时,剩余:28小时
扫码联系在线客服