# Better Stack 接入 Server酱：服务宕机时推送到微信（2026 教程）

> Better Stack 通过 Outgoing Webhook 将宕机告警推送到 Server酱，再转发到微信。支持直连和中转两种方式。

- 网页版：https://sct.ftqq.com/docs/integrations/better-stack/
- 更新日期：2026-07-17

# Better Stack + Server酱：服务宕机时推送到微信

> 效果：Better Stack 拨测到服务宕机或故障时，自动将告警推送到你的微信。

## 前置条件

- Server酱 SendKey（[30 秒获取教程](https://sct.ftqq.com/docs/getting-started/sendkey/)）
- Better Stack 账号，已创建至少一个 Monitor

## 配置步骤

### 方式一：直连（固定文案，最快）

在 Better Stack 的 Integrations 中添加 Webhook，URL 填写以下地址（`BetterStack%E5%91%8A%E8%AD%A6` 是「BetterStack告警」的 URL 编码）：

```
https://sctapi.ftqq.com/你的SENDKEY.send?title=BetterStack%E5%91%8A%E8%AD%A6
```

Server酱 服务端优先读取 URL query 中的 `title` 参数。配置完成后，Better Stack 每次触发 incident 时，你的微信会收到一条标题为「BetterStack告警」的消息。

直连方式的限制：Better Stack POST 的 JSON body 不会被解析为 Server酱 的 `desp` 正文，你只能收到固定标题，看不到 incident 详情。需要故障信息写入正文时，用下面的中转方式。

### 方式二：中转（带 incident 详情）

用一层中转（如 Cloudflare Workers 或云函数）接收 Better Stack 的 webhook，解析 JSON 后提取 incident 信息，再转发给 Server酱。中转服务向 Server酱 发送的请求格式如下：

```bash
curl -X POST "https://sctapi.ftqq.com/你的SENDKEY.send" \
  --data-urlencode "title=【故障】${incident_name}" \
  --data-urlencode "desp=状态：${incident_state}
URL：${incident_url}
时间：${incident_time}"
```

其中 `${incident_name}` 等变量由中转服务从 Better Stack POST 的 JSON 中提取。如果你使用 Server酱³，端点改为 `https://你的UID.push.ft07.com/send/你的SENDKEY.send`，UID 是 SendKey 中 sctp 与 t 之间的数字。

## 完整示例

以下 Cloudflare Workers 脚本接收 Better Stack webhook，将完整 JSON 作为正文转发到 Server酱：

```javascript
export default {
  async fetch(request) {
    const body = await request.text();

    await fetch("https://sctapi.ftqq.com/你的SENDKEY.send", {
      method: "POST",
      headers: { "Content-Type": "application/x-www-form-urlencoded" },
      body: new URLSearchParams({
        title: "BetterStack告警",
        desp: body
      })
    });

    return new Response("ok");
  }
};
```

部署后，在 Better Stack 的 Webhook URL 中填入 Workers 地址即可。收到第一条消息后，你可以查看完整 JSON 结构，再按需解析提取字段。

## 常见问题

**直连方式收不到消息怎么办？**

确认 SendKey 正确、URL 中中文已 urlencode。Server酱 返回 JSON 中 `code` 为 `0` 表示成功。更多排查见 [常见问题与排查](https://sct.ftqq.com/docs/getting-started/faq/)。

**免费额度够用吗？**

Server酱 免费版每天 5 条，每分钟上限 50 条。Better Stack 的 incident 触发频率通常不高，日常使用足够。订阅会员目前特价最低 3 元/月，一天最多可发 1000 条（[价格详情](https://sct.ftqq.com/subscribe)）。

**频率限制是多少？**

每分钟 50 条。如果多个 monitor 同时触发告暴，可能需要在 Better Stack 侧合并通知或调整重试间隔。

**Better Stack 的 webhook 发了什么数据？**

Better Stack 向配置的 URL POST 一段 JSON，包含 incident 的结构化信息。使用中转方式时，可以在 Workers 中打印 `request.text()` 查看完整内容。

**Server酱 支持推送到哪些通道？**

Server酱 支持推送到微信服务号/企业微信/钉钉/飞书等多个通道，详见 /getting-started/channels/。

## 相关集成

- [Uptime Kuma 宕机告警](https://sct.ftqq.com/docs/integrations/uptime-kuma/)
- [Python 脚本推送](https://sct.ftqq.com/docs/integrations/python/)
- [青龙面板任务通知](https://sct.ftqq.com/docs/integrations/qinglong/)


## 懒人方案：把这段话复制给你的 AI 助手

把下面这段文字原样粘贴给 Claude Code、Cursor 或任何 AI 编程助手，它就会替你完成 Server酱 的接入：

```text
请帮我把 Server酱 微信通知接入到我当前的项目/工具中：
1. API：POST https://sctapi.ftqq.com/{SendKey}.send，参数 title（必填，不能含换行）、desp（正文，支持 Markdown，可选）；成功时返回 JSON 的 code 为 0。
2. 如果我的 SendKey 以 sctp 开头，则改用 https://{uid}.push.ft07.com/send/{SendKey}.send，uid 是 SendKey 中 sctp 与 t 之间的数字。
3. SendKey 从环境变量 SERVERCHAN_SENDKEY 读取；如果没有，提醒我到 https://sct.ftqq.com 免费获取（每天 5 条额度）。
4. 安全要求：不要把 SendKey 硬编码进代码、不要打印到日志、不要提交到 git。
5. 频率约定：任务结束发 1 条结果摘要即可，批量任务合并成一条，不要每步都推。
请根据我当前的项目和场景直接写好代码/配置并验证。
```

