タグ: n8n

  • 【完全ガイド】n8n Webhookの使い方|設定から認証・レスポンス制御・実践例まで

    【完全ガイド】n8n Webhookの使い方|設定から認証・レスポンス制御・実践例まで

    Webhookは、外部サービスからのHTTPリクエストを受け取ってワークフローを起動する、n8nの最も重要なトリガーの一つです。

    APIを持つあらゆるサービスと連携でき、フォーム送信、決済完了、GitHub Push、Slackコマンドなど、リアルタイムなイベント駆動型の自動化を実現できます。

    この記事では、Webhookノードの基本設定から、認証、レスポンス制御、実践的な活用例まで、詳しく解説します。

    Webhookとは?ポーリングとの違い

    Webhookの仕組み

    Webhookは、あるシステムでイベントが発生した際に、別のシステムに自動的にHTTPリクエストを送信する仕組みです。

    ポーリング方式

    • 定期的にデータを取得しに行く
    • 変化がなくてもリクエストが発生
    • リアルタイム性が低い
    • リソース消費が多い

    Webhook方式

    • イベント発生時のみ通知を受け取る
    • リアルタイムに処理を開始
    • 効率的なリソース利用
    • 即時性が高い

    n8n Webhookの特徴

    • HTTPメソッド(GET / POST / PUT / DELETE等)に対応
    • 認証機能(Basic認証、Header認証等)
    • レスポンスの柔軟な制御
    • テスト用URLと本番用URLの分離
    • 最大ペイロードサイズ:16MB(セルフホスト版は変更可能)

    Webhookノードの基本設定

    Step 1:Webhookノードの追加

    1. 新規ワークフローを作成
    2. 「+」ボタンまたは「Add first step」をクリック
    3. 検索ボックスに「Webhook」と入力
    4. 「Webhook」ノードを選択

    Step 2:基本パラメータの設定

    パラメータ 説明 設定例
    HTTP Method 受け付けるHTTPメソッド POST(最も一般的)
    Path WebhookのURLパス /order-notification
    Authentication 認証方式 None / Basic Auth / Header Auth
    Respond レスポンスのタイミング Immediately / When Last Node Finishes

    Step 3:Webhook URLの確認

    Webhookノードを設定すると、2種類のURLが生成されます。

    Test URL


    https://your-n8n-instance.com/webhook-test/xxxxxxxx-xxxx-xxxx

    • テスト実行用
    • 「Listen for Test Event」で待機状態にする必要あり
    • 受信データがエディタに表示される

    Production URL


    https://your-n8n-instance.com/webhook/xxxxxxxx-xxxx-xxxx

    • 本番運用用
    • ワークフローをアクティブ化すると有効になる
    • Executionsタブで実行履歴を確認

    カスタムパスの設定

    デフォルトではランダムなUUIDがパスに設定されますが、わかりやすいカスタムパスに変更できます。

    設定例

    • /contact-form
    • /payment-complete
    • /github-webhook
    • /api/v1/orders

    ルートパラメータの使用

    動的なパスも設定可能です。


    /orders/:orderId
    /users/:userId/profile

    Webhookのテスト方法

    方法1:n8nのテスト機能を使う

    1. Webhookノードを選択
    2. 「Listen for Test Event」をクリック
    3. 待機状態になったら、Test URLにリクエストを送信
    4. 受信データがノードに表示される

    方法2:curlコマンドでテスト

    GETリクエスト


    curl -X GET "https://your-n8n-instance.com/webhook-test/your-path"

    POSTリクエスト(JSONデータ)


    curl -X POST "https://your-n8n-instance.com/webhook-test/your-path"
    -H "Content-Type: application/json"
    -d '{"name": "テスト", "email": "test@example.com"}'

    方法3:ブラウザ拡張機能を使う

    • Talend API Tester(Chrome拡張)
    • Postman
    • Insomnia

    GUIでリクエストを作成・送信でき、レスポンスも確認できます。

    認証の設定

    セキュリティのため、Webhookには認証を設定することを推奨します。

    Basic認証

    ユーザー名とパスワードで認証します。

    設定手順

    1. Authentication:「Basic Auth」を選択
    2. Credentialを作成(ユーザー名・パスワードを設定)

    リクエスト例


    curl -X POST "https://your-n8n-instance.com/webhook/your-path"
    -u "username:password"
    -H "Content-Type: application/json"
    -d '{"data": "test"}'

    Header認証

    カスタムヘッダーで認証します。APIキーの検証に適しています。

    設定手順

    1. Authentication:「Header Auth」を選択
    2. Credentialを作成
    3. Header Name:X-API-Key
    4. Header Value:your-secret-api-key

    リクエスト例


    curl -X POST "https://your-n8n-instance.com/webhook/your-path"
    -H "X-API-Key: your-secret-api-key"
    -H "Content-Type: application/json"
    -d '{"data": "test"}'

    JWT認証

    JWTトークンによる認証も設定可能です。

    レスポンスの制御

    Webhookノードは、リクエストに対するレスポンスを柔軟に制御できます。

    Respond設定の種類

    設定 動作 用途
    Immediately 即座に応答を返す 処理完了を待たない場合
    When Last Node Finishes 最後のノード完了時に応答 処理結果を返す場合
    Using ‘Respond to Webhook’ Node 専用ノードで制御 柔軟なレスポンス制御

    Respond to Webhookノードの使用

    レスポンスを細かく制御したい場合は、「Respond to Webhook」ノードを使用します。

    設定可能な項目

    • Response Code:200、201、400、500など
    • Response Headers:カスタムヘッダー
    • Response Body:JSON、テキスト、バイナリ

    構成例


    [Webhook] → [処理ノード] → [Respond to Webhook]

    Respond to Webhookの設定例


    Response Code: 200
    Response Body:
    {
    "success": true,
    "message": "データを受信しました",
    "orderId": "{{ $json.orderId }}"
    }

    受信データの取得方法

    Webhookで受信したデータは、後続のノードで参照できます。

    JSONボディの取得


    // リクエストボディ全体
    {{ $json }}

    // 特定のフィールド
    {{ $json.name }}
    {{ $json.email }}
    {{ $json.order.items[0].name }}

    クエリパラメータの取得

    GETリクエストのクエリパラメータは以下で取得します。


    // ?userId=123&action=view の場合
    {{ $json.query.userId }}
    {{ $json.query.action }}

    ヘッダーの取得


    {{ $json.headers['content-type'] }}
    {{ $json.headers['x-custom-header'] }}

    ルートパラメータの取得

    パスに :param を含む場合:


    // /orders/:orderId でアクセスした場合
    {{ $json.params.orderId }}

    実践ワークフロー①:フォーム送信→Slack通知

    Webサイトのお問い合わせフォームからデータを受け取り、Slackに通知します。

    ワークフロー構成


    [Webhook] → [Slack]

    Webhookノードの設定

    • HTTP Method:POST
    • Path:/contact-form
    • Authentication:Header Auth(推奨)
    • Respond:Immediately

    Slackノードの設定

    • Operation:Send a Message
    • Channel:#contact
    • Text


    📩 *新規お問い合わせ*
    *お名前:* {{ $json.body.name }}
    *メール:* {{ $json.body.email }}
    *内容:*
    {{ $json.body.message }}

    フォームからの送信例(JavaScript)


    fetch('https://your-n8n-instance.com/webhook/contact-form', {
    method: 'POST',
    headers: {
    'Content-Type': 'application/json',
    'X-API-Key': 'your-secret-key'
    },
    body: JSON.stringify({
    name: document.getElementById('name').value,
    email: document.getElementById('email').value,
    message: document.getElementById('message').value
    })
    });

    実践ワークフロー②:決済完了→顧客通知

    Stripeなどの決済サービスからWebhookを受け取り、顧客にメールを送信します。

    ワークフロー構成


    [Webhook] → [IF(イベント判定)] → [Gmail] → [Google Sheets]

    Webhookノードの設定

    • HTTP Method:POST
    • Path:/stripe-webhook
    • Respond:Immediately(Stripeは即時応答を期待)

    IFノードの設定


    条件: {{ $json.body.type }} equals "payment_intent.succeeded"

    Gmailノードの設定

    • To:{{ $json.body.data.object.receipt_email }}
    • Subject:ご購入ありがとうございます
    • Message:決済完了のお知らせメール本文

    実践ワークフロー③:GitHub Webhook→自動デプロイ通知

    GitHubリポジトリへのPushを検知して、Slackに通知します。

    ワークフロー構成


    [Webhook] → [IF(ブランチ判定)] → [Slack]

    Webhookノードの設定

    • HTTP Method:POST
    • Path:/github-push

    IFノードの設定


    条件: {{ $json.body.ref }} equals "refs/heads/main"

    Slackメッセージ


    🚀 *本番ブランチにPushがありました*
    *リポジトリ:* {{ $json.body.repository.full_name }}
    *コミッター:* {{ $json.body.pusher.name }}
    *コミット:* {{ $json.body.head_commit.message }}
    *URL:* {{ $json.body.head_commit.url }}

    GitHub側の設定

    1. リポジトリの「Settings」→「Webhooks」
    2. 「Add webhook」をクリック
    3. Payload URL:n8nのProduction URLを入力
    4. Content type:application/json
    5. Secret:任意のシークレットキー(署名検証用)
    6. Which events:「Just the push event」を選択

    実践ワークフロー④:APIエンドポイントの構築

    Webhookを使って独自のAPIエンドポイントを構築できます。

    ワークフロー構成


    [Webhook] → [データ処理] → [Respond to Webhook]

    ユーザー情報取得APIの例

    Webhookノード

    • HTTP Method:GET
    • Path:/api/users/:userId
    • Respond:Using ‘Respond to Webhook’ Node

    PostgreSQLノード(データ取得)


    SELECT * FROM users WHERE id = {{ $json.params.userId }}

    Respond to Webhookノード


    {
    "success": true,
    "data": {
    "id": {{ $json.id }},
    "name": "{{ $json.name }}",
    "email": "{{ $json.email }}"
    }
    }

    セルフホスト版でのWebhook設定

    セルフホスト版のn8nでWebhookを外部から受け取るには、いくつかの設定が必要です。

    環境変数の設定


    # Webhook URL のベースURL
    WEBHOOK_URL=https://your-domain.com/

    # ペイロードサイズの上限(デフォルト16MB)
    N8N_PAYLOAD_SIZE_MAX=16777216

    ローカル環境での外部公開(ngrok)

    ローカル環境でWebhookを受け取るには、ngrokなどのトンネリングサービスを使用します。

    ngrokのインストールと起動


    # インストール
    brew install ngrok

    # トンネル開始(n8nが5678ポートで動作している場合)
    ngrok http 5678

    生成されるURL


    https://xxxx-xxx-xxx.ngrok.io

    このURLをn8nの環境変数 WEBHOOK_URL に設定します。

    トラブルシューティング

    よくある問題と解決方法

    問題 原因 解決方法
    Webhookが受信できない ワークフローが非アクティブ ワークフローをアクティブ化
    Test URLで受信できない 待機状態になっていない 「Listen for Test Event」をクリック
    404エラー URLパスが間違っている 正しいURLをコピーして使用
    401エラー 認証情報が不正 認証ヘッダー/パスワードを確認
    タイムアウト 処理に時間がかかりすぎ Respond: Immediatelyに変更
    ペイロードエラー データサイズ超過 16MB以下に抑える、または上限変更

    デバッグ方法

    1. Executionsタブで実行履歴を確認:成功/失敗したリクエストの詳細を確認
    2. 受信データの確認:Webhookノードの出力を確認して、期待するデータが来ているか確認
    3. 外部ツールでリクエスト確認:Postmanやcurlで直接リクエストして動作確認

    よくある質問(FAQ)

    Q. Test URLとProduction URLの違いは?

    A. Test URLはテスト実行時に使用し、「Listen for Test Event」で待機状態にする必要があります。Production URLはワークフローをアクティブ化すると常に有効になり、本番運用に使用します。

    Q. Webhookの認証は必須ですか?

    A. 必須ではありませんが、セキュリティのため強く推奨します。認証なしのWebhookは誰でもリクエストを送信できるため、不正なデータ送信やDoS攻撃のリスクがあります。

    Q. 同じパスで複数のHTTPメソッドに対応できますか?

    A. 1つのWebhookノードでは1つのHTTPメソッドのみ対応します。複数のメソッドに対応する場合は、別々のWebhookノードを作成するか、HTTP Methodを「ALL」に設定します。

    Q. Webhookで画像やファイルを受け取れますか?

    A. はい、バイナリデータも受け取れます。最大16MB(セルフホスト版では設定変更可能)まで対応しています。

    Q. レスポンスを返さないとどうなりますか?

    A. Respond設定が「Immediately」の場合、ワークフロー開始時に自動的に200レスポンスが返されます。「When Last Node Finishes」の場合、処理完了まで接続が維持され、完了後にレスポンスが返されます。

    まとめ

    この記事では、n8nのWebhookノードの使い方を詳しく解説しました。

    基本設定のポイント

    • HTTPメソッドは用途に応じて選択(POST が最も一般的)
    • パスはわかりやすい名前を設定
    • Test URLとProduction URLを使い分ける
    • セキュリティのため認証を設定

    レスポンス制御

    • Immediately:即時応答(処理完了を待たない)
    • When Last Node Finishes:処理結果を返す
    • Respond to Webhook:細かいレスポンス制御

    活用例

    • フォーム送信の処理
    • 決済Webhookの受信
    • Git操作の通知
    • 独自APIエンドポイントの構築

    次のステップ

    1. シンプルなWebhook→Slack通知を構築してテスト
    2. 認証を追加してセキュリティを強化
    3. Respond to Webhookでレスポンスを制御
    4. 実際の外部サービスと連携

    Webhookを使いこなすことで、n8nの活用範囲が大きく広がります。ぜひ様々なサービスとの連携に活用してください。