ドキュメント / Webhook

Webhook

設定 → Webhookでエンドポイントを設定すると、購読しているイベントごとにMeshwireが署名付きJSONペイロードをPOSTします。

イベントカタログ

イベント説明
bot.published新しいフローのバージョンが公開されました
subscriber.created新しい購読者がボットに参加しました
subscriber.blocked購読者がボットをブロックしました
broadcast.completed配信の送信が完了しました
broadcast.failed配信の送信に失敗しました
message.inbound受信メッセージがありました

署名を検証する

すべてのリクエストには X-Meshwire-Signature ヘッダーが含まれます。これは、リクエストボディの生データをエンドポイントのシークレットで署名したHMAC-SHA256の16進ダイジェストです。

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は署名付きJSONペイロードを設定されたエンドポイントへPOSTします。受信webhookは外部イベントでフローを起動し、各トリガーは独自のイベント名を待ち受けるため、1つのエンドポイントで複数のフローを駆動できます。\nTelegram自体に触れる診断 — 同梱のsmokeおよびdiagnoseスクリプト — は厳格に読み取り専用です。webhookを登録せずコマンドも送りません。本番状態を変えられる診断ツールは、時限付きの障害だからです。登録はアプリケーションの保護されたフロー内でのみ行われます。\nインストールがプロキシやWAFの背後にある場合、チャレンジページがwebhook呼び出しを横取りすることがあります。システムはその形状を検出し、同じ壁に黙ってリトライするのではなく、ハードリフレッシュを促します。