「Slackにこの通知が来たら自動で〇〇してほしい」——そう思ったことが一度でもあれば、この記事はあなたのためのものです。
n8nのWebhookとSlackを連携させれば、その「〇〇」をかなりの精度で自動化できます。このブログ自体もn8nで記事生成を自動化しているので、n8nへの信頼は本物です。実際に設定した経験をもとに、つまずいたポイントも正直に書きます。
そもそもWebhookって何?
難しく聞こえますが、要するに「何かが起きたら、別のサービスに自動で連絡する仕組み」です。
宅配便の「配達完了メール」をイメージするとわかりやすいです。荷物が届いた瞬間に自動でメールが飛んでくるあれ、まさにWebhookの発想です。人が手動で「届いたよメール」を送っているわけじゃない。イベントが起きたら自動で通知が飛ぶ。それがWebhookです。
# Webhookの基本的な流れ
何かのイベントが発生
↓
Webhook URLにリクエストを送信
↓
受け取った側が処理を実行
↓
Slackに通知が届く
n8nとSlackのWebhook、役割の違いを整理する
ここが最初のつまずきポイントです。正直、最初は自分も混乱しました。
- n8nのWebhook URL:外部からのリクエストを受け取る側
- SlackのIncoming Webhook URL:Slackにメッセージを送る側
つまりこういう構造です。
外部サービス(フォーム・GitHubなど)
↓ リクエストを送る
n8n Webhook URL(受け取る)
↓ データを処理する
Slack Incoming Webhook URL(送る)
↓
Slackに通知が届く 🎉
「n8nは受け取る側、Slackは送る側」——この一言を頭に入れておくだけで、設定時の混乱が半分以下になります。
設定手順:n8n側の準備
① Webhookノードを追加する
- n8nのワークフローエディタを開く
- 「+」ボタンから「Webhook」ノードを追加
- 「HTTP Method」を用途に合わせて選択(基本はPOST)
- 自動生成されたWebhook URLをコピーしておく
このURLが「外部からの入り口」になります。後で使うので必ずコピーしておいてください。
② テスト受信で動作確認する
Webhookノードの「Listen for Test Event」をクリックすると、テスト用のリクエストを待機する状態になります。curlコマンドで動作確認できます。
curl -X POST https://your-n8n-domain/webhook/your-webhook-id \
-H "Content-Type: application/json" \
-d '{"message": "テスト送信です"}'
n8n側でデータが受け取れれば成功です。まずここで一度確認しておくことを強くおすすめします。後から「なぜか動かない」と頭を抱えることが確実に減ります。
設定手順:Slack側の準備
① Incoming Webhooksを有効化する
- Slackの「App Directory」から「Incoming WebHooks」を検索
- 「Slackに追加」をクリック
- 通知を送りたいチャンネルを選択
- 「Incoming Webhookインテグレーションの追加」をクリック
- 生成されたWebhook URLをコピー
このURLが「Slackへの送信口」になります。
設定手順:n8nとSlackをつなぐ
① SlackノードをワークフローにつなぐURL
- Webhookノードの後ろに「Slack」ノードを追加
- 「Operation」を「Send a Message」に設定
- 「Webhook URL」に先ほどSlackで取得したURLを貼り付ける
- 「Message Text」に送信したいメッセージを設定
メッセージには動的な値も使えます。例えばWebhookで受け取ったデータを含める場合はこんな感じです。
// 受け取ったデータをそのままSlackに流す例
件名:{{ $json.subject }}
送信者:{{ $json.email }}
メッセージ:{{ $json.message }}
実際の活用例3選
① お問い合わせフォームの即時通知
Webサイトのお問い合わせがSlackに即時通知されます。「メール確認した?」という社内の確認作業がゼロになります。実際にこの設定をしてから、対応漏れが完全になくなりました。
② GitHubのPRやマージ通知
プルリクエストが作成されたり、マージされたタイミングでSlackに通知します。「あのPRどうなった?」という確認コミュニケーションが激減します。
③ 経費申請・承認プロセスの自動化
申請が承認されたら申請者と承認者の両方にSlack通知+メンション。「承認されましたか?」の確認連絡が不要になります。地味ですが、こういう小さな自動化が積み重なると体感の効率が全然違います。
つまずきポイントと対処法
① Slackに通知が届かない
一番多いパターンです。チェックリストはこちらです。
- n8nのWebhook URLとSlackのIncoming Webhook URLを混同していないか
- SlackのIncoming Webhooksが有効化されているか
- 指定したチャンネルがアーカイブされていないか
- n8nのワークフローがアクティブになっているか(テストモードのままになっていないか)
特に最後の「テストモードのまま」は盲点です。テストURLと本番URLが別になっているので、本番運用時は必ずワークフローをアクティブにしてください。
② データが期待通りに取得できない
送られてくるデータの構造が把握できていないと、後続のノード設定が手探りになります。対処法は「まずWebhookノードでデータを受け取って中身を確認する」です。
# n8nのWebhookノードで受信データを確認する手順
1. Webhookノードの「Listen for Test Event」をクリック
2. 送信元からテストリクエストを送る
3. 受け取ったデータの構造をn8nのUIで確認
4. 確認した構造をもとに後続ノードを設定
この一手間を省くと後で確実に詰まります。経験談です。
③ ファイアウォール・ネットワークの問題
n8nをセルフホスティングしている場合、送信元サービスからn8nへのアクセスがブロックされているケースがあります。特にIPアドレス制限が設定されている環境では、n8nのIPを許可リストに追加する必要があります。
Slack通知をもっと見やすくする:ブロックキットの活用
テキストをそのまま流すだけだと、情報量が増えるにつれて通知が読みにくくなります。そこで便利なのがSlackのブロックキットです。カード形式で情報を整理して表示できます。
{
"blocks": [
{
"type": "header",
"text": {
"type": "plain_text",
"text": "🚨 新しいお問い合わせが届きました"
}
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*送信者:*\n{{ $json.name }}"
},
{
"type": "mrkdwn",
"text": "*メール:*\n{{ $json.email }}"
}
]
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*内容:*\n{{ $json.message }}"
}
}
]
}
絵文字・メンション・ボタンも追加できるので、通知を受け取った側が次のアクションを迷わずに済む設計にできます。「ただ通知が来る」から「見た瞬間に何をすべきかわかる」への進化です。
まとめ
n8n × Slack Webhook連携のポイントをまとめます。
- n8nは「受け取る側」、SlackのIncoming Webhookは「送る側」——ここを混同しないことが第一歩
- まずWebhookノードでデータ受信を確認してから後続ノードを設定する
- 本番運用時はワークフローをアクティブ化するのを忘れずに
- ブロックキットを使うと通知の視認性が格段に上がる
- 「通知が来ない」時はSlack側の設定とチャンネルの状態を先に確認する
一度設定してしまえば、あとは自動で動き続けます。最初の30分の投資で、毎日の手作業が消えていく感覚はなかなか気持ちいいものです。ぜひ試してみてください。