通知渠道
为提醒添加邮件、机器人或 Webhook 渠道;先完成本页设置,才能收到自动通知。
同一份提醒会发到所有开着的渠道。在「设置 → 通知渠道」里点「添加渠道」,选类型,填好字段后保存。每个渠道有自己的名称和「启用」开关,旁边的「测试」按钮只往这一个渠道发测试消息,没保存的配置也能先测。
渠道的地址、令牌存储在服务端,并提供给已登录的应用,公开页不下发;完整备份里会包含它们。
还没配过任何渠道、但旧版设置里填过「通知邮箱」的账本,会把那个邮箱当作唯一的邮件渠道。
- 在「设置 → 通知渠道」点「添加渠道」。
- 选类型,填写下表对应字段,点「测试」。测试会真实发送一条消息。
- 测试成功后保存,并确保渠道已启用。
| 字段 | 说明 |
|---|---|
| 收件邮箱 | 发到哪个地址。 |
邮件经 Cloudflare Email Sending 发出,需要部署时配置 EMAIL 绑定和 MAIL_FROM 发件地址,发件域名要在 Cloudflare 验证过。服务器没有配置时,发送会报错「这台服务器没有配置邮件发送」,请改用其他渠道。配置方法见 Cloudflare Workers + D1。
Docker 部署不能发邮件。
Telegram
Section titled “Telegram”| 字段 | 说明 |
|---|---|
| Bot Token | 找 @BotFather 建一个机器人,拿到形如 123456:ABC… 的 Token。 |
| Chat ID | 你的用户 ID 或群 ID。先给机器人发一条消息,再用 @userinfobot 查自己的 ID。 |
消息使用 Telegram 的 HTML 格式,最长 4000 字符。
飞书 / Lark
Section titled “飞书 / Lark”| 字段 | 说明 |
|---|---|
| Webhook 地址 | 群设置 → 群机器人 → 添加自定义机器人,复制 https://open.feishu.cn/open-apis/bot/v2/hook/… 地址。 |
| 签名密钥 | 可选。机器人开启了「签名校验」时填。 |
以消息卡片发送,底部有一个打开应用的按钮。
| 字段 | 说明 |
|---|---|
| Webhook 地址 | 群设置 → 机器人 → 自定义机器人,复制 https://oapi.dingtalk.com/robot/send?access_token=… 地址。 |
| 加签密钥 | 可选。机器人安全设置选了「加签」时填,以 SEC 开头。 |
如果机器人的安全设置用的是「自定义关键词」,请把关键词设成提醒里一定会出现的词,比如「订阅」。
| 字段 | 说明 |
|---|---|
| Webhook 地址 | 群聊 → 添加群机器人,复制 https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=… 地址。 |
以 Markdown 消息发送,最长 4000 字符。
| 字段 | 说明 |
|---|---|
| Device Key | 在 iPhone 上安装 Bark,从 App 里复制 Key。 |
| 服务器 | 可选,自建 Bark 服务器的地址,缺省为 https://api.day.app。 |
| 字段 | 说明 |
|---|---|
| Topic | 起一个不容易被猜到的名字,手机上的 ntfy App 订阅同一个 Topic。 |
| 服务器 | 可选,缺省为 https://ntfy.sh。 |
| 访问令牌 | 可选。自建或受保护的服务器需要时填,以 Authorization: Bearer 发送。 |
Server酱
Section titled “Server酱”| 字段 | 说明 |
|---|---|
| SendKey | Server酱 Turbo 的 SCT…,或 Server酱³ 的 sctp…。Calends 会按前缀自动选对应的接口。 |
推送到微信。
Discord
Section titled “Discord”| 字段 | 说明 |
|---|---|
| Webhook 地址 | 频道设置 → 整合 → Webhook,复制 https://discord.com/api/webhooks/… 地址。 |
以 Embed 消息发送。
| 字段 | 说明 |
|---|---|
| Webhook 地址 | 在 Slack App 里开启 Incoming Webhooks,复制 https://hooks.slack.com/services/… 地址。 |
自定义 Webhook
Section titled “自定义 Webhook”| 字段 | 说明 |
|---|---|
| URL | 接收提醒的地址。 |
| 附加请求头 | 可选,只支持一个请求头,写成 名称: 值,比如 Authorization: Bearer …。 |
Calends 以 POST 发送 JSON:
{ "subject": "订阅提醒|……", "intro": "当前每月订阅支出 ……,N 项正在计费。", "kind": "daily", "sections": [ { "heading": "即将扣款", "rows": [{ "title": "……", "amount": "……", "sub": "……" }] } ], "text": "纯文本版本", "markdown": "Markdown 版本", "url": "https://calends.example.com"}kind 是 daily(每日提醒)、monthly(月度账单预告)或 test(测试)。text 和 markdown 是排好版的全文,可以直接转发到其他服务;sections 是结构化数据,方便自己排版。
发送失败怎么办
Section titled “发送失败怎么办”- 点渠道旁的「测试」,失败时会显示服务端返回的错误。
- 多数机器人接口出错时也返回 HTTP 200,Calends 会检查返回体里的错误码(比如钉钉、企业微信的
errcode,飞书、Server酱的code,Telegram 的ok),把错误原因显示出来。 - 必填字段没填时,会提示「某某渠道缺少某字段」。