在自動化的世界裡,最怕的不是流程的複雜,而是「無聲的失敗」,為了避免這種窘境,我們需要建立一個可靠的錯誤監控與通知機制
今天,我們將會利用 n8n 內建的「錯誤觸發器」(Error Trigger)功能,搭配 Discord,打造一個全自動的錯誤警報系統。只要任何一個工作流程出錯,我們就會在指定的 Discord 頻道中收到即時通知,就能第一時間掌握狀況並進行處理
在 n8n 中,我們可以設定一個特別的「錯誤工作流程」。這個流程不會被排程或 Webhook 觸發,它的唯一使命,就是在 n8n 執行個體中任何其他已啟用的工作流程發生錯誤時自動啟動。這就像是為我們的所有自動化流程裝上了一個中央保全系統
來到儀表板,新增一個流程「Create Workflow」

初始節點選擇「Error Trigger」

下個節點選擇 Discord 的「Send a message」

「Connection Type」選擇「Webhook」,憑證的串接在之前的文章有撰寫過,這邊就不重複惹

Message 就寫個「ERROR!」

接著我們到現有的其他 workflow 裡面的設定

把「Error Workflow」選擇為剛剛建立的這個流程並存檔

再來則是故意觸發錯誤,隨便選個程式碼節點加入底下的程式碼,讓他在最上方直接拋出錯誤
throw new Error("這是一個用來觸發錯誤通知的測試!");

接著就能在 Discord 收到通知啦

但如果每個流程都有設定要跑這個錯誤通知,就會發現這個訊息看不出來到底是哪個流程出問題了,所以接下來我們來設定客製化的訊息
回到剛剛的錯誤流程畫布,點選中間的「Executions」,可以看到過去執行的內容

可以把綠色的節點點兩下打開,查看裡面的資訊,就能發現這邊有回傳不少變數能讓我們使用

再來回到畫布上,點選 Discord 的節點,在 Message 的內容貼上以下內容,並在右上角切換為「Expression」
**🚨 n8n 工作流程發生錯誤!🚨**
**工作流程名稱:** {{$json.workflow.name}}
**錯誤節點:** {{$json.execution.lastNodeExecuted}}
**錯誤訊息:** `{{$json.execution.error.message}}`
**執行日誌連結:** [點此查看]({{$json.execution.url}})

接著就能在 Discord 看到對應的通知囉

而我們畫布上的節點長這樣

最後也附上完整的 JSON
{
  "nodes": [
    {
      "parameters": {},
      "type": "n8n-nodes-base.errorTrigger",
      "typeVersion": 1,
      "position": [0, 0],
      "id": "70924a03-bda6-4729-ac95-5123ed6b0a58",
      "name": "Error Trigger"
    },
    {
      "parameters": {
        "authentication": "webhook",
        "content": "=**🚨 n8n 工作流程發生錯誤!🚨**\n\n**工作流程名稱:** {{$json.workflow.name}}\n**錯誤節點:** {{$json.execution.lastNodeExecuted}}\n**錯誤訊息:** `{{$json.execution.error.message}}`\n**執行日誌連結:** [點此查看]({{$json.execution.url}})",
        "options": {}
      },
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [208, 0],
      "id": "d061948a-ee82-483c-8eba-0779c372978a",
      "name": "Discord",
      "webhookId": "[REDACTED_WEBHOOK_ID]",
      "credentials": {
        "discordWebhookApi": {
          "id": "[REDACTED_CREDENTIAL_ID]",
          "name": "Discord Webhook account"
        }
      }
    }
  ],
  "connections": {
    "Error Trigger": {
      "main": [
        [
          {
            "node": "Discord",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "[REDACTED_INSTANCE_ID]"
  }
}
https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.errortrigger/