在自動化的世界裡,最怕的不是流程的複雜,而是「無聲的失敗」,為了避免這種窘境,我們需要建立一個可靠的錯誤監控與通知機制
今天,我們將會利用 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/