Sub-workflow · 把 workflow 写成"函数"
第 4 章 · 第 6 节
写代码我们抽函数;做 n8n 工作流也一样——重复出现的”组装一段逻辑”应该抽成可复用单元。这就是 Sub-workflow:让你的工作流变成”调用其他工作流”的小巧主流程。
为什么要 Sub-workflow
Section titled “为什么要 Sub-workflow”| 痛点 | Sub-workflow 解药 |
|---|---|
| 同一段逻辑在 5 个 workflow 里复制粘贴 | 抽成 1 个 sub-workflow,5 处调用 |
| 主 workflow 太长,画布像意大利面 | 把分支抽走,主流程清爽 |
| 单元想独立测试 | sub-workflow 可以单独 Test workflow |
| 团队协作,逻辑封装边界 | 每个 sub-workflow 一个 owner |
创建一个 Sub-workflow
Section titled “创建一个 Sub-workflow”跟普通 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 调用时按这个清单传值。
在主 workflow 里调用
Section titled “在主 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 值。
三种调用模式
Section titled “三种调用模式” 🎛 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”——跟其他节点的迭代行为一致。
经典使用场景
Section titled “经典使用场景”场景 1 · 通用通知 sub-workflow
Section titled “场景 1 · 通用通知 sub-workflow” 📢 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)都调它来落库
场景 3 · 分而治之
Section titled “场景 3 · 分而治之” ✂ divide-conquer.txt
主 workflow (清爽):
[Webhook] → [Execute Workflow "Validate"]
→ [Execute Workflow "Enrich"]
→ [Execute Workflow "Save"]
→ [Execute Workflow "Notify"]
每个 sub-workflow 5-10 个节点,专注一件事。主流程看起来像伪代码。
Sub-workflow 的常用约定
Section titled “Sub-workflow 的常用约定” 📐 sub-conventions.txt
命名约定:
✅ [sub] Send Slack Alert ← 前缀标明是 sub-workflow
✅ [util] Validate Email
返回值约定:
- 成功:{ success: true, data: ... }
- 失败:{ success: false, error: "..." }
统一签名让所有 sub-workflow 调用方式一致,主 workflow 处理逻辑也统一。
本节要点回顾
Section titled “本节要点回顾”- Sub-workflow = workflow 的”函数封装”
- 入口节点用 Execute Sub-workflow Trigger,定义参数清单
- 主 workflow 用 Execute Workflow 节点调用
- 三种调用模式:all-items / each-item(默认)/ webhook
- 用约定(命名前缀 + 返回格式)让团队复用更顺
- 注意:凭证作用域 + 递归风险 + 调试需切到 sub-workflow
至此你已学完 第 4 部分。下一部分进入最有趣的 Part 5 · AI 与 Agent。