HookHub 一个 Webhook,多渠道送达

一个 Webhook 地址,
同时送达你的所有通知渠道

调用一次通用格式的 HTTP 请求,HookHub 按你配置的规则,把消息并行分发到 Bark、Server酱、PushPlus、企业微信、钉钉、飞书、Telegram、ntfy 等渠道。

你的服务 / 脚本 / 监控 HookHub Webhook Bark Server酱 企微 钉钉 飞书

三步上手

  1. 登录后台 — 点击右上角「管理员登录」,输入部署时配置的 ADMIN_PASSWORD
  2. 配置渠道 — 在「渠道管理」添加你要用的渠道(如 Bark),粘贴对应的 Key / Token,点「测试发送」验证。
  3. 调用 Webhook — 在「令牌管理」生成一个令牌,复制 /hook/你的令牌 地址,按下面格式发请求即可。

通用请求格式

POST 一个 JSON 到你的 Webhook 地址(也兼容 GET表单纯文本):

POST /hook/YOUR_TOKEN
Content-Type: application/json

{
  "title": "服务器报警",
  "body": "磁盘使用率超过 90%,请及时处理。",
  "level": "error",            // info | success | warning | error
  "channel": "bark",           // 可选:指定单个渠道
  "targets": ["group:oncall"], // 可选:指定目标渠道/组(限制在令牌白名单内)
  "tags": ["disk", "prod"],    // 可选:用于路由匹配
  "url": "https://...",        // 可选:关联链接
  "data": { "host": "web-01" } // 可选:任意自定义数据,模板/路由中可用 data.xxx
}

字段说明

字段类型说明
titlestring标题(不传时取 body 首行)
bodystring正文(也兼容 content / desp / text)
levelstring级别:info / success / warning / error
channelstring直接指定目标渠道类型(需在令牌白名单内)
targetsstring[]指定目标渠道 id 或 group:名称 渠道组
tagsstring[]标签,路由规则可按标签匹配
urlstring关联链接(部分渠道支持点击跳转)
dataobject任意自定义数据,模板中用 data.xxx 引用

各渠道配置教程

Bark

  1. App Store 安装 Bark App。
  2. 打开 App,首页即显示你的「设备 Key」(8 位字符)。
  3. 后台添加渠道,类型选 bark,粘贴设备 Key。
  4. 如需自建服务器,填服务器地址(默认 api.day.app)。

Server酱

  1. 打开 sct.ftqq.com,用 GitHub 登录。
  2. 进入「SendKey」,复制形如 sctpxxxxxxxxxx 的 Key。
  3. 后台添加渠道,类型选 serverchan,粘贴 SendKey。

PushPlus

  1. 打开 pushplus.plus,微信扫码登录并关注公众号。
  2. 首页即显示你的 Token(xxxxxxxxxxxxxxxx)。
  3. 后台添加渠道,类型选 pushplus,粘贴 Token。
  4. 一对多推送可填「群组编码」。

企业微信机器人

  1. 企业微信群 → 右上角 … → 添加群机器人。
  2. 创建后复制 Webhook 地址,取 key= 后面的部分。
  3. 后台添加渠道,类型选 wecom,粘贴 Key。

钉钉机器人

  1. 钉钉群 → 群设置 → 智能群助手 → 添加机器人(自定义)。
  2. 复制 Webhook 地址,取 access_token= 后面部分。
  3. 安全设置建议选「加签」,复制 SEC 开头的密钥。
  4. 后台添加渠道,类型选 dingtalk,填入 Token 和密钥。

飞书机器人

  1. 飞书群 → 设置 → 群机器人 → 添加机器人(自定义)。
  2. 复制 Webhook 地址(https://open.feishu.cn/open-apis/bot/v2/hook/xxx)。
  3. 可开启「签名校验」获取密钥。
  4. 后台添加渠道,类型选 feishu,填入 Webhook 与密钥。

Telegram

  1. 在 Telegram 找 @BotFather,发 /newbot 创建机器人,得到 Token。
  2. 把你的机器人拉进目标群,或私聊它获取 Chat ID。
  3. 后台添加渠道,类型选 telegram,填入 Bot Token 与 Chat ID。

ntfy / Gotify

  1. ntfy:用公共服务器 ntfy.sh 或自建,取一个 Topic 名。
  2. Gotify:自建服务,创建 App 得到 Token。
  3. 后台添加渠道,类型选 ntfy / gotify

Discord / Slack

  1. Discord:频道设置 → 集成 → Webhook,复制 URL。
  2. Slack:应用 → Incoming Webhooks,复制 URL。
  3. 后台添加渠道,类型选 discord / slack,粘贴 URL。

邮件(Resend)

  1. 注册 resend.com,建 API Key(re_xxx)。
  2. 配置发件域名并验证(免费档 3000 封/月)。
  3. 后台添加渠道,类型选 resend,填 API Key / 发件人 / 收件人。

通用自定义 Webhook

  1. 适用于任意支持 HTTP 调用的服务。
  2. 后台添加渠道,类型选 custom
  3. 填写目标 URL、方法、请求头、Body 模板(支持 {{title}} 等占位符)。
  4. 注意:目标 URL 会被 SSRF 防护校验,内网地址将被拒绝。

调用示例

YOUR_TOKEN 换成你后台生成的令牌。

curl

curl -X POST https://你的域名/hook/YOUR_TOKEN \
  -H "Content-Type: application/json" \
  -d '{"title":"服务器报警","body":"磁盘 90%","level":"error","tags":["disk"]}'

JavaScript(fetch)

const res = await fetch('https://你的域名/hook/YOUR_TOKEN', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    title: '订单通知',
    body: '新订单 #1024 已支付',
    level: 'success',
    data: { orderId: '1024' }
  })
});
const data = await res.json();
console.log(data.results); // [{channel, ok, status, error}]

Python(requests)

import requests

resp = requests.post(
    'https://你的域名/hook/YOUR_TOKEN',
    json={
        'title': '定时任务完成',
        'body': '每日备份已执行完毕',
        'level': 'info',
        'tags': ['cron', 'backup'],
    },
    timeout=10,
)
print(resp.json())

浏览器直接打开(GET)

https://你的域名/hook/YOUR_TOKEN?title=标题&body=正文内容&level=warning

常见问题

返回 401

令牌不存在 / 已禁用 / 已过期;或开启了 X-Signature 签名校验但请求未带正确签名。检查令牌与签名配置。

返回 429

触发了限流:同一个令牌每分钟最多 60 次(内存滑动窗口,重启即清零)。间隔几秒再试即可。

渠道没收到消息

响应里的 results 数组会显示每个渠道的发送结果(statuserror)。常见原因:Key 填错、渠道被禁用、令牌白名单未包含该渠道、钉钉/飞书签名密钥不匹配。

请求超时

渠道请求超时上限 8 秒,超时会在结果里显示「请求超时」。检查目标服务是否可达、Key 是否正确。HookHub 不会生成日志——请以同步返回的 results 为准。

自定义 Webhook 被拒绝

出于安全(SSRF 防护),目标 URL 只能是公网 http/https,内网 IP(127.x、10.x、172.16-31.x、192.168.x 等)会被拦截。

免费额度说明

本服务设计为运行在 Cloudflare Free 计划额度内,正常使用不会产生任何费用。
资源免费额度本项目用法
Pages Functions 请求100,000 / 天每次 webhook 调用消耗 1 次
KV 写入1,000 / 天仅管理员保存配置时写入(webhook 请求不写 KV)
KV 读取100,000 / 天配置读取走内存缓存(60s TTL),大幅降低
KV 存储1 GB仅存配置 JSON,几十 KB

关键点:HookHub 不在 webhook 请求路径上写任何 KV——限流用进程内存、不记录日志、不统计用量, 所以 KV 写入量只取决于你手动改配置的次数,永远碰不到 1000/天 的红线。

注意:Cloudflare Free 计划没有超额扣费机制——超出就是请求被拒(429 / 报错),不会产生账单。 只有把账户升级为 Workers Paid 之后才会按量计费。所以请保持账户在 Free 计划,切勿误升级。