调用一次通用格式的 HTTP 请求,HookHub 按你配置的规则,把消息并行分发到 Bark、Server酱、PushPlus、企业微信、钉钉、飞书、Telegram、ntfy 等渠道。
ADMIN_PASSWORD。/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
}
| 字段 | 类型 | 说明 |
|---|---|---|
| title | string | 标题(不传时取 body 首行) |
| body | string | 正文(也兼容 content / desp / text) |
| level | string | 级别:info / success / warning / error |
| channel | string | 直接指定目标渠道类型(需在令牌白名单内) |
| targets | string[] | 指定目标渠道 id 或 group:名称 渠道组 |
| tags | string[] | 标签,路由规则可按标签匹配 |
| url | string | 关联链接(部分渠道支持点击跳转) |
| data | object | 任意自定义数据,模板中用 data.xxx 引用 |
bark,粘贴设备 Key。api.day.app)。sctpxxxxxxxxxx 的 Key。serverchan,粘贴 SendKey。xxxxxxxxxxxxxxxx)。pushplus,粘贴 Token。key= 后面的部分。wecom,粘贴 Key。access_token= 后面部分。dingtalk,填入 Token 和密钥。https://open.feishu.cn/open-apis/bot/v2/hook/xxx)。feishu,填入 Webhook 与密钥。@BotFather,发 /newbot 创建机器人,得到 Token。telegram,填入 Bot Token 与 Chat ID。ntfy.sh 或自建,取一个 Topic 名。ntfy / gotify。discord / slack,粘贴 URL。re_xxx)。resend,填 API Key / 发件人 / 收件人。custom。{{title}} 等占位符)。把 YOUR_TOKEN 换成你后台生成的令牌。
curl -X POST https://你的域名/hook/YOUR_TOKEN \
-H "Content-Type: application/json" \
-d '{"title":"服务器报警","body":"磁盘 90%","level":"error","tags":["disk"]}'
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}]
import requests
resp = requests.post(
'https://你的域名/hook/YOUR_TOKEN',
json={
'title': '定时任务完成',
'body': '每日备份已执行完毕',
'level': 'info',
'tags': ['cron', 'backup'],
},
timeout=10,
)
print(resp.json())
https://你的域名/hook/YOUR_TOKEN?title=标题&body=正文内容&level=warning
令牌不存在 / 已禁用 / 已过期;或开启了 X-Signature 签名校验但请求未带正确签名。检查令牌与签名配置。
触发了限流:同一个令牌每分钟最多 60 次(内存滑动窗口,重启即清零)。间隔几秒再试即可。
响应里的 results 数组会显示每个渠道的发送结果(status 与 error)。常见原因:Key 填错、渠道被禁用、令牌白名单未包含该渠道、钉钉/飞书签名密钥不匹配。
渠道请求超时上限 8 秒,超时会在结果里显示「请求超时」。检查目标服务是否可达、Key 是否正确。HookHub 不会生成日志——请以同步返回的 results 为准。
出于安全(SSRF 防护),目标 URL 只能是公网 http/https,内网 IP(127.x、10.x、172.16-31.x、192.168.x 等)会被拦截。
| 资源 | 免费额度 | 本项目用法 |
|---|---|---|
| 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/天 的红线。