first commit
This commit is contained in:
509
docs/learning/common-nodes.md
Normal file
509
docs/learning/common-nodes.md
Normal file
@@ -0,0 +1,509 @@
|
||||
# 常用节点
|
||||
|
||||
## 📚 学习资源
|
||||
|
||||
- **图文教程**:[n8n工作流创建完整指南](https://mp.weixin.qq.com/s/oIcmTW0Gg2r63C0Tn91r2Q)
|
||||
- **视频教程**:[从零开始的n8n实战](https://www.bilibili.com/video/BV1nejbz6Eip)
|
||||
- **官方文档**:[n8n Workflow Examples](https://docs.n8n.io/workflows/)
|
||||
|
||||
n8n提供了丰富的节点库,覆盖了工作流自动化的各个方面。掌握这些常用节点是构建高效工作流的基础。
|
||||
|
||||
## 🧩 节点分类概览
|
||||
|
||||
**触发器**:手动触发、定时触发、Webhook、邮件触发、文件监控
|
||||
**输入**:HTTP请求、数据库查询、文件读取、API调用、RSS获取
|
||||
**处理**:数据转换、AI处理、代码执行、图像处理、文本分析
|
||||
**逻辑**:条件判断、循环处理、数据合并、分支路由、错误处理
|
||||
**输出**:邮件发送、文件保存、API推送、通知发送、数据存储
|
||||
|
||||
## 🔥 触发器节点 (Triggers)
|
||||
|
||||
触发器是工作流的起点,定义了工作流何时开始执行。
|
||||
|
||||
### Manual Trigger - 手动触发
|
||||
|
||||
**功能**: 用户手动启动的工作流执行
|
||||
|
||||
**使用场景**:
|
||||
- 一次性任务执行
|
||||
- 工作流测试和调试
|
||||
- 按需数据处理
|
||||
|
||||
**配置**: 通常无需复杂配置,作为工作流的起始点
|
||||
|
||||
**最佳实践**:Manual Trigger → 数据获取 → 数据处理 → 结果输出
|
||||
|
||||
### Schedule Trigger - 定时触发
|
||||
|
||||
**功能**: 基于时间的自动化任务执行
|
||||
|
||||
**配置选项**:
|
||||
- **时间间隔**: 每分钟、小时、天、周、月
|
||||
- **Cron表达式**: 高级时间配置
|
||||
- **时区设置**: 确保正确的执行时间
|
||||
|
||||
**常用场景**:
|
||||
|
||||
=== "每日报告"
|
||||
```
|
||||
触发时间: 每天 09:00
|
||||
时区: Asia/Shanghai
|
||||
工作日执行: 周一到周五
|
||||
```
|
||||
|
||||
=== "数据同步"
|
||||
```
|
||||
触发时间: 每30分钟
|
||||
执行条件: 24/7运行
|
||||
错误重试: 启用
|
||||
```
|
||||
|
||||
=== "定期清理"
|
||||
```
|
||||
触发时间: 每周日 02:00
|
||||
任务: 清理临时文件
|
||||
通知: 完成后发送邮件
|
||||
```
|
||||
|
||||
!!! warning "定时触发注意事项"
|
||||
- 确保服务器时区设置正确
|
||||
- 考虑服务器维护时间窗口
|
||||
- 设置合理的执行超时时间
|
||||
- 添加错误处理和重试机制
|
||||
|
||||
### Webhook - API触发
|
||||
|
||||
**功能**: 通过HTTP请求触发工作流
|
||||
|
||||
**配置要素**:
|
||||
- **URL路径**: 自定义webhook端点
|
||||
- **HTTP方法**: GET、POST、PUT、DELETE
|
||||
- **认证方式**: 无认证、基础认证、头部认证
|
||||
|
||||
**典型应用**:
|
||||
|
||||
| 场景 | 触发源 | 数据处理 |
|
||||
|------|-------|---------|
|
||||
| **GitHub集成** | 代码推送事件 | 自动部署、测试通知 |
|
||||
| **表单提交** | 网站表单 | 数据验证、邮件通知 |
|
||||
| **支付回调** | 支付网关 | 订单处理、发货通知 |
|
||||
| **监控告警** | 监控系统 | 故障分析、团队通知 |
|
||||
|
||||
**安全配置**:
|
||||
```yaml
|
||||
webhook_url: https://your-n8n.com/webhook/secure-endpoint
|
||||
authentication:
|
||||
type: header
|
||||
name: X-API-Key
|
||||
value: your-secret-api-key
|
||||
```
|
||||
|
||||
## 📥 输入节点 (Input)
|
||||
|
||||
输入节点用于从各种数据源获取信息。
|
||||
|
||||
### HTTP Request - HTTP请求
|
||||
|
||||
**功能**: 与外部API和服务进行交互
|
||||
|
||||
**配置参数**:
|
||||
- **请求方法**: GET、POST、PUT、DELETE、PATCH
|
||||
- **URL**: 目标API地址
|
||||
- **头部**: 认证、内容类型等
|
||||
- **请求体**: POST数据、JSON负载
|
||||
|
||||
**实用示例**:
|
||||
|
||||
=== "获取天气数据"
|
||||
```json
|
||||
{
|
||||
"method": "GET",
|
||||
"url": "https://api.openweathermap.org/data/2.5/weather",
|
||||
"qs": {
|
||||
"q": "Beijing",
|
||||
"appid": "your-api-key",
|
||||
"units": "metric"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
=== "发送Slack消息"
|
||||
```json
|
||||
{
|
||||
"method": "POST",
|
||||
"url": "https://hooks.slack.com/services/your/webhook/url",
|
||||
"body": {
|
||||
"text": "工作流执行完成",
|
||||
"channel": "#general"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Read/Write Files from Disk - 文件操作
|
||||
|
||||
**功能**: 读取和写入本地文件系统
|
||||
|
||||
**支持格式**:
|
||||
- **文本文件**: TXT、CSV、JSON、XML
|
||||
- **表格文件**: Excel、CSV
|
||||
- **图像文件**: JPG、PNG、PDF
|
||||
- **压缩文件**: ZIP、TAR
|
||||
|
||||
**配置示例**:
|
||||
```javascript
|
||||
// 读取CSV文件
|
||||
{
|
||||
"operation": "read",
|
||||
"filePath": "/files/data/sales-report.csv",
|
||||
"options": {
|
||||
"encoding": "utf8",
|
||||
"hasHeaders": true
|
||||
}
|
||||
}
|
||||
|
||||
// 写入JSON文件
|
||||
{
|
||||
"operation": "write",
|
||||
"filePath": "/files/output/processed-data.json",
|
||||
"fileContent": "{{ $json }}",
|
||||
"options": {
|
||||
"encoding": "utf8"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Database Nodes - 数据库操作
|
||||
|
||||
支持主流数据库系统:
|
||||
|
||||
=== "MySQL"
|
||||
```sql
|
||||
-- 查询示例
|
||||
SELECT customer_id, order_date, total_amount
|
||||
FROM orders
|
||||
WHERE order_date >= CURDATE() - INTERVAL 7 DAY;
|
||||
|
||||
-- 插入示例
|
||||
INSERT INTO logs (timestamp, level, message)
|
||||
VALUES (NOW(), 'INFO', '工作流执行成功');
|
||||
```
|
||||
|
||||
=== "PostgreSQL"
|
||||
```sql
|
||||
-- 复杂查询
|
||||
WITH monthly_sales AS (
|
||||
SELECT DATE_TRUNC('month', order_date) as month,
|
||||
SUM(total_amount) as total
|
||||
FROM orders
|
||||
GROUP BY DATE_TRUNC('month', order_date)
|
||||
)
|
||||
SELECT * FROM monthly_sales
|
||||
ORDER BY month DESC LIMIT 12;
|
||||
```
|
||||
|
||||
=== "MongoDB"
|
||||
```javascript
|
||||
// 查询文档
|
||||
db.users.find({
|
||||
"status": "active",
|
||||
"last_login": {
|
||||
"$gte": new Date(Date.now() - 30*24*60*60*1000)
|
||||
}
|
||||
})
|
||||
|
||||
// 聚合操作
|
||||
db.orders.aggregate([
|
||||
{$match: {status: "completed"}},
|
||||
{$group: {_id: "$product_id", total: {$sum: "$amount"}}},
|
||||
{$sort: {total: -1}}
|
||||
])
|
||||
```
|
||||
|
||||
## 🔄 处理节点 (Process)
|
||||
|
||||
处理节点用于数据转换、分析和业务逻辑处理。
|
||||
|
||||
### Set - 数据设置
|
||||
|
||||
**功能**: 设置或修改数据字段
|
||||
|
||||
**操作类型**:
|
||||
- **设置字段值**: 添加新字段或修改现有字段
|
||||
- **删除字段**: 移除不需要的数据
|
||||
- **重命名字段**: 改变字段名称
|
||||
- **类型转换**: 字符串、数字、布尔值转换
|
||||
|
||||
**实用配置**:
|
||||
```javascript
|
||||
// 设置新字段
|
||||
{
|
||||
"user_full_name": "={{$json.first_name}} {{$json.last_name}}",
|
||||
"processed_at": "={{new Date().toISOString()}}",
|
||||
"status": "processed"
|
||||
}
|
||||
|
||||
// 数据转换
|
||||
{
|
||||
"price": "={{parseFloat($json.price_string)}}",
|
||||
"is_active": "={{$json.status === 'active'}}",
|
||||
"tags": "={{$json.tag_string.split(',')}}"
|
||||
}
|
||||
```
|
||||
|
||||
### Code - 代码节点
|
||||
|
||||
**功能**: 执行自定义JavaScript或Python代码
|
||||
|
||||
**JavaScript示例**:
|
||||
```javascript
|
||||
// 复杂数据处理
|
||||
for (const item of $input.all()) {
|
||||
// 数据验证
|
||||
if (!item.json.email || !item.json.email.includes('@')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 数据转换
|
||||
const processedItem = {
|
||||
id: item.json.id,
|
||||
email: item.json.email.toLowerCase(),
|
||||
domain: item.json.email.split('@')[1],
|
||||
processed_at: new Date().toISOString(),
|
||||
hash: require('crypto').createHash('md5').update(item.json.email).digest('hex')
|
||||
};
|
||||
|
||||
$return.push({json: processedItem});
|
||||
}
|
||||
```
|
||||
|
||||
**Python示例**:
|
||||
```python
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
from datetime import datetime
|
||||
|
||||
# 处理输入数据
|
||||
data = []
|
||||
for item in _input.all():
|
||||
data.append(item['json'])
|
||||
|
||||
# 使用pandas处理
|
||||
df = pd.DataFrame(data)
|
||||
df['processed_at'] = datetime.now().isoformat()
|
||||
df['score'] = df['score'].fillna(0)
|
||||
df['category'] = df['score'].apply(lambda x: 'high' if x > 80 else 'low')
|
||||
|
||||
# 返回处理结果
|
||||
for _, row in df.iterrows():
|
||||
_return.push({'json': row.to_dict()})
|
||||
```
|
||||
|
||||
### AI Agent - AI代理
|
||||
|
||||
**功能**: 集成大语言模型进行智能处理
|
||||
|
||||
**支持的AI服务**:
|
||||
- OpenAI GPT系列
|
||||
- Anthropic Claude
|
||||
- Google Gemini
|
||||
- 本地Ollama模型
|
||||
|
||||
**典型应用**:
|
||||
|
||||
=== "文本分析"
|
||||
```javascript
|
||||
// 情感分析
|
||||
prompt: `分析以下文本的情感倾向,返回正面、负面或中性:
|
||||
文本:{{$json.comment}}
|
||||
|
||||
请以JSON格式返回:{"sentiment": "正面/负面/中性", "confidence": 0.95}`
|
||||
```
|
||||
|
||||
=== "数据提取"
|
||||
```javascript
|
||||
// 信息提取
|
||||
prompt: `从以下邮件中提取关键信息:
|
||||
邮件内容:{{$json.email_content}}
|
||||
|
||||
请提取:
|
||||
- 发件人姓名
|
||||
- 联系方式
|
||||
- 主要需求
|
||||
- 紧急程度
|
||||
|
||||
以JSON格式返回结果。`
|
||||
```
|
||||
|
||||
=== "内容生成"
|
||||
```javascript
|
||||
// 报告生成
|
||||
prompt: `基于以下数据生成每日销售报告:
|
||||
销售数据:{{$json.sales_data}}
|
||||
|
||||
报告应包含:
|
||||
1. 销售总结
|
||||
2. 重点产品表现
|
||||
3. 趋势分析
|
||||
4. 改进建议
|
||||
|
||||
请生成专业的中文报告。`
|
||||
```
|
||||
|
||||
## 🧠 逻辑节点 (Logic)
|
||||
|
||||
逻辑节点控制工作流的执行路径和数据流向。
|
||||
|
||||
### IF - 条件判断
|
||||
|
||||
**功能**: 根据条件将数据流分为不同路径
|
||||
|
||||
**条件类型**:
|
||||
- **数值比较**: 等于、大于、小于
|
||||
- **字符串匹配**: 包含、开始于、结束于
|
||||
- **逻辑运算**: 与、或、非
|
||||
- **存在性检查**: 字段是否存在、是否为空
|
||||
|
||||
**实用场景**:数据输入 → 判断金额 > 1000? → 是:高价值客户流程 → 发送VIP邮件;否:普通客户流程 → 发送标准邮件
|
||||
|
||||
### Switch - 多路分支
|
||||
|
||||
**功能**: 根据不同值将数据路由到多个分支
|
||||
|
||||
**配置示例**:
|
||||
```javascript
|
||||
// 根据订单状态分发处理
|
||||
switch_value: "={{$json.order_status}}"
|
||||
|
||||
// 分支配置:
|
||||
// 0: "pending" -> 待处理流程
|
||||
// 1: "paid" -> 已付款流程
|
||||
// 2: "shipped" -> 已发货流程
|
||||
// 3: "completed" -> 已完成流程
|
||||
// default: 异常处理流程
|
||||
```
|
||||
|
||||
### Loop Over Items - 循环处理
|
||||
|
||||
**功能**: 对数据集合中的每个项目执行相同操作
|
||||
|
||||
**适用场景**:
|
||||
- 批量数据处理
|
||||
- 文件批量操作
|
||||
- API批量调用
|
||||
- 报告批量生成
|
||||
|
||||
**处理流程**:数据列表 → Loop Over Items → 处理单个项目 → API调用 → 结果收集 → 汇总输出
|
||||
|
||||
## 📤 输出节点 (Output)
|
||||
|
||||
输出节点将处理结果发送到外部系统或用户。
|
||||
|
||||
### Email Send - 邮件发送
|
||||
|
||||
**功能**: 发送电子邮件通知和报告
|
||||
|
||||
**配置要素**:
|
||||
- **收件人**: 支持多个收件人、抄送、密送
|
||||
- **邮件内容**: HTML格式、纯文本、动态内容
|
||||
- **附件**: 支持文件、图片、报告附件
|
||||
|
||||
**邮件模板示例**:
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
.report { font-family: Arial, sans-serif; }
|
||||
.header { background-color: #f0f0f0; padding: 10px; }
|
||||
.content { padding: 20px; }
|
||||
.table { border-collapse: collapse; width: 100%; }
|
||||
.table th, .table td { border: 1px solid #ddd; padding: 8px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="report">
|
||||
<div class="header">
|
||||
<h2>{{$json.report_title}}</h2>
|
||||
<p>生成时间: {{$json.generated_at}}</p>
|
||||
</div>
|
||||
<div class="content">
|
||||
<p>尊敬的 {{$json.recipient_name}},</p>
|
||||
<p>以下是您请求的{{$json.report_type}}报告:</p>
|
||||
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th>指标</th>
|
||||
<th>数值</th>
|
||||
<th>变化</th>
|
||||
</tr>
|
||||
{{#each $json.metrics}}
|
||||
<tr>
|
||||
<td>{{this.name}}</td>
|
||||
<td>{{this.value}}</td>
|
||||
<td style="color: {{this.change_color}}">{{this.change}}</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
### Webhook Response - 响应返回
|
||||
|
||||
**功能**: 向触发Webhook的服务返回响应
|
||||
|
||||
**响应配置**:
|
||||
```javascript
|
||||
{
|
||||
"status_code": 200,
|
||||
"headers": {
|
||||
"Content-Type": "application/json",
|
||||
"X-Processed-By": "n8n-workflow"
|
||||
},
|
||||
"body": {
|
||||
"success": true,
|
||||
"message": "数据处理完成",
|
||||
"processed_items": "={{$json.count}}",
|
||||
"timestamp": "={{new Date().toISOString()}}"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 📊 节点使用统计和建议
|
||||
|
||||
### 使用频率统计
|
||||
|
||||
<div class="stats-grid">
|
||||
<div class="stat-item">
|
||||
<span class="stat-number">95%</span>
|
||||
<span class="stat-label">工作流使用HTTP Request</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-number">78%</span>
|
||||
<span class="stat-label">工作流使用Set节点</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-number">65%</span>
|
||||
<span class="stat-label">工作流使用IF判断</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-number">52%</span>
|
||||
<span class="stat-label">工作流使用Email发送</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
### 学习建议
|
||||
|
||||
!!! tip "节点学习路径"
|
||||
1. **基础必学**: Manual Trigger + Set + HTTP Request + Email
|
||||
2. **进阶掌握**: Schedule Trigger + IF + Code + Database
|
||||
3. **高级应用**: AI Agent + Loop + Switch + Webhook
|
||||
4. **专业应用**: 根据业务需求选择特定集成节点
|
||||
|
||||
---
|
||||
|
||||
掌握这些常用节点后,您已经具备了构建80%常见工作流的能力!
|
||||
|
||||
[上一章:n8n汉化](../installation/localization/){ .md-button } [下一章:基本工作流创建](basic-workflows/){ .md-button .md-button--primary }
|
||||
Reference in New Issue
Block a user