背景
我有一個由 3 個 n8n 工作流程組成的鏈:
- main — 生成組合、循環、每個項目調用
intermediaire - intermediaire — 通過
Execute Workflow Trigger接收項目、通過Loop Over Items批處理、每個批次通過Execute Workflow節點調用 sub/sub - sub/sub — 通過
Execute Workflow Trigger接收項目、通過Code → Convert to File → Gemini → Formatter → Airtable Create處理
鏈 main → intermediaire 運作正常。鏈 intermediaire → sub/sub 不運作。
症狀
當 intermediaire 調用 sub/sub 時,會建立 sub/sub 的執行(在「Executions」標籤中可見,狀態:success,模式:integrated),但:
- 持續時間:約 20 毫秒
runData:空的{}(沒有執行任何節點,甚至觸發器也沒有)nodeExecutionStack:空的- 然而父工作流程中的
Execute Workflow節點在其輸出中顯示 1 個項目
使用釘選數據手動執行 sub/sub 完美運作(約 3.5 秒,所有節點都如預期執行)。只有在從父工作流程調用時才會出現此錯誤。
我已嘗試的方法
- 禁用
sub/sub觸發器上的型別輸入架構(inputSource: "passthrough")→ 仍然是空的。 - 刪除並重新建立
Execute Workflow Trigger節點 → 結果相同。 - 升級 n8n 到最新版本 → 結果相同。
- 直接通過 REST API 修補工作流程 JSON,強制
inputSource: "passthrough"並刪除我最初懷疑的events欄位(打字錯誤"worklfow_call")。APIGET傳回清理後的版本,但執行快照仍然嵌入舊/錯誤的參數 — 這意味著引擎從與我 PUT 的內容不同的存儲副本讀取。 - 驗證姊妹工作流程
intermediaire(運作正常)的快照具有完全相同的內部值events: "worklfow_call"— 因此該欄位不是錯誤。
運作中和失敗工作流程之間的關鍵差異
| intermediaire(運作) | sub/sub(失敗) | |
|---|---|---|
inputSource |
workflowInputs(型別架構) |
passthrough |
父工作流程的 Execute Workflow 對應 |
defineBelow 具有型別值 |
defineBelow 具有型別值 |
父工作流程的 Execute Workflow 節點使用 mappingMode: "defineBelow" 和一個 schema: [...] 宣告 7 個型別輸入(codeNorme、codeElement、recordId、paramValues、pdfUrl、categorie、data)。
我目前的假設:當父工作流程通過 defineBelow 型別架構發送數據時,子工作流程觸發器也必須處於 inputSource: workflowInputs 模式,並帶有匹配的架構。將其設置為 passthrough 會導致項目在觸發時被無聲地丟棄。
我剛剛通過 API 使用 inputSource: "workflowInputs" 和匹配的架構修補了 sub/sub 的觸發器。測試中。
問題
- 這個假設正確嗎?
passthrough與發送defineBelow型別對應的父工作流程不相容嗎? 文件不清楚。 - 為什麼 API
GET為觸發器顯示一組參數,但執行快照嵌入不同的參數?是否有伺服器端快取或規範化層? - 有沒有辦法讓子工作流程觸發器接受任何上游輸入,無論父工作流程如何對應它(真正的萬用字元)?
- 有沒有推薦的模式來避免這種子工作流程長鏈中觸發器/呼叫者架構不同步?
環境
- n8n 版本:
2.20.7-exp.0(自託管)(此錯誤僅在我回到我的 Hostinger 舊版本後出現,因為我不小心刪除了 n8n 和我的工作流程,我不知道這是否相關) - 觸發器節點:
n8n-nodes-base.executeWorkflowTrigger,typeVersion1.1 - 呼叫者節點:
n8n-nodes-base.executeWorkflow,waitForSubWorkflow: false - 二進位數據模式:
filesystem
歡迎任何指正 — 我已經為此花了好幾個小時。
