n8nとSlackを連携してアラート通知を全自動化する実践ガイド
n8nとSlackを連携し、エラー検知・定期レポート・条件分岐通知を自動化するワークフロー構築手順を実例付きで解説します。
「また通知を見逃した…」を撲滅したい人へ
サービスのエラーに気づくのが遅れてユーザーに迷惑をかけた、毎朝手動で集計してSlackに貼り付けているのが面倒、重要なアラートがメールに埋もれて対応が後手に回る——そんな経験はありませんか?
通知を「出す仕組み」を手動で管理している限り、ヒューマンエラーは避けられません。大切なのは、条件を満たしたときに自動で・適切なチャンネルに・必要な情報を添えて通知を届けるパイプラインを作ることです。
この記事では、ノーコード/ローコードの自動化プラットフォーム n8n と Slack を連携し、次の3つのユースケースを実現する方法を詳しく解説します。
- 外部APIのステータス監視 → エラー時にSlack通知
- 定期レポートの自動生成・投稿
- 条件分岐を使った宛先・メッセージの出し分け
n8n 自体の基本操作を知っていれば、初心者でも手を動かしながら読み進めるだけで動くワークフローが完成します。
事前準備:n8nとSlackの接続を整える
n8nのインストール
n8n はセルフホスト版と n8n Cloud の両方があります。すぐ試したい場合は Cloud の無料トライアルが便利です。ローカルで動かしたい場合は Docker を使うのが最も簡単です。
# Docker で n8n をローカル起動する例
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-v ~/.n8n:/home/node/.n8n \
docker.n8n.io/n8nio/n8n
起動後、ブラウザで http://localhost:5678 にアクセスするとn8nのUIが開きます。詳しいインストール手順は 公式ドキュメント(Self-hosting) を参照してください。
Slack アプリの作成と認証情報の登録
Slack との連携には Slack Bot Token が必要です。以下の手順で取得します。
- Slack API: Your Apps にアクセスし「Create New App」をクリック
- 「From scratch」を選択し、アプリ名とワークスペースを設定
- 左メニューの「OAuth & Permissions」→「Bot Token Scopes」で以下のスコープを追加
chat:write(メッセージ送信)chat:write.public(Botが未参加のパブリックチャンネルへの送信)channels:read(チャンネル一覧の取得)
- 「Install to Workspace」でアプリをインストールし、表示される Bot User OAuth Token(
xoxb-から始まる文字列)をコピー
n8n 側の設定:
- n8nのUIで右上の「Credentials」→「Add Credential」
- 「Slack API」を選択し、コピーしたトークンを貼り付けて保存
これで n8n ↔ Slack の通信基盤が整いました。
ユースケース1:外部APIの死活監視とエラーSlack通知
最も需要が高いのが「サービスが落ちたらすぐ知りたい」というパターンです。n8n の Cron(Schedule Trigger)ノード + HTTP Requestノード + IF ノード + Slack ノード を組み合わせて実現します。
ワークフローの構成
[Schedule Trigger] → [HTTP Request] → [IF: ステータス確認] → (NG) → [Slack: アラート送信]
→ (OK) → [何もしない or ログ記録]
各ノードの設定詳細
① Schedule Trigger ノード
- 「Trigger Interval」:
Minutes、値を5に設定(5分ごとに監視)
② HTTP Request ノード
- Method:
GET - URL: 監視したいエンドポイント(例:
https://api.yourservice.com/health) - 「Options」→「Response」→「Include Response Headers and Status」を ON にする(ステータスコードを後段で参照するため)
- エラー時にワークフローを止めないよう「On Error」を
Continue (using error output)に設定
③ IF ノード(条件分岐)
条件式の設定:
Value 1: {{ $json.statusCode }}
Operation: Not Equal
Value 2: 200
ステータスコードが 200 以外(または HTTP Request ノード自体がエラーになった場合)のときだけ Slack 通知を流します。
④ Slack ノード
- Resource:
Message - Operation:
Send - Channel:
#alerts(通知先チャンネル) - Text:
🚨 *サービス障害検知* 🚨
*対象URL:* https://api.yourservice.com/health
*ステータスコード:* {{ $json.statusCode }}
*検知時刻:* {{ $now.toISO() }}
至急確認してください。
ポイント:エラー出力ピンの活用
HTTP Request ノードは、ネットワーク障害などで接続自体が失敗したとき「Error」出力ピンにデータを流します。このピンにも Slack ノードを接続しておくと、「サーバーが完全に落ちて応答なし」というケースも捕捉できます。Error 出力ピンでは {{ $json.message }} でエラーメッセージを取得できます。
このワークフローを保存・有効化するだけで、5分ごとに自動で死活監視が走り、異常があれば即座に Slack へ通知が届きます。
ユースケース2:定期レポートの自動生成と投稿
毎朝9時に「昨日の売上」や「前日のエラー件数」をSlackに投稿したい——そんな要件もn8nで簡単に自動化できます。
ワークフローの構成
[Schedule Trigger: 毎朝9時] → [HTTP Request: データ取得] → [Code: データ整形] → [Slack: レポート投稿]
① Schedule Trigger ノード
- 「Trigger Interval」:
Custom (Cron) - Cron Expression:
0 9 * * 1-5(平日の午前9時)
② HTTP Request ノード(データ取得)
社内のAPIや Google Sheets API、あるいは外部サービスのAPIからデータを取得します。例として、自社の集計APIを叩く場合:
- Method:
GET - URL:
https://api.yourservice.com/reports/daily - Authentication: API Key や Bearer Token を設定
③ Code ノード(データ整形)
JavaScript で取得データを Slack メッセージ用にフォーマットします。n8n の Code ノードでは $input.all() で前ノードのデータを参照できます。
// Code ノード(n8n の JavaScript 実行環境)
const items = $input.all();
const data = items[0].json;
// 数値のカンマ区切りフォーマット
const formatNumber = (num) => num.toLocaleString('ja-JP');
// 昨日の日付
const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
const dateStr = yesterday.toLocaleDateString('ja-JP', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
});
const message = `:bar_chart: *日次レポート(${dateStr})*
• 総売上: *¥${formatNumber(data.totalRevenue)}*
• 注文数: *${formatNumber(data.orderCount)}件*
• 新規ユーザー: *${formatNumber(data.newUsers)}人*
• エラー発生件数: *${data.errorCount}件*
_自動送信 by n8n_`;
return [{ json: { message } }];
④ Slack ノード
- Channel:
#daily-report - Text:
{{ $json.message }} - 「Options」→「Unfurl Links」を OFF にすると、URLが展開されずにすっきり表示されます
Block Kit でリッチな通知を送る
Slack の Block Kit を使うと、ボタンや区切り線入りのリッチな通知を作れます。Slack ノードの「Blocks」フィールドに JSON を直接書くことで利用可能です。
[
{
"type": "header",
"text": {
"type": "plain_text",
"text": "📊 日次レポート"
}
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*総売上*\n¥1,234,567"
},
{
"type": "mrkdwn",
"text": "*注文数*\n342件"
}
]
},
{
"type": "divider"
},
{
"type": "context",
"elements": [
{
"type": "mrkdwn",
"text": "自動送信 by n8n | {{ $now.toISO() }}"
}
]
}
]
実際の値は Code ノードで生成した $json.message などを {{ }} で埋め込めます。Block Kit の構造は Slack Block Kit Builder でビジュアルに確認しながら設計すると効率的です。
ユースケース3:条件分岐で通知先・内容を出し分ける
実務では「エラーの重要度によって通知先チャンネルを変えたい」「担当者によってメンションを切り替えたい」といった要件が出てきます。n8n の Switch ノード と Set ノード を組み合わせると柔軟に対応できます。
重要度別チャンネル振り分けのワークフロー
[Webhook or Schedule] → [HTTP Request] → [Switch: severity判定]
↓ critical → [Slack: #incidents @channel メンション付き]
↓ warning → [Slack: #alerts]
↓ info → [Slack: #logs]
Switch ノードの設定:
- 「Mode」:
Rules - Input:
{{ $json.severity }} - ルール1: Equal to
critical→ Output 0 - ルール2: Equal to
warning→ Output 1 - Fallback(その他): → Output 2
criticalルートの Slack ノード設定:
Channel: #incidents
Text:
<!channel> 🔴 *CRITICALアラート*
*内容:* {{ $json.message }}
*発生時刻:* {{ $json.timestamp }}
*影響範囲:* {{ $json.affectedService }}
即座に対応が必要です。
<!channel> は Slack の全員メンション記法です。<!here> でアクティブメンバーのみへの通知にもできます。特定ユーザーをメンションしたい場合は <@UXXXXXXXX> 形式でユーザーIDを指定します。
Set ノードで動的にチャンネル名を生成する
振り分け先が多い場合は Switch ノードを並べるより、Set ノードで変数を作って1つの Slack ノードに渡す方がすっきりします。
Set ノードの設定例:
// Code ノードで severity に応じた設定を生成
const severity = $json.severity;
const config = {
critical: { channel: '#incidents', emoji: '🔴', mention: '<!channel>' },
warning: { channel: '#alerts', emoji: '🟡', mention: '' },
info: { channel: '#logs', emoji: '🔵', mention: '' },
};
const setting = config[severity] || config['info'];
return [{
json: {
channel: setting.channel,
text: `${setting.emoji} ${setting.mention} *${severity.toUpperCase()}*: ${$json.message}`,
}
}];
Slack ノードでは:
- Channel:
{{ $json.channel }} - Text:
{{ $json.text }}
と書くだけで動的に振り分けが完成します。
実運用で押さえておきたいn8nのTips
エラーハンドリング:Error Trigger ノードで全エラーを一元管理
n8n には Error Trigger という特殊なトリガーノードがあります。これを使った「エラー専用ワークフロー」を作成し、他のワークフローの「Error Workflow」設定に指定しておくと、どのワークフローでエラーが発生しても自動で Slack 通知を飛ばせます。
設定手順:
- 新規ワークフローを作成し、「Error Trigger」ノードを追加
- Slack ノードと接続し、
{{ $json.execution.error.message }}でエラー内容を投稿 - このワークフローのIDをメモする
- 監視対象の各ワークフローの「Settings」→「Error Workflow」で上記ワークフローを指定
レート制限対策:Wait ノードの活用
Slack API には レート制限 があり、同一チャンネルへは1秒に1メッセージが上限です。ループ内で大量に送信する場合は Slack ノードの前に Wait ノード(1秒待機)を挟んでください。
実行ログの確認
n8n のUI左メニュー「Executions」から過去の実行ログをすべて確認できます。各ノードの入出力データも詳細表示できるため、デバッグ時に非常に便利です。本番運用時は「Log Level」を適切に設定して保存容量を管理しましょう(ログ設定の公式ドキュメント)。
Slack ノードの「Post to Thread」でスレッド返信
既存のSlackメッセージにスレッド返信したい場合は、Slack ノードの「Options」→「Thread TS」に元メッセージのタイムスタンプ(ts 値)を指定します。最初の通知メッセージのレスポンスから $json.ts を取得して次のノードに渡すことで、一連のアラートをスレッドにまとめることができます。
トラブルシューティング:よくあるエラーと対処法
| エラー内容 | 原因 | 対処法 |
|---|---|---|
channel_not_found |
チャンネル名のスペルミス、またはBotが未参加 | チャンネルにBotを招待(/invite @BotName) |
not_in_channel |
パブリックチャンネルへの書き込みスコープ不足 | chat:write.public スコープを追加して再インストール |
invalid_auth |
トークンが無効または期限切れ | Slack Appを再インストールして新しいトークンを取得 |
ratelimited |
API呼び出し頻度が高すぎる | Wait ノードで送信間隔を調整 |
| n8nのHTTP Requestがタイムアウト | 監視対象サーバーが応答しない | Timeoutの値を大きくするか、エラー出力ピンを活用 |
まとめ:次のアクションとして試してほしいこと
この記事では、n8nとSlackを連携した3つの自動化パターンを解説しました。
- 死活監視アラート:5分ごとにAPIを叩き、異常時のみSlack通知
- 定期レポート自動投稿:Cron + Code ノードで毎朝整形レポートを配信
- 条件分岐通知:重要度・担当者に応じてチャンネルとメッセージを出し分け
まずはユースケース1の死活監視から始めるのがおすすめです。設定が最もシンプルで、「n8nワークフローが実際に動く」という体験を最速で得られます。動いたら、Slack ノードのテキストをカスタマイズしたり、監視対象URLを増やしたりして自分の業務に合わせて拡張してみてください。
n8nはノードを繋ぐだけで複雑な自動化が実現でき、Slackとの連携はその中でも即効性が高い組み合わせです。「手動でやっていた通知作業」をすべてn8nに任せて、本来の業務に集中できる環境を整えましょう。
参考資料
- n8n 公式ドキュメント - ノードリファレンス、セルフホスティング手順、APIドキュメントなど
- n8n Slack ノード公式リファレンス - Slack ノードの全パラメータ詳細
- Slack API 公式ドキュメント - Bot Token スコープ、Block Kit、レート制限の公式仕様
- Slack Block Kit Builder - Block Kit のビジュアルエディタ(公式ツール)
- n8n エラーハンドリング公式ガイド - Error Trigger ノードや On Error 設定の詳細