目次
n8n Webhook 入門:外部データの受信と応答
Webhookを使うと、イベント発生時に外部サービスからn8nへ通知できます。たとえば、次のような場合です。
- Webサイトのフォームが送信された
- 決済サービスから支払い完了の通知が届いた
- GitHubで新しいPull Requestが作成された
- 自作プログラムからn8nのワークフローを起動したい
n8nのWebhookノードはURLを生成します。このURLにHTTPリクエストを送ると、ワークフローが起動します。
Webhookを作成する
- ワークフローを新規作成し、最初のノードに Webhook を選択します。
- 次の項目を設定します。
- HTTP Method:通常はPOST
- Path:URLのパス。たとえば
contact-form - Respond:応答するタイミング(下記を参照)
ノードの上部に2つのURLが表示されます。
| URL | 形式 | 有効になるタイミング |
|---|---|---|
| Test URL | https://あなたのドメイン/webhook-test/contact-form | Listen for test eventを押した後、リクエストを1回受信します |
| Production URL | https://あなたのドメイン/webhook/contact-form | ワークフローを公開した後 |

よくある間違いは、外部サービスにTest URLを設定し、ワークフローの公開後にデータを受信できなくなることです。本番で使うときは、必ずProduction URLに切り替えてください。
テストする
- Listen for test eventを押します。
- ターミナルからリクエストを送信します。
curl -X POST https://あなたのドメイン/webhook-test/contact-form \\
-H "Content-Type: application/json" \
-d '{"name": "王小明", "email": "ming@example.com", "message": "想詢問報價"}'\
- WebhookノードのOUTPUTに受信したデータが表示されます。
{
"headers": { "content-type": "application/json", "...": "..." },
"params": {},
"query": {},
"body": {
"name": "王小明",
"email": "ming@example.com",
"message": "想詢問報價"
}
}
後続のノードでは {{ $json.body.name }} を使って受信データを読み取れます。URLパラメーター(?id=123)は {{ $json.query.id }} で取得します。
応答方法
Respondの設定で、n8nが応答するタイミングと呼び出し元に返す内容を決めます。
| 選択肢 | 動作 |
|---|---|
| Immediately | リクエストを受信するとすぐに応答し、ワークフローはバックグラウンドで実行を続けます |
| When Last Node Finishes | ワークフロー全体の実行完了を待ち、最後のノードのデータを返します |
| Using 'Respond to Webhook' Node | ワークフロー内のRespond to Webhookノードで応答内容を決めます |
呼び出し元に「受信した」と知らせるだけでよい場合(決済通知など)はImmediatelyを選びます。処理結果を返す場合(APIとして使うなど)は、Respond to Webhookノードを使います。
n8nでシンプルなAPIを作る
[Webhook GET /price] ─▶ [Google Sheets 查詢] ─▶ [Respond to Webhook]

Respond to Webhookノードでは、次の項目を設定できます。
- Respond With:JSON、テキスト、バイナリファイル、リダイレクト
- Response Code:たとえば200、404
- Response Headers:たとえばCORSヘッダー
{ "product": "{{ $json.name }}", "price": {{ $json.price }} }
パスパラメーター
Pathには変数を含められます。
orders/:orderId
/webhook/orders/A123を呼び出すと、{{ $json.params.orderId }}の値はA123になります。
リクエストを認証する
Production URLは公開されているため、URLを知っている人なら誰でも呼び出せます。次の方法で保護してください。
- Authenticationオプションを使います。Basic Auth、Header Auth、JWT Authを選べます。たとえばHeader Authで名前を
X-API-Keyに設定した場合、呼び出し元は正しい値を送る必要があります。 - 署名を検証する:Stripe、GitHub、LINEなど多くのサービスはHeaderに署名を含めます。Codeノードで検証できます。
- IP許可リストを設定する:WebhookのOptionsで IP(s) Whitelist を設定します。
- 推測されにくいランダムな文字列をパスに使います。
ファイルを受信する
フォームからファイルをアップロードすると(multipart/form-data)、ファイルはbinaryデータに格納されます。Google DriveやExtract from Fileなどのノードにそのまま接続できます。
外部サービスからn8nに接続できるようにする
外部サービスがネットワーク経由でn8nに接続できる必要があります。
- 本番環境へのデプロイ:ドメインとHTTPSを利用できるサーバーを使い、Webhook URLの環境変数を正しく設定します。設定しないと、n8nに
http://localhost:5678/...と表示されます。セルフホストでのデプロイを参照してください。 - ローカルでのテスト:Cloudflare Tunnelやngrokなどを使うと、ローカルの5678ポートを一時的に外部公開できます。
よくある問題
404:The requested webhook is not registered
- Test URLを使っている場合:先にListen for test eventを押していないか、すでに1回リクエストを受信しています。
- Production URLを使っている場合:ワークフローが公開されていません。
- HTTPメソッドが一致していません(POSTに設定しているのにGETで呼び出しているなど)。
bodyが空で受信される
呼び出し元が Content-Type: application/json ヘッダーを送信していることを確認してください。
外部サービスがタイムアウトを報告する
When Last Node Finishesが選択されていて、ワークフローの実行に時間がかかっています。Immediatelyに変更するか、ワークフローを短縮してください。
更新日 2026年10月12日