首先完成“第5课:表达式、数据映射与转换”即可解锁本课程。转到上一课

简介

到目前为止,你已经探索了 n8n 的界面,了解了各个节点,并单独尝试了触发器和动作。本课就是让所有内容融会贯通的地方。你将从零开始构建一个完整、可运行的工作流——它有一个真实的触发器,通过多个步骤处理数据,并产生一个具体的输出。目标不仅仅是让它运行一次,而是激活它,让它在没有你操作的情况下自动运行。

本课中你要构建的工作流:当表单提交了新条目(或通过 webhook 到达)时,数据被转换,应用一个条件检查,然后向 Slack 频道发送一条通知。这个模式——接收、处理、决策、执行——出现在大约 80% 的真实自动化用例中,因此一旦掌握它,你就拥有了一个可复用的思维模型。

流程图展示 4 个连续阶段:触发器(Webhook/表单)→ 数据转换 → 条件检查(IF 节点)→ 输出动作(Slack/Email)

设置触发器

在 n8n 中新建一个工作流。点击画布,添加一个 Webhook 节点作为触发器。将 HTTP 方法设置为 POST,并记下生成的 webhook URL——你将用它来发送测试数据。

在 Webhook 节点设置中,将 "Response Mode"(响应模式)设置为 "Last Node"(最后一个节点),这样 n8n 会等待整个工作流完成后再响应调用方。当 webhook 调用方期望收到确认时,这一点很重要。

要发送测试负载,可以使用 curl 或任何 HTTP 客户端等工具:

bash
curl -X POST https://your-n8n-instance/webhook/your-webhook-id \
-H "Content-Type: application/json" \
-d '{"name": "Alice", "score": 87, "email": "alice@example.com"}'

在运行 curl 命令之前,先在 n8n 中点击 "Listen for Test Event"(监听测试事件)。一旦负载到达,n8n 会将数据固定到该节点——在构建会话期间,每个下游节点现在都可以引用它。

使用 Set 节点转换数据

原始的 webhook 数据通常不是下游所需的确切格式。在 Webhook 节点之后添加一个 Set 节点,以重新塑形或丰富传入的数据。

在本例中,你希望将姓名规范化为大写,并添加一个计算字段,将分数标记为等级:

javascript
// Inside Set node — Expression field for "grade"
{{ $json.score >= 90 ? 'A' : $json.score >= 75 ? 'B' : 'C' }}

配置 Set 节点,仅保留你需要的字段(name、email、score、grade),方法是将 "Keep Only Set"(仅保留已设置的字段)切换为开启。这能保持数据在流向下一个节点时整洁,避免意外地将未预期的字段传递给外部 API。

保存后,使用 "Execute Node"(执行节点)验证输出。你应该能看到转换后的条目,其中 grade 字段已被填充。

使用 IF 节点添加条件逻辑

并非每次提交都应触发相同的动作。高分者可能收到祝贺消息,而其他人则收到鼓励消息。IF 节点负责处理这种分支逻辑。

在 Set 节点之后添加一个 IF 节点。将条件设置为检查 grade 字段:

javascript
// IF node condition
{{ $json.grade }} equals A

IF 节点输出两个分支:"true"(grade 为 A)和 "false"(其他所有情况)。将一个 Slack 节点连接到 true 分支,将第二个 Slack 节点(或一个 Email 节点)连接到 false 分支。这就是 n8n 处理条件路径的方式:你显式地连接两个输出,而不是编写 if/else 代码。

图示:IF 节点带有两个输出分支——true 分支通向 "高分 Slack 消息" 节点,false 分支通向 "鼓励 Slack 消息" 节点

连接输出动作

在 true 分支上添加一个 Slack 节点。你需要在 n8n 中配置一个 Slack 凭据(Settings → Credentials → New → Slack OAuth2)。连接完成后,配置该节点:

json
{
"channel": "#notifications",
"text": "🎉 {{ $json.name }} scored an A ({{ $json.score }}) — great result!"
}

对于 false 分支,复制 Slack 节点并更改消息内容:

json
{
"channel": "#notifications",
"text": "📬 {{ $json.name }} completed the assessment with grade {{ $json.grade }} ({{ $json.score }})."
}

使用 "Execute Workflow"(执行工作流)按钮运行整个工作流。检查你的 Slack 频道,确认消息以正确的内容出现。如果你看到 Slack API 错误,最常见的原因是 OAuth 应用中缺少频道作用域,或者机器人未被邀请加入该频道。

测试、修复与激活

在激活之前,使用不同的负载至少运行两次工作流——一次触发 true 分支,一次触发 false 分支:

bash
# Test false branch — score below 90
curl -X POST https://your-n8n-instance/webhook/your-webhook-id \
-H "Content-Type: application/json" \
-d '{"name": "Bob", "score": 72, "email": "bob@example.com"}'

执行后,通过点击每个节点来检查其输出。底部的执行日志面板会显示走了哪条路径以及每一步的数据。这是你主要的调试工具。

一旦两个路径都正常工作,给你的工作流起一个描述性的名称(左上角标题字段),然后翻转右上角的 Active(激活)开关。webhook URL 现在已生效——对于每一个传入的 POST 请求,n8n 都会自动执行该工作流,无需你点击任何东西。

在宣布完成之前,有几件事需要再次确认:确认 webhook URL 是 "production"(生产)URL(而非测试 URL);如果外部服务需要调用你的 n8n 实例,请确认该实例可从互联网访问;并检查你的凭据在连接真实服务时没有使用 test/sandbox(测试/沙箱)令牌。

总结

你刚刚构建了一个完整的四节点工作流:一个 Webhook 触发器、一个用于数据转换的 Set 节点、一个用于分支逻辑的 IF 节点,以及用于输出的 Slack 节点。更重要的是,你激活了它——它现在可以自主运行。你在这里练习的"接收—处理—决策—执行"模式,几乎是你今后构建的每一种自动化的主干。从这里开始,替换不同的触发器(定时、邮件、数据库事件)或不同的输出动作(Google Sheets、HTTP 请求、内部 API)都很简单,因为结构保持不变。

课后练习

课程检查点

巩固所学知识,获取作业反馈。

0/1
已回答 · 0/1