Files
VoCat/docs/superpowers/specs/2026-08-11-wecom-notification-design.md
T

2.7 KiB

企业微信消息推送设计

目标

新增独立的 wecom 通知通道,通过企业微信“消息推送(原群机器人)”Webhook 推送新收到的短信和自动任务执行结果。外部 API 契约与既有通知通道保持一致。

配置模型

wecom 配置包含:

  • enabled:是否启用通道。
  • urls:一个或多个企业微信消息推送 Webhook URL。Web 设置页将每个 URL 显示为独立输入行,通过“添加 URL”按钮新增输入行、通过删除按钮移除输入行; 不使用逗号、空格或换行分隔多个 URL。
  • payload_template:完整 JSON 请求体模板。

Webhook URL 含有企业微信访问密钥,必须作为敏感配置存储、在读取接口中脱敏,并在日志和错误信息中避免泄露。URL 沿用现有出站 URL 校验与 SSRF 防护。

模板语义

用户在 Web 设置页编辑完整 JSON 请求体,以选择企业微信支持的任意消息格式,例如 textmarkdownnewstemplate_card

模板变量仅能作为 JSON 值出现,服务端使用 JSON 编码后的字符串替换,调用方不得在变量外添加引号。示例:

{
  "msgtype": "text",
  "text": {
    "content": {{message}}
  }
}

可用变量:

  • 通用:{{event}}{{title}}{{message}}{{timestamp}}
  • 短信事件:{{content}}{{number}}{{device_id}}{{device_name}}{{device_label}}{{time}}

自动任务使用通用变量;短信专属变量在自动任务中替换为空字符串。模板渲染后必须为非空 JSON 对象,不得保留模板变量;无效模板在保存和测试时拒绝。

发送流程

短信分发器为 wecom 维护独立游标,发送失败不会阻塞其他通知渠道。自动任务完成后,和 Telegram、Bark、邮件、PushPlus、通用 Webhook 一样,向已启用的 wecom 通道发送结果。

发送器逐一 POST 渲染后的 JSON 到所有配置 URL,使用现有受限 HTTP 客户端。除 HTTP 2xx 外,企业微信返回 JSON 的 errcode 非零也视为服务商拒绝。

Web 与 API

设置 API 将 wecom 加入已知通道和配置字段白名单,并提供 POST /api/settings/notifications/wecom/test。Web 设置页新增“企业微信”页签、启用开关、逐行编辑的 Webhook URL 列表、JSON 模板编辑器和测试按钮。

默认模板使用 text 消息,发送一条可辨识的测试内容。

验证

后端测试覆盖:配置字段验证、模板的 JSON 转义和拒绝无效模板、企业微信请求载荷、非零 errcode 失败处理、通知设置 API 读写与敏感 Webhook URL 保留。前端构建用于验证新增表单与类型契约。