Cloudflare + Server酱:安全与健康事件推送到微信
效果:Cloudflare 的安全与健康事件触发时,微信立即收到推送通知。
前置条件
- 获取 Server酱 SendKey(参考 30 秒获取 SendKey)
- 拥有 Cloudflare 账号及需要监控的域名/服务
配置步骤
Cloudflare Notifications 支持 Webhook,可通过两种方式接入 Server酱。
方法一:Notifications 直连(固定标题)
在 Cloudflare Notifications 中添加 Webhook destination,URL 直接填写以下地址(中文需 urlencode):
https://sctapi.ftqq.com/你的SENDKEY.send?title=Cloudflare%E5%91%8A%E8%AD%A6
随后在具体的通知规则中选择此 Webhook 作为目标即可。此方式 title 固定为"Cloudflare告警",正文为 Cloudflare 默认发送的 JSON 内容。
方法二:Workers 通用中转(自定义内容)
如果需要提取告警 JSON 中的具体字段作为标题或正文,可使用 Cloudflare Workers 做中转。这也是所有"只发固定 JSON"平台的通用中转方案。
- 创建 Worker 并绑定环境变量
SERVERCHAN_SENDKEY,值为你的 SendKey。如果是 Server酱³(SendKey 以sctp开头),还需绑定SERVERCHAN_UID(UID 取自 sctp 后的数字)。 - 部署 Worker 代码(见下方完整示例)。
- 在 Cloudflare Notifications 中添加 Webhook destination,URL 填写该 Worker 的路由地址。
完整示例
以下为 Cloudflare Worker 中转代码,接收任意平台 POST 过来的固定 JSON,提取字段后转发到 Server酱:
export default {
async fetch(request, env) {
if (request.method !== 'POST') return new Response('ok');
const sendkey = env.SERVERCHAN_SENDKEY;
const uid = env.SERVERCHAN_UID || '';
const apiUrl = uid
? `https://${uid}.push.ft07.com/send/${sendkey}.send`
: `https://sctapi.ftqq.com/${sendkey}.send`;
try {
const payload = await request.json();
// 根据实际平台 JSON 结构提取字段,以下为示例
const title = payload.name || 'Cloudflare 告警';
const desp = payload.text || JSON.stringify(payload, null, 2);
await fetch(apiUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: `title=${encodeURIComponent(title)}&desp=${encodeURIComponent(desp)}`
});
} catch (e) {
// 忽略解析错误
}
return new Response('ok');
}
};
常见问题
免费额度用完了怎么办? Server酱免费版每日提供 5 条推送。订阅会员目前特价最低 3 元/月,一天最多可发 1000 条(价格详情)。
配置后没收到消息? 检查 SendKey 是否正确,以及是否在 Cloudflare 触发了对应事件。也可参考 常见问题与排查。
推送频率有限制吗? Server酱 API 限制每分钟请求上限为 50 次,会员每日 API 请求上限为 1000 次。高频告警场景建议在 Worker 中做简单合并。