
本文是属于从0考试自学N8N的全部我的学学习路程,我会把我的学习实操记录下来,然后方便大家去看和学习,我也希望把我的学习路径记录下来,这份笔记包含我的学习过程和一些心得,所以我会将这个N8N的教程完成。
在开始学习之前,我会去YouTube和b站上面去寻找关键词 n8n下面的相关资讯,然后我会把第一页的每一个影片快速的过一下,看看到底应该选择哪一个up主的视频进行详细的学习。如果说你确认了风格,然后你也发现这个人是你要学习的对象。那么我的建议是你把他最开始介绍这个n8n的视频完整的从头开完。第一遍看的时候,不要实操,你需要完整把整个内容全部过一遍(这个视频的选择最好是选择实操的时候建立n8n的那种视频去看是有意义的)。这个时候的过一遍主要的意义是让你首先感受一下n8n的搭建的全流程到底是不是你能接受的内容。同时你的n8n大概需要哪些知识点对吧,比如说你是否能接受看 json文件,是否不排斥 html的代码,或者是一个简单的代码,是不是能够接受。如果说你看了一遍,发现这个n8n的搭建工作流你觉得没问题,是你能够接受的,你就开始准备学习。很多人在最初接触n8n的时候 不去做这个工作,最后会出现一个问题就是你学了半天发现居然还有这么多东西要学习,实在是没有这个耐心或者时间也不够就放弃了。这等于说你一开始的预期是错误的,最后就白白的浪费了时间。所以这一步也就是我们学习的一步就是看看老师的风格是不是你自己喜欢的。如果风格合适加上你对于这个n8n有一个明确的预期,知道自己需要面对的是一个什么知识点,那么你是可以开始投入时间和精力去学习。道理都很简单,但是很多人都不去做这步骤。然后还有一个很重要的点就是,一旦你觉得跟着这个人学习了,那么你需要把他这个一个系列的视频都看完。然后一定要实操,就跟我们一开始学习所有技能一样,依葫芦画瓢。只有实操了,你才会发现在实操的过程中你会遇到什么问题和困难。所有的知识点都是在实操中去巩固和加深技能的。所以我总结下来最快的学习的方法就是看一遍后跟着你的老师一步一步的实操复原。你要做的第一步就是复原,先复原的情况下,然后再把你学习的过程记录下。这是属于最快的学习方法。
OK 今天我们就给你们分享我学习的第一个工作流,是我跟着视频一步一步的学习和模仿搭建出来的。原作者视频出处是https://youtu.be/vvqhzbp4J5A?si=xNRe5dvXJZWzWnGp 从51分开始看的视频。如果你们没有时间看视频也可以看我这一篇博客一步一步的操作。
我们学习的这个第一个工作流主要的内容是:顾客通过填写表单,然后自动发送邮件提醒给我们自己。
开始搭建N8N
在 n8n 里,任何一个工作流(Workflow)的开始点几乎都需要一个 触发器(Trigger)。触发器的作用就是:告诉工作流什么时候启动,因为什么条件被启动。可以理解为「起点开关」。

2. 工作流执行的基本逻辑
- 触发器被满足 → 工作流开始执行。
- 数据输入 → 触发器通常会把一些数据带进来(比如订单号、邮箱内容、Webhook body)。
- 节点处理 → 这些数据依次传递给后续节点,直到流程结束。
例如:
- Webhook 触发器 → 接收到客户下单数据 → 存入 Google Sheet → 发送邮件通知。
3. 如何选择合适的触发器
- 如果是 定期任务 → 用 Schedule。
- 如果是 等待外部事件(下单、支付、回调)→ 用 Webhook 或 Event。
- 如果是 定时去拉取(没有主动推送的服务)→ 用 Polling。
- 如果是 手动执行测试 → 用 Manual。
那么在下面的演示中,我将会使用N8N自带的表单进行触发

第一个触发器,根据视频中的演示先选择n8n自带的form。所以怎么操作呢?直接搜索form。然后选择on new n8n form event

然后按照表格里面把对应的信息填进去。这个form title就是我们的这个表单的表头的意思,在这个教程中它主要的意思写明白我们这个表格是干啥用的。


如果需要变成必填项就必须打钩,就要把这个required field 打钩就行。然后如果你需要新增新的框框让顾客去填则 点击add form element。全部都写完了。点击右上角的红色按钮 开始测试

然后这个就是我们的测试情况下,它的这个表格长什么样子。

然后我们现在需要让这个顾客填入这个数据后自动的导入进google 的sheet中。所以我们需要对接上google sheets
N8N 接入谷歌的API


这个地方我们要选择 google 的append or update row in sheet的选择项。那么就针对这几个高频功能,做一个解读

- 数据收集场景:用 Append row in sheet → 每次增加一条记录(表单、用户反馈、订单)。
- 数据同步场景:用 Append or update row in sheet → 避免重复写入,保持最新状态。
- 数据维护场景:用 Update row in sheet / Delete rows → 做更新、清理。
- 自动化场景:用 Create spreadsheet / Create sheet → 动态生成新文件或新 tab 来分类管理

接下来,我们需要做的第一件事情就是授权google sheet的api给到我们的n8n进行读取google中的数据


目前界面是 n8n 配置 Google Sheets 账号 时需要填写的 OAuth2 信息。接下来我们需要做几个步骤
N8N配置 Google Sheets 账号 前提条件
你需要在 Google Cloud Console(谷歌云控制台)创建一个项目,并开启 API:
- Google Drive API
- Google Sheets API
N8N 配置API的流程




谷歌API 中的项目配置









这个时候我们需要选择中这个URL 把n8n刚才弹窗中google sheet给我们这个url复制进去





接下来我们要把这2个数据 分别 填入进n8n的中的客户端ID和客户端密码区域 全都要填入对应的区域中。在下图显示的client id就是客户端id。密码就是低下的secrect

做完这一步之后,我们需要回到 google云中,选择目标对象-add user


这个添加用户我会写我的谷歌账号的那个邮箱。全部都设置好了之后,去选择去开启我们google sheet的api也要开启


开启之后,回到N8N开始点选这个sign in了




然后还没有结束哦,我们还需要开启google drive的api。流程和上面一样 去云里面搜

此时呢?我们的google中的档案就都在N8N中显示出来了。这样我们谷歌文档里的基本上都有了。

那么在这个地方我们需要为我们的学习制作一个单独的空的google sheet,所以我开了一个新的变淡然后把第一行你可以按照我写的这个样式一样的写下来。主要目的是实操这个过程。当你做好了这个表单并且也把表单的命名为n8n后,你就能在n8n中找到这个工作簿了。

下图中被框起来的部分就是说,如果在这个学习案例中,当顾客写了表单需求后,我们如何让n8n去判断这个数据是否已经存在,因为还记得我们最开始的时候 选择google sheet的时候选的是什么选项吗?我们其实选择的是append和update这个东西,所以我们现在需要选择一个变量,这边案例中用email的形式进行判断,也就是意味着当顾客输入email后,首先n8n会在这个excel中会去寻找是否有一模一样的email已经在列表中 了。如果不在列表中,那么就要新增,如果已经存在则进行更新的动作。


当你点选了左边的执行红色按钮后,然后重新输入email的信息你左边就会出现这个测试的数据,也就是大家现在看到这个email和姓名,我们现在需要让n8n能够识别这些变量。因为我们的表格基本上不会在改变了所以直接通过拖拽的方式即可。

按照我框选的位置,然后进行拖拽 放入我指向的位置


然后我们现在需要如法炮制重复3次把我这个选择的3个地方都进行拖拽

接下来 针对于 这个时间的代码,因为我们需要的是获取当下的时间,所以需要写一个点点代码,那怎么操作呢?其实很简单,首先大家把你的键盘变成英文的,非中文的然后输入2个{{ 后接一个空格
这个2个括弧会自动显示一个红色的2个括弧,如果你看到这个说明你操作是正确的。

然后你在这个2个括弧中间输入 $now

然后再这个基础上再加一个小数点 .
然后选择format 后找到yyyy-mm-dd 也就是时间表达的格式就算完成了。



最后一个我们需要做这个拒绝的判定,那么我们如果回到excel,我们看看在表格中,Google sheet是如何表达这个拒绝或者不拒绝的呢?



我们现在可以看到在表格中,如果我们打钩这个框则显示true 而且是大写的。如果我们是不打钩则显示的flase 也是大写的。
所以我们如何在这个n8n中的JavaScript中显示出这个 判定呢?你可以通过gpt或者任何的ai帮助你去写,那么你可以直接把下文的东西输入给大模型的比如说ChatGpt。让他帮助你去完成
幫我寫一段n8n可以用得單行的{{}}程式我要判斷输入值是否等於“0-200 USD” 输出 TRUE,FALSE

{{ $json["yourField"] === "0-200 USD" ? "TRUE" : "FALSE" }}
那么现在又有一个问题就是在这个代码中 有一个地方明确的写了,yourfield 也就是说 我们到底是通过什么在判断呢?是不是一开始这个教程说的要通过预算来判断对吧,如果顾客的预算在0-200 usd这个区间内,则我们不做它的生意,所以要拒绝这个生意,也就是要打钩在表格里面对吧。所以这个yourfield要把我们的预算拖进去

{{ $json['预算'] === "0-200 USD" ? "TRUE" : "FALSE" }}


所以最终的代码我们能看到是长这样,其他的都不变唯一的变化就是这个预算的位置。
全部都设置好了之后,开始进行测试运行


我们检查去excel看看这个地方是否被标记了

所以在表格中 它没法做到这个勾选动作,所以我们只需要让他保持这个true和F 就行了。这样就算完成了第一步自动化识别顾客的需求
现在我们进行二次测试,我们拿一个全新的email去做测试看看如果是1000美金以上的 是否会被认为通过呢?也就是不打钩


你会发现已经变成false。但是如果我们在同一个email下进行修改 然后再进行测试,也就是说提交同样的email然后把预算变成0-200 后 它会显示什么呢?

这个地方一定要手动进行修改哦。,必须和你之前写的参数一模一样才行,然后再进行测试


你会发现这个 同样的email就变成了true了。
现在我们需要给我们这个的表格加一个筛选,这筛选是为了识别出我们这个拒绝中的这个人群,要把他们都筛选掉。
如何在N8N中添加筛选器呢?

所以我们需要找到Data transformation
然后找到filter也就是漏斗

然后点击一下这个位置的按钮,把前一个节点的信息 传送过来
这一步是为了把我们的值方便我们去拖拽。然后我们需要把预算进行拖拽进去,因为本质上我们是为了找到有愿意付费的顾客对吧。所以需要把不愿意付费的顾客都筛选掉。

图中框中的区域可以每一个都解释一下
什么是N8N的 Filter 节点?
在设置条件时的类型选项。每个类型决定了你在比较时,value2 输入的值应该是什么格式。这里给你详细解释一下:
各类型含义
- String(字符串)
- 用来比较文本内容,例如
"男"、"VIP用户"、"Completed"。 - 常见操作:
is equal to、contains、starts with等。
- 用来比较文本内容,例如
- Number(数字)
- 用来比较数值型数据,例如
18、100、3.14。 - 常见操作:大于、小于、等于等。
- 用来比较数值型数据,例如
- Date & Time(日期和时间)
- 用来比较时间字段,例如
"2025-09-12"或时间戳。 - 常见操作:在某个日期之前/之后、是否在范围内等。
- 适合处理订单时间、注册日期、生日之类的字段。
- 用来比较时间字段,例如
- Boolean(布尔值)
- 只接受
true/false。 - 适合处理是否开启、是否支付成功、是否激活等二元状态。
- 只接受
- Array(数组)
- 用来处理一个字段里包含多个值的情况,例如:
["男", "女"]或["tag1", "tag2", "tag3"]。 - 常见操作:
contains(包含)、is empty等。
- 用来处理一个字段里包含多个值的情况,例如:
- Object(对象)
- 用来处理嵌套的 JSON 对象。
- 例如某个字段是:
那么我们现在需要选择的是数值类型,所以需要选择String(字符串)。

String 条件说明
- exists
- 字段存在即可(不管值是什么)。
- 示例:只要有
"名字": "张三"这个字段,就算条件成立。
- does not exist
- 字段不存在时成立。
- 示例:如果 JSON 中没有
"名字"这个字段,就成立。
- is empty
- 字段存在,但值是空字符串
""。 - 示例:
"名字": ""
- 字段存在,但值是空字符串
- is not empty
- 字段存在,并且有内容(非空字符串)。
- 示例:
"名字": "张三"
- is equal to
- 字段值必须完全等于目标值。
- 示例:
"状态" == "成功"
- is not equal to
- 字段值和目标值不相等时成立。
- 示例:
"状态" != "失败"
- contains
- 字段值包含某个子字符串。
- 示例:
"订单状态": "已完成支付"→ contains"支付"
- does not contain
- 字段值不包含某个子字符串。
- 示例:
"订单状态": "待处理"→ does not contain"支付"
- starts with
- 以某个字符串开头。
- 示例:
"订单号": "AB12345"→ starts with"AB"
- does not start with
- 不以某个字符串开头。
- 示例:
"订单号": "CD67890"→ does not start with"AB"
- ends with
- 以某个字符串结尾。
- 示例:
"邮箱": "test@gmail.com"→ ends with"gmail.com"
- does not end with
- 不以某个字符串结尾。
- 示例:
"邮箱": "test@yahoo.com"→ does not end with"gmail.com"
- matches regex
- 用正则表达式匹配,灵活强大。
- 示例:手机号验证 →
^1[3-9]\\d{9}$
- does not match regex
- 不匹配正则时成立。
- 示例:邮箱格式错误时触发。
那么在我们这个区域我选择的是不等于这个 0-200 美金的预算报价,我们就让它通过,所以这个filter其实就是帮助我们去做了一个筛选。然后这个地方的数值需要自己手动去写、记得一定要和我们值保持一致。现在就可以开始跑一遍看看效果。当我点击画面中的Execute step 然后就发现在我们的discard里面就出现了一个结果




然后我们现在可以把我们的filter进行一个命名。这个命名就是一个识别的作用。
N8N如何设置分流节点switch
1. 什么是 Switch 节点?
- 功能:根据输入数据的某个字段的值,来决定数据走哪一条分支。
- 类比:像编程里的
if…else或switch…case语句。 - 位置:它通常放在触发器之后,或者前面处理完数据的节点之后。
2. Switch 节点的工作方式
- 你先指定一个要检查的字段(比如 JSON 中的
status字段)。 - 在 Switch 节点里定义多个条件(Case)。
- 数据经过时,会被匹配到相应的分支,如果都不符合,就走默认路径。




OK,当我们来 到这个switch的节点后,我们之前的测试都是0-200USD的区间,所以为了让我们的工作流可以顺利的完成,所以这个地方最好是回到最开始的填表区域,把这个工作流中的预算调整一下。这样会让工作流可以进行下一步。




做好了之后点击右上角的保持,然后开始点击我现在那个播放按钮
点击最后的switch 进去后再点击运行,你看看你的资料在switch的节点内是否有显示了


现在我们开始规划我们的n8n 中的switch的条件,那么我们希望n8n帮我执行的路线图。如果超过1000美金,则为我们的目标客户,如果低于1000美金,处于200-1000我们希望可以进一步沟通需求然后尽可能的让他们成为我们的顾客。


目前在我们的switch 中可以看到,我们的输出0 是有结果,而输出1 是没有结果的。也可以直接回到这个主页面看到这个路线分了上面和下面了。也就说明我们的工作流目前是畅通的状态没问题。

N8N 如何链接Gmail节点
接下来我们需要让n8n的工作流在switch之后通过结果,给顾客发送一份邮件告知他们一下,发到gmail中,所以我们在可以再输出1的结果(也就是下路去添加一个gmail的节点。同样的我们也要做gmail的api认证服务。)


在这个画面中我们一样的,先做api的认证。要回到我们的google api






账号和密码都写了,就点击 sign in google





绑定成功后,为了使我们的工作流可以 正常的进行测试,我们需要将我们最开始的数据切回200-1000 USD这个输入,这样我们可以让switch的按钮走下面的一条路也就是输出1., 我们进行修改我们的gmail的设置,我们把label 变成send 然后让他们把邮件发给我们自己




在gmail的这个节点中,你会看到这个message,然后这个message的话可以让大模型帮你去写话术,主要目的是让顾客回答一下需求,然后看看能不能把预算拉到1000美金以上。



然后我们现在跑一次流程看看 是不是和我们写的一样。需要去你当初填写表格的email中去看看是否出现了我们在n8n中写的这些内容。

在N8N中如何让gmail中的回复变得好看?
其实原理就是把我们的纯文本内容变成html的形式,这样就可以让我们的回复变得特别的好看。我们只需要在gmail的这个节点中去选择对应的html的格式就行。但是此处我们需要chatgpt或者其他的大模型进行辅助帮你写代码。当然也可以使用其他的ai编程工具来帮你写。此处友情提示,如果你是open ai的用户你可以使用 open ai家里自带编程功能,而且非常的好用。我会单独出本地化部署的教程,这样方便大家学习



现在我们让gpt给我们生产一个html的代码,然后呢,我可以把这个代码丢进N8N里面


OK目前这个html 我觉得还不错,所以就暂时就先这样,然后我会把这个代码,我也贴在底下可以让大家去学习和参考
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>自动化工作流程开发——意向跟进函</title>
<style>
body {
font-family: system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
margin: 0;
padding: 0;
background: #f8f9fb;
color: #1a1a1a;
line-height: 1.6;
}
.container {
max-width: 640px;
margin: 40px auto;
background: #ffffff;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0,0,0,0.08);
padding: 32px;
}
h1 {
font-size: 22px;
margin-bottom: 20px;
color: #111;
}
p {
margin: 12px 0;
}
ul {
padding-left: 20px;
margin: 16px 0;
}
ul li {
margin: 8px 0;
}
.button-box {
text-align: center;
margin: 28px 0 10px;
}
.button {
display: inline-block;
padding: 12px 28px;
font-size: 16px;
color: #fff;
background: #2563eb;
border-radius: 6px;
text-decoration: none;
font-weight: 600;
}
.button:hover {
background: #1d4ed8;
}
.footer {
margin-top: 24px;
font-size: 14px;
color: #555;
}
</style>
</head>
<body>
<div class="container">
<h1>{{ $json['名字'] }}{{ $json['姓氏'] }} 先生/女士您好,</h1>
<p>感谢您对我们的自动化工作流程开发服务感兴趣。我们仔细阅读了您的需求,对您希望透过自动化提升的目标深感认同。</p>
<p>为了更精准地评估专案复杂度,并确保我们能提供最符合您需求的解决方案,我想进一步了解以下几点:</p>
<ul>
<li>关于您提及的各项工具或平台,您是否有偏好的整合方式或具体需求?</li>
<li>在您的工作流程中,手动介入和品质保证环节的具体流程为何?</li>
<li>对相关系统或平台的整合,是否有特定的客制化需求?</li>
<li>考虑到流程复杂度,为确保系统的稳定性与扩展性,我们建议在预算上保留弹性空间。</li>
</ul>
<p>期待您的回复,以便我们能更深入地探讨您的需求。</p>
<div class="button-box">
<a href="mailto:hello@stokisai.com?subject=自动化项目沟通" class="button">会谈建议</a>
</div>
<div class="footer">
stokis 敬上
</div>
</div>
</body>
</html>
如何在N8N用复制节点功能

同时我们现在还需要继续的去优化我的邮件内容,所以我直接就在刚才那个gpt给我生产的代码底下继续给他进行对话了。让他给我修改我的邮件内容


<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>立即预约会议 - 自动化解决方案</title>
<style>
body {
font-family: system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
margin: 0;
padding: 0;
background: #f8f9fb;
color: #1a1a1a;
line-height: 1.6;
}
.container {
max-width: 640px;
margin: 40px auto;
background: #ffffff;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0,0,0,0.08);
padding: 32px;
}
h1 {
font-size: 22px;
margin-bottom: 20px;
color: #111;
}
p {
margin: 12px 0;
}
.button-box {
text-align: center;
margin: 28px 0 10px;
}
.button {
display: inline-block;
padding: 14px 32px;
font-size: 16px;
color: #fff;
background: #2563eb;
border-radius: 6px;
text-decoration: none;
font-weight: 600;
}
.button:hover {
background: #1d4ed8;
}
.footer {
margin-top: 24px;
font-size: 14px;
color: #555;
}
</style>
</head>
<body>
<div class="container">
<h1>立即预约,抢占自动化先机 </h1>
<p>感谢您关注我们的解决方案。我们深知在当今竞争激烈的环境中,<strong>速度和效率决定成败</strong>。</p>
<p>为确保您能第一时间掌握适合贵司的优化策略,我们已预留了有限的沟通时段,专门用于解答问题并提供方向性建议。</p>
<p><strong>建议您立即预约 15 分钟会议,以免错过最佳窗口。</strong></p>
<div class="button-box">
<a href="<https://cal.com/>" target="_blank" rel="noopener" class="button">立即预约会议</a>
</div>
<div class="footer">
<p>此邀请适用于各行业客户,欢迎尽快确认您的专属时段。</p>
</div>
</div>
</body>
</html>
如何在n8n使用merge
在 n8n 里,Merge 节点用来做「汇合」:把来自 两条数据流 的数据合并到一起。它的作用有点像编程里的 join、merge 或者「数据拼接器」。
1. 什么是 Merge 节点?
- 功能:把 两个输入 的数据进行合并,输出成一个新的数据流。
- 位置:它通常放在两个分支之后,用来把它们的结果「汇总」。
- 应用场景:
- 并行任务的结果合并
- 多来源数据对比
- 数据拼接(类似 SQL 的
JOIN)




我们合并之后的目的就是让N8N给我们发送消息提醒,这样可以快速的帮助我整理信息。


我在这个位置让gmail先进行了一个不激活,快捷键是D,然后就可以做到。然后我们先让merge这个节点先跑起来,让数据输入进来


这个地方就是让你写你希望这个信件传送给谁?然后谁来接受这些顾客的需求信件。
然后我们在这个message里面通过用Expression 的形式把这些都做完。


最终基本上我们这个工作流就全部就完成了,如果你需要在里面进行美化的话可以再通过把文本变成html的方式进行二次的美化即可。方法和我们前几个步骤差不多。
订阅《跨境 × AI 周报》
每周 1 封,不废话:Etsy / SEO / ComfyUI / AI 实操与案例复盘。
订阅即表示同意接收我的邮件,可随时一键退订。
想把“图像生产力”装进你的电商系统?
ComfyUI = 稳定扩散的「可视化拼装台」。
n8n 负责「流程自动化」,ComfyUI 负责「内容生产」——两者串起来,就是电商的“内容流水线”。
- 学习曲线:n8n 上手快、ComfyUI 前期略陡,但模块化后可复用/可复制,越用越省时。
- 强关联:用 n8n 触发上新 → 拉关键词/文案 → 调用 ComfyUI 批量出主图/场景图 → 自动上传。
- 电商落地:上新模板、节日批量改版、A/B 图测、平台差异化图(Etsy/Amazon/独立站)。
* 你会看到:如何让关键词→文案→模版→主图/场景图→上传,形成一条自动化产线。还有真实案例与可复制工作流。
扫码入群,如果过期,可以直接添加 微信号 guangtou34 并说明目的