Webhookとは?
Webhookは、イベントが発生した時にWaffo Pancakeがサーバーに自動送信する通知です — 支払い成功、サブスクリプション更新、返金処理など。 Webhookが必要な理由:- 配信の自動化:支払い後すぐにダウンロードリンクを送信したりアクセスを付与
- システムの同期:サブスクリプションステータス変更時にデータベースを更新
- リアルタイム対応:失敗した支払い、キャンセル、返金にリアルタイムで対応
ステップ1:DashboardでWebhookを追加
1
設定に移動
Dashboardで 設定 → Webhooks に移動します。

2
フォーマットを選択
送信先に合わせてペイロードの形式を選びます。自前のバックエンドなら Raw JSON、Slack / Discord / Lark(飛書)/ Telegram などのチャットプラットフォーム形式を選べば、その先でそのまま自然に表示されます。あるいは OpenClaw / Hermes(セルフホストの Pancake プラグイン)を選んで独自ルーティングや下流処理に流すこともできます。詳細は下記の ペイロード形式を選ぶ を参照。

3
Webhook URLを設定
Waffo Pancakeがイベント通知を送信する先のURLを入力します。
- テストモードURL:開発/ステージングサーバー(例:
https://staging.yoursite.com/webhooks/waffo) - 本番URL:本番サーバー(例:
https://yoursite.com/webhooks/waffo)
前のステップで Telegram を選んだ場合は、URLではなく Bot Token と Chat ID を入力します。取得方法は下記の Telegram を参照してください。
4
イベントを選択
すべてのイベントがデフォルトで購読されています。不要なイベントのチェックを外してください。
5
保存
Save Webhook をクリックします。
本番運用の注意:本番モード(Live Mode)のWebhookは、ストアの審査通過後にのみ配信されます。審査中はテストモードのWebhookをステージング側で利用してください。
ペイロード形式を選ぶ
Waffoは送信先が期待するフォーマットでイベントを配信できるので、自分で変換器を書く必要はありません。Webhook追加時にフォーマットを選ぶだけで、後から変えたければ別フォーマットで追加し直せばOKです。
RSA-SHA256署名が付くのは Raw だけです。チャットプラットフォーム形式は、各プラットフォームが発行するURL埋め込み型のトークンで認証されるため、署名検証は使いません。
Raw
- バックエンドで
POST application/jsonを受け付けるHTTPSエンドポイントを用意します。 - URLを Endpoint URL に貼り付けます。
- 設定 → Webhooks ページで、対象環境(Test または Production)の Webhook Public Key(検証用公開鍵)をそのままコピーします。配信検証に使います(API Reference — Webhooks を参照)。この公開鍵はプラットフォーム共通で、すべてのストアで同じです。今追加した Webhook とは無関係で、Webhook URL の追加・編集・削除があっても変わりません。
飛書 / Lark
- Lark(飛書)のグループに カスタムボット を追加し、そのWebhook URLをコピーします。
- URLは
https://open.feishu.cn/open-apis/bot/v2/hook/<hook-id>の形式です(海外リージョンはopen.larksuite.com/...ですが、どちらでも動作します)。 - URLを Endpoint URL に貼り付けます。
Slack
- Slackワークスペースで宛先チャンネル向けに Incoming Webhook をインストールします。
- Webhook URLをコピーします。形式は
https://hooks.slack.com/services/T.../B.../<token>です。 - URLを Endpoint URL に貼り付けます。
Discord
- 宛先チャンネルで チャンネルを編集 → 連携サービス → ウェブフック → 新しいウェブフック を開き、URLをコピーします。
- 形式:
https://discord.com/api/webhooks/<id>/<token>。 - URLを Endpoint URL に貼り付けます。
Telegram
Telegramでは Bot Token と Chat ID の両方が必要です。TelegramのsendMessage URLはWaffoが自動で組み立てます。
- @BotFather と会話してボットを作成(または既存のものを選択)し、トークンをコピーします。例:
123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11。 - 宛先のチャットまたはチャンネルにボットを追加し、メッセージ送信権限を付与します。
- Chat IDを取得します。簡単な方法:そのチャットにメッセージを1通送信してから
https://api.telegram.org/bot<TOKEN>/getUpdatesにアクセスし、レスポンスのchat.idをコピーします。 - Webhookを追加 のモーダルで Telegram を選び、Bot Token と Chat ID を貼り付けて保存します。
https://api.telegram.org/bot<TOKEN>/sendMessage に対して、指定された値を chat_id にセットしてPOSTします。
OpenClaw / Hermes(Pancakeプラグイン)
Pancakeプラグインは、Waffoのセルフホスト型リレーです。Waffoからイベントを受け取り、独自ロジック(テンプレート、レート制限、マルチファンアウト)を実行し、任意の宛先へ転送します。OpenClaw と Hermes は同プラグインの2種類のすぐ使えるフレーバーで、スタックに合う方を選んでください。-
対応するセットアップコマンドでプラグインをインストールします:
フルセットアップガイド:github.com/waffo-com/waffo-pancake-plugin
-
インストール後、
https://relay.waffo.ai/webhook/<webhook-id>の形式のリレーURLが発行されます。 - Webhookを追加 モーダルで OpenClaw / Hermes を選び、リレーURLを貼り付けて保存します。
ステップ2:イベントタイプを理解
Waffo Pancakeは以下のWebhookイベントを送信します:注文イベント
サブスクリプションイベント
返金イベント
ステップ3:メール通知を設定
Webhookイベントに加えて、あなたと顧客のメール通知も設定できます。マーチャント通知
設定 → 通知で、どのイベントがメールアラートをトリガーするか選択:- 新規注文
- 新規サブスクリプション
- 支払い失敗
- 返金リクエスト

顧客通知
顧客は以下のイベントで自動的にメールを受信:- 注文確認
- サブスクリプション確認
- サブスクリプション更新
- サブスクリプションキャンセル
- 支払い失敗
Webhookの仕組み
リトライポリシー
サーバーが2xxステータスコードで応答しない場合、Waffo Pancakeがリトライ:
5回のリトライがすべて失敗すると、イベントは失敗としてマークされます。
開発者向け:コード統合
Webhookをサーバーに統合する場合のフロー:1. Webhookエンドポイントを作成
サーバーにイベントを受信するPOSTエンドポイントが必要です。具体的な実装は技術スタックによります。2. 署名を検証
すべてのWebhookリクエストにはセキュリティ用の署名ヘッダーが含まれます。リクエストがWaffo Pancakeからのものであることを確認してください。3. イベントを処理
イベントタイプとデータを解析し、適切なアクション(商品配信、サブスクリプションステータス更新など)を実行。4. 迅速に応答
できるだけ早く200ステータスコードを返してください。重い処理が必要な場合は、応答後に非同期で実行。詳細なコード例と署名検証については、APIリファレンス — Webhooksをご覧ください。
Webhookのテスト
1
テストWebhook URLを設定
Dashboard → 設定 → Webhooksで、テストサーバーのURLを入力。
2
テスト購入を行う
テストモードで購入を作成。テストURLにWebhookイベントがトリガーされます。
3
受信を確認
サーバーログを確認して、Webhookが正しく受信・処理されたことを確認。
ngrok を使ったローカル開発
ローカルで webhook ハンドラーを開発しているとき、Pancake のサーバーからhttp://localhost:3000 には直接アクセスできません。受信リクエストをローカルポートに転送する公開 HTTPS トンネルが必要です。ngrok を推奨します — 開発用途は無料で、すべてのカスタムヘッダー(X-Waffo-Signature を含む)を保持します。
なぜトンネルが必要か
Webhook 配信はサーバーへの受信です:Pancake が設定した URL に対して POST します。localhost のアドレスは自分のマシンからしかアクセスできないため、トンネルがないとリクエストは届きません。トンネルは開発セッションの間、ローカルサーバーに公開可能な HTTPS ホスト名を提供します。ngrok のインストールと起動
1
インストール
- macOS:
brew install ngrok - Windows / Linux:ngrok.com/download からダウンロード
2
認証(無料プランで OK)
ngrok.com でサインアップし、ダッシュボードから authtoken を取得して以下を実行:
3
トンネルを起動
ローカルサーバーのポートに ngrok を向けます。webhook ハンドラーが ngrok は次のような転送 URL を出力します:
localhost:3000 で動いている場合:https://...ngrok-free.app の URL をコピーします — これがあなたの公開 webhook エンドポイントです。Pancake への接続
1
Test Webhook URL を設定
マーチャントダッシュボードでストアを開き、Settings → Webhooks に移動。ngrok URL(ハンドラーパスを付けたもの、例:
https://abc-123.ngrok-free.app/api/webhooks/waffo)を Test Webhook URL に貼り付け、受信したいイベントを選択して保存します。2
イベントを発火
ダッシュボードで Send test event をクリックするか、Test モードで実際のアクション(テストカードでチェックアウトを完了するなど)を実行します。
3
リクエストを確認
ngrok のローカル web インスペクタ http://127.0.0.1:4040 を開きます — ヘッダーとボディを含むすべての通過リクエストが表示されます。
X-Waffo-Signature ヘッダーが含まれていることを確認してください。4
ハンドラーで検証
ローカルサーバーのログを確認します。webhook の POST が到着し、
verifyWebhook() が成功するはずです。検証が失敗する場合は下の「よくある落とし穴」を参照してください。よくある落とし穴
Cloudflared という代替
アカウント不要の選択肢が好みなら、cloudflared も同様に使えます:*.trycloudflare.com 形式の URL を出力するのでそのままダッシュボードに貼れます。トレードオフはリクエストインスペクタ UI が組み込まれていないこと — 自前のサーバーログに頼ることになります。
動作確認チェックリスト
- ローカルサーバーが起動し、想定ポートで listen している
-
ngrok http <port>が動作中、転送 URL を控えた - ダッシュボードの Test Webhook URL が現在の ngrok URL(ハンドラーパス含む)と一致
- http://127.0.0.1:4040 で入信リクエストが見え、
X-Waffo-Signatureヘッダーが付いている - ローカルログに
verifyWebhook成功とイベントハンドラー実行が出ている
ベストプラクティス
- 迅速に応答:すぐに200を返し、非同期で処理
- 重複を処理:イベントは複数回送信される可能性あり — 冪等な処理を実装
- 署名を検証:処理前に必ずWebhook署名を検証
- すべてを記録:デバッグ用に受信したWebhookのログを保持
- 失敗を監視:Dashboardで失敗したWebhook配信を確認
チェックリスト
- テスト・本番のWebhook URLを設定
- チームのメール通知を設定
- 顧客の通知設定を構成
- テストWebhookの受信と処理を確認
- 署名検証を実装(コード統合の場合)
次のステップ
返金を管理
返金リクエストの処理と返金状況の追跡
APIリファレンス — Webhooks
詳細なWebhookペイロード形式とコード例