昨天終於把前面學過的功能組合起來,完成了第一個比較完整的:
AI 客服訊息自動分類系統
目前的流程已經可以做到:
Webhook → AI 分類 → Switch 分流 → Email / Google Sheets
不過 Workflow 變長之後,我也發現一個很現實的問題:
只要其中一個 Node 出錯,後面的流程就可能全部停下來。
例如 AI 沒有正常回傳、Google Sheets 寫入失敗,甚至只是資料欄位名稱打錯,都可能讓 Workflow 無法正常執行。
所以今天先不增加新的功能,而是來學一件實際做自動化一定會遇到的事情:
怎麼找到錯誤發生在哪裡?
前幾天的 Workflow 很短,出錯時通常一下就可以找到問題。
但現在已經變成:
Webhook
↓
AI
↓
Switch
↙ ↓ ↘
Email Google Sheets
只要其中一個地方出問題,就可能影響後面的流程。
例如:
Webhook 沒收到 text
↓
AI 沒有正確的文字可以分析
↓
AI 沒產生 category
↓
Switch 不知道要走哪條路
所以有時候看到 Switch 沒有執行,真正的問題不一定出在 Switch。
有可能是更前面的 Node 已經出錯了。
今天我想先故意把 Workflow 弄錯一次。
例如原本 Webhook 收到的資料是:
{
"text": "系統目前無法登入"
}
AI Prompt 原本取得:
{{ $json.body.text }}
可以故意把它改成不存在的欄位,例如:
{{ $json.body.message }}
但實際 JSON 根本沒有:
message
這時候後面的 AI 就可能拿不到原本預期的資料。

圖 1 故意設定錯誤的資料欄位進行測試
以前看到紅色錯誤時,我第一個反應可能是:
「是不是 n8n 壞掉了?」
然後一直重新執行。
但今天開始練習另一種方式:
先找出是哪一個 Node 開始出現問題。
例如完整流程:
Webhook → AI → Switch → Email
如果 Email 沒有寄出去,我會先看:
Webhook 有沒有收到資料?
再看:
AI 有沒有正常輸出?
最後才看:
Switch 有沒有走到 urgent?
這樣就不用一次檢查整個 Workflow。
這時候 Day 8 學到的 Input / Output 就非常重要了。
假設 Webhook 的 Output 是:
{
"body": {
"text": "系統目前無法登入"
}
}
代表 Webhook 沒問題。
接著查看 AI Node。
如果 AI 原本應該收到:
系統目前無法登入
結果卻沒有收到文字,就可以往 Expression 的設定檢查。
原本錯誤的是:
{{ $json.body.message }}
正確應該是:
{{ $json.body.text }}
這樣就找到問題了。

圖 2 透過 Input / Output 檢查資料傳遞狀況
Workflow 越來越長之後,我覺得一開始就直接執行全部流程反而比較難除錯。
比較簡單的方法是分段確認:
Webhook ✓
↓
AI ✓
↓
Switch ✓
↓
Email / Sheets ✓
先確認 Webhook 收到的資料正確。
再確認 AI 有沒有得到預期的輸出,例如:
{
"category": "urgent",
"summary": "使用者目前無法登入",
"notify": true
}
接著再確認 Switch 是否真的讀到:
category = urgent
最後才檢查 Email。
這樣問題發生時,比較容易知道是哪一步出錯。
AI 是目前 Workflow 裡比較特別的一個部分。
因為一般 Node 的規則通常比較固定,但 AI 的回答可能受到 Prompt、模型以及輸入內容影響。
例如我們預期:
{
"category": "urgent"
}
但 AI 卻產生:
分類結果:urgent
這時候 AI 本身可能沒有「執行失敗」,但後面的 Switch 卻可能無法使用這個結果。
這也是一種錯誤。
所以除錯 AI Workflow 時,不能只看:
Node 有沒有變紅?
還要看:
Node 輸出的內容是不是我們預期的格式?

圖 3 檢查 AI 是否按照指定格式輸出資料
除了直接查看 Workflow,也可以利用 n8n 的執行紀錄來確認每次 Workflow 的執行情況。
當流程執行失敗時,可以回頭查看那一次執行,觀察:
哪一個 Node 成功?
哪一個 Node 開始失敗?
當時收到什麼 Input?
錯誤訊息是什麼?

圖 4 查看 Workflow 執行失敗的位置與錯誤資訊
這比只知道「Workflow 沒有成功」有用很多。
今天原本只是想學怎麼找錯誤,但後來發現還有另一個問題。
假設這套 Workflow 真的每天自動執行。
如果凌晨 3 點突然失敗,我根本不會一直盯著 n8n。
所以更完整的自動化系統,除了正常流程之外,其實也應該考慮:
正常
↓
繼續執行
發生錯誤
↓
記錄錯誤
↓
通知管理者
例如未來可以設計:
Workflow 發生錯誤
↓
取得錯誤資訊
↓
發送 Email
↓
通知「某個 Workflow 執行失敗」
這樣就不用等到自己發現資料沒有進 Google Sheets,才知道系統早就出問題了。
經過今天的測試,我覺得之後 Workflow 出錯時,可以先按照一個固定方向檢查:
先找失敗的 Node → 看 Input → 看 Output → 檢查 Expression / 欄位 → 檢查 AI 格式 → 修正後重新測試
比起看到錯誤就一直改不同地方,這樣比較容易找到真正的原因。
尤其 Workflow 越來越大之後,這個習慣應該會更重要。
今天沒有讓 Workflow 多一個很酷的新功能,但我覺得這反而是很重要的一天。
前面一直在想:
怎麼讓 Workflow 做更多事情?
今天第一次開始想:
如果 Workflow 沒有照預期工作,我要怎麼知道問題在哪?
而目前最重要的方法就是:
不要一次看整條 Workflow,而是沿著資料流,一個 Node 一個 Node 檢查 Input 和 Output。
這也讓我發現,建立自動化不只是把 Node 接起來而已。
真正要讓它可以長期使用,還要考慮:
錯誤、測試、紀錄與通知。
到目前為止,我們都是等 Workflow 開始之後才看結果。
明天想再進一步,看看 n8n 怎麼處理「一大堆資料」,而不是每次只處理一筆。