140 lines
3.8 KiB
Markdown
140 lines
3.8 KiB
Markdown
# 04_定时提醒
|
|
|
|
## 1. 模块目标
|
|
|
|
定时提醒模块负责创建一次性或固定周期提醒,到点生成通知、发送飞书消息、按需接收反馈,并记录触发结果和失败原因。
|
|
|
|
## 2. 第一版做什么
|
|
|
|
1. 支持一次性提醒。
|
|
2. 支持每天、每周、每月固定周期提醒。
|
|
3. 支持提醒来自手动创建。
|
|
4. 支持提醒来自老板 AI 草稿确认。
|
|
5. 支持提醒与事项关联。
|
|
6. 到点后通知接收人。
|
|
7. 通知成功或失败都要记录。
|
|
8. 支持查看自己相关提醒状态。
|
|
9. 创建人、发起人、管理员可以修改、暂停或取消提醒。
|
|
10. 提醒可以设置是否需要接收人反馈。
|
|
|
|
## 3. 第一版不做
|
|
|
|
1. 不做 cron 表达式。
|
|
2. 不做自定义复杂周期规则。
|
|
3. 不做日历系统。
|
|
4. 不做复杂自动化流程。
|
|
5. 不自动操作外部系统。
|
|
6. 不从 AI 工作台结果生成提醒。
|
|
|
|
## 4. 核心流程
|
|
|
|
创建提醒:
|
|
|
|
```text
|
|
手动创建或草稿确认
|
|
-> 后端校验创建权限
|
|
-> 写入 reminders
|
|
-> 计算 next_trigger_at
|
|
-> 写 operation_logs
|
|
```
|
|
|
|
触发提醒:
|
|
|
|
```text
|
|
scheduler 扫描 due reminders
|
|
-> 校验提醒状态
|
|
-> 生成幂等键
|
|
-> 创建 notifications
|
|
-> 调用飞书发送
|
|
-> 更新 last_triggered_at 和 next_trigger_at
|
|
-> 成功或失败都写记录
|
|
```
|
|
|
|
反馈:
|
|
|
|
```text
|
|
接收人点击卡片反馈
|
|
-> 飞书回调验签
|
|
-> 校验接收人权限
|
|
-> 写 feedbacks
|
|
-> 保留 reminders 调度状态,反馈结果通过 feedbacks 展示
|
|
```
|
|
|
|
## 5. 数据对象
|
|
|
|
本模块主要使用:
|
|
|
|
1. `ai_drafts`
|
|
2. `tasks`
|
|
3. `reminders`
|
|
4. `notifications`
|
|
5. `feedbacks`
|
|
6. `failure_records`
|
|
7. `operation_logs`
|
|
|
|
字段以 `docs/contracts/数据对象约定.md` 为准。
|
|
|
|
## 6. 接口需求
|
|
|
|
主要接口:
|
|
|
|
1. `GET /api/reminders`
|
|
2. `POST /api/reminders`
|
|
3. `GET /api/reminders/{id}`
|
|
4. `PATCH /api/reminders/{id}`
|
|
5. `POST /api/reminders/{id}/pause`
|
|
6. `POST /api/reminders/{id}/resume`
|
|
7. `POST /api/reminders/{id}/cancel`
|
|
8. `POST /api/reminders/{id}/notify`
|
|
9. `POST /api/reminders/{id}/feedback`
|
|
|
|
接口格式以 `docs/contracts/API接口约定.md` 为准。
|
|
|
|
## 7. 权限规则
|
|
|
|
1. 所有人可以创建自己的提醒。
|
|
2. 老板和程经理可以给别人创建提醒。
|
|
3. 普通员工不能给同事创建提醒。
|
|
4. 创建人、发起人、管理员可以修改、暂停或取消提醒。
|
|
5. 接收人只能反馈自己相关提醒。
|
|
|
|
## 8. 状态流转
|
|
|
|
提醒状态以 `docs/contracts/状态流转约定.md` 为准。核心约束:
|
|
|
|
1. `active` 提醒才允许 scheduler 触发。
|
|
2. `paused` 不触发,但可以恢复。
|
|
3. `cancelled` 不触发、不可恢复。
|
|
4. `trigger_failed` 必须写失败记录。
|
|
5. 同一个提醒同一触发时间同一接收人只能生成一条有效通知。
|
|
6. 一次性提醒成功触发后进入 `triggered`;周期提醒成功触发后保持 `active` 并计算下一次 `next_trigger_at`。
|
|
7. 提醒反馈不改变提醒调度状态,反馈结果通过 `feedbacks` 展示。
|
|
|
|
## 9. 失败和日志
|
|
|
|
必须记录:
|
|
|
|
1. 提醒创建、修改、暂停、恢复、取消。
|
|
2. scheduler 触发成功或失败。
|
|
3. 飞书通知发送成功或失败。
|
|
4. 幂等冲突或重复触发跳过。
|
|
5. 权限拒绝。
|
|
6. 有问题反馈原因。
|
|
|
|
## 10. 给 AI 的测试样例
|
|
|
|
1. 普通员工给同事创建提醒,应返回权限错误。
|
|
2. `paused` 提醒到点不应触发通知。
|
|
3. 同一提醒同一触发时间重复扫描,不应重复创建通知。
|
|
4. 每周提醒触发后,应计算下一次提醒时间。
|
|
5. 通知失败应写失败记录。
|
|
6. 自己提醒自己默认不需要反馈,老板或程经理给别人提醒默认需要反馈。
|
|
|
|
## 11. Review 重点
|
|
|
|
1. 是否防止重复触发。
|
|
2. 是否限制普通员工给别人创建提醒。
|
|
3. 是否不支持 cron 等第一版不做内容。
|
|
4. scheduler 是否走 service 层而不是直接改业务表。
|
|
5. 失败是否可复盘。
|