Skip to content

🔔 通知系统配置 ​

Bangumi-syncer 可以在关键时刻主动给你发消息——同步成功、同步失败、收到播放请求、追番总结生成完成等。本页介绍通知系统的使用场景、4 类渠道,以及邮件自定义模板的写法。

配置项全部在 Web 的「配置管理 → 通知配置」中可视化完成,不需要手写 INI。


使用场景 ​

通知系统的常见用法:

场景订阅事件推荐渠道
同步失败立即告警同步失败钉钉 / 企业微信 / Bark
追番总结每天发到邮箱watching_summary_*邮件
今日放送每日早报今日放送提醒邮件 / 企业微信
所有事件多通道冗余全部事件Webhook + 邮件
接入第三方自动化(如 Home Assistant)同步成功 / 失败通用 Webhook
Trakt / 飞牛定时任务执行情况调度任务类事件钉钉 / 企业微信

排查问题必备

强烈建议至少订阅「同步失败」事件到一个即时渠道(钉钉 / 企业微信 / Bark),出问题时第一时间知道,不用反复刷 Web 界面。


整体结构 ​

通知系统由四层组成,按数据流向串联:

触发事件 → 匹配通知规则 → 渲染模板 → 发送到渠道
  • 触发事件:由系统内部产生,如「同步成功」「同步失败」「收到请求」「匹配到番剧」「追番总结完成」。
  • 通知规则:决定哪些事件发给哪些渠道,是配置的核心。一个规则 = 「勾选若干事件 + 选择若干渠道 + 可选自定义模板」。
  • 渠道:实际发送方,如 Webhook、邮箱、企业微信群机器人、钉钉群机器人。同一类渠道支持添加多个实例。
  • 模板:决定消息长什么样,支持「默认」「自定义模板文件」「内联 JSON」三种来源。

规则是发布闸门

旧版本中每条渠道各自带一个 types(订阅哪些事件)字段。新格式把所有订阅关系集中到「通知规则」里,渠道只负责连接配置——「换事件订阅」和「换渠道」互不干扰。

未创建任何规则时,外部渠道一律停发(渠道 types 字段不再生效,事件仅写入站内信)。删除全部规则即可一键静默,无需逐个删除渠道。


4 类渠道介绍 ​

在「通知配置」卡片右上角点击 「渠道配置」 打开模态框。模态框内有 4 个 Tab:Webhook / 邮件 / 企业微信 / 钉钉,每个 Tab 独立管理一类渠道的多个实例。

渠道配置在模态框内直接内联编辑:「添加配置」展开空白表单,「编辑」加载已有数据,「保存」后立即生效,「删除」通过浏览器原生 confirm() 二次确认。

Webhook(最通用) ​

适合谁:钉钉机器人、Telegram Bot、飞书机器人、Bark、Discord、Slack、自建网关——所有「接收一个 HTTP 请求」的服务都可以接。

特点:灵活、跨平台,所有事件共用一个 URL 即可。模板支持自定义 JSON。

字段必填说明
启用是关闭后该渠道不参与任何事件分发
Webhook URL是完整 HTTP(S) 地址
请求方法否POST(默认,发 JSON body)或 GET(payload 作为 query string)
自定义请求头否JSON 格式,如 {"Authorization":"Bearer xxx"};也支持 K:V,K:V 简写
消息模板否留空使用默认 JSON;详见下方「模板系统」

邮件(最适合长文 / 总结) ​

适合谁:追番总结、每日放送早报、定期回顾——内容较多、希望归档留存的场景。

特点:支持 HTML 富文本模板,可完全自定义样式;QQ 邮箱、Gmail、Outlook、自建 SMTP、企业邮箱均可。

字段必填说明
启用是关闭后该渠道不参与任何事件分发
SMTP 服务器是例如 smtp.qq.com、smtp.gmail.com
端口是SSL 通常 465;STARTTLS 通常 587;不加密通常 25
SMTP 用户名是完整邮箱地址
SMTP 密码/授权码是(新建)编辑时留空表示不修改;QQ 邮箱等需要「授权码」而不是登录密码
发件人地址否留空使用 SMTP 用户名
收件人地址是支持多个收件人,逗号或分号分隔
使用 TLS 加密是端口 465 时务必开启(SSL on connect)
邮件标题模板否留空使用默认模板
自定义模板文件路径否高级选项,指向本地 email/<name>.{subject.txt,body.txt,html} 三件套;留空使用默认模板

邮件是唯一支持 HTML 富文本的渠道

追番总结这种长文 + 排版 + 表格 + emoji 的内容,强烈建议走邮件渠道。邮件默认模板会直接把总结正文渲染进正文区,无需额外配置;要换样式见下方 自定义模板(高阶)。

企业微信 ​

适合谁:公司用企业微信、或自建群聊用群机器人推送的场景。

特点:底层是 Webhook,但格式定制化。模板复用 Webhook 默认模板,自定义格式需用内联 JSON。

字段必填说明
启用是关闭后该渠道不参与任何事件分发
Webhook Key是群机器人 Webhook URL 中的 key= 参数值;也可直接粘完整 URL
消息类型否text(默认)或 markdown
消息模板否留空走代码内置构造;自定义格式填内联 JSON

钉钉 ​

适合谁:钉钉群机器人(自定义机器人)。

特点:支持「加签」安全模式。模板复用 Webhook 默认模板,自定义格式需用内联 JSON。

字段必填说明
启用是关闭后该渠道不参与任何事件分发
Access Token是机器人 Webhook URL 中的 access_token= 参数值;也可直接粘完整 URL
Secret否「加签」模式密钥;填了之后请求会带 HMAC-SHA256 签名
消息类型否text(默认)或 markdown
消息模板否留空走代码内置构造;自定义格式填内联 JSON

通知规则 ​

在「通知配置」卡片右上角点击 「新建配置」 打开规则编辑器。这是「决定哪些事件发给哪些渠道」的核心配置。

字段必填说明
启用此规则是关闭后该规则不参与任何事件分发
规则名称是自己看的名称,例如「同步失败钉钉告警」
触发事件否勾选要订阅的事件;全部不勾选 = 订阅全部事件
通知渠道是至少选择 1 个渠道实例(多选)
自定义模板否留空则使用渠道自身配置的模板

事件按 6 大类分组展示,方便勾选:

  • 同步流程:同步成功、同步失败等
  • 匹配质量:匹配到番剧、候选确认等
  • 数据源:收到请求等
  • 调度任务:飞牛 / fongmi / Trakt / 今日放送 / 追番总结等定时任务执行情况
  • Bangumi API:API 不可达、恢复等
  • 系统运维:调度器任务失败等

举例:

  • 「同步失败钉钉告警」:事件勾选 mark_failed,渠道勾选 notify-dingtalk-1
  • 「追番总结每天邮件」:事件勾选 watching_summary 前缀的所有事件,渠道勾选 notify-email-1
  • 「所有事件 → Webhook + 邮件双通道」:事件不勾选,渠道勾选所有

同类通知防刷屏

同类通知在短时间内会限制连续发送次数(默认 60 秒冷却),避免 Trakt 全量同步等场景下刷屏。


模板系统 ​

模板决定「消息长什么样」。

强烈建议:先用默认模板,别急着自定义

默认模板已经能正确发送所有事件,包括追番总结的正文和标题里的任务名,并会随程序升级自动获得改进。 你不需要为了「让消息好看一点」去手写模板。

只有在下面这种情况下才需要自定义:你明确想要和默认不一样的排版(比如企业微信里换一种 Markdown 结构、邮件里加公司 Logo 和页脚)。

自定义属于高阶操作,代价是:默认模板将来新增的字段不会自动出现在你的模板里,需要你自己跟。详见 自定义模板(高阶)。

默认模板(推荐,零配置) ​

渠道配置中模板字段留空即可,系统按渠道使用内置模板:

  • Webhook:使用 templates/notifications/webhook/default.json,结构为:
json
{
  "title": "{payload_title}",
  "type": "{notification_type}",
  "timestamp": "{timestamp}",
  "user": "{user_name}",
  "anime": "{title}",
  "episode": "{ep_label}",
  "source": "{source}",
  "error": "{error_message}",
  "extra": "__type_fields__"
}

其中 "extra": "__type_fields__" 是一个标记(哨兵值),不是最终发出的键。渲染时这个键会被整体摘掉,同时把该事件类型特有的字段平铺到 JSON 的顶层(见下方「事件专属字段」)。

以追番总结为例,实际发出去的内容长这样(注意:没有 extra 键,summary 等直接在顶层;追番总结没有集数信息,episode 为空串):

json
{
  "title": "📊 追番总结 - 每日总结",
  "type": "watching_summary_daily",
  "timestamp": "2026-08-15 09:00:00",
  "user": "alice",
  "anime": "",
  "episode": "",
  "source": "summary",
  "error": "",
  "job_name": "每日总结",
  "summary": "本周共观看 3 部番剧,合计 12 集……",
  "date_range": "2026-08-09 ~ 2026-08-15",
  "record_count": 12
}

所以接 Webhook 时请直接取顶层字段(如 summary、job_name),不要去取 extra.summary —— 那个路径永远是空的。

  • 邮件:所有事件共用 templates/notifications/email/default.html 单文件。邮件主题从 HTML 的 <title> 标签提取(与 Webhook 的 title 同源,因此追番总结会显示为「📊 追番总结 - 任务名」),纯文本 body 由 HTML 去标签生成作为 fallback。追番总结的正文会渲染在邮件正文区。
  • 企业微信 / 钉钉:渠道配置的「消息模板」字段留空时,由代码内置构造消息体(text 或 markdown 两种格式)。
  • 站内信:标题使用注册表中类型的 in_app_title_template,正文使用 error_message 或 message 字段。

可用占位符(变量) ​

模板中使用 {变量名} 引用数据。所有渠道、所有事件都共享以下变量:

基础信息 ​

占位符说明示例
{timestamp}事件触发时间,格式 YYYY-MM-DD HH:MM:SS2026-07-30 14:23:11
{user_name}媒体服务器上的用户名alice
{bgm_username}执行标记的 Bangumi 账号用户名alice_bgm
{source}触发来源(媒体服务器或事件源)plex、emby
{notification_type}事件类型标识mark_failed
{type_display_name}事件类型中文展示名同步失败
{type_icon}事件类型图标(emoji)❌
{payload_title}事件标题(含图标,追番总结会带任务名)📊 追番总结 - 每日总结

番剧与集数 ​

占位符说明示例
{title}番剧主标题(Bangumi 主标题,匹配前为原始标题)葬送的芙莉莲
{ori_title}媒体服务器传来的原始标题Frieren S01E12
{bgm_title}匹配到 Bangumi 后的中文标题葬送的芙莉莲
{season}季号1
{episode}集号(纯数字,未补零)12
{ep_label}集数标签(补零;剧场版为「剧场版」;无集数信息时为空串)S01E12 / 剧场版 / 空
{media_type}媒体类型episode / movie
{subject_id}Bangumi 番剧 ID425602
{episode_id}Bangumi 单集 ID1234567

错误信息 ​

占位符说明示例
{error_message}错误信息(仅失败类事件有值)Bangumi API timeout
{error_type}错误类型分类network、auth、api

AI 追番总结 ​

以下占位符仅在 AI 追番总结事件(watching_summary_{name})中才有值:

占位符说明示例
{job_name}总结任务名每日总结
{summary_text}总结正文(AI 生成)本周共观看 3 部番剧…
{date_range}统计的日期范围2026-08-09 ~ 2026-08-15
{record_count}覆盖的观看记录数42
{lookback_days}回溯天数7
{model}生成用的模型名deepseek-v3
{tokens_used}消耗 token 数12345

未提供的变量怎么办?

模板中未提供的占位符在渲染时会被替换为空字符串(不会保留 {xxx} 字面量)。所以你可以放心地把所有变量都写进模板,没值时自动留空。

事件专属字段 ​

除了上面这些通用占位符,每类事件还有自己的专属字段,会由系统自动平铺到 Webhook JSON 的顶层(不是塞进 extra,extra 只是模板里的标记键,详见下节),并渲染进邮件正文。你不必手动声明:

事件专属字段
追番总结 watching_summaryjob_name、summary、date_range、record_count、model、tokens_used
候选待确认 pending_candidatecandidates_count、top_candidate_id、top_candidate_name
匹配歧义 match_ambiguousfinal_subject_id、top1_name、top1_subject_id、top1_score、top2_name、top2_subject_id、top2_score、score_diff
标记成功 / 跳过 / 排队subject_id、episode_id、bgm_title、bgm_username
找到番剧 bangumi_id_foundsubject_id、bgm_title
同步失败 mark_failederror_type、additional_info
今日放送 airing_todayairdate、total
批量同步汇总total、succeeded、failed、skipped
队列积压告警pending_count、threshold
IP 锁定 ip_lockedip、locked_until、attempt_count、max_attempts
归档磁盘告警available_mb、required_mb、warning_threshold_mb
版本升级可用current_version、latest_version
调度任务失败driver、is_timeout
总结任务 / LLM 失败job_name(LLM 失败另有 model)
API 类错误status_code(重试失败另有 url、method、retry_count)

未在上表列出的类型(如 anime_not_found、config_error、request_received)没有专属字段,用通用占位符即可。

这些字段的取值规则见下方脚注。

事件专属字段的取值规则 ​

只有 None 和空串 "" 会被省略——键根本不存在,而不是输出 null 或空串。

0 和 False 是有效值,会被保留。 例如 record_count: 0(本期没有任何观看记录)、is_timeout: false(任务失败但不是超时)都会正常发出。消费方应把「键不存在」理解为「这项信息没有」,而不是「值为 0」——两者含义不同。


自定义模板(高阶) ​

这是高阶操作,先确认你确实需要

动手前请想清楚:默认模板已经能正确发送所有事件。自定义模板意味着你要自己维护一份格式,并对将来新增的字段负责。

如果你的目的是「让 Webhook 的 JSON 结构符合我的接收端要求」,或「让企业微信消息用另一种排版」,那自定义是合适的。如果只是觉得默认样式不够好看,改邮件模板即可,不必动 Webhook。

先读:三种自定义方式 ​

方式配置方式适用渠道风险
自定义模板(文件)在 templates/<channel>/ 目录放文件仅 Webhook 与邮件中:文件覆盖默认模板,升级后不会自动获得新字段
内联 JSON渠道配置中直接粘 JSON 字符串Webhook / 企业微信 / 钉钉高:写死在配置里,最容易漏掉事件专属字段
默认模板(推荐)模板字段留空全部无

⚠️ 自定义前必读:不要丢掉 extra ​

这一步做错会导致内容静默丢失

Webhook 的默认模板用一个特殊值 "extra": "__type_fields__" 来开启事件专属字段(如追番总结的 summary)。你自己写模板时:

  • 要保留专属字段 → 原样写下 "extra": "__type_fields__"。渲染时这个键会被摘掉,字段被平铺到 JSON 顶层。
  • 不要写成 "extra": {} 或省略 —— 那样追番总结就只有标题、没有正文。
  • 不要把专属字段手抄成固定的空值(如 "summary": ""),那会把真实内容覆盖成空。

你写的模板就是最终发出的内容:只有你显式写下 "extra": "__type_fields__",系统才会把事件专属字段附加上去;没写就一个都不会加。这样严格的接收端(会拒绝未知字段的)不会被塞入你没声明过的键。你显式写的键始终优先于自动附加的字段。正因为默认模板已经写好了这一行,我们才建议把「消息模板」留空用默认模板。

再强调一次:extra 本身不会出现在发出去的 JSON 里——它只是「在这里展开专属字段」的占位标记,发出的字段在顶层。

正确的自定义 Webhook 模板示例(在默认结构上增加自己的字段):

json
{
  "title": "{payload_title}",
  "type": "{notification_type}",
  "timestamp": "{timestamp}",
  "user": "{user_name}",
  "anime": "{title}",
  "episode": "{ep_label}",
  "error": "{error_message}",
  "extra": "__type_fields__",
  "my_custom_field": "固定值",
  "server": "{source}"
}

自定义模板文件(仅 Webhook / 邮件) ​

  1. 在项目根目录查找 templates/<channel>/ 目录,其中 <channel> 取值为 webhook 或 email。
  2. 在该目录下放置与默认模板同名的文件即可覆盖(Webhook 是 .json,邮件是 .html)。
  3. 渠道配置中模板字段填入文件名(不含扩展名)。例如 default 表示使用 templates/webhook/default.json(或邮件的 templates/email/default.html)。

目录结构示例:

templates/
├── webhook/
│   └── default.json         # Webhook 默认模板
└── email/
    └── default.html         # 邮件默认 HTML 模板

Docker 部署

Docker 部署时,需要把 templates 目录挂载进容器。在 docker-compose.yml 的 volumes 加一行:

yaml
- ./templates:/app/templates

写一个自定义邮件模板 ​

邮件是唯一支持 HTML 富文本的渠道,特别适合追番总结、每日放送早报等需要排版的内容。一个最小的可用模板:

html
<!DOCTYPE html>
<html>
  <head>
    <title>{payload_title}</title>
  </head>
  <body style="font-family: sans-serif; padding: 20px;">
    <h2 style="color: #dc3545;">{type_icon} {type_display_name}</h2>
    <p><strong>番剧:</strong>{title} {ep_label}</p>
    <p><strong>用户:</strong>{user_name}</p>
    <p><strong>时间:</strong>{timestamp}</p>
    <p><strong>错误:</strong>{error_message}</p>
    <div style="white-space: pre-wrap;">{summary_text}</div>
  </body>
</html>

关键点:

  • 邮件主题从 HTML 的 <title> 标签提取。写 {payload_title} 可得到与默认模板一致的标题(含任务名);写死文字则所有邮件都是那个标题。
  • 邮件正文是 <body> 内的内容。
  • 所有 可用占位符 都可以用 {变量名} 写在 HTML 任意位置。
  • 内联 CSS 样式(style="...")兼容性最好,避免用 <style> 标签或外部 CSS。
  • 想保留追番总结正文,务必写上 {summary_text}(默认模板里已包含)。

多套模板按需切换:文件名自由命名(如 default.html、fancy.html),不带扩展名的部分就是「模板名」。在渠道配置的「自定义模板文件路径」填该名字即可:

  • 留空 → 用默认模板 templates/notifications/email/default.html
  • 填 fancy → 用 templates/email/fancy.html

邮件模板查找优先级 ​

完整查找顺序(排在前面的优先):

  1. 渠道配置的 email_subject 字段(仅覆盖主题,不覆盖正文)
  2. 自定义目录 templates/email/<name>.html(<name> 来自渠道配置的「自定义模板文件路径」)
  3. 仓库默认目录 templates/notifications/email/<name>.html
  4. 代码 fallback(返回 [Bangumi-Syncer] {payload_title} 主题 + 空 body)

纯文本正文来自同名的 .txt 模板

邮件是 multipart/alternative(HTML + 纯文本双部件)。纯文本部件优先取同名的 templates/notifications/email/<name>.txt,这样纯文本阅读时不会有 HTML 模板的缩进空白。你只提供 .html 时也能工作——系统会退化为「去标签 + 压缩空白」。

关于变量转义 ​

插入到 HTML 的变量会被自动转义(< → &lt;),因此媒体库文件名、用户名、AI 总结正文里即便含有 <script> 或 <a href=...> 之类的标记,也只会作为普通文字显示,不会被当成 HTML 执行。

这带来两个你需要注意的点:

  • 你不能靠变量注入 HTML。想在邮件里放自定义标签,请直接写进模板本身(模板结构不转义,只有变量转义)。
  • 邮件主题不是 HTML,所以主题里的 &、< 等字符会正常显示,不会变成 &amp;。

纯文本部件(text/plain)同样不做转义,保持原文。

永远不会报错

查找顺序「自定义目录 → 默认目录 → 代码 fallback」保证永远不会因为模板问题导致通知发不出去。最多是「自定义模板没生效」——先确认文件名拼写一致,再确认扩展名正确(Webhook 是 .json,邮件是 .html)。

测试与调试 ​

  1. 在「渠道配置」对应 Tab 点击「测试」按钮,会向该渠道发一条固定测试事件,走的是和线上完全相同的渲染路径。
  2. 改模板后不需要重启程序,通知系统每次发送都会重新读模板。
  3. 用浏览器开发者工具(F12)预览 HTML,比每次发邮件都快。
  4. 部分邮件客户端(如 Outlook)对 CSS 兼容性较差,复杂样式建议用表格布局 + 内联样式。

完整示例:追番总结邮件模板 ​

html
<!DOCTYPE html>
<html>
  <head>
    <title>{payload_title}</title>
  </head>
  <body
    style="font-family: -apple-system, 'PingFang SC', sans-serif; padding: 20px; background-color: #f5f5f5;"
  >
    <div
      style="max-width: 600px; margin: 0 auto; background: white; padding: 30px; border-radius: 8px;"
    >
      <h2
        style="color: #ff6b6b; border-bottom: 2px solid #ff6b6b; padding-bottom: 10px;"
      >
        {type_icon} {type_display_name}
      </h2>
      <p style="color: #666; font-size: 14px;">
        {date_range} · 共 {record_count} 条记录
      </p>
      <div
        style="margin-top: 20px; padding: 15px; background: #f8f9fa; border-left: 4px solid #ff6b6b; white-space: pre-wrap; line-height: 1.7;"
      >
        {summary_text}
      </div>
      <p style="margin-top: 20px; color: #999; font-size: 12px;">
        本邮件由 Bangumi-syncer 自动发送 · {timestamp}
      </p>
    </div>
  </body>
</html>

内联 JSON 示例(企业微信 / 钉钉) ​

企业微信 / 钉钉不支持模板文件,只能用在渠道配置的「消息模板」字段填内联 JSON。

企业微信用 Markdown 显示:

json
{
  "msgtype": "markdown",
  "markdown": {
    "content": "## {type_icon} {type_display_name}\n\n> **番剧**: {title} {ep_label}\n> **用户**: {user_name}\n> **时间**: {timestamp}\n\n{error_message}"
  }
}

同时在企业微信渠道的「消息类型」选 markdown。注意这类完全自定义的消息体不会带事件专属字段,如需追番总结正文,请把 {summary_text} 显式写进 content。

钉钉加签:钉钉的「Secret」字段填加签密钥(机器人安全设置选「加签」时给的那串字符),URL 会自动附加 timestamp 和 sign 参数。


常见问题 ​

Q:企业微信 / 钉钉能否用模板文件自定义格式? ​

不能。当前只有 Webhook 和 邮件 渠道会读取 templates/ 目录下的模板文件。企业微信和钉钉的消息体由代码内置构造,自定义格式请在渠道配置的「消息模板」字段填内联 JSON。

Q:怎么知道当前是「默认」还是「自定义」模板? ​

在渠道配置或通知规则中,模板字段:

  • 留空 = 默认(Webhook 走 webhook/default.json,邮件走 email/default.html,企业微信/钉钉走代码内置构造,站内信走注册表 in_app_title_template)
  • Webhook / 邮件:填了纯字母(如 default)= 引用 templates/<channel>/default.* 文件
  • Webhook / 企业微信 / 钉钉:填了 { 开头 = 内联 JSON

Q:自定义模板放错了位置会怎样? ​

查找顺序「自定义目录 → 默认目录 → 代码 fallback」保证永远不会报错。最多是「自定义模板没生效」——先确认文件名拼写一致,再确认扩展名正确(Webhook 是 .json,邮件是 .html)。

Q:怎么给「追番总结」单独配模板? ​

通常不需要。 追番总结(watching_summary_{name})用默认模板就能正确发送:Webhook 的 JSON 顶层会带总结正文(summary、job_name 等),邮件的正文区也会渲染它,标题里还带任务名。

只有在你想换排版时才需要自定义:

  • Webhook:在 templates/webhook/default.json 放模板(Webhook 所有事件共用 default.json)。务必保留 "extra": "__type_fields__",否则会丢掉总结正文。
  • 邮件:在 templates/email/default.html 放模板(邮件所有事件共用 default.html)。务必保留 {summary_text}。
  • 企业微信 / 钉钉:在渠道配置的「消息模板」字段填内联 JSON,把 {summary_text} 写进 content。

Webhook 与邮件当前共用单文件

当前实现中 Webhook 和邮件各自只有一份 default.* 模板,所有事件类型共用。如需按事件类型区分格式,请使用内联 JSON(Webhook / 企业微信 / 钉钉)或修改默认模板文件。

Q:模板调试有什么技巧? ​

  1. Web 界面的「配置管理 → 通知配置 → 测试」按钮:向指定渠道发一条固定测试事件,走的是和线上完全相同的渲染路径(包括事件专属字段)。
  2. 临时改模板后无需重启程序:通知系统每次事件都重新读模板。
  3. 调试自定义模板时,先用 Webhook 收一份默认模板的实际输出作为对照,再在此基础上改——这样不容易漏掉 "extra": "__type_fields__" 这一行。

Q:升级后我的通知内容和以前不一样了? ​

近期版本对通知模板做了两处修正,都属于「恢复应有内容」:

  1. 追番总结的正文以前可能丢失。原因是配置页曾在你「添加 Webhook」时自动把内置模板填进「消息模板」输入框,保存后这份静态模板会一直覆盖掉事件专属字段。现在配置页不再自动填充;标题也恢复了「📊 追番总结 - 任务名」的形式(此前只有「📊 追番总结」,多个总结任务无法区分)。
  2. 邮件正文现在会带上追番总结全文。此前邮件只显示时间/番剧/用户/来源四行,总结正文没有出现在邮件里。

如果你的「消息模板」字段里存着自己早前粘贴的 JSON,且希望获得上述内容与标题,把它清空即可(留空使用内置模板)。留着自定义模板也能工作,但事件专属字段的附加就由你模板里的 "extra": "__type_fields__" 决定。


相关链接 ​