feat: 统一阶段通知模板并支持逐项提醒负责人

This commit is contained in:
liyun committed 2026-09-29 20:05:30 +08:00
1 parent 1d85de4c7c
commit 3fb9c0658d
10 files changed
+301 -58

No files matched your search

@@ -28,21 +28,47 @@ Windows 优先用 `.ps1`,须同时部署共用启动器 `dingtalk-python.ps1`
## 日常发送
```text
python scripts/dingtalk_notify.py progress milestone "**已完成**:阶段成果已确认并归档。下一步安排联调。"
python scripts/dingtalk_notify.py progress blocked "缺少接口说明,请补充后回自己的角色会话同步。" --at "完整姓名"
python scripts/dingtalk_notify.py message --title "资料补充提醒" --text "请补齐已约定资料,并回自己的角色会话确认。" --at "完整姓名"
python scripts/dingtalk_notify.py progress milestone --stage "阶段八:复盘结项" "**已确认的进展**
- 相关负责人已确认:产品验收材料已在线下完成,业务已确认客户验收通过。
- 项目已进入资料归档与复盘结项阶段,目前开始整理结项资料,项目尚未关闭。
- 已通知相关负责人进行阶段交接,不新增审批。
**待办事项**
- 结项资料整理:由 Hub 整理四类结项工作稿。
- 资料补充:由产品 Agent、业务 Agent 补充现有线下成果及确认索引,不重做验收。
- 旧事项停止:由 Hub 停止此前的验收准备催办。
- 结项确认:四类成果具备后,由 Hub 请 @{示例负责人} 确认结项,确认后再锁定成果。
- 本轮工作范围:不新增应用修复、设备测试或发布验证。
**遗留**
- 原测试不通过的结果如实保留,不因进入结项阶段改为通过。
- 已接受延期的问题如实保留,后续沿用 Bug 系统中的记录和已有处理安排继续跟进。" --at "示例负责人"
python scripts/dingtalk_notify.py progress blocked --stage "阶段三:方案设计" "**待办事项**
- 方案设计:请 @{示例甲} 补充接口说明,并回自己的角色会话同步;接口说明缺失影响方案确认。" --at "示例甲"
python scripts/dingtalk_notify.py message --title "阶段三:方案设计|资料补充提醒" --text "**待办事项**
- 方案设计:请 @{示例甲} 补齐已约定的接口资料,并回自己的角色会话确认。" --at "示例甲"
```
事件仍只有 `start`、`milestone`、`blocked`、`complete`、`failed`。脚本增加项目名、中文标题、带时区时间和自动汇报说明,不替 Hub 判断阶段。保留 DWS 的 AI 标识,不能冒充负责人本人批准或承诺。
以上结项场景、事项和姓名仅作格式演示;验收结论、成果数量、延期安排和确认人不作为其他项目的默认事实或要求。真实发送须使用当前项目的有效记录和已绑定负责人姓名。
事件仍只有 `start`、`milestone`、`blocked`、`complete`、`failed`。`progress` 必须传入 `--stage`,值为 Hub 从当前项目记录取得的阶段编号及中文名称;未登记编号时仅使用已知名称。脚本生成“项目名称|阶段编号:阶段名称”、带时区时间和自动汇报说明,不推断阶段、不把阶段写进固定配置。阶段缺失、空白、包含控制字符或超过 200 字时停止,不发送泛称“阶段里程碑”的通知。保留 DWS 的 AI 标识,不能冒充负责人本人批准或承诺。
旧调用需补充 `--stage`,并同步更新目标 Hub 项目的脚本、Skill 和 Hook;仓库修改不等于目标项目已经部署。正文由 Hub 按[通知写法](dingtalk-progress-reporting.md#消息写法)组织“已确认的进展”“待办事项”“遗留”三个栏目,待办用“事项名称:由谁做什么”逐条编写。脚本生成加粗标题、时间与自动汇报说明,原样保留正文的条件、范围、顺序和完成状态,仅转换指定的 @ 标记,不自动拆句、推断责任人或追加任务。较长通知优先使用 `--file`,文件只保存三个栏目的正文。
- 多行中文 Markdown 作为一个参数传入;较长摘要可先保存成 UTF-8 文件,再用 `--file "实际正文文件路径"` 替代摘要或 `--text`。文件须实际存在,路径相对工作目录;这是正文,不是上传附件,不发送大段成果或日志。
- `progress` 和 `message` 均支持 `--at`,多个姓名可逗号分隔或重复传入。负责人姓名来自 Etunel 已绑定的 `member_alias`,不把角色名称当姓名;人员查询和发送固定使用初始化账号,不跟随默认账号切换。
- 在待办或遗留条目中使用 `@{完整姓名}`,并在 `--at` 中列出同一姓名;脚本在该位置生成原生 @,不把已原位提及的人再追加到末尾。只传 `--at` 而未在正文指定位置的人仍追加到末尾。多人可分别放在各自事项中,同一人重复出现时只查询一次、发送接收人去重。缺少配对姓名或标记不完整时停止,不把普通文字 @ 当成原生提醒。
- 脚本只接受唯一姓名匹配,自动构造个人消息所需的 `openDingTalkId` 和提及标记。查不到、重名或权限不足时停止,不让负责人手填编号,不删掉 @ 降级发送。
- 默认且仅发配置的项目群。同一事项合成一条,事件通知可直接 @ 人,不额外重复提醒。提醒讨论结果回各自角色会话,不在群里另派任务或批准。
## 检查与结果
排障可用 `python scripts/dingtalk_notify.py check --at "完整姓名"`,省略 `--at` 只查登录;它联网但不发送,不是每轮必做。两个发送入口加 `--dry-run` 可完全离线预览,不查人、不验证目标或 @ 效果。
排障可用 `python scripts/dingtalk_notify.py check --at "完整姓名"`,省略 `--at` 只查登录;它联网但不发送,不是每轮必做。两个发送入口加 `--dry-run` 可完全离线预览,条目中的标记显示为“@姓名”;不查人、不验证目标或 @ 效果。
- `initialized`:已创建经确认的个人通知配置,未发送。
- `accepted`:真实个人发送响应成功且含非空 `openTaskId`,请求已接受,不等于已投递、已读或接收端提醒成功。保留回执供排障,面向负责人只说中文结果。