文档 / Webhook

Webhook

在“设置 → Webhook”下配置一个接口地址,Meshwire 将为每个已订阅的事件通过 POST 发送已签名的 JSON 负载。

事件目录

事件描述
bot.published发布了新的流程版本
subscriber.created新订阅者加入了机器人
subscriber.blocked订阅者屏蔽了机器人
broadcast.completed群发已完成发送
broadcast.failed群发发送失败
message.inbound收到一条入站消息

验证签名

每个请求都包含一个 X-Meshwire-Signature 请求头:这是使用您的接口密钥对原始请求正文计算得到的 HMAC-SHA256 十六进制摘要。

const expected = crypto
  .createHmac("sha256", endpointSecret)
  .update(rawBody)
  .digest("hex");

if (expected !== req.headers["x-botforge-signature"]) {
  return res.status(401).end();
}

重试与退避

如果 5 秒内未收到 2xx 响应,投递将按指数退避重试:1 分钟、5 分钟、30 分钟、2 小时,之后每 12 小时一次,最长持续 24 小时。最后一次尝试失败后,该接口会被标记,并通过邮件通知您。1 小时内失败率超过 50% 的接口将被临时禁用。

负载示例

{
  "id": "evt_3n7f",
  "type": "broadcast.completed",
  "createdAt": "2024-05-02T14:03:11Z",
  "data": {
    "broadcastId": "bcast_7f1",
    "botId": "bot_9k2",
    "stats": { "total": 4210, "delivered": 4180, "blocked": 19, "failed": 11 }
  }
}

深入阅读

投递、重试与只读诊断

出站 Webhook 会向你配置的端点 POST 一个带签名的 JSON 载荷;入站 Webhook 依据外部事件触发流程,每个触发器监听自己的事件名,因此一个端点可以驱动多个流程。\n涉及 Telegram 本身的诊断——随包附带的 smoke 与 diagnose 脚本——严格只读:它们绝不注册 Webhook、绝不发送命令,因为一个能改动生产状态的诊断工具就是一颗待爆的雷。注册只发生在应用内受防护的流程中。\n如果安装位于代理或 WAF 之后,质询页可能拦截 Webhook 调用;系统会识别这种形态并提示你硬刷新,而不是默默地向同一堵墙重试。