無料業務自動化

n8nとSlackを連携してアラート通知を全自動化する実践ガイド

·15 min read·Nexeed Lab
n8nSlack業務自動化

n8nとSlackを連携し、エラー検知・定期レポート・条件分岐通知を自動化するワークフロー構築手順を実例付きで解説します。

「また通知を見逃した…」を撲滅したい人へ

サービスのエラーに気づくのが遅れてユーザーに迷惑をかけた、毎朝手動で集計してSlackに貼り付けているのが面倒、重要なアラートがメールに埋もれて対応が後手に回る——そんな経験はありませんか?

通知を「出す仕組み」を手動で管理している限り、ヒューマンエラーは避けられません。大切なのは、条件を満たしたときに自動で・適切なチャンネルに・必要な情報を添えて通知を届けるパイプラインを作ることです。

この記事では、ノーコード/ローコードの自動化プラットフォーム n8n と Slack を連携し、次の3つのユースケースを実現する方法を詳しく解説します。

  1. 外部APIのステータス監視 → エラー時にSlack通知
  2. 定期レポートの自動生成・投稿
  3. 条件分岐を使った宛先・メッセージの出し分け

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 が必要です。以下の手順で取得します。

  1. Slack API: Your Apps にアクセスし「Create New App」をクリック
  2. 「From scratch」を選択し、アプリ名とワークスペースを設定
  3. 左メニューの「OAuth & Permissions」→「Bot Token Scopes」で以下のスコープを追加
    • chat:write(メッセージ送信)
    • chat:write.public(Botが未参加のパブリックチャンネルへの送信)
    • channels:read(チャンネル一覧の取得)
  4. 「Install to Workspace」でアプリをインストールし、表示される Bot User OAuth Tokenxoxb- から始まる文字列)をコピー

n8n 側の設定:

  1. n8nのUIで右上の「Credentials」→「Add Credential」
  2. 「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 通知を飛ばせます。

設定手順:

  1. 新規ワークフローを作成し、「Error Trigger」ノードを追加
  2. Slack ノードと接続し、{{ $json.execution.error.message }} でエラー内容を投稿
  3. このワークフローのIDをメモする
  4. 監視対象の各ワークフローの「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に任せて、本来の業務に集中できる環境を整えましょう。


参考資料

この記事をシェア

XFacebookはてブ