通知与 Webhook 配置

Webhook 通知渠道:URL、可选 HMAC 签名、请求体约定,以及运营/控制台绑定与试发。

运营后台「系统通知」与控制台「通知设置」均可启用 Webhook,向你提供的 HTTPS/HTTP 地址投递运维告警。可与 Telegram 单独或同时使用。

适用场景

  • 把告警接入自建服务、消息网关、低代码自动化(如 n8n)或其它 IM
  • 不想把 Bot Token 放在产品里,而由你自己的服务再转发

运营侧与账号侧配置互不影响;同一侧开启 Webhook 后,每次通知会向该 URL 发一次 POST(与 Telegram 并行时两边都会发)。

配置字段

字段必填说明
Webhook 开关关闭则不投递
Webhook URL开启后必填须以 http://https:// 开头
签名密钥可选填写后对请求体做 HMAC-SHA256,并写入签名头
签名头名可选有密钥时生效;留空默认 X-Adswds-Signature

填到哪里

控制台(本账号)

  1. 管理员打开 系统管理 → 通知设置 → 渠道 → Webhook
  2. 开启并填写 URL;需要验签时再填密钥与头名
  3. 保存后点 试发,在你的接收端确认收到 JSON

运营后台

  1. 打开 系统通知 → 渠道 → Webhook
  2. 同样配置 URL / 可选签名
  3. 保存并试发

请求约定

平台对你的 URL 发起:

  • 方法POST
  • Content-Typeapplication/json
  • User-AgentAdswds-Notify-Webhook/1.0
  • 超时:约 15 秒;不跟随 HTTP 重定向(3xx 不算成功)
  • 成功判定:HTTP 状态码在 2xx;其它状态视为投递失败

请求体

正文为 JSON,仅两个字段(已按当前通知语言渲染后的标题与正文):

{
  "title": "通知标题",
  "body": "通知正文"
}

模板变量(如 {{client_name}})在服务端渲染后再发出;Webhook 不会附带原始事件 ID 或未渲染变量表。

可选签名(推荐)

若配置了签名密钥,平台对原始请求体字节计算:

HMAC-SHA256(secret, raw_body) → 十六进制小写

并写入请求头(默认名 X-Adswds-Signature):

X-Adswds-Signature: sha256=<hex>

接收端应用同一密钥对收到的 raw body 重算 HMAC,与头中 sha256= 后的值做常量时间比较。未配置密钥时带签名头。

示例(伪代码):

expected = "sha256=" + hex(hmac_sha256(secret, raw_body))
assert header["X-Adswds-Signature"] == expected

接收端示例

用临时公网隧道或自建接口即可验证。最小 Node 示例:

import http from 'node:http'
import crypto from 'node:crypto'

const SECRET = process.env.HOOK_SECRET || ''

http.createServer((req, res) => {
  const chunks = []
  req.on('data', (c) => chunks.push(c))
  req.on('end', () => {
    const raw = Buffer.concat(chunks)
    if (SECRET) {
      const sig = req.headers['x-adswds-signature'] || ''
      const expected =
        'sha256=' + crypto.createHmac('sha256', SECRET).update(raw).digest('hex')
      if (sig !== expected) {
        res.writeHead(401)
        res.end('bad signature')
        return
      }
    }
    console.log(JSON.parse(raw.toString('utf8')))
    res.writeHead(200)
    res.end('ok')
  })
}).listen(8080)

将产品中的 Webhook URL 指到该服务的公网地址,密钥与产品配置一致,然后点试发。

试发与排障

现象可检查
试发失败:URL 无效是否以 http:// / https:// 开头;勿漏协议
试发失败:HTTP 非 2xx接收端是否返回 200–299;是否把请求重定向到别处(平台不跟随)
验签失败是否用原始 body 字节计算;密钥是否与产品一致;头名是否匹配(默认 X-Adswds-Signature
试发成功但业务告警没有事件开关、总开关、账号是否在服务期;与 Telegram 无关时可单独关 TG 排查
超时接收端应在约 15 秒内返回;重逻辑请先 ACK 再异步处理

相关页面:通知与 Telegram 配置 · 系统与账号 · 常见问题