【n8n教程】:掌握n8n流程逻辑,构建复杂自动化工作流

在n8n中构建自动化工作流时,你不仅需要连接不同的应用程序,还需要根据不同的条件做出决策、处理多个数据流、循环处理数据以及处理可能出现的错误。这正是流程逻辑(Flow Logic)的用武之地。

流程逻辑是n8n中表示复杂业务规则的核心能力。它让你能够构建真实世界的自动化流程,而不仅仅是简单的线性工作流。本教程将帮你快速理解和掌握n8n中的所有流程逻辑概念。

1. 条件分支:使用IF节点和Switch节点分割工作流

什么是条件分支?

条件分支允许你根据特定条件将单分支工作流转变为多分支工作流。当数据流经过IF或Switch节点时,系统会根据条件判断,将数据路由到不同的分支进行处理。

核心概念

实战例子:使用IF节点处理订单

假设你有一个订单管理系统,需要根据订单金额是否超过100来决定是否需要特殊审批:

  1. 1. 添加IF节点,设置条件:{{ $json.orderAmount > 100 }}
  2. 2. 在"True"分支:将订单发送给审批部门
  3. 3. 在"False"分支:直接发送确认邮件

Switch节点的优势

当你有多个条件需要判断时,Switch节点比多个IF节点更简洁。例如,根据订单状态(待处理、已发货、已完成)执行不同的操作。

关键点:条件分支是构建复杂工作流的第一步,让系统能够"思考"和做出决策。


2. 合并数据:处理多个数据流

为什么需要合并数据?

当工作流分支后,最终需要将来自不同分支的数据流合并成一个统一的输出。n8n提供了多种方法来实现这一点。

合并数据的三种方法

方法1:使用Merge节点

Merge节点是合并不同数据流的标准工具。它支持多种合并操作:

使用场景:合并来自两个不同来源的数据,如从数据库查询的用户列表和从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适合需要数据对比的场景。


3. 循环处理:重复处理多个数据项

n8n中的循环机制

n8n自动处理数据循环。当一个节点接收多个数据项时,它会自动为每个项目执行一次。这意味着你通常不需要显式地编写循环代码。

自动循环示例

假设你需要发送邮件给客户列表中的每个客户:

  1. 1. 连接客户列表节点到邮件发送节点
  2. 2. 配置邮件节点
  3. 3. n8n会自动为列表中的每个客户发送一封邮件

显式循环:Loop Over Items节点

某些情况下,你需要精细控制循环行为:

使用Loop Over Items节点的场景:

与条件结合:创建条件循环


    
    
    
  Manual Trigger → Loop Over Items → IF Node
                                  ├─ True → Process Data
                                  └─ False → Skip

在这个流程中,Loop Over Items会继续迭代直到所有项都被处理,IF节点决定如何处理每个项。

关键点:n8n的循环是自动的,但你可以通过Loop Over Items节点获得更多控制。这让你可以处理复杂的批处理和条件循环场景。


4. 等待:暂停工作流执行

Wait节点的作用

Wait节点允许工作流在执行过程中暂停,然后在满足条件时恢复。这对以下场景非常有用:

两种等待方式

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秒的延迟:

  1. 1. 使用Loop Over Items分批处理数据
  2. 2. 在每次API调用后添加Wait节点,延迟1秒
  3. 3. 这样可以避免超过API速率限制

关键点:Wait节点是处理时间相关逻辑的关键,使你能够创建智能的、符合外部系统限制的自动化工作流。


5. 子工作流:模块化和重用工作流

什么是子工作流?

子工作流是从另一个工作流(父工作流)中调用的独立工作流。这种模块化方法让你能够:

设置子工作流的步骤

第一步:创建子工作流

  1. 1. 创建一个新工作流
  2. 2. 添加Execute Sub-workflow Trigger节点(搜索时也会显示为"When Executed by Another Workflow")
  3. 3. 配置输入数据模式:
    • Define using fields below:定义个别输入字段
    • Define using JSON example:提供JSON示例
    • Accept all data:接受所有数据

第二步:在父工作流中调用

  1. 1. 在父工作流中添加Execute Sub-workflow节点
  2. 2. 选择要调用的子工作流
  3. 3. 映射输入参数
  4. 4. 子工作流的最后节点将其输出发送回父工作流

数据流向


    
    
    
  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自动化系统的关键。使用它们来模块化你的业务逻辑。


6. 错误处理:构建健壮的工作流

错误处理的重要性

即使设计精良的工作流也可能出错。错误处理确保你的自动化系统能够:

创建错误工作流

错误工作流是一个特殊的工作流,当主工作流执行失败时自动触发。

步骤1:创建错误处理工作流

  1. 1. 创建新工作流,命名为"Error Handler"
  2. 2. 添加Error Trigger节点作为第一个节点
  3. 3. 配置错误处理逻辑(如发送Slack通知或Email警报)
  4. 4. 保存工作流

步骤2:在主工作流中关联错误工作流

  1. 1. 打开需要错误处理的工作流
  2. 2. 点击OptionsSettings
  3. 3. 在Error workflow下拉菜单中选择你创建的错误处理工作流
  4. 4. 保存

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

错误处理最佳实践

  1. 1. 记录错误:将错误信息发送到日志服务或数据库
  2. 2. 及时通知:通过Slack、Email等渠道通知运维团队
  3. 3. 自动重试:对于临时错误,配置自动重试机制
  4. 4. 可追溯性:保留完整的错误追踪信息,便于调试

关键点:好的错误处理是专业工作流的标志。它保证即使发生意外,你也能快速知道并做出响应。


7. 执行顺序:理解多分支工作流的执行流程

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"
: "{\n  \"orders\": [\n    {\"id\": \"ORD001\", \"amount\": 50, \"customer\": \"Alice\", \"email\": \"alice@example.com\"},\n    {\"id\": \"ORD002\", \"amount\": 150, \"customer\": \"Bob\", \"email\": \"bob@example.com\"},\n    {\"id\": \"ORD003\", \"amount\": 75, \"customer\": \"Charlie\", \"email\": \"charlie@example.com\"}\n  ]\n}"
      }
,
      "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"
  }

}

如何使用这个工作流

  1. 1. 在n8n中创建新工作流
  2. 2. 点击菜单图标(三个点) → Import from File
  3. 3. 选择包含上述JSON的文件,或复制JSON内容后使用Import
  4. 4. 配置各节点参数(如实际的邮件服务凭证)
  5. 5. 点击Execute Workflow测试

工作流说明

节点名称功能关键参数
Schedule Trigger定时触发,每5分钟执行一次触发间隔
Mock Order Data模拟订单数据JSON数据
Loop Over Items循环处理每个订单批处理大小
Check Order Amount根据金额判断是否需要审批条件:amount > 100
Approval Needed处理需要审批的订单审批逻辑
Direct Process直接处理不需要审批的订单处理逻辑
Merge Results合并两个分支的结果合并方式

总结

  1. 1. 条件分支:使用IF和Switch节点根据条件路由数据
  2. 2. 数据合并:使用Merge节点或Code节点合并多个数据流
  3. 3. 循环处理:利用n8n的自动循环机制或Loop Over Items节点
  4. 4. 等待操作:使用Wait节点处理时间相关的业务逻辑
  5. 5. 子工作流:通过模块化提高代码复用性和可维护性
  6. 6. 错误处理:创建错误工作流捕获和处理异常
  7. 7. 执行顺序:理解多分支工作流的执行流程

官方文档[1]
n8n系列教程[2]

引用链接

[1] 官方文档: https://docs.n8n.io/flow-logic/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#