在n8n中构建自动化工作流时,你不仅需要连接不同的应用程序,还需要根据不同的条件做出决策、处理多个数据流、循环处理数据以及处理可能出现的错误。这正是流程逻辑(Flow Logic)的用武之地。
流程逻辑是n8n中表示复杂业务规则的核心能力。它让你能够构建真实世界的自动化流程,而不仅仅是简单的线性工作流。本教程将帮你快速理解和掌握n8n中的所有流程逻辑概念。
点击获取最新AI资讯、n8n工作流、开发经验分享
什么是条件分支?
条件分支允许你根据特定条件将单分支工作流转变为多分支工作流。当数据流经过IF或Switch节点时,系统会根据条件判断,将数据路由到不同的分支进行处理。
核心概念
- IF节点:最常用的条件节点,支持简单的真/假(True/False)条件判断
- Switch节点:支持多个条件分支,适合复杂的多路选择场景
实战例子:使用IF节点处理订单
假设你有一个订单管理系统,需要根据订单金额是否超过100来决定是否需要特殊审批:
- 添加IF节点,设置条件:
{{ $json.orderAmount > 100 }} - 在"True"分支:将订单发送给审批部门
- 在"False"分支:直接发送确认邮件
Switch节点的优势
当你有多个条件需要判断时,Switch节点比多个IF节点更简洁。例如,根据订单状态(待处理、已发货、已完成)执行不同的操作。
关键点:条件分支是构建复杂工作流的第一步,让系统能够"思考"和做出决策。
为什么需要合并数据?
当工作流分支后,最终需要将来自不同分支的数据流合并成一个统一的输出。n8n提供了多种方法来实现这一点。
合并数据的三种方法
方法1:使用Merge节点
Merge节点是合并不同数据流的标准工具。它支持多种合并操作:
- Combine:将所有项目从两个流合并为一个数组
- Only New:只保留第一个流中有、第二个流中没有的项目
- Only Existing:只保留两个流中都存在的项目
- Except:保留第一个流中有、第二个流中没有的项目
使用场景:合并来自两个不同来源的数据,如从数据库查询的用户列表和从API获取的活跃用户列表。
方法2:使用Code节点进行复杂合并
对于复杂的数据合并逻辑,Code节点提供了更大的灵活性。它允许你编写自定义的JavaScript或Python代码来合并多个节点的执行结果。
// 从多个节点执行结果中提取数据 const userData = $input.all()[0].json; const activityData = $input.all()[1].json; // 合并两个数据对象 return { user: userData, activity: activityData, mergedAt: new Date().toISOString() };
方法3:Compare Datasets节点进行对比合并
Compare Datasets节点不仅合并数据,还能对比两个数据流。它输出四个不同的流:只在流1中、只在流2中、两者都有、差异数据。
关键点:选择合适的合并方法取决于你的数据结构和业务需求。Merge节点适合简单场景,Code节点适合复杂逻辑,Compare Datasets适合需要数据对比的场景。
n8n中的循环机制
n8n自动处理数据循环。当一个节点接收多个数据项时,它会自动为每个项目执行一次。这意味着你通常不需要显式地编写循环代码。
自动循环示例
假设你需要发送邮件给客户列表中的每个客户:
- 连接客户列表节点到邮件发送节点
- 配置邮件节点
- n8n会自动为列表中的每个客户发送一封邮件
显式循环:Loop Over Items节点
某些情况下,你需要精细控制循环行为:
使用Loop Over Items节点的场景:
- 批量处理:设置
Batch Size为特定数值,分组处理数据 - 避免API速率限制:通过设置小的批量大小,缓解对外部API的压力
- 处理需要特殊逻辑的数据:与IF节点组合,创建条件循环
与条件结合:创建条件循环
Manual Trigger → Loop Over Items → IF Node ├─ True → Process Data └─ False → Skip
在这个流程中,Loop Over Items会继续迭代直到所有项都被处理,IF节点决定如何处理每个项。
关键点:n8n的循环是自动的,但你可以通过Loop Over Items节点获得更多控制。这让你可以处理复杂的批处理和条件循环场景。
Wait节点的作用
Wait节点允许工作流在执行过程中暂停,然后在满足条件时恢复。这对以下场景非常有用:
- 速率限制:等待一定时间后再调用API,避免超过速率限制
- 异步操作:等待外部事件完成(如Webhook回调)
- 时间触发:在特定时间执行操作
两种等待方式
1. 固定时间等待
工作流暂停特定的时间长度。例如,等待5分钟后继续:
Trigger Node → API Call → Wait 5 minutes → Send Email
2. 等待Webhook事件
工作流保持暂停状态,直到接收到预期的Webhook请求。这对处理异步操作非常有用:
Trigger → Send Approval Request → Wait for Webhook → Process Approval
实际应用
场景:速率限制
假设你需要调用一个API,但它限制每秒最多调用1次。使用Wait节点可以在调用之间插入1秒的延迟:
- 使用Loop Over Items分批处理数据
- 在每次API调用后添加Wait节点,延迟1秒
- 这样可以避免超过API速率限制
关键点:Wait节点是处理时间相关逻辑的关键,使你能够创建智能的、符合外部系统限制的自动化工作流。
什么是子工作流?
子工作流是从另一个工作流(父工作流)中调用的独立工作流。这种模块化方法让你能够:
- 复用逻辑:在多个工作流中重用相同的业务逻辑
- 简化复杂工作流:将大型工作流分解为更小、更易管理的部分
- 改进可维护性:更改一次,所有调用它的工作流都会受益
设置子工作流的步骤
第一步:创建子工作流
- 创建一个新工作流
- 添加Execute Sub-workflow Trigger节点(搜索时也会显示为"When Executed by Another Workflow")
- 配置输入数据模式:
- Define using fields below:定义个别输入字段
- Define using JSON example:提供JSON示例
- Accept all data:接受所有数据
第二步:在父工作流中调用
- 在父工作流中添加Execute Sub-workflow节点
- 选择要调用的子工作流
- 映射输入参数
- 子工作流的最后节点将其输出发送回父工作流
数据流向
Parent Workflow ↓ [Execute Sub-workflow Node] ← 发送数据 ↓ Sub-workflow ↓ [Execute Sub-workflow Trigger] ← 接收数据 ↓ [Process Nodes] ↓ [Last Node] ← 返回数据 ↓ Parent Workflow [Execute Sub-workflow Node] ← 接收结果 ↓ Continue execution
子工作流的优势
- 降低执行成本:子工作流执行不计入你的月度执行限额
- 更好的组织:大型自动化系统可以分解为逻辑单元
- 团队协作:不同团队可以维护不同的子工作流
关键点:子工作流是构建可扩展、可维护的n8n自动化系统的关键。使用它们来模块化你的业务逻辑。
错误处理的重要性
即使设计精良的工作流也可能出错。错误处理确保你的自动化系统能够:
- 优雅地处理异常情况
- 通知相关人员问题的发生
- 防止数据丢失或不一致
- 自动恢复或手动干预
创建错误工作流
错误工作流是一个特殊的工作流,当主工作流执行失败时自动触发。
步骤1:创建错误处理工作流
- 创建新工作流,命名为"Error Handler"
- 添加Error Trigger节点作为第一个节点
- 配置错误处理逻辑(如发送Slack通知或Email警报)
- 保存工作流
步骤2:在主工作流中关联错误工作流
- 打开需要错误处理的工作流
- 点击Options → Settings
- 在Error workflow下拉菜单中选择你创建的错误处理工作流
- 保存
Error Trigger接收的数据
Error Trigger节点接收以下错误信息:
{ "execution": { "id": "执行ID", "url": "执行的URL", "retryOf": "重试的执行ID(如果是重试)" }, "trigger": { "error": { "message": "错误消息", "description": "错误描述" } }, "workflow": { "id": "工作流ID", "name": "工作流名称" } }
主动触发错误:Stop And Error节点
你也可以使用Stop And Error节点在特定条件下强制触发错误:
Check Data → IF Node ├─ Valid → Continue Processing └─ Invalid → Stop And Error → Error Workflow Triggered
错误处理**实践
- 记录错误:将错误信息发送到日志服务或数据库
- 及时通知:通过Slack、Email等渠道通知运维团队
- 自动重试:对于临时错误,配置自动重试机制
- 可追溯性:保留完整的错误追踪信息,便于调试
关键点:好的错误处理是专业工作流的标志。它保证即使发生意外,你也能快速知道并做出响应。
n8n中的执行顺序
n8n执行多分支工作流的方式取决于工作流的创建版本:
对于1.0之前创建的工作流
按层级执行:
- 执行第一个分支的所有节点
- 然后执行第二个分支的所有节点
- 依此类推
对于1.0及以后创建的工作流
按分支顺序执行:
- 按画布上从上到下、从左到右的位置顺序执行各分支
- 完全执行一个分支后,才开始执行下一个分支
控制执行顺序
虽然n8n有默认的执行顺序,但你可以在工作流设置中修改它。这对特定的业务需求很有帮助。
执行顺序示例
┌─ Branch A ─┐ Start ──┤ ├─ Merge ─ End └─ Branch B ─┘ 执行顺序: 1. Start节点 2. Branch A的所有节点(按顺序) 3. Branch B的所有节点(按顺序) 4. Merge节点 5. End节点
关键点:了解执行顺序对预测工作流行为至关重要。在某些情况下,你可能需要显式地控制执行顺序来实现特定的业务逻辑。
现在让我们把所学的所有概念整合在一起,构建一个完整的订单处理工作流。这个工作流展示了条件分支、循环、合并和错误处理的实际应用。
工作流场景
一个电商平台需要自动处理订单:
- 接收订单
- 根据订单金额判断是否需要审批
- 批量发送确认邮件
- 合并处理结果
- 处理任何出现的错误
工作流JSON代码
复制以下JSON代码到n8n中导入(使用菜单中的Import from File或创建新工作流后选择Import from URL):
{ "name": "订单处理工作流", "nodes": [ { "parameters": { "triggerType": "on", "unit": "minutes", "value": 5 }, "id": "trigger-node", "name": "Schedule Trigger", "type": "n8n-nodes-base.scheduleTrigger", "typeVersion": 1, "position": [250, 300] }, { "parameters": { "jsonData": "{ "orders": [ {"id": "ORD001", "amount": 50, "customer": "Alice", "email": ""}, {"id": "ORD002", "amount": 150, "customer": "Bob", "email": ""}, {"id": "ORD003", "amount": 75, "customer": "Charlie", "email": ""} ] }" }, "id": "code-input", "name": "Mock Order Data", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [450, 300] }, { "parameters": { "mode": "runOnceForEachItem", "jsCode": "return item.json.orders;" }, "id": "loop-orders", "name": "Loop Over Items", "type": "n8n-nodes-base.splitInBatches", "typeVersion": 1, "position": [650, 300] }, { "parameters": { "conditions": { "boolean": [ { "value1": "{{ $json.amount }}", "operation": ">", "value2": 100 } ] } }, "id": "check-amount", "name": "Check Order Amount", "type": "n8n-nodes-base.if", "typeVersion": 1, "position": [850, 300] }, { "parameters": { "content": "订单 {{ $json.id }} 金额为 {{ $json.amount }},需要审批" }, "id": "approval-note", "name": "Approval Needed", "type": "n8n-nodes-base.noOpNode", "typeVersion": 1, "position": [1050, 150] }, { "parameters": { "content": "订单 {{ $json.id }} 金额为 {{ $json.amount }},可以直接处理" }, "id": "direct-process", "name": "Direct Process", "type": "n8n-nodes-base.noOpNode", "typeVersion": 1, "position": [1050, 450] }, { "parameters": { "content": "订单处理完成" }, "id": "merge-results", "name": "Merge Results", "type": "n8n-nodes-base.merge", "typeVersion": 2, "position": [1250, 300] } ], "connections": { "Schedule Trigger": [ { "node": "Mock Order Data", "type": "main", "index": 0 } ], "Mock Order Data": [ { "node": "Loop Over Items", "type": "main", "index": 0 } ], "Loop Over Items": [ { "node": "Check Order Amount", "type": "main", "index": 0 } ], "Check Order Amount": [ { "node": "Approval Needed", "type": "main", "index": 0 }, { "node": "Direct Process", "type": "main", "index": 0 } ], "Approval Needed": [ { "node": "Merge Results", "type": "main", "index": 0 } ], "Direct Process": [ { "node": "Merge Results", "type": "main", "index": 1 } ] }, "active": false, "settings": { "executionOrder": "v1" } }
如何使用这个工作流
- 在n8n中创建新工作流
- 点击菜单图标(三个点) → Import from File
- 选择包含上述JSON的文件,或复制JSON内容后使用Import
- 配置各节点参数(如实际的邮件服务凭证)
- 点击Execute Workflow测试
工作流说明
- 条件分支:使用IF和Switch节点根据条件路由数据
- 数据合并:使用Merge节点或Code节点合并多个数据流
- 循环处理:利用n8n的自动循环机制或Loop Over Items节点
- 等待操作:使用Wait节点处理时间相关的业务逻辑
- 子工作流:通过模块化提高代码复用性和可维护性
- 错误处理:创建错误工作流捕获和处理异常
- 执行顺序:理解多分支工作流的执行流程
官方文档
n8n系列教程
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/273542.html