N8N 牛刀小试
版权声明
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
一、N8N 简介
N8N(读作 N-eight-N)就是一个开源、可视化、节点式的工作流自动化工具,说白了就是帮你把各种系统、API、服务串起来自动跑流程,不用写一堆胶水代码。
你可以把它理解成:可视化的“流程编排引擎”+ 自带几百个集成节点 + 随时能插 JS/Python 代码的低代码平台,自己服务器就能跑,数据全在你手里。
那么这玩意能干啥?松哥举几个常见的场景:
定时拉取 API 数据 → 存数据库 → 生成报表 → 发邮件/钉钉通知; 接收到 Webhook(比如支付回调、表单提交)→ 校验数据 → 调用内部服务 → 写日志 → 发告警; 批量处理数据:从 A 系统读 → 清洗转换 → 写入 B 系统; 做简单的 ETL、数据同步、定时任务、自动化测试、告警聚合;
能力还是非常强大。
N8N 安装也是非常容易,建议用 Docker 一键安装。
Docker 安装指令如下:
docker volume create n8n_datadocker run -it \ --name n8n \ -p 5678:5678 \ -e GENERIC_TIMEZONE="Asia/Shanghai" \ -e TZ="Asia/Shanghai" \ -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \ -v n8n_data:/home/node/.n8n \ -d docker.n8n.io/n8nio/n8n
安装好之后,我们就可以直接在浏览器中访问了:
http://localhost:5678/
二、案例场景说明
接下来松哥通过一个案例来和大家说明一下 N8N 的简单玩法。
先大概说明一下场景。
想做一个关于财经新闻的聊天机器人,整体上的流程是这样:
用户发送消息 -> 获取财经资讯 -> AI 进行处理 -> 回复用户
另外还有一条支线任务,在获取到财经资讯之后,将相关的数据存入到飞书多维表格。
其中,获取财经资讯使用的接口是财联社的公开接口:
https://www.cls.cn/nodeapi/telegraphList
该接口返回的数据格式如下:
好了,准备工作大概就这些,接下来我们打开 N8N 的网页,就可以开始绘制流程了。
三、流程编排
我先来给大家看一下整体的流程编排,然后我再逐个讲解每个 Node 节点。
3.1 When chat message received
首先这个就是一个触发节点,也就是整个流程由谁触发,从哪里开始。
系统支持的触发节点主要有如下几类:
简单来说,主要是如下几种:
Webhook 触发(Webhook):监听HTTP请求(GET/POST 等),外部系统/用户调用这个 URL 就触发流程,说白了,就是给 n8n 开个接口,别人访问这个接口,流程就跑起来; 定时触发(Cron):按固定时间/频率触发(秒/分/时/日/周/月); 手动触发(Manual Trigger):手动点击“执行”按钮触发流程; 消息/聊天类触发:Telegram Trigger、Discord Trigger、Slack Trigger、飞书/钉钉/企业微信的消息触发;
这四种是最为常见的触发器,其他还有文件触发、数据库触发、Email 触发、GitHub 触发、飞书多维表格触发、Kafka 触发、MQTT 触发等等,我就不逐一列举了。
我这里使用聊天类触发,所以选择 On chat message,将之拖动到流程中,这个比较简单,也不用做任何设置。
3.2 HTTP Request
第二个节点是 HTTP Request,看名字就知道,这个节点是为了发送 HTTP 请求的,所以这个节点需要做一点配置,我们可以双击该节点,就打开了配置页面,由于这个接口不需要认证,所以主要配置一下请求方式和接口地址即可:
3.3 code01
code01 这个节点主要是对 HTTP 请求取回来的数据做一个简单处理,将第三方接口返回的数据格式化为我们需要的数据。
首先我们需要添加 Code 节点:
在添加 Code 节点的时候,大家可以根据自己的技术栈选择 JavaScript 或者 Python 去进行编码,松哥这里选择 JS。
这个节点的配置主要是一段 JS 代码,如下:
我把我的 JS 代码放出来供大家参考:
const rawData = $input.item.json.data.roll_data||[];// 配置格式化规则 const options = { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false // 禁用 12 小时制,使用 24 小时制 };const formattedData = rawData.map(item=>{ const date = new Date(item.ctime*1000); const formattedCtime = new Intl.DateTimeFormat('zh-CN', options) .format(date) .replace(/\//g, '-') .replace(' ', ' ') .replace(':', ':'); return { title: item.title || '无标题', content: item.content.replace(/\n\n/g, '') || '无内容', ctime: formattedCtime, reading_num: item.reading_num || 0, level: item.level || '无级别', shareurl: item.shareurl || '无链接' };});return [{json:{records:formattedData}}]
这里需要说明的是,流程带过来的 JSON 数据通过 $input.item.json去获取,其他都是常规的 JS 代码,不啰嗦。
经过该节点之后,原始接口返回的数据,就会被转为如下格式:
左边是原始数据格式,右边是转化之后的数据格式。
3.4 get_json_array
这个节点其实可以和 3.3 小节的节点合并,但是为了大家看的更加清晰,这里我就单独又加了一个 Code 节点,这个节点的目的主要是将 3.3 小节输出的 JSON 中的 records 数组提取出来,确保最终给到 Loop Over Items 节点的数据是一个 JSON 数组。
该节点配置如下:
这个代码应该很好懂,就是从 JSON 中提取出来 records 属性。
代码也放出来,方便大家 copy:
return $input.all()[0].json.records;
3.5 Loop Over Items
这是一个循环处理节点,因为我要将 3.2 节点请求到的数据最终都存入到飞书多维表格中,因此需要对这些数据进行遍历存储,遍历一条,就将一条存入到飞书多维表格。
飞书多维表格在配置的时候似乎不支持配置批量 JSON,也可能是我不得其法,欢迎了解的小伙伴评论区指教。
Loop Over Items 会对上个节点输入的数据进行遍历,每遍历一条,就会走一遍循环,也就是走一遍飞书节点,将数据存入到飞书多维表格中。
我们再来看下飞书节点配置:
这个节点有几个关键点:
应用级别凭证:这个需要大家在飞书开发者平台创建一个应用,然后获取该应用的 App ID 和 App Secret,填上来就行了; 在飞书上创建多维表格,并在浏览器打开,就能看到多维表格 Token 和多维表格 ID,如下: https://my.feishu.cn/wiki/这里是多维表格Token?table=这里是多维表格ID 要能在飞书多维表格中添加数据,需要将一开始创建的应用添加给飞书多维表格,添加方式如下:
要点主要是上面这几点。如果有小伙伴还不清楚,可以在群里一起讨论。
最后再给大家看下完整的请求体 JSON:
{ "records": [ { "fields": { "title": "{{$json.title}}", "content": "{{$json.content}}", "ctime": "{{$json.ctime}}", "reading_num": "{{$json.reading_num}}", "level": "{{$json.level}}", "shareurl": "{{$json.shareurl}}" } } ]}
3.6 AI Agent
再来看另外一条线上的 AI Agent。
这个节点我们需要配置一下 Chat Model 和 Memory。
Chat Model 也主要是需要大家去各个大模型平台申请 API Key,这个我就不说了,我这里用了本地安装的 qwen3-vl:30b 模型,给大家看下配置:
memory 我配置了 Redis,用来存储会话的上下文,这个也是配置一下 Redis 的地址即可:
最后,我们在 AI Agent 上再配置一个 Prompt 即可,如下:
这里大家注意两个不同的变量引用:
请你结合财联社电报咨询信息:{{ $json.data.roll_data.map(item=>item.content) }},回答用户提问 {{ $json.chatInput }}
四、小结
好了,大功告成。
接下来我们可以直接在 N8N 的网页上开展对话:
存储到飞书多维表格中的数据如下:
感兴趣的小伙伴可以试试,有问题可以群里讨论。
江南一点雨