> For the complete documentation index, see [llms.txt](https://doc.duaer.com/zh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.duaer.com/zh/tasks/contract-expiry-reminders.md).

# 在 Duaer 里自动提醒 30 天内到期的合同

在 Duaer 里，每天读一次合同台账，找出 30 天内到期的合同，给负责人各发一封提醒邮件。
## 在 Duaer 里搭到期提醒

1. 加 [Schedule Trigger](/zh/build/schedule-trigger.md)：Trigger Interval 选 Days，Trigger at Hour 选 9am。
2. 接 [Google Sheets](/zh/build/google-sheets.md)，操作 Get Row(s)，读合同台账。表里要有 合同名称、客户、到期日、负责人邮箱，到期日写成 2026-12-31 这种格式。
3. 接 [Filter](/zh/build/filter.md)，两个条件都满足：{{ $json["到期日"] }} 日期「晚于」{{ $now.startOf("day").toISO() }}；{{ $json["到期日"] }} 日期「早于」{{ $now.plus({ days: 30 }).toISO() }}。
4. 接 [Send Email](/zh/build/send-email.md)：To Email 填 {{ $json["负责人邮箱"] }}，Subject 写 合同即将到期：{{ $json["合同名称"] }}，Text 写 客户 {{ $json["客户"] }} 的合同将于 {{ $json["到期日"] }} 到期，请安排续签。每份合同发一封。
5. 发布数字组织。

## 避免天天重复提醒

- 只在剩 30、7、1 天时提醒：Filter 改成一个布尔条件：{{ [30, 7, 1].includes(Math.round(DateTime.fromISO($json["到期日"]).diff($now.startOf("day"), "days").days)) }}「为真」。
- 发完在台账里记一笔：Send Email 后接 Google Sheets 的 Update Row，写「已提醒日期」，Filter 再排除今天已提醒的行。
- 日期是 2026/12/31 这种格式时，表达式里用 DateTime.fromFormat($json["到期日"], "yyyy/M/d")，见 [在 Duaer 里用 Luxon 处理日期](/zh/code/cookbook/luxon.md)。
## Questions

### Duaer 的合同台账可以放在 Excel 里吗？

可以。把 Duaer 流程里的 Google Sheets 换成读取文件再接 Extract from File，后面的 Filter 和邮件不变。

### Duaer 能把到期提醒发到群里而不是邮件吗？

能。把 Duaer 的 Send Email 换成企业微信节点或 HTTP Request 调飞书、钉钉机器人。

## 相关

- [在 Duaer 里用 Schedule Trigger 定时运行](https://doc.duaer.com/zh/build/schedule-trigger.md)
- [在 Duaer 里用 Filter 筛选条目](https://doc.duaer.com/zh/build/filter.md)
- [在 Duaer 里用 Send Email 发邮件](https://doc.duaer.com/zh/build/send-email.md)
- [在 Duaer 里用 Luxon 处理日期](https://doc.duaer.com/zh/code/cookbook/luxon.md)

