什么是n8n?
n8n是一款企业级的开源、可视化、高度可扩展的工作流自动化平台。在没有AI工作流这个概念的时候,他们就已经在做工作流自动化的事情了,在AI出来之后,就顺理成章的转变成基于AI的工作流的搭建。
在工作流本身的能力上,以及一些第三方的集成上面,N8N是拥有长时间积累的。所以,在N8N中,AI只是他的能力之一,但是不仅仅局限于AI,所以,他也是很多企业级工作流搭建的首选。
n8n内置超过300+官方节点,支持与主流SaaS工具(如Slack、Google Sheets、Notion、Airtable、Shopify、Discord、Telegram、Zapier Webhooks等)以及数据库(PostgreSQL、MySQL、MongoDB)、消息队列(RabbitMQ、Kafka)和自定义HTTP接口无缝集成。
- GitHub:
https://github.com/n8n-io/n8n - 官网:
https://n8n.io/(有一定免费额度)
部署
n8n支持以下2种方式部署:
- 使用npx:
npx n8n - 使用docker:
docker volume create n8n_data docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
部署成功后,可以通过localhost:5678访问。
工作流触发方式
在n8n中,第一步就是配置一个任务的触发方式:
-
Trigger manually(手动触发):通过点击n8n界面中的“运行”按钮来启动流程。最简单直接的方式,适合开发阶段做调试、测试以及临时执行。
-
On app event(应用事件触发):当某个外部应用(如Telegram、Notion、Airtable、Google Sheets等)发生特定事件时自动触发。例如当收到Telegram消息时;当Airtable表格有新行插入时。
-
On a schedule(定时触发):按照设定的时间间隔自动运行流程。支持cron表达式,可灵活设置周期性任务。例如每天凌晨2点运行。
-
On webhook call(Webhook触发):当接收到HTTP请求(POST/GET)时触发流程。可以暴露一个URL,让外部系统“推送”数据进来。也就是可以通过这种方式让把工作流集成到我们的系统中做调用。
-
On form submission(表单提交触发):在n8n内创建Web表单,用户填写并提交后触发流程。这种方式,无需额外前端,快速构建交互式流程。
-
When executed by another workflow(由其他工作流调用):在一个工作流中使用
Execute Workflow节点来调用另一个工作流。可以用这种方式实现流程嵌套。 -
On chat message(聊天消息触发):当用户在聊天工具(如Slack、Telegram、Discord)中发送消息时触发。常用于构建AI助手或客服机器人,类似dify的chatflow。
-
Other ways...(其他方式):更多高级触发条件,可通过插件扩展支持更多触发源,比如:
- 文件变更(如Google Drive新文件上传);
- 工作流错误时自动重试;
- 数据库变化监听等。
触发方式的对比
| 触发方式 | 是否需要外部输入 | 是否适合自动化 | 适用场景 |
|---|---|---|---|
| 手动触发 | 否 | ❌ | 测试、调试 |
| 应用事件 | 是 | ✅ | 集成Notion/Airtable等 |
| 定时 | 否 | ✅ | 日报、备份、监控 |
| Webhook | 是 | ✅ | API对接、事件驱动 |
| 表单提交 | 是 | ✅ | 用户输入收集 |
| 其他工作流调用 | 是 | ✅ | 模块化流程 |
| 聊天消息 | 是 | ✅ | AI机器人、客服 |
节点类型
有了触发节点之后,就可以配置后续流程了,我们需要添加node(上图就是一个firecrawl node),n8n把节点分成了几个分类。
-
AI节点:这就是AI相关的节点,就是做模型调用的。
- 支持与主流大模型(如OpenAI、Claude、Anthropic、Google Gemini等)集成;
- 可以直接构建一个Ai Agent。
- 不同的AI模型都提供了不同的能力,可以在对应的节点中选择。
- AI Agent是一个构建Agent的节点,他把一个agent需要的llm、memory和tool都集成在一起了,可以分别做配置。
-
Action in an app(应用操作节点):连接第三方服务,执行具体操作。
- 涵盖数百种应用(如Google Drive、Slack、Zapier、Airtable、GitHub、Zoom等);
- 每个应用通常包含多个子节点,例如:
Google Sheets: 创建行、读取数据、更新单元格Telegram: 发送消息、回复用户Notion: 添加页面、查询数据库
-
Data transformation(数据转换节点):对数据进行清洗、格式化和处理。
- 常见节点包括:
Set: 设置变量或字段值Filter: 根据条件筛选数据项Map: 遍历数组并转换每一项JSON: 解析/生成JSON数据Function: 执行JavaScript代码处理数据Split / Merge: 分割或合并数据流
- 常见节点包括:
-
Flow(流程控制节点):控制工作流的执行逻辑路径,实现条件判断、循环、分支合并等复杂逻辑。
- 常见节点:
If: 条件判断(类似if-else)Loop: 循环遍历数组(如对每条记录做操作)Wait: 暂停一段时间再继续Merge: 多个分支合并为一条路径Switch: 多条件选择(类似switch-case)
- 常见节点:
-
Core(核心功能节点):提供底层通用能力。
- 包含最基础但强大的工具;
- 常见节点:
HTTP Request: 发起任意HTTP请求(GET/POST/PUT等)Code: 执行自定义JavaScript/TypeScript代码Webhook: 接收外部HTTP请求(常作为触发器)Set: 设置变量(也可在Data Transformation中使用)Delay: 延迟执行
-
Human in the loop(人工介入节点):引入人类参与决策过程,在自动化流程中暂停,等待人工确认。
- 常见节点:
Human Review: 显示任务给指定人员审核Approval: 通过邮件或通知请求批准Form: 创建表单让用户填写输入
- 常见节点:
节点类型的对比
| 类别 | 主要作用 | 典型节点示例 |
|---|---|---|
| AI | AI能力调用 | OpenAI Chat, LangChain |
| Action in an app | 第三方应用操作 | Google Sheets, Telegram, Notion |
| Data transformation | 数据处理 | Filter, Map, Set, Function |
| Flow | 流程控制 | If, Loop, Wait, Merge |
| Core | 通用功能 | HTTP Request, Code, Webhook |
| Human in the loop | 人工干预 | Human Review, Approval, Form |
| Trigger | 启动流程 | Webhook, Schedule, Manual |
N8N中使用本地模型
n8n目前只支持一些国外的模型,国内模型只支持deepseek,所以我们想要使用开源模型的话,需要自己本地部署,通过ollama的方式支持。
- 选择ollama节点
- 配置一个ollama账号:
- 选择本地已部署的模型 之后就可以用这个本地部署的模型做调用了。
- GitHub上的n8n模板:
https://github.com/Zie619/n8n-workflows
试用n8n的云服务并且配置Firecrawl
对于爬取网页这类活动,常见的触发方式包括:定时爬取、接收APP消息后爬取等等,接下来我们就不手动配置了,而是试用 Build with AI chat 方式。
第一步:设定需求以及准备环境
在开始之前,我们首先准备好:
- Firecrawl API Key以及鉴权参数:前往 Firecrawl 官网注册并获取 API Key,然后准备好 Cookie 以及 User-agent 等参数,见工作流实战学习(一)。
- Slack 工作区:要在 Slack 网页端获取配置 n8n 所需的 credential,需要先在 Slack 的开发者后台创建一个应用。这个过程分为“创建应用”和“获取凭证”两个主要阶段。
以下是详细的操作步骤:
1. 在 Slack 后台创建应用并设置权限
-
访问应用管理页面 前往 Slack API 的应用管理页面:
-
创建新应用
- 点击绿色的 “Create New App” 按钮。
- 选择 “From scratch”(从零开始)。
- 输入你的 App Name (例如
n8n-bot),并从下拉菜单中选择你的工作区。 - 点击 “Create App”。
-
3. 设置 OAuth 权限 (Scopes)
为了让 n8n 能读取和发送消息,你需要为你的应用添加相应权限。
* 在左侧菜单栏,找到 “Features” 部分,点击 “OAuth & Permissions”。
* 向下滚动到 “Scopes” 部分。
* 在 “Bot Token Scopes” 下,点击 “Add an OAuth Scope”。
* 根据你的 n8n 节点需求,添加以下权限:
* channels:history - 查看公共频道中的消息 (用于接收消息)。
* channels:read - 查看公共频道列表 (用于选择频道)。
* chat:write - 以机器人身份发送消息 (用于发送结果)。
*
-
安装应用到你的工作区
- 仍在 “OAuth & Permissions” 页面,滚动到最顶部。
- 点击 “Install to Workspace” 按钮。
- 在弹出的授权窗口中,点击 “Allow”。
-
复制 Bot User OAuth Token
- 安装成功后,页面会刷新。
- 在 “OAuth Tokens for Your Workspace” 部分,你会看到一个以
xoxb-开头的令牌。 - 复制这个令牌。这就是你在 n8n 中配置凭证时需要的 Access Token。
-
2. 在 n8n 中配置 Slack 凭证
现在有了 Token,可以回到 n8n 进行配置了。
- 打开你的 n8n 工作流,点击任意一个 Slack 节点(例如
Slack Message Received或Send Scraped Results)。 - 在节点的
Credential for Slack API选项中,选择 “Create New Credential”。 - 在弹出的凭证创建窗口中,将你在上一步复制的
xoxb-...令牌粘贴到 Access Token 字段。 - 点击 “Save”。
-
当然,这里我仍然是直接使用 AI Chat 来配置的,列举出需要配置的项以及值即可。
3. 获取 Channel ID (用于 "Channel to Watch")
Slack Message Received 节点需要一个具体的频道 ID 来监听。
方法一:通过 Slack 网页端直接获取(推荐)
- 在 Slack 网页端,进入你想要监听的频道(例如
#general)。 - 查看浏览器地址栏的 URL,格式通常是:
https://app.slack.com/client/{YOUR-WORKSPACE-ID}/{CHANNEL-ID} - URL 末尾的那串字母和数字就是 Channel ID。复制它。
- 回到 n8n 的
Slack Message Received节点,将复制的 ID 填入 “Channel to Watch” 参数中。
方法二:在 n8n 节点中直接选择
在 Slack Message Received 节点的 “Channel to Watch” 参数中,你可以选择 “Define Later” 或直接在下拉列表中搜索并选择你的频道名称,n8n 会自动帮你处理 ID。但前提是你的 Slack 凭证权限足够。
🚨 Slack 接入避坑
在配置 Slack 触发器时,如果你发现“明明发了消息,但 n8n 死活不触发”,很可能踩了以下坑。我在这里卡了很久,整理出来帮大家注意下:
坑一:忘记配置事件订阅(Event Subscriptions)与“握手报错”
光有 Token 没用,你需要配置 Webhook 告诉 Slack 往哪里发数据。如果在 Slack 后台填 URL 时遇到 challenge parameter 报错,别慌,这是 Slack 的安全机制,要求 n8n 必须秒回一个响应。
- 配置方法:
- 在 n8n 复制 Test URL,填入 Slack 后台
Event Subscriptions的 Request URL 框。 - 最关键一步:在 n8n 中点击右上角的 "Listen for event",让 n8n 进入转圈监听状态。
- 趁 n8n 还在监听,火速切回 Slack 页面点击报错旁边的 "Retry"。
- 握手成功(红框变绿)后,往下滚动在
Subscribe to bot events中添加message.channels,保存并重新安装应用。
- 在 n8n 复制 Test URL,填入 Slack 后台
坑二:忘了邀请机器人进频道
机器人默认“看不见”频道消息。必须在 Slack 对应的频道聊天框输入 /invite @你的机器人名字 把它拉进去。
第二步:设定触发器、节点
初次尝试我给了一版不那么规范的提示词(上图中),可以尝试以下这版好那么一点的(越完整越好,这里还有很多需要完善):
首先构建一个 on chat message 的触发器,我希望接入 slack(在这里提供你的 slack 接入 API),然后构建一个 /scrape 的 firecrawl 节点。 当 slack 接收到“帮我抓取小红书热点信息”一类的消息时,firecrawl 开始爬取小红书首页“发现”页面的数据。 对于 scrape 的详细配置包括:
- 配置请求: > (1)确定目标 URL:
https://www.xiaohongshu.com/explore?channel_id=homefeed_recommend> (2)设置 json 提示词 prompt:优先输出标签中包含关键字“keyword1”,“keyword2”,“keyword3”的作品;- 构造登录授权:这部分需要填充待我从浏览器开发者工具(F12)中获取 Cookie、User-Agent 等属性,之后我们会在网页端通过手机号/二维码登录小红书,所以这些属性值请你后续提醒我们填入;
第三步:工作流测试
引入 Basic LLM Chain
既然 If 节点有局限性,与其去维护一堆死板的关键字(比如穷举“抓取”、“小红书”、“获取”),不如直接加入大模型来识别意图。
- 在 Slack 节点和 If 节点之间,插入一个
Basic LLM Chain(或 OpenAI 等模型节点)。 - 给大模型写个 System Prompt:“你是一个意图识别助手。分析用户的消息,如果用户想要抓取/获取小红书的数据,请严格输出纯 JSON:
{"intent": "scrape_xhs"},否则输出{"intent": "other"}。用户消息是:{{ $json.text }}”。 - 极简改造 If 节点:现在不需要一堆复杂的 OR 条件了,只需要判断大模型的输出结果
intentis equal toscrape_xhs即可。
所有配置
以下列举了n8n work flow中的所有配置:
-
Slack Message Received:
-
Basic LLM Chain 和 Check for Scrape Request:
-
FireCrawl、Format Scraped Data、Send Scraped Results 配置:
测试
执行Excute workflow,然后在slack频道中发消息(保证消息语义能被deepseekV4解析出来),然后等待消息回复即可:
可能是因为某些配置还不够完善,文章的一些标签如作者和时间等还是没能提取,不过url是真实地并且能够规范的对“提取要求”做降级,还是不错的,可能需要换成更开放些的论坛。
总结
本文主要概述了n8n的特性以及在实践中解决了以下问题:
- Slack 触发
- n8n 传参
- Firecrawl 请求
- 给出规范提示词(Prompt)
- n8n 数据后置过滤与解析
欢迎读者交流心得!