n8n

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

Hirokuma
20分で読める
お気に入りに登録しませんか?
【完全ガイド】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の活用範囲が大きく広がります。ぜひ様々なサービスとの連携に活用してください。