n8n Webhookの使い方:外部サービスからのイベントを受け取って自動処理する

自動化・ノーコード

※本記事にはアフィリエイトリンクが含まれます。

n8n Webhook を使い始めて最初にハマったのが、「テスト用URLでは動いたのに、本番に切り替えたら404が返ってきた」という問題だった。僕も最初これで1時間溶かした。原因はワークフローをActivateするのを忘れていただけだったが、そのことは設定ガイドのどこにも目立って書いていなかった。

この記事では、 のWebhookノードの基本設定から、テスト用URLと本番URLの違い、セキュリティ設定まで、実際に詰まったポイントを踏まえながら説明する。

この記事でわかること:

  • Webhookとは何か・他のトリガーとの違い
  • テスト用URLと本番URLの使い分けと切り替え時の落とし穴
  • POSTデータの取り出し方($jsonでの参照)
  • Header Authによるセキュリティ設定

n8n webhook external service integration
Photo by Team Nocoloco on Unsplash

Webhook とは何か、なぜ n8n で使うのか

Webhookは、外部サービスで何かイベントが発生したときに、そのサービスが自動的にn8nにHTTPリクエストを送る仕組みだ。「データが来たら動く」という形で、n8n側は受け身で待っている。

他のトリガーとの違い(Scheduleトリガー・Pollingとの比較)

n8nには複数のトリガー方式がある。

  • Scheduleトリガー:一定間隔や指定時刻に自動起動。外部サービスを5分おきにAPIで叩いてデータを確認するような使い方
  • Pollingトリガー:特定サービスのAPIを定期的に問い合わせて変化を検知する
  • Webhookトリガー:外部サービスからのリクエストを受け取ったときだけ起動する

Scheduleでやっていたときは、5分おきにAPIを叩くので1日288回のリクエストが発生していた。Webhookに切り替えたら、イベントが発生したときだけ動くので1日数回になった。相手サービスのレートリミットを気にしなくて良くなったのは地味に大きかった。

n8n Webhookが向いているのは「外部サービスのイベント発生をリアルタイムで受け取りたい」ときだ。フォーム送信、GitHub push、決済通知、Zapierからの連携などがわかりやすい用途になる。

n8n Webhook ノードの基本設定:まず押さえるべき3点

テスト用 URL と本番 URL の違い、切り替え方

n8nのWebhookノードには2種類のURLがある。

  • テスト用URL(Test URL):「Test workflow」モード(リスニング状態)でのみ動作
  • 本番URL(Production URL):ワークフローがActive状態のときに動作

設定画面を開くと両方のURLが表示されている。テスト中は「Test URL」にリクエストを送り、本番運用時は「Production URL」を使う。

最も多いハマりポイント: テスト用URLで動作確認したあと、外部サービスのWebhook設定をProduction URLに変えたのにワークフローをActivateするのを忘れた、というケースだ。ActivateしないとProduction URLへのリクエストは無視される。

ワークフロー画面右上のトグルスイッチをONにしてActivateすることを必ず確認する。ダッシュボードでは「Active」バッジが表示されているかで確認できる。

POST データの受け取り方と $json での参照

外部サービスがWebhookでPOSTリクエストを送ってくると、n8n側でそのデータを受け取れる。

POSTのボディデータは以下の形式で参照できる:

{{ $json.body.フィールド名 }}

たとえばフォームから送られてきた nameemail を受け取るなら:

{{ $json.body.name }}
{{ $json.body.email }}

GETリクエストのクエリパラメータは $json.query.パラメータ名 になる。

Webhookノードを実行してみると、受け取ったデータの全体構造が「output」に表示される。そこを見れば $json のどのパスにデータが入っているかがわかるので、まずテスト実行して確認するのが早い。

レスポンス設定(即時返却 vs ワークフロー完了後返却)

Webhookノードには「Respond」という設定項目がある。

  • Immediately:Webhookを受け取った瞬間に200 OKを返す。ワークフローの処理が終わるのを待たない
  • After Workflow Completes:ワークフロー全体の処理が完了してから返す。処理結果をレスポンスに含めたい場合

フォーム送信の受付など「受け取りさえすればいい」ケースはImmediately。外部サービスが処理結果のレスポンスを必要とするAPIコールバックはAfter Workflow Completesを選ぶ。

実践例:GitHub の push イベントを受け取って Slack に通知する

よくある使い方として、GitHubのリポジトリにpushがあったときSlackに通知するフローを説明する。

  1. n8nでWebhookノードを作成し、Production URLをコピー
  2. GitHubのリポジトリ設定 → Webhooks → Add webhook
  3. Payload URLにコピーしたProduction URLを貼る
  4. Content typeを「application/json」に設定
  5. 送信イベントで「Just the push event」を選択
  6. n8nでワークフローをActivate
  7. n8nのWebhookノードの後ろにSlackノードを繋いで、メッセージ内容を設定

$json.body.ref でブランチ名、$json.body.pusher.name でpushしたユーザー名を取得できる。

n8n webhook github slack notification
Photo by Team Nocoloco on Unsplash

n8n webhook security authentication
Photo by Nguyễn Duy Hưng on Unsplash

Webhook にセキュリティを追加する:Header Auth の設定

Webhook URLを知られていれば、誰でもリクエストを送れてしまう。外部からの不正リクエストを弾くために、Header Authを設定することを強く勧める。

僕はテスト中に認証をかけていなかった時期があって、数日後に不審なリクエストがログに残っていた。大したことはなかったが、認証は最初から設定すべきだったと反省している。

Webhookノードの「Authentication」→ 「Header Auth」を選択すると、ヘッダー名と値を設定できる。MDN Web Docs のHTTPヘッダー解説(日本語版)を読んでおくと、認証ヘッダーの仕組みが理解しやすい。たとえば:

  • Name:X-Webhook-Secret
  • Value:(ランダムな文字列)

外部サービス側で同じヘッダーを送るよう設定する。n8nは受け取ったリクエストのヘッダーを検証し、値が一致しない場合は401を返す。

GitHubのWebhookには標準でSecret設定があるので、そちらを使うのも良い。

つまずきポイント:本番 URL に切り替えたら動かなくなった理由

まとめとして、「本番URLで動かない」場合のチェックリスト:

  1. ワークフローがActivateされているか(最多原因)
  2. 外部サービスのWebhook設定がProduction URLになっているか(Test URLのままでは本番で動かない)
  3. セルフホスト版の場合、そのURLが外部から到達可能か(ローカルホストのままではngrokなどが必要)
  4. Header Authを設定した場合、外部サービス側でも同じヘッダーを送っているか

一個一個確認すれば大体どれかに当たる。

まとめ:Webhook を使うべき場面・使わない方がいい場面

Webhookを使うべきなのは:

  • 外部サービスのイベントをリアルタイムで受け取りたいとき
  • ScheduleトリガーのPolling頻度が高くなりすぎてAPIレートリミットにかかるとき
  • 外部サービス側がWebhook通知に対応しているとき

逆に、Webhookが向いていないのは:

  • 外部サービスがWebhookに対応していないとき(その場合はPollingやScheduleで対応する)
  • セルフホスト環境で外部からのアクセスを受け付けられないとき

Webhookは設定できれば強力だが、「テスト用とProduction URLを使い分ける」という概念が最初わかりにくい。ここさえ理解できれば、あとは思ったより簡単に動く。


合わせて読みたい

GitHubのWebhook機能についての詳細はGitHub 公式ドキュメント(日本語版)も参考にしてほしい。

※本記事の情報は2026年4月時点のものです。n8nのUIはバージョンアップで変更されることがあります。

コメント

タイトルとURLをコピーしました