n8n 是一个开源的工作流自动化平台,通过可视化方式连接各种服务、API 和 AI 模型,实现自动化任务处理。与 Zapier、Make 这些商业化平台相比,n8n 最大的优势是:完全开源、可自部署、无限制使用。数据完全掌控在自己手里。
本文基于 n8n v1.x 编写。
核心特点#
| 特性 | 说明 |
|---|---|
| 可视化编排 | 拖拽式界面,不用写代码就能搭建复杂工作流 |
| 开源免费 | MIT 协议,可自由部署和定制 |
| 节点丰富 | 内置 400+ 个服务节点(GitHub、Slack、Notion 等) |
| AI 集成 | 原生支持 OpenAI、Claude、Gemini 等 AI 模型 |
| 高度灵活 | 支持自定义代码节点(JavaScript/Python) |
| 数据安全 | 自部署模式,数据不经过第三方 |
| 活跃社区 | 持续更新,社区提供大量模板 |
快速上手#
Docker 一键启动#
# 拉取并运行 n8ndocker run -it --rm \ --name n8n \ -p 5678:5678 \ -v ~/.n8n:/home/node/.n8n \ docker.n8n.io/n8nio/n8nDocker Compose 部署#
创建 docker-compose.yml:
version: '3.8'
services: n8n: image: docker.n8n.io/n8nio/n8n restart: always ports: - '5678:5678' environment: - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=admin - N8N_BASIC_AUTH_PASSWORD=your_password - N8N_HOST=localhost - N8N_PORT=5678 - N8N_PROTOCOL=http - NODE_ENV=production - WEBHOOK_URL=http://localhost:5678/ volumes: - ~/.n8n:/home/node/.n8n启动:
docker-compose up -d访问 http://localhost:5678 即可看到 n8n 界面。
Docker Desktop 图形界面#
也可以通过 Docker Desktop 图形界面操作,步骤更直观:
- 在搜索框输入
n8n,点击pull拉取镜像:

- 下载完成后点击
Run:

- 填写配置信息(Container name、Port 等),点击
Run:

- 在 Containers 面板启动容器:

- 点击链接访问 n8n:

核心概念#
工作流(Workflow)#
工作流是 n8n 的核心,由多个节点按顺序或并行连接组成。每个工作流都有一个触发节点(Trigger)作为起点。
节点(Node)#
节点是工作流的基本单元,分为几类:
| 类型 | 说明 | 示例 |
|---|---|---|
| Trigger | 触发器,启动工作流 | Webhook、Schedule、手动触发 |
| Action | 执行具体操作 | 发送邮件、创建记录 |
| Transform | 数据转换 | Set、Split、Merge |
| Code | 自定义代码 | JavaScript、Python |
| AI | AI 模型调用 | OpenAI、Claude |
连接(Connection)#
节点之间通过连接传递数据。每个节点的输出可以连接到下一个节点的输入。
常用节点#
Trigger 节点#
- Webhook:接收 HTTP 请求触发- Schedule Trigger:定时触发(Cron 表达式)- Manual Trigger:手动点击触发- Email Trigger (IMAP):收到邮件触发数据处理节点#
- Set:设置/修改数据字段- IF:条件分支- Switch:多条件分支- Merge:合并多个数据流- Split In Batches:批量处理- Code:自定义 JavaScript/Python 代码常用服务节点#
- HTTP Request:调用任意 API- OpenAI:ChatGPT、DALL-E- Slack:发送消息、创建频道- Notion:操作数据库、页面- GitHub:创建 Issue、管理仓库- Google Sheets:读写表格- Airtable:操作数据库- Telegram:发送消息、BotAI 集成#
n8n 原生支持多种 AI 模型,可以快速构建 AI 应用。
OpenAI 节点#
1. 添加 OpenAI 节点2. 配置 API Key(在 Credentials 中)3. 选择操作类型: - Chat:对话 - Image:生成图片 - Audio:语音转文字4. 设置模型参数(gpt-4、temperature 等)AI Agent 节点#
n8n 提供了 AI Agent 节点,可以让 AI 自动调用工具完成任务:
1. 添加 AI Agent 节点2. 配置 LLM(OpenAI/Claude)3. 添加 Tools(HTTP Request、Code 等)4. AI 会根据任务自动选择工具执行常见 AI 工作流#
1. 智能客服
Webhook → OpenAI Chat → 判断意图 → 回复/转人工2. 内容生成
Schedule → 获取热点 → OpenAI 生成文章 → 发布到 Notion3. 文档问答
Webhook → 检索向量库 → OpenAI 回答 → 返回结果实战案例#
案例一:GitHub Issue 自动通知#
当 GitHub 仓库收到新 Issue 时,自动发送 Slack 通知:
节点流程:GitHub Trigger → Set(格式化消息) → Slack(发送消息)
配置要点:1. GitHub Trigger:选择 Issues 事件2. Set:构建消息内容 {{ $json.issue.title }}3. Slack:配置 Channel 和消息模板案例二:定时数据备份#
每天凌晨自动备份 Notion 数据到 Google Sheets:
节点流程:Schedule Trigger → Notion(查询数据库) → Google Sheets(追加行)
配置要点:1. Schedule:Cron 表达式 0 2 * * *2. Notion:查询指定数据库3. Google Sheets:映射字段到列案例三:AI 邮件自动回复#
收到邮件后,用 AI 生成回复草稿:
节点流程:Email Trigger → OpenAI Chat(分析并生成回复) → 发送通知
Prompt 示例:"分析以下邮件内容,生成一个专业、友好的回复:{{ $json.text }}"高级功能#
自定义代码节点#
当内置节点无法满足需求时,使用 Code 节点:
// JavaScript 示例const items = $input.all()
for (const item of items) { item.json.processed = true item.json.timestamp = new Date().toISOString()}
return items错误处理#
n8n 支持为节点配置错误处理逻辑:
- 继续执行:忽略错误,继续下一个节点- 停止工作流:遇到错误立即停止- 错误工作流:触发另一个工作流处理错误Webhook 安全#
保护 Webhook 端点:
1. 使用 Header Auth:验证请求头2. 使用 Basic Auth:用户名密码认证3. IP 白名单:限制来源 IP4. 签名验证:验证请求签名环境变量#
在 docker-compose.yml 中配置:
environment: # 数据库(生产环境推荐) - DB_TYPE=postgresdb - DB_POSTGRESDB_HOST=postgres - DB_POSTGRESDB_DATABASE=n8n - DB_POSTGRESDB_USER=n8n - DB_POSTGRESDB_PASSWORD=password # 时区 - GENERIC_TIMEZONE=Asia/Shanghai # 执行超时 - EXECUTIONS_TIMEOUT=3600n8n vs Zapier vs Make#
| 特性 | n8n | Zapier | Make |
|---|---|---|---|
| 定价 | 开源免费 | 按任务收费 | 按操作收费 |
| 自部署 | ✅ | ❌ | ❌ |
| 节点数量 | 400+ | 6000+ | 1500+ |
| 代码节点 | ✅ | 有限 | ✅ |
| AI 集成 | ✅ 原生 | ✅ | ✅ |
| 学习曲线 | 中等 | 简单 | 中等 |
| 适合场景 | 技术团队 | 非技术用户 | 中等复杂度 |
选择建议:
- 追求性价比、数据安全 → n8n
- 快速上手、不想折腾 → Zapier
- 复杂流程、可视化好 → Make
常见问题#
工作流不触发#
检查清单:
- 工作流是否已激活(Active)
- Trigger 节点配置是否正确
- Webhook URL 是否可访问
- 查看执行日志排查错误
内存不足#
n8n 处理大数据量时可能内存不足:
environment: - NODE_OPTIONS=--max-old-space-size=4096定时任务时区问题#
设置正确的时区:
environment: - GENERIC_TIMEZONE=Asia/Shanghai