## 项目里程碑到期提前提醒 {.case data-case-id="016"}

| 字段 | 值 |
| --- | --- |
| 案例编号 | `016` |
| 行业 / 部门 | 互联网 / 项目管理 |
| 角色 | 项目经理 |
| 难度 | `入门` |
| 调用来源 | `schedule`（定时由获授权 Agent 经 App/Extension 查询项目系统里程碑） |

<!-- slot: 目标 -->
里程碑到了才发现没准备好、团队加班赶工。目标：定时让获授权 Agent 查询项目系统的里程碑列表，找出即将到期的项，按"查询失败、本期无到期、即将到期"三种结果分别给出可见回执，命中时通知团队频道并标明负责人（受控令牌）与剩余天数。指标：到期前已登记（剩余 ≥ 7 天）的里程碑 100% 在到期前被通知到，首次通知中位提前量 ≥ 6 天；新登记且首次检查时已不足 7 天的项 100% 单独标注实际剩余天数发出。

<!-- slot: 边界 -->
- **覆盖**：定时查询里程碑、按三种结果出回执、即将到期时通知频道并标明负责人（受控令牌）与剩余天数。
- **不覆盖**：自动调整里程碑日期、自动追踪任务完成度、跨项目里程碑协调、自动写回项目系统。
- **假设**：有一个经授权能查询项目系统里程碑的 Agent（通过 App/Extension）；里程碑含名称、到期日、负责人受控令牌。

<!-- slot: 提示词 -->
把下面这段发给 Loop，它会在后台帮你创建这个 Workflow：

```text
帮我创建一个 Workflow：每日定时（含节假日，保证长假不漏扫）由获授权的查询 Agent 经 App/Extension 读取项目系统的里程碑列表（含名称、到期日、负责人受控令牌），找出 7 天内到期的项。App/Extension 在读取侧即完成聚合，Agent 只接收里程碑名称、到期日与负责人受控令牌（权限受控且 Agent 无法反查原值）等白名单字段，不带出联系方式等个人字段。
触发：定时（计划）发起调用，调用时带入团队频道与查询 Agent。
结果分三类处理：
  即将到期：通知团队频道，附里程碑名称、负责人受控令牌、剩余天数；新登记且首次检查时已不足 7 天的项，单独标注"首次注意时仅剩 N 天"，不与正常提前量混算，并留审计时间戳。
  本期无到期：发一条"本期无到期"汇总回执并留时间戳，不要静默结束。
  查询失败（项目系统不可达或数据陈旧）：告警失败、留审计时间戳，按重试上限重试，仍失败则升级到值班频道。
审批：不涉及审批，到期提醒是低风险信息，直接触达。
异常：查询 Agent 回传不合结构就停在等待点等它重新提交，不自动重跑；通知发送失败按重试上限重试，仍失败则升级到值班频道并保留待发内容供人工补发。
完成：三类结果各自出回执后结束。
```

<!-- slot: 流程 -->
![案例 016 里程碑到期提醒：定时让获授权 Agent 查询项目系统里程碑；查询失败留审计并重试升级，本期无到期发汇总回执，即将到期通知频道并标明负责人与剩余天数，新登记滞后项单独标注，均留审计时间戳](../../../media/cases/fig-case-016-01-flow.svg){#fig-case-016-01 width=94%}

如上图所示，正常路径与异常同时可见，三种结果都有可见回执：

1. **定时触发**：计划到点（每日，含节假日）发起一次调用，带入团队频道与查询 Agent。
2. **查询里程碑**：获授权 Agent 经 App/Extension 读取项目系统的里程碑列表并回传；回传结构不合要求时停在原等待点，等其重新提交，不自动重跑。
3. **三种结果分流**：
   - **查询失败**：项目系统不可达或数据陈旧，告警失败并留审计时间戳，按重试上限重试，仍失败则升级到值班频道。
   - **本期无到期**：发一条汇总回执并留时间戳，不静默结束。
   - **即将到期**：通知团队频道，附里程碑名称、负责人受控令牌与剩余天数；新登记且首次检查时已不足 7 天的项单独标注"仅剩 N 天"，并留审计时间戳。

<!-- slot: 配置 -->
你不需要手写代码或配置。把上面的提示词发给 Loop，AI 会理解意图、在后台画出这个"定时查询 + 三路分流"流程——它知道"查里程碑"需要一个发消息并等待回调的 Agent 环节、"分三种结果"需要一个条件路由、"通知与回执"各需要一个发消息环节。AI 还会在后台校验流程结构是否完整，你不必关心这些技术细节。

<!-- slot: 异常 -->
- **项目系统查询失败或数据陈旧**：不当作"本期无到期"或静默结束，而是告警失败、留审计时间戳，按重试上限重试；仍失败则升级到值班频道由人工确认。
- **即将到期但通知发送失败**：按重试上限重试投递；超过上限则升级，并保留待发内容供人工补发。
- **本期无到期（结果为 0）**：仍发一条汇总回执并留时间戳，让"没消息"变成可核验的记录，而不是无声结束。
- **查询 Agent 回传不合结构**：本次完成请求被拒绝，停在等待点等其修正后重新提交，不自动重跑。
- **里程碑登记得太晚**：若某里程碑登记时距到期已不足 7 天，本流程保证不了 7 天提前量，会按实际剩余天数通知并标注"仅剩 N 天"，让你看到滞后、单独跟进，而不是假装提前量达标。

<!-- slot: 审批 -->
本案例不涉及审批。里程碑到期提醒是低风险信息，应第一时间触达团队；因此不设 `request_approval` 环节，三种结果直接出回执。

<!-- slot: 外部系统 -->
本工作流的里程碑查询由获授权 Agent 通过 App/Extension 完成，工作流本身不直接调用外部系统。团队频道作为调用输入提供；项目系统的访问凭据用 `<token>` 占位，由 Agent 运行时从密钥引用。进入 Agent 消息、Run/Activation/Effect 记录与 App/Extension 工具日志的字段以白名单为准（仅令牌化/白名单字段，原值不进入以上任何一层），可回溯个人的字段（姓名/邮箱/证件/联系方式等）在源头即被令牌化/伪名化，并按 10% 抽查四层实际记录。项目系统不可达或里程碑列表陈旧属于查询失败，走上面的失败回执与升级，不当作"本期无到期"。

<!-- slot: 验收 -->
- **回放集与基准**：取最近 50 个历史里程碑（含登记日期、到期日、负责人令牌），人工基准答案为按到期日排序的应通知清单与理想提前量；每日（含节假日）全量回放并记录扫描、通知时间戳。
- **分母与口径**：提前量覆盖率分母为"到期前 7 天已登记"的里程碑数；新登记且首次检查时剩余 < 7 天的项单独计数，不并入提前量统计。
- **指标**：到期前 7 天已登记的里程碑 100% 在到期前被通知，首次通知中位提前量 ≥ 6 天；新登记滞后项 100% 标注实际剩余天数发出；查询失败 100% 出回执不静默。
- **抽样**：每周抽查 5 条通知，核对里程碑名称、负责人令牌、剩余天数与项目系统一致。
- **源头脱敏**：进入 Agent 消息、Run/Activation/Effect 记录与 App/Extension 工具日志的字段 100% 在白名单内（仅令牌化/白名单字段，原值不进入以上任何一层），并按 10% 抽查四层实际记录。

### 复用与变体
- **同构迁移**：合同到期提醒、发票截止提醒、培训报名截止提醒、证书续期提醒。
- **分级路由**：P0 里程碑发到值班频道并单独提醒负责人，普通里程碑汇总成一条周报发到项目群。
- **写回项目系统**：在通知后再加一个 Agent 环节，由获授权 Agent 经 App/Extension 把"已提醒"状态写回可信的项目系统（仅提醒标记这一业务维度），以里程碑编号加日期为稳定幂等键、响应未知先查后写，配有限重试、升级、待处理与审计。

<!-- slot: 媒体槽位 -->
<!-- media: fig-case-016-01-flow.svg -->
