跳转到内容

Sub-workflow · 把 workflow 写成"函数"

第 4 章 · 第 6 节

写代码我们抽函数;做 n8n 工作流也一样——重复出现的”组装一段逻辑”应该抽成可复用单元。这就是 Sub-workflow:让你的工作流变成”调用其他工作流”的小巧主流程。

痛点Sub-workflow 解药
同一段逻辑在 5 个 workflow 里复制粘贴抽成 1 个 sub-workflow,5 处调用
主 workflow 太长,画布像意大利面把分支抽走,主流程清爽
单元想独立测试sub-workflow 可以单独 Test workflow
团队协作,逻辑封装边界每个 sub-workflow 一个 owner

跟普通 workflow 完全一样,只是触发器换成 “Execute Sub-workflow Trigger”

🧩 sub-workflow-recipe.txt
Sub-workflow: "Send Slack Alert" [Execute Sub-workflow Trigger] ← 入口 Input fields: - title (string) - message (string) - severity (string: info / warn / error) ↓ [Format Message] ↓ [Slack] ↓ [Return] ← 输出回主 workflow(可选)

入口节点会让你定义”参数清单”——这就像函数签名,主 workflow 调用时按这个清单传值。

Execute Workflow 节点:

📞 execute-workflow.txt
Main workflow: ... → [Execute Workflow] → ... Workflow: "Send Slack Alert" ← 下拉选 sub-workflow Inputs: title: ={{ "Order Failed" }} message: ={{ $json.errorMsg }} severity: error 执行时: Execute Workflow 节点接管控制权 → 调用 sub-workflow → 等返回 → 把返回值放到 output 主 workflow 看 Execute Workflow 的输出就拿到了 sub-workflow 的 return 值。
🎛 three-modes.txt
Execute Workflow 节点的 "Mode" 有 3 个选项: 1. Run once with all items 主流程 100 个 item → sub-workflow 被调用 1 次,输入是整个数组 2. Run once for each item (默认) 主流程 100 个 item → sub-workflow 被调用 100 次,每次 1 个 item 3. Run via Webhook 把 sub-workflow 当 HTTP API 调(异步、跨实例)

新手默认用 “Run once for each item”——跟其他节点的迭代行为一致。

📢 notify-subwf.txt
Sub-workflow: "Notify" Input: { channel, message, severity } Logic: severity=error → Slack #alerts (红色) severity=warn → Slack #ops (黄色) severity=info → Slack #updates (蓝色) 主 workflow 想发通知 → Execute Workflow "Notify" + 传参就完事 不再每个 workflow 自己写 Slack 节点的格式化逻辑

场景 2 · 通用数据写入 sub-workflow

Section titled “场景 2 · 通用数据写入 sub-workflow”
💾 save-record.txt
Sub-workflow: "Save Record" Input: { table, data } Logic: - 验证字段 - 加 timestamp / created_by - 写 Postgres - 同步到 Notion(备份) 3 个不同入口的 workflow(Webhook / Schedule / Manual)都调它来落库
divide-conquer.txt
主 workflow (清爽): [Webhook] → [Execute Workflow "Validate"] → [Execute Workflow "Enrich"] → [Execute Workflow "Save"] → [Execute Workflow "Notify"] 每个 sub-workflow 5-10 个节点,专注一件事。主流程看起来像伪代码。
📐 sub-conventions.txt
命名约定: ✅ [sub] Send Slack Alert ← 前缀标明是 sub-workflow ✅ [util] Validate Email 返回值约定: - 成功:{ success: true, data: ... } - 失败:{ success: false, error: "..." } 统一签名让所有 sub-workflow 调用方式一致,主 workflow 处理逻辑也统一。
  • Sub-workflow = workflow 的”函数封装”
  • 入口节点用 Execute Sub-workflow Trigger,定义参数清单
  • 主 workflow 用 Execute Workflow 节点调用
  • 三种调用模式:all-items / each-item(默认)/ webhook
  • 用约定(命名前缀 + 返回格式)让团队复用更顺
  • 注意:凭证作用域 + 递归风险 + 调试需切到 sub-workflow

至此你已学完 第 4 部分。下一部分进入最有趣的 Part 5 · AI 与 Agent