n8n webhook トリガー
Zenovay イベントをオープンソースのワークフローツール n8n にパイプし、n8n が統合するあらゆる場所にルーティングします。Postgres、Redis、GitHub、Notion、独自の HTTP API、カスタム JavaScript など多岐にわたります。
n8n の Webhook ノードが Zenovay イベントを受け取ります。セルフホストの n8n と n8n Cloud の両方で同様に動作します。
アウトバウンド webhook は Zenovay の Pro+ 機能です。プランをアップグレードして有効にしてください。
1. n8n ワークフローを構築する
- n8n で新しいワークフローを作成します。
- トリガーとして Webhook ノードを追加します。
- HTTP Method:
POST - Path:わかりやすいパスを選択します(例:
zenovay-events) - Authentication:今はNoneのままにします(ステップ 4 で HMAC 検証を追加します)
- Respond:
Immediately(レスポンスボディは Zenovay には関係ありません。2xx が返れば十分です)
- HTTP Method:
- パネル上部の Listen for test event をクリックします。
- n8n が表示する Test URL をコピーします(例:
https://your-n8n-host.com/webhook-test/zenovay-events)。開いたまま次のステップに進んでください。
2. Zenovay に webhook を追加する
app.zenovay.comで Settings → Webhooks に移動します。- イベントを送信するウェブサイトを選択します。
- Add webhook をクリックします。
- 以下を入力します。
- Name:
n8n — <フローの内容>(例:n8n — Postgres に保存) - URL:ステップ 1 の n8n テスト URL を貼り付けます
- Events:フローが反応すべきイベントを選択します
- Name:
- Create webhook をクリックします。
- テストイベントを送信(紙飛行機アイコン)をクリックします。
n8n の Webhook ノードに取得したイベントが表示されるはずです。Use captured event をクリックして、それをワークフローの残りのサンプルペイロードとして使用します。
3. テスト URL から本番 URL に切り替える
n8n はテスト URL(「Listen」をクリックしたときのみ動作)と本番 URL(常に稼働)を区別します。
- ワークフローが構築・テストされたら、Activate(右上)をクリックします。
- n8n が Production URL を表示します。通常はテスト URL から
-testを除いたものです(例:https://your-n8n-host.com/webhook/zenovay-events)。 - Zenovay の webhook 設定で webhook を編集し、テスト URL を本番 URL に置き換えます。
- もう一度テストイベントを送信して正常に届くことを確認します。
4. n8n で Zenovay の署名を検証する
本番環境の信頼性を高めるため、HMAC-SHA256 署名を検証して本物の Zenovay イベントのみがフローをトリガーするようにします。
Webhook ノードの直後に Function ノードを追加します。
const crypto = require('crypto');
const signature = $input.item.json.headers['x-zenovay-signature'] || '';
const provided = signature.replace(/^sha256=/, '');
const rawBody = JSON.stringify($input.item.json.body);
const expected = crypto.createHmac('sha256', $env.ZENOVAY_WEBHOOK_SECRET)
.update(rawBody)
.digest('hex');
if (provided !== expected) {
throw new Error('Invalid Zenovay signature');
}
return $input.item;
ZENOVAY_WEBHOOK_SECRET を n8n の環境変数(Settings → Variables)として設定します。値は Zenovay の Settings → Webhooks → webhook カードの目のアイコンから確認できます。
署名は生のリクエストボディに対して計算されます。パースされた JSON ではありません。n8n は $input.item.json.body でボディを文字列化しますが、n8n のバージョンによってはキーの順序が変わって検証が失敗する場合があります。その場合は、Webhook ノードの「Response」モードを「Use response code from previous node」に設定し、$input.item.binary.body.data から生のボディを読み取ってください。
5. よくあるワークフローのレシピ
| トリガー | n8n フロー |
|---|---|
goal_completed | Postgres → revenue_events に INSERT する |
traffic_spike | Slack ノード → オンコール担当者に DM を送る |
website_down | GitHub Issues → 緊急 issue を作成してラベルを割り当てる |
error_spike | Sentry ノード → リリースにタグを付けて Discord の #engineering に通知する |
トラブルシューティング
- n8n にテストイベントは表示されるが本番 URL が動作しない:ワークフローがアクティブになっていません。Active トグル(右上)をクリックして緑色にしてください。
- HMAC 検証が失敗する:正しい webhook シークレットをコピーしたか確認してください。シークレットはアカウントではなく webhook ごとに異なります。
- n8n がタイムアウトする:Webhook ノードのデフォルトレスポンスモード
Immediatelyはすぐに 200 を返します。Zenovay はこれを成功とみなします。When Last Node Finishesに設定した場合、長いフローが Zenovay の 5 秒の配信タイムアウトを超える可能性があります(その後は 6 時間の cron で再試行されます)。