【n8n】ワークフローのエラーをSlackに通知する方法

【n8n】ワークフローのエラーをSlackに通知する方法 n8n

n8n のワークフローが失敗したときに、Slack へ自動で通知する仕組みを作る手順です。n8n の Error Trigger ノードで「エラーワークフロー」を1本作り、監視したいワークフローの設定からそれを指定します。1本のエラーワークフローを複数のワークフローで使い回せるので、作るのは最初の1回だけです。n8n Cloud とセルフホストのどちらでも同じ手順で設定できます(2026年11月時点の公式ドキュメントに基づきます)。

全体の構成

エラーワークフローは次の3ノードで作ります。

  1. Error Trigger: 紐づけたワークフローの実行が失敗したときに起動する
  2. Code: 受け取ったエラー情報から Slack に送る文面を組み立てる
  3. Slack(Message > Send): 通知用のチャンネルに送る

監視したい側のワークフローでは、Settings の Error workflow にこのワークフローを指定するだけです。

エラーワークフローを作る

1. Error Trigger を置く

  1. 新しいワークフローを作り、最初のノードに Error Trigger を置きます
  2. ワークフロー名を Error Handler など分かりやすい名前にします
  3. Save で保存します

Error Trigger を使うワークフローは、公開(アクティブ化)しなくても動きます。

2. Code ノードで通知文を組み立てる

Error Trigger の後ろに Code ノードを置き、次のコードを貼ります。

const execution = $input.first().json.execution;
const workflow = $input.first().json.workflow;

const errorMessage = execution?.error?.message || 'Unknown error';
const executionUrl = execution?.url || '';
const lastNode = execution?.lastNodeExecuted || '';
const workflowName = workflow?.name || 'Unknown workflow';

const text = `:rotating_light: *n8n Workflow Error*\n\n` +
  `*Workflow:* ${workflowName}\n` +
  (lastNode ? `*Node:* ${lastNode}\n` : '') +
  `*Error:* ${errorMessage}\n` +
  (executionUrl ? `*Execution:* <${executionUrl}|View in n8n>\n` : '');

return [{ json: { text } }];

Error Trigger が受け取るデータは次の形です(公式ドキュメントの例)。

[
  {
    "execution": {
      "id": "231",
      "url": "https://n8n.example.com/execution/231",
      "retryOf": "34",
      "error": {
        "message": "Example Error Message",
        "stack": "Stacktrace"
      },
      "lastNodeExecuted": "Node With Error",
      "mode": "manual"
    },
    "workflow": {
      "id": "1",
      "name": "Example Workflow"
    }
  }
]

execution.id と execution.url は、実行がデータベースに保存されているときだけ入ります。execution.retryOf は再実行のときだけ入ります。上のコードで ?. と既定値を使っているのは、これらが欠けても通知自体は送れるようにするためです。

3. Slack ノードで送る

  1. Code ノードの後ろに Slack ノードを置き、Resource を Message、Operation を Send にします
  2. Credential に Slack の認証情報を指定します。n8n が推奨しているのは OAuth2 です(n8n Cloud なら Connect my account から接続できます)
  3. 送り先は Channel を選び、通知用のチャンネルを指定します
  4. 送る本文の欄に式で {{ $json.text }} を入れます
  5. ワークフローを Save します

Slack アプリをボットとして使う場合は、通知先のチャンネルにそのアプリを招待しておきます。

監視したいワークフローに紐づける

エラーを通知したいワークフローごとに、次の設定をします。

  1. 対象のワークフローを開き、Options(︙)> Settings を選びます
  2. Error workflow で、さきほど作った Error Handler を選びます
  3. Save で保存します

これで、このワークフローの実行が失敗すると Error Handler が起動し、Slack に通知が届きます。同じ Error Handler を何本のワークフローに指定してもかまいません。

なお、Error Trigger を含むワークフローは、既定で自分自身をエラーワークフローとして使います。

動作を確認する

Error Trigger は、ワークフローをエディタから手動で実行したときの失敗では起動しません。自動実行(スケジュールや Webhook などのトリガー)で失敗したときだけ起動します。そのため、確認用のワークフローを1本作って自動で失敗させます。

  1. 新しいワークフローに Schedule Trigger(毎分)を置きます
  2. その後ろに Stop and Error ノードを置き、Error Type を Error Message、Error Message に test error from n8n と入れます
  3. Settings の Error workflow に Error Handler を指定して保存し、ワークフローを公開(アクティブ化)します
  4. 1分ほど待つと、Slack に次のような通知が届きます
:rotating_light: n8n Workflow Error

Workflow: Error Test
Node: Stop and Error
Error: test error from n8n
Execution: View in n8n

確認できたら、確認用のワークフローは無効にしておきます。毎分失敗し続けて通知が止まらなくなるためです。

Stop and Error ノードは確認用だけでなく、本番のワークフローで「この条件のときは失敗扱いにしてエラーワークフローへ回す」ときにも使えます。

うまくいかないとき

手動実行で失敗させても通知が来ない

仕様です。Error Trigger は自動実行の失敗でしか起動しません。上の「動作を確認する」のとおり、トリガー付きのワークフローを公開して自動で失敗させてください。

通知に Execution のリンクが出ない

execution.url は実行がデータベースに保存されたときだけ入ります。また、メインのワークフローのトリガーノード自体で失敗した場合はワークフローが実行されないため、execution.id と execution.url が入りません。このときのデータは execution ではなく trigger 側に情報が入る、次の形になります。

{
  "trigger": {
    "error": {
      "context": {},
      "name": "WorkflowActivationError",
      "cause": {
        "message": "",
        "stack": ""
      },
      "timestamp": 1654609328787,
      "message": "",
      "node": {}
    },
    "mode": "trigger"
  },
  "workflow": {
    "id": "",
    "name": ""
  }
}

トリガーの失敗も通知したい場合は、Code ノードのエラーメッセージを次のように取り直します。

const data = $input.first().json;
const errorMessage =
  data.execution?.error?.message ||
  data.trigger?.error?.message ||
  'Unknown error';

Slack ノードが not_in_channel で失敗する

Slack の chat.postMessage は、送信元がそのチャンネルのメンバーでないと次のエラーを返します。

not_in_channel

通知先のチャンネルで Slack アプリ(ボット)を招待してから、もう一度試してください。

Slack ノードが channel_not_found や missing_scope で失敗する

channel_not_found

チャンネルの指定が正しくありません。チャンネル名ではなくチャンネル ID で指定すると取り違えを防げます。

missing_scope

Slack アプリのトークンに、メッセージ送信に必要なスコープが付いていません。Slack の OAuth & Permissions でスコープを追加し、アプリをワークスペースに再インストールしてから、n8n の認証情報をつなぎ直してください。

Error workflow の選択肢に作ったワークフローが出ない

エラーワークフローを保存していないと選択肢に出ません。Error Handler 側を Save してから、監視したいワークフローの Settings を開き直してください。

参考

この記事を書いた人

渋谷で働くよわよわエンジニア。TypeScript(Next.js/Node.js)/Golang/AWS/Flutterなど
LINE API Expert(2023/1~)

tokkuをフォローする
オススメ記事
在宅ワークが多くなって、デスクの配線周りに困っている方は、拡張デスクの導入がおすすめです。Windows/MacOS/Linuxの複数の機器をスッキリとデスク周りに収める事ができました!リモートからサーバーメンテを行うインフラエンジニアは必見です!
n8n
シェアする
tokkuをフォローする

コメント

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