大家好,
我在自動化工作流程中遇到了一些邏輯瓶頸,想看看其他人如何處理雜亂的傳入 webhook 資料。
情景: 我有一個外部服務通過 webhook 傳送資料來觸發 n8n 工作流程。但是,傳入的 JSON 承載結構偶爾會根據事件類型而改變——有時鍵是巢狀的,有時則以扁平陣列的形式返回。
我已嘗試的方法: 我目前使用標準 IF 節點和運行 JavaScript 的 Code 節點來檢查鍵的存在,然後將其對應到後續的 HTTP Request 節點。但當架構變化意外發生時,它會導致下游執行錯誤。
有人在 n8n 內建立過一個乾淨、有彈性的模式來規範化波動的 webhook 架構,然後再將資料傳遞到下游應用程式嗎?你是否使用特定的錯誤處理子工作流程或進階表達式解析?
感謝你能分享任何見解或最佳實踐!
嗨 @Maaz 歡迎!
具有復原力的模式是停止對原始酬載進行分支處理,而是在 Webhook 之後的單個 Code 節點中一次性將其標準化為固定架構,讓所有下游節點都能依賴。在那裡強制轉換形狀並防禦性地讀取鍵,以便架構轉變只會影響那一個節點,而不會破壞 HTTP Request 節點:
const p = $json.body ?? $json;
const rows = Array.isArray(p) ? p : (Array.isArray(p.items) ? p.items : [p]);
return rows.map(r => ({
json: {
id: r.id ?? r.data?.id ?? null,
email: r.email ?? r.data?.customer?.email ?? null,
type: r.event ?? r.type ?? 'unknown',
raw: r,
}
}));
?. 和 ?? 是帶來復原力的關鍵:它們讀取嵌套或缺失的鍵而不會拋出異常,因此移動或缺失的欄位會變成 null 而不是硬錯誤。從那裡,使用 Switch 節點而不是鏈式 IF 對標準化的類型進行路由(每個分支仍然輸出相同的欄位),在 HTTP Request 節點上將 On Error 設定為 Continue(使用錯誤輸出),以便一個有問題的項目進入錯誤分支而不是停止執行,並在 Options > Settings 下將工作流指向專用的 Error Trigger 工作流,以便任何仍然漏掉的東西都能被捕獲和警報。