|
1 | 1 | # 通知能力基线 |
2 | 2 |
|
3 | | -本文档记录通知能力 P0/P1 基线:渠道、配置 key、GitHub Actions 映射、Web 设置元数据、CLI 诊断口径和 Web 一键测试。P0 只做基线与只读诊断;P1 增加 Web 单渠道真实测试,不包含渠道路由、降噪、模板产品化等后续 Phase 能力。 |
| 3 | +本文档记录通知能力 P0-P2 基线:渠道、配置 key、GitHub Actions 映射、Web 设置元数据、CLI 诊断口径、Web 一键测试和自定义 Webhook Body 模板语义。P0 只做基线与只读诊断;P1 增加 Web 单渠道真实测试;P2 只产品化现有 Body 模板,不包含渠道路由、降噪、per-URL 模板或新增一等渠道。 |
4 | 4 |
|
5 | 5 | ## 渠道基线 |
6 | 6 |
|
|
25 | 25 |
|
26 | 26 | - Minimal key:足以启用一个通知渠道的最小配置。 |
27 | 27 | - Advanced key:只影响认证、安全、格式、线程、群组、证书校验或展示行为,不能单独启用渠道。 |
28 | | -- P0 不新增路由、降噪或发送策略语义;相关配置如未来引入,应先更新本文档、`.env.example`、Web 元数据与回归测试。 |
| 28 | +- P0-P2 不新增路由、降噪或发送策略语义;相关配置如未来引入,应先更新本文档、`.env.example`、Web 元数据与回归测试。 |
29 | 29 |
|
30 | 30 | ## GitHub Actions 映射 |
31 | 31 |
|
@@ -60,6 +60,46 @@ Web 设置页的“通知渠道”分类提供单渠道测试入口。测试会 |
60 | 60 | - 返回结果会脱敏 token、secret、password、Bearer、完整 webhook query 和疑似 path token。 |
61 | 61 | - 配置缺失或发送失败返回 `success=false`,不会影响已保存配置和默认分析流程。 |
62 | 62 |
|
| 63 | +## 自定义 Webhook Body 模板 |
| 64 | + |
| 65 | +`CUSTOM_WEBHOOK_BODY_TEMPLATE` 是自定义 Webhook 的全局 JSON body 模板。配置后,它会先于 URL 自动识别生效,因此会覆盖 Bark、Slack、Discord、钉钉等自动 payload。未配置时仍使用原有 URL 自动识别;渲染后不是合法 JSON object 时会记录错误并回退默认 payload,不中断主通知流程。 |
| 66 | + |
| 67 | +可用占位符: |
| 68 | + |
| 69 | +- `$content_json`:JSON 转义后的通知正文,推荐默认使用。 |
| 70 | +- `$title_json`:JSON 转义后的通知标题,推荐默认使用。 |
| 71 | +- `$content` / `$title`:原始字符串,不做 JSON 转义。正文含双引号、反斜杠或换行时可能导致 JSON 无效并触发 fallback。 |
| 72 | + |
| 73 | +通用 webhook 示例: |
| 74 | + |
| 75 | +```env |
| 76 | +CUSTOM_WEBHOOK_BODY_TEMPLATE={"title":$title_json,"content":$content_json} |
| 77 | +``` |
| 78 | + |
| 79 | +Bark 通过 custom webhook 使用时,默认会按 `api.day.app` 自动生成 `title` / `body` / `group`。如果配置全局模板,需要自己写出 Bark body: |
| 80 | + |
| 81 | +```env |
| 82 | +CUSTOM_WEBHOOK_BODY_TEMPLATE={"title":$title_json,"body":$content_json,"group":"stock"} |
| 83 | +``` |
| 84 | + |
| 85 | +AstrBot 已是一等通知渠道,优先使用 `ASTRBOT_URL` 和可选的 `ASTRBOT_TOKEN`。只有需要把 AstrBot 兼容端点放入 `CUSTOM_WEBHOOK_URLS` 时,才使用 custom webhook 模板,例如: |
| 86 | + |
| 87 | +```env |
| 88 | +CUSTOM_WEBHOOK_BODY_TEMPLATE={"content":$content_json} |
| 89 | +``` |
| 90 | + |
| 91 | +NapCat / OneBot HTTP API 需要按实际 endpoint 和目标类型调整。下面只是常见 body 形态示例,`user_id`、`group_id`、URL 路径和鉴权方式都应以你的 NapCat 配置为准: |
| 92 | + |
| 93 | +```env |
| 94 | +# 私聊:CUSTOM_WEBHOOK_URLS=http://127.0.0.1:3000/send_private_msg |
| 95 | +CUSTOM_WEBHOOK_BODY_TEMPLATE={"user_id":123456,"message":$content_json} |
| 96 | +``` |
| 97 | + |
| 98 | +```env |
| 99 | +# 群聊:CUSTOM_WEBHOOK_URLS=http://127.0.0.1:3000/send_group_msg |
| 100 | +CUSTOM_WEBHOOK_BODY_TEMPLATE={"group_id":123456789,"message":$content_json} |
| 101 | +``` |
| 102 | + |
63 | 103 | ## 场景占位 |
64 | 104 |
|
65 | 105 | - Local:优先使用 `.env`,可用 `python main.py --check-notify` 做本地诊断。 |
|
0 commit comments