「日志推送」十个推送渠道怎么配:从企业微信到自建 Webhook

「日志推送」十个推送渠道怎么配:从企业微信到自建 Webhook

企业微信、钉钉、飞书、Bark、企业微信应用、SMTP、PushPlus、魔法推送、通用 Webhook、MeoW —— 十个渠道的准备步骤、要填什么、各自的坑,以及排错对照表。

November 8, 20262026年11月8日
21 min read约 12 分钟

Read in English →

装好「日志推送」只是第一步。真正决定它好不好用的,是消息最后落在哪里——落在微信群里、落在手机锁屏上、还是落进一个你自己写的 Webhook。

它支持十个渠道,每个都有自己的脾气:钉钉要关键字、企业微信应用要可信 IP、邮件要用授权码不是密码、魔法推送填错地址会直接 403。这篇把它们整理成一份可对照的配置手册,内容来自仓库 docs/channels/ 下的各篇文档,重新归并、补上踩坑和排错。

推送渠道与系统设置

一、先选渠道:按「你在哪看消息」决定

渠道消息到达需要什么适合谁
企业微信(群机器人)微信群消息注册企业微信 + 群机器人 Webhook首选,微信里直接看
企业微信应用微信 / 企业微信(应用到人)自建应用 + 可信 IP想定向推给某人/某部门
钉钉钉钉群群机器人 + 自定义关键字单位/团队用钉钉
飞书飞书群群机器人 Webhook团队用飞书
BarkiOS 通知(锁屏横幅)Bark App + 设备 URLiOS 用户最强的实时性
PushPlus微信模板消息token已经有 PushPlus 账号
SMTP 邮件邮箱SMTP 服务器 + 授权码要留档、要转发、无手机推送
魔法推送自建聚合器转发部署魔法推送 + 基础 URL + token想把多设备/多渠道统一管
通用 Webhook任意 HTTP 服务一个接收地址接 ntfy、Gotify、Home Assistant、n8n、自建服务
MeoW手机通知MeoW App 注册昵称想要最简配置的安卓/iOS 推送

我的建议是两个渠道起步:企业微信(进群,能回看历史)+ Bark(锁屏,能立刻看到)。一个负责”事后能查”,一个负责”当场就响”。重要的事两个都发,也不冲突——渠道是并行投递的。

二、三种配法,优先级记牢

同一个渠道可以用三种方式配置:

  1. Web 配置页:加渠道 → 选类型 → 填地址/JSON → 保存 → 页面底部「发送测试」。
  2. config/config.json:直接写字段,如 wechat_webhook_url、smtp_params、webhook_params。
  3. 环境变量:如 WECHAT_WEBHOOK_URL、SMTP_PARAMS、WEBHOOK_PARAMS。

优先级:环境变量 > config.json / Web 页。谁被环境变量设过,读取配置时就直接跳过那个键——所以「环境变量里设过的东西,UI 上改不动」是设计,不是 bug。排查「改了配置不生效」时先看这一步。

多套渠道:pushplus_params、smtp_params、wecom_app_params、webhook_params、meow_params 都支持用竖线 | 分隔多份,例如:

{"token":"aaa"}|{"token":"bbb"}

⚠️ 如果 JSON 内部本身要用 |(比如企业微信应用的 to_user),写成 \u007c,否则会被当成分隔符切开。通过 Web 页保存时会自动处理。

三、企微群机器人:一定要绑管理员微信

这是最多人卡住的一步,原因不在工具,在企业微信的注册流程:

  1. 打开 work.weixin.qq.com 注册企业(名字随便填,个人的也行);
  2. 必须绑定管理员微信,否则后面在微信里收不到消息;
  3. 进管理后台,在「我的企业 → 微信插件」相关设置里,注意那个一定不要勾选的选项(勾了就变成只能在企业微信 App 内接收);
  4. 登录企业微信,进默认群 → 右上角 ... → 消息推送 → 添加机器人 → 保存后拿到 Webhook。

拿到的那串 https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=... 等同于密码:谁拿到都能往你群里发消息。别截图外传、别提交到公开仓库。

顺手说个上限:企业微信群机器人是 20 条/分钟。这就是为什么一轮轮询的几十条事件会被合并成一条汇总发出去——逐条发的结局是被限流静默丢弃。

四、钉钉:安全设置里的关键字必须和标题前缀一致

钉钉群机器人有个安全设置,四项选一。选「自定义关键字」最简单,但关键字不能随便填:

它必须等于应用里的「事件标题前缀」(在配置页最下面「系统设置」里,默认 飞牛NAS)。因为钉钉校验的是消息体里有没有这个字符串,而标题前缀会拼进每条消息的标题。

对不上的症状很典型:钉钉那边不报错、日志里是成功、但消息就是不出现。

另外两个小坑:

  • 钉钉建群至少两个人,所以先拉个人进来,建完群再踢掉;
  • 如果改用「加签」方式,安全设置要换成签名,和关键字不能同时用。

五、飞书:可以个人建群,但别拉外部人员

飞书比钉钉宽松:允许一个人建群。步骤是 群设置 → 群机器人 → 添加机器人 → 自定义机器人 → 拿 Webhook。

两个注意:

  • 个人账号不要拉外部人员(会触发企业间的限制,机器人可能发不出去);
  • 安全设置可以留空,需要的话跟钉钉一样配关键字,关键字同样要和「事件标题前缀」一致。

飞书的 Webhook 填到应用里、渠道选「飞书」,就完事了。

六、企业微信应用:功能最强,但卡在可信 IP

如果你不想把消息发到群里,而是定向发给某个人 / 某部门 / 某标签,用自建应用:

  1. 管理后台「我的企业」页底部拿 企业ID(corpid);
  2. 「应用管理 → 自建 → 创建应用」,记下 AgentId 和 Secret(Secret 要在企业微信客户端里查看);
  3. 应用详情里把「可见范围」加上接收人,否则发不进去;
  4. 配置「企业可信IP」,填 NAS 出网的公网 IP。

第 4 步是主要痛点。没配的话接口返回:

60020  not allow to access from your ip

家庭宽带的公网 IP 还会变,改了 IP 又失效。两个解法:

  • 用有固定 IP 的服务器做反向代理转发到 https://qyapi.weixin.qq.com,然后把应用里的「API 地址」填成代理地址;
  • 或者接受现实,IP 变了就回来改一次。

另外 2022 年 6 月之后新建的应用,配置可信 IP 之前通常要先设「可信域名」或「接收消息服务器 URL」,按后台提示走。

配置 JSON 长这样:

{"corp_id": "ww1234567890abcdef", "corp_secret": "应用Secret", "agent_id": "1000002", "to_user": "@all"}

to_user / to_party / to_tag 都为空时默认发给 @all(应用可见范围内的全部成员)。

七、Bark:一条 URL 就能推到锁屏

iOS 上最省事的就是 Bark:装上 App,首页直接显示你专属的 URL,复制到应用里、渠道选 Bark,完事。

想让通知好看一点,可以在 URL 里塞占位符 {content}:

https://api.day.app/你的Key/这是我的标题/{content}
https://api.day.app/你的Key/{content}?icon=https://day.app/assets/images/avatar.jpg

第一行自定义标题,第二行自定义图标。{content} 会被替换成消息正文——这个占位符是你自己加的,不加也行。

八、SMTP 邮件:用授权码,不是登录密码

邮件是最容易被误配置的渠道,因为大家习惯填邮箱密码——但 SMTP 要的是授权码(也叫应用专用密码)。

准备:在邮箱服务商的设置里开启 SMTP 服务,生成授权码,记下服务器和端口。

{
  "server": "smtp.qq.com",
  "port": 465,
  "username": "yourname@qq.com",
  "password": "邮箱SMTP授权码",
  "from": "飞牛告警",
  "to": "receiver@example.com,backup@example.com"
}
字段必填说明
server是如 smtp.qq.com
port否不填默认 465
username是通常就是完整邮箱地址
password是授权码,不是网页登录密码
to是多个收件人用英文逗号分隔
from否显示名;不含 @ 时当作昵称,和登录邮箱组合显示

端口决定加密方式,不用手动开关:

  • 465 → SMTP_SSL(隐式 TLS);
  • 其它端口(常见 587)→ 明文连接后 STARTTLS。

常用服务商对照:

服务商服务器端口
QQ 邮箱smtp.qq.com465 / 587
网易 163smtp.163.com465 / 587
Outlook / Microsoft 365smtp.office365.com587
Gmailsmtp.gmail.com587(需应用专用密码)

发不出去时按顺序查:授权码是不是最新的 → 端口和服务商要求是否一致 → 服务商那边有没有单独限制 SMTP。

九、魔法推送:别填反代域名

魔法推送 是一个自建推送聚合器:你在它里面配好多个下游渠道(Bark、企微、邮件…),然后「日志推送」只对着它发一次,由它分发。

两个值要记清:

  • 基础 URL:服务根地址,不要带 /api/push。同机部署就填局域网 http://192.168.1.10:818;
  • 访问令牌:在「接口管理」里那个推送接口的 token,不是登录用的 JWT。

三个高频错误:

现象原因
HTTP 403基础 URL 填成了 https://xxx.fnos.net 这类反代域名——容器从内网打公网域名回环,反代常直接拦掉。改成局域网 IP:端口
连不上填了 localhost / 127.0.0.1,在 Docker 里指的就是容器自己
HTTP 400: 部分推送失败已经打到魔法推送了,是它绑定的下游渠道失败,去魔法推送后台查

十、通用 Webhook:接任何东西

内置渠道里没有的平台——ntfy、Gotify、Server 酱、Home Assistant、n8n、自己写的服务——用「通用 Webhook」。返回 2xx 就算成功。

默认发 POST + JSON,体是 {"title": "标题", "content": "正文"}。需要鉴权或特定字段就展开「高级选项」填请求头或请求体模板:

{
  "url": "https://example.com/hook",
  "method": "POST",
  "content_type": "json",
  "headers": "Authorization: Bearer xxx",
  "body": "{\"title\": \"{title}\", \"content\": \"{content}\"}"
}

四个占位符:

占位符内容
{title}消息标题
{content}消息正文
{text}标题 + 正文的完整纯文本
{time}发送时间 YYYY-MM-DD HH:MM:SS

占位符会按内容类型自动转义——JSON 里转义引号和换行,表单和 URL 里做 URL 编码,纯文本原样替换。所以模板本身必须是合法 JSON,否则请求发不出去。

三个现成例子:

  • ntfy:地址 https://ntfy.sh/你的主题,方法 POST,类型纯文本,体 {text};
  • Gotify:地址 https://gotify.example.com/message?token=xxx,JSON 体 {"title": "{title}", "message": "{content}"};
  • GET 推送:地址 https://example.com/push?msg={text},方法 GET(不发请求体)。

安全上做了一件事:运行日志里不会打印查询参数;配置页回显时,地址里的 token/key 和 Authorization、Token、Cookie 这类认证头都会打码,保存时没改过的打码值自动还原。所以你可以放心截图配置页。

十一、MeoW:填个昵称就能收,但别填错

MeoW 是手机推送 App,配置只需要一个昵称:

{"nickname": "你的昵称", "url": "http://192.168.1.10:5666"}

url 可选,填了点通知能跳转(比如直接打开 NAS 首页)。

它有三个硬限制,必须知道:

  • 非会员频率限制:3 秒 1 条、每分钟 15 条、每小时 60 条、每天 1000 条,超了返 429;
  • 昵称未注册会累计封禁 IP:同一 IP 一天内 3 次推到未注册昵称就封。所以「日志推送」收到「昵称未注册」后会自动暂停向该昵称推送,等你改对昵称保存后恢复;
  • 别从多人共享的公共出口 IP 推(容易被判成攻击)。

事件多的时候记得开「轮询汇总模式」,不然很容易撞到限频。

十二、别被自己的工具吵到

渠道配完,最该调的不是渠道,是节奏。四个开关:

开关作用建议
事件勾选只推你关心的事件先把「登录失败 / 硬盘异常 / 容器崩溃 / UPS」勾上,其余先关
轮询汇总模式短时间多条并成一条事件多、或用 MeoW/邮件这类有频率限制的渠道时开
极简推送全部压成一行关键信息只看”有没有事”的阶段开,看细节时关
勿扰模式时段内不推,结束后汇总一条默认 22:00–07:00,跨日自动处理

再加一层兜底:300 秒去重窗口——同一事件 5 分钟内只推一次。一块硬盘反复唤醒、SSH 被人爆破,都靠这个和 5 秒合并窗口挡住,否则手机真的会被震到没电。

十三、排错对照表

配完不成功,先查这张表再看日志:

现象可能原因处理
企业微信不弹消息没绑管理员微信 / 勾了「仅在企业微信接收」回第 3 节重走一遍
钉钉日志成功但没消息自定义关键字 ≠ 事件标题前缀改成和 title_prefix 一致(默认 飞牛NAS)
飞书发不出群里拉了外部人员换成纯内部群
60020企业微信应用未配可信 IP加公网 IP,或用固定 IP 反代
40001 / 40013corpid 或 Secret 错注意 Secret 与应用(AgentId)要对应
81013接收对象不在应用可见范围去应用详情加可见范围
邮件 535 / 认证失败用了登录密码而不是授权码重新生成授权码
邮件超时端口与加密方式不匹配465 或 587,按服务商要求
魔法推送 403基础 URL 用了 *.fnos.net 反代换成局域网 IP:端口
魔法推送 400 部分推送失败下游渠道失败去魔法推送后台查
MeoW 429撞频率限制开轮询汇总,或升级会员
MeoW 404昵称未注册/拼错改对昵称保存即恢复
Webhook 没反应模板不是合法 JSON先在本地验证 JSON
全部渠道静默环境变量覆盖了配置查 *_PARAMS 等变量

十四、最后一句

十个渠道看着多,实际常用的就两三个。先把一个配通、把「发送测试」点绿、再往上加——比一次配五个然后不知道哪一步错了要快得多。

配置页最下面的「发送测试」就是为这个存在的,它会把每个渠道的结果分开列出来:哪个成功、哪个失败、失败返回了什么。

相关阅读: