Webhooks
Webhook は、チャネルプロバイダーが PulseHub に何かが起こったことを通知する方法です — 顧客がメッセージを送信した、配信ステータスが変更された、など。
Webhook URL パターン
https://yourdomain.com/webhooks/{channel_type}/{channel_id}
Webhook 検証(GET リクエスト)
一部のプロバイダーは、実際のメッセージを送信する前にチャレンジで webhook URL を検証します:
WhatsApp / Facebook / Instagram
PulseHub は hub.verify_token を確認し、hub.challenge を返します。
Telegram
GET 検証なし — Bot API で webhook を設定するだけで十分です。
Viber
初回オープン時に conversation_started イベントを送信。PulseHub は {"status": 0} を返します。
署名検証
| プロバイダー | ヘッダー | シークレ ット |
|---|---|---|
| WhatsApp/Facebook/Instagram | X-Hub-Signature-256 | App Secret |
| Viber | X-Viber-Content-Signature | Auth Token |
| Twilio | — | URL ベースのセキュリティ |
| Telegram | — | UUID ベースの URL セキュリティ |
すべての HMAC 比較は hash_equals()(定数時間)を使用します。
イベントログ
すべての webhook ペイロードは webhook_events テーブルに status = pending で記録されます。処理後:processed。失敗時:failed。
失敗した Webhook のリトライ
cron ジョブが 24 時間以内に失敗したイベントを最大 5 回リトライします。