「curl で叩いたら Slack に通知が来る」——そういうフローを5分で動かすための記事です。
n8n を起動したものの「次に何をすればいいか分からない」という人向けに、Webhook ノードを使って外部からリクエストを受け取り、Slack に転送するフローを一本通します。
この記事を読み終えると:
- Webhook URL を発行して外部サービスからデータを受け取れる
- 受け取ったデータを Slack に転送できる
- テストモードと本番モードの違いを理解して本番稼働できる
前提条件: n8n が起動済みであること(まだの場合は n8n を Docker でローカル起動する手順 を参照)
著者について: THINK YOU LAB では WF_notify として「Python スクリプト → n8n Webhook → Slack 通知」のフローを本番稼働させています。この記事はその実装経験をもとに書いています。
n8n の Webhook ノードとは何か
Webhook とは何か(HTTPリクエストをトリガーにする仕組み)
Webhook は「外部サービスが何かを起こしたとき、指定した URL に HTTP リクエストを送る」という仕組みです。n8n の Webhook ノードは、その「受け取り口(エンドポイント)」を発行します。
Webhook ノードを使うと、以下のようなことができます:
- GitHub にコードがプッシュされたら → n8n に通知 → Slack に投稿
- Stripe の決済が完了したら → n8n に通知 → Supabase にレコードを追記
- サーバーのスクリプトがエラーを検知したら → n8n に通知 → Slack に警告を送る
「プログラムからプログラムへの通知窓口」と考えると分かりやすいです。
Webhook トリガー vs スケジュールトリガーの違い
n8n のトリガーには大きく2種類あります。
| トリガー種別 | 起動タイミング | 用途 | |---|---|---| | Webhook トリガー | 外部から HTTP リクエストが届いたとき | イベント駆動(何かが起きたら動く) | | スケジュールトリガー | 設定した時刻・間隔(cron 式)になったとき | 定期実行(毎朝9時に RSS 取得、など) |
Webhook トリガーは「外部から何かが起きたとき」に即座に反応します。スケジュールトリガーは「決まった時刻に定期実行」します。
THINK YOU LAB での活用例(WF_notify)
THINK YOU LAB では WF_notify というワークフローで Webhook を本番運用しています。
agent-ops-monitor(Python スクリプト)
→ POST https://n8n-host/webhook/notify
→ n8n Webhook ノード: リクエストを受け取る
→ IF ノード: エラーレベル(error / warn / info)で分岐
→ Slack ノード: #ops-alert チャンネルに通知
Python スクリプトが自分のエラーを自分で n8n に報告する仕組みです。n8n がエラーのルーティングとフォーマットを担うため、通知先を Slack から他のサービスに変更するときもコードを触らずに済みます。
Webhook URL を発行して受け取る(基本)
Webhook ノードをワークフローに追加する
- n8n の管理画面を開き、「New workflow」をクリックして新規ワークフローを作成します
- 「+ Add first step」をクリック
- 検索ボックスに「webhook」と入力して 「On webhook call」 を選択します
- Webhook ノードが追加され、設定パネルが開きます
設定パネルの主な項目:
- HTTP Method:
POST(最もよく使う)/GET/PUTなど - Path: Webhook URL のパス部分(デフォルトはランダム文字列。変更可能)
- Authentication: 認証設定(デフォルトは None)
テスト用 URL の取得と curl での動作確認
Webhook ノードには テスト URL と 本番 URL の2種類があります。
| URL 種別 | パス形式 | 有効条件 |
|---|---|---|
| テスト URL | /webhook-test/{path} | ワークフローをテストモードで開いているとき |
| 本番 URL | /webhook/{path} | ワークフローが「Active」になっているとき |
まずテスト URL を確認します。Webhook ノードの設定パネルで「Listen for test event」ボタンをクリックして待機状態にすると、テスト URL が表示されます。
# テスト URL に curl でリクエストを送る例
curl -X POST https://your-n8n.com/webhook-test/notify \
-H "Content-Type: application/json" \
-d '{"message": "テスト通知", "level": "info"}'n8n 側で「Test event received」と表示されれば受け取り成功です。
受け取ったデータの構造
n8n が Webhook で受け取ったデータは以下の構造で参照できます。
$json.body → POST ボディのデータ(JSON の場合)
$json.headers → HTTPヘッダー(Content-Type など)
$json.query → クエリパラメータ(?key=value の部分)
例えば {"message": "テスト", "level": "error"} を POST した場合、次のノードで {{ $json.body.message }} と書くと テスト を取り出せます。
HTTP メソッドの選択(POST / GET の使い分け)
| メソッド | 用途 | ボディ | |---|---|---| | POST | データを送信(通知・フォーム送信・イベント通知) | あり(JSON / フォームデータ) | | GET | 情報を取得(クエリパラメータでデータを渡す) | なし(クエリパラメータを使う) | | PUT | データの更新(べき等な操作) | あり |
ほとんどのユースケースでは POST を使います。
受け取ったデータを Slack に転送する(実践)
Slack ノードの設定(Incoming Webhook URL の入力)
Webhook ノードの右側にある「+」ボタンをクリックして Slack ノード を追加します。
Credential(認証情報)の設定手順:
- 「Create new credential」をクリック
- Slack API を選択
- Slack の管理画面(api.slack.com/apps)でアプリを作成し、Incoming Webhooks を有効化
- 「Add New Webhook to Workspace」でチャンネルを選択し、Webhook URL(
https://hooks.slack.com/services/...)をコピー - n8n の Credential 設定に Webhook URL を貼り付けて保存
Webhook のデータを Slack メッセージに埋め込む
Slack ノードの Message フィールドに、受け取ったデータを埋め込みます。
送信者: {{ $json.body.source }}
レベル: {{ $json.body.level }}
内容: {{ $json.body.message }}
{{ }} の中に n8n の式(Expression)を書くと、前のノードのデータを参照できます。
THINK YOU LAB での実装例(WF_notify のメッセージフォーマット):
WF_notify では以下のペイロード形式で Webhook を受け取ります。
{
"level": "error",
"source": "agent-ops-monitor",
"message": "Supabase への書き込みに失敗しました",
"timestamp": "2026-03-15T10:30:00Z"
}Slack のメッセージには {{ $json.body.source }}: {{ $json.body.message }} を設定しており、agent-ops-monitor: Supabase への書き込みに失敗しました という形式で通知されます。level が error の場合は <!here> メンションを付けて即時対応を促しています。
テスト実行と動作確認
- ワークフロー画面で「Execute Workflow」ボタンをクリック(テストモードで動かす)
- 再度 curl でリクエストを送る
- Slack の指定チャンネルにメッセージが届けば完成
Slack に届かない場合は、Slack ノードをクリックして「Test step」で単体テストを実行し、エラーメッセージを確認してください。
ワークフローを本番モードに切り替える
動作確認が取れたら、ワークフローを本番稼働させます。
- 画面右上の「Inactive」トグルをクリックして 「Active」 に切り替える
- Webhook URL が
/webhook-test/から/webhook/に変わる - これ以降は本番 URL に送られたリクエストが自動的に処理される
注意: Active にすると n8n を閉じていても(バックグラウンドで)ワークフローが動き続けます。意図しない実行が起きないよう、本番稼働前に動作を十分に確認してください。
本番 URL を外部サービスに登録する
VPS / n8n Cloud での公開 URL の確認
本番 URL は https://your-n8n-domain.com/webhook/notify の形式になります。
VPS(セルフホスト)の場合:
- n8n の環境変数
WEBHOOK_URLに設定した値がベース URL になります - 例:
WEBHOOK_URL=https://n8n.your-domain.com/なら Webhook URL はhttps://n8n.your-domain.com/webhook/notify
GitHub Webhook 設定画面との対応
GitHub のリポジトリ設定で Webhook を登録する手順:
- GitHub のリポジトリ → Settings → Webhooks → 「Add webhook」
- Payload URL: n8n の本番 Webhook URL を入力(例:
https://n8n.your-domain.com/webhook/github) - Content type:
application/jsonを選択 - Events:
Just the push event(または必要なイベントを選択) - 「Add webhook」で保存
ローカル環境での開発(ngrok を使う場合)
ローカルで動かしている n8n に外部からアクセスするには、ngrok を使ってトンネリングします。
# ngrok をインストール済みの場合
ngrok http 5678起動すると https://xxxxx.ngrok.io のような公開 URL が発行されます。この URL を外部サービスの Webhook 設定に登録してください。
ただし ngrok の無料版は URL が固定されないため、起動するたびに Webhook の URL 登録をやり直す必要があります。開発用の割り切りとして使うのが現実的です。
THINK YOU LAB での WF_notify 実例
WF_notify の構成(agent-ops-monitor → n8n Webhook → Slack)
WF_notify は THINK YOU LAB のインフラ監視を担うワークフローです。
agent-ops-monitor(Python)
↓ POST /webhook/notify
n8n Webhook ノード
↓ $json.body を受け取る
IF ノード(level == "error")
↓ True: エラー通知フォーマット(@here メンション付き)
↓ False: 情報通知フォーマット(通常テキスト)
Slack ノード
↓ #ops-alert チャンネルに投稿
Webhook URL の設計(エンドポイント名の命名)
WF_notify では Webhook のパスを /webhook/notify に固定しています。複数のスクリプトが同一エンドポイントに POST できるように汎用的な名前にしています。
n8n の Webhook ノードの Path 設定で notify と入力するだけで、完全な URL は https://n8n-host/webhook/notify になります。
エラー情報を構造化して Slack に転送する設計
WF_notify が受け取るペイロードは以下の構造です。
{
"level": "error",
"source": "スクリプト名",
"message": "エラーの内容",
"timestamp": "ISO 8601 形式"
}level フィールドで通知の重要度を分けており、error の場合は Slack のメッセージにメンション(<!here>)を付けます。info の場合は通常テキストで投稿します。
この設計により、通知量を制御しながら重要なエラーを見逃さない運用ができています。
応用 — 認証付き Webhook と Respond to Webhook
Header Auth による認証設定(X-Webhook-Secret ヘッダー)
Webhook URL が外部に漏れると誰でも叩けてしまいます。本番環境では認証を設定してください。
Webhook ノードの Authentication から「Header Auth」を選択します。
設定項目:
- Name: ヘッダー名(例:
X-Webhook-Secret) - Value: 認証トークン(ランダムな文字列を設定)
呼び出し側では以下のようにヘッダーを付けてリクエストします。
curl -X POST https://your-n8n.com/webhook/notify \
-H "X-Webhook-Secret: your-secret-token" \
-H "Content-Type: application/json" \
-d '{"message": "認証付きテスト"}'認証トークンが一致しない場合は HTTP 401 を返します。
Respond to Webhook ノードでレスポンスを返す
デフォルトでは Webhook は HTTP 200 のみを返します。処理結果をレスポンスに含めたい場合は 「Respond to Webhook」 ノードを追加します。
用途例:
- フォームの送信結果(「登録が完了しました」など)をレスポンスに含める
- 受け取ったデータの検証結果(成功 / エラーメッセージ)を返す
- Stripe の Webhook に
200 OKを即時返して処理を非同期で続ける
Webhook を同期的に使う(リクエスト→処理→レスポンス)
「リクエストが来たら処理して、結果をレスポンスで返す」という同期的な使い方も可能です。
Respond to Webhook ノードをフローの最後に配置し、Response Body に返すデータを設定します。
{
"status": "ok",
"processed": true,
"result": "{{ $json.output }}"
}よくあるトラブルと対処法
テストモードで受け取れない
症状: curl を送っても n8n 側で何も起きない
原因と対処:
- 「Listen for test event」を押していない: Webhook ノードを開いて「Listen for test event」ボタンをクリックしてから curl を送ってください
- テスト URL と本番 URL を間違えている: テスト中は
/webhook-test/のパス、本番は/webhook/のパスを使います - ブラウザを閉じた: テストモードはブラウザを閉じると終了します。再度「Listen for test event」を押してください
本番 URL が 404 になる
症状: ワークフローを Active にしたつもりが、本番 URL にアクセスすると 404 になる
対処:
- n8n のワークフロー一覧を開く
- 対象ワークフローの「Active」トグルが オン(青色) になっているか確認
- ワークフローを保存していない場合は「Save」ボタンで保存してから Active にする
docker logs n8nでエラーが出ていないか確認
データの中身が空になる($json の参照先ミス)
症状: Slack に undefined や空白が表示される
原因と対処: Webhook で受け取ったデータの参照パスを間違えています。n8n のデータ構造は以下の通りです。
POST ボディが { "message": "テスト" } の場合:
正しい参照: {{ $json.body.message }}
間違い例: {{ $json.message }}(bodyを挟まないとundefined)
Webhook ノードの出力(Input/Output パネル)でデータ構造を確認してから式を書くと間違いが減ります。
次のステップ
Webhook で「外部から受け取る」仕組みが動いたら、次はデータの活用範囲を広げましょう。
関連記事:
FAQ
Q1. Webhook URL はいつ発行されますか? Webhook ノードをワークフローに追加した時点で URL が発行されます。ワークフローを保存した後、設定パネルで確認できます。
Q2. テスト URL は外部から叩けますか?
テスト URL は n8n が起動していてワークフローが開かれているときのみ有効です。外部サービスの Webhook 設定に登録する場合は本番 URL(ワークフローを Active にした後の /webhook/ パス)を使ってください。
Q3. Webhook のパスは変更できますか? 変更できます。Webhook ノードの設定パネルの「Path」フィールドを任意の文字列に変更してください。変更後は外部サービスに登録している URL を更新する必要があります。
Q4. 複数のサービスから同じ Webhook URL に送ることはできますか?
できます。WF_notify のように複数のスクリプトが同一エンドポイントに POST する設計は実用的です。ペイロードの source フィールドで送信元を識別して IF ノードで分岐させると管理しやすくなります。
Webhook の設計ミスで本番でハマった経験から作った、n8n Webhook 実装テンプレ(エラーハンドリング + 認証パターン込み)を LINE で無料配布中。そのまま使えます。
→ n8n Webhook 実装テンプレを受け取る(LINE登録・無料)
LINE 公式アカウント
n8n Webhook 活用パターン集・セキュリティ設定チートシートをLINEで配布中