# Admin 说明：任务未回复提醒

本文档面向后台管理员，说明如何启用和排查“任务未回复提醒”。

## 这个功能是什么

当一个任务开启“未回复提醒”后，如果在设定时间内一直没有任何有效回复，系统会按该任务设置的间隔持续发送提醒。

这里的“有效回复”指：

- 存在 `MissionReply`
- 且该回复没有被撤销（`is_rejected = false`）

如果任务已有有效回复，就不会再继续发“未回复提醒”。

## 这项功能由哪两部分共同决定

要真正收到未回复提醒，必须同时满足：

1. 任务对象本身开启了未回复提醒
2. notifier 后台中配置了 `mission.unreplied` 的通知路由

缺任何一边都不会发通知。

## 任务侧可配置项

任务对象现在支持这些字段：

- `notify_if_unreplied`：是否开启未回复提醒
- `unreplied_notify_interval_minutes`：提醒间隔（分钟）
- `unreplied_notify_max_count`：最大提醒次数，默认 `5`
- `unreplied_notify_sent_count`：已发送次数，由系统自动维护
- `unreplied_last_notified_at`：上次发送时间，由系统自动维护

管理员通常只需要关注前三个字段。

## notifier 后台应如何配置

### 第一步：创建通知器 Notifier

建议配置如下：

- `name`：任务未回复提醒-管理群
- `channel`：`wecom_webhook`
- `template_key`：`mission_unreplied`
- `is_enabled`：勾选
- `config.key`：企业微信机器人 key

### 第二步：创建通知路由 NotifierRoute

建议配置如下：

- `event_key`：`mission.unreplied`
- `mission_category`：可留空，也可以指定分类
- `is_enabled`：勾选

## 通知什么时候会发生

系统后台有一个每分钟执行一次的定时任务，会去检查哪些任务需要发送未回复提醒。

只有任务同时满足以下条件才会提醒：

1. 开启了未回复提醒
2. 未完成
3. 未取消
4. 当前没有任何有效回复
5. 已提醒次数还没达到最大提醒次数
6. 到达了当前提醒时间

提醒时间计算规则：

- 如果从未提醒过：`创建时间 + 间隔分钟数`
- 如果提醒过：`上次提醒时间 + 间隔分钟数`

## 收到有效回复后会怎么样

一旦任务出现有效回复：

- 当前未回复提醒周期会停止
- 已提醒次数与上次提醒时间会被重置

如果该回复后来被撤销，或者任务 reopen 后重新进入“无有效回复”状态：

- 系统会重新开始一个新的未回复提醒周期

## 管理员排查清单

如果任务没有收到未回复提醒，请按下面顺序检查：

1. 任务是否开启了 `notify_if_unreplied`
2. 任务是否填写了 `unreplied_notify_interval_minutes`
3. 任务是否已经完成或取消
4. 任务是否已经有有效回复
5. `unreplied_notify_sent_count` 是否已经达到 `unreplied_notify_max_count`
6. notifier 是否存在 `mission.unreplied` 路由
7. 路由是否启用
8. 对应的 Notifier 是否启用
9. `template_key` 是否配置为 `mission_unreplied`
10. Celery worker 和 Celery beat 是否在运行

## 给 admin 可直接复制的简版说明

```md
任务未回复提醒已上线。

要让任务自动提醒，必须同时满足两件事：

1. 任务本身开启了未回复提醒，并设置了提醒间隔和最大提醒次数。
2. notifier 后台里配置了 `mission.unreplied` 对应的通知器和通知路由。

系统会每分钟扫描一次任务。只有当任务未完成、未取消、当前没有有效回复、且没超过最大提醒次数时，才会继续发送提醒。

一旦任务收到有效回复，未回复提醒会自动停止；如果回复后来被撤销，系统会重新开始新的未回复提醒周期。
```
