first commit
This commit is contained in:
366
docs/learning/basic-workflows.md
Normal file
366
docs/learning/basic-workflows.md
Normal file
@@ -0,0 +1,366 @@
|
||||
# 基本工作流创建
|
||||
|
||||
## 📚 学习资源
|
||||
|
||||
- **图文教程**:[n8n工作流创建完整指南](https://mp.weixin.qq.com/s/oIcmTW0Gg2r63C0Tn91r2Q)
|
||||
- **视频教程**:[从零开始的n8n实战](https://www.bilibili.com/video/BV1nejbz6Eip)
|
||||
- **官方文档**:[n8n Workflow Examples](https://docs.n8n.io/workflows/)
|
||||
|
||||
通过本章节,您将学会如何从零开始设计和构建实用的n8n工作流。
|
||||
|
||||
## 🎯 工作流设计原则
|
||||
|
||||
### SOLID原则在工作流中的应用
|
||||
|
||||
| 原则 | 工作流应用 | 实践建议 |
|
||||
|------|------------|----------|
|
||||
| **单一职责** | 每个工作流专注一个业务目标 | 避免在一个工作流中处理多个不相关的任务 |
|
||||
| **开放封闭** | 易于扩展,难以修改核心逻辑 | 使用子工作流和模板化设计 |
|
||||
| **里氏替换** | 相似节点可以互相替换 | 标准化节点接口和数据格式 |
|
||||
| **接口隔离** | 最小化节点间依赖 | 只传递必要的数据字段 |
|
||||
| **依赖倒置** | 依赖抽象而非具体实现 | 使用凭证管理而非硬编码 |
|
||||
|
||||
### 工作流生命周期
|
||||
|
||||
**需求分析** → **流程设计** → **节点配置** → **测试调试** → **部署运行** → **监控维护** → **优化迭代** → 回到流程设计
|
||||
|
||||
## 📝 第一个工作流:每日天气邮件
|
||||
|
||||
让我们从一个简单但实用的例子开始学习。
|
||||
|
||||
### 需求分析
|
||||
|
||||
**目标**: 每天早上8点自动获取天气信息并发送邮件提醒
|
||||
**数据源**: OpenWeatherMap API
|
||||
**输出**: HTML格式的天气邮件
|
||||
**频率**: 每日执行
|
||||
|
||||
### 工作流设计
|
||||
|
||||
**Schedule Trigger(每天8:00)** → **HTTP Request(获取天气API)** → **Set Node(处理天气数据)** → **Code Node(生成邮件HTML)** → **Email Send(发送天气邮件)**
|
||||
|
||||
### 详细配置步骤
|
||||
|
||||
=== "1. 定时触发器配置"
|
||||
```yaml
|
||||
节点类型: Schedule Trigger
|
||||
触发规则: Cron
|
||||
Cron表达式: 0 8 * * *
|
||||
时区: Asia/Shanghai
|
||||
```
|
||||
|
||||
=== "2. 天气API请求"
|
||||
```javascript
|
||||
// HTTP Request 节点配置
|
||||
{
|
||||
"method": "GET",
|
||||
"url": "https://api.openweathermap.org/data/2.5/weather",
|
||||
"qs": {
|
||||
"q": "Beijing,CN",
|
||||
"appid": "{{$credentials.openweather.api_key}}",
|
||||
"units": "metric",
|
||||
"lang": "zh_cn"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
=== "3. 数据处理"
|
||||
```javascript
|
||||
// Set 节点 - 提取有用信息
|
||||
{
|
||||
"city": "={{$json.name}}",
|
||||
"temperature": "={{Math.round($json.main.temp)}}",
|
||||
"feels_like": "={{Math.round($json.main.feels_like)}}",
|
||||
"humidity": "={{$json.main.humidity}}",
|
||||
"description": "={{$json.weather[0].description}}",
|
||||
"icon": "={{$json.weather[0].icon}}",
|
||||
"wind_speed": "={{$json.wind.speed}}",
|
||||
"current_time": "={{new Date().toLocaleString('zh-CN', {timeZone: 'Asia/Shanghai'})}}"
|
||||
}
|
||||
```
|
||||
|
||||
=== "4. HTML邮件生成"
|
||||
```javascript
|
||||
// Code 节点 - 生成邮件HTML
|
||||
const weatherData = $input.first().json;
|
||||
|
||||
const htmlContent = `
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<style>
|
||||
.weather-card {
|
||||
font-family: 'Arial', sans-serif;
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
background: linear-gradient(135deg, #74b9ff, #0984e3);
|
||||
color: white;
|
||||
padding: 30px;
|
||||
border-radius: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
.temperature {
|
||||
font-size: 48px;
|
||||
font-weight: bold;
|
||||
margin: 20px 0;
|
||||
}
|
||||
.details {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
margin-top: 30px;
|
||||
}
|
||||
.detail-item {
|
||||
text-align: center;
|
||||
}
|
||||
.detail-value {
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.detail-label {
|
||||
font-size: 14px;
|
||||
opacity: 0.8;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="weather-card">
|
||||
<h2>🌤️ ${weatherData.city} 今日天气</h2>
|
||||
<div class="temperature">${weatherData.temperature}°C</div>
|
||||
<p>${weatherData.description}</p>
|
||||
<p>体感温度:${weatherData.feels_like}°C</p>
|
||||
|
||||
<div class="details">
|
||||
<div class="detail-item">
|
||||
<div class="detail-value">💧${weatherData.humidity}%</div>
|
||||
<div class="detail-label">湿度</div>
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<div class="detail-value">🌬️${weatherData.wind_speed}m/s</div>
|
||||
<div class="detail-label">风速</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr style="margin: 30px 0; border: 1px solid rgba(255,255,255,0.3);">
|
||||
<p style="font-size: 12px; opacity: 0.8;">
|
||||
更新时间:${weatherData.current_time}<br>
|
||||
由 n8n 自动发送 ❤️
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>`;
|
||||
|
||||
return [{
|
||||
json: {
|
||||
html_content: htmlContent,
|
||||
subject: `${weatherData.city} ${weatherData.temperature}°C - ${weatherData.description}`,
|
||||
weather_summary: `今日${weatherData.city}气温${weatherData.temperature}°C,${weatherData.description}`
|
||||
}
|
||||
}];
|
||||
```
|
||||
|
||||
=== "5. 邮件发送"
|
||||
```yaml
|
||||
节点类型: Email Send
|
||||
收件人: your-email@example.com
|
||||
主题: "={{$json.subject}}"
|
||||
邮件类型: HTML
|
||||
邮件内容: "={{$json.html_content}}"
|
||||
```
|
||||
|
||||
## 🔄 进阶工作流:客户反馈处理系统
|
||||
|
||||
现在我们来构建一个更复杂的业务工作流。
|
||||
|
||||
### 业务场景
|
||||
|
||||
**目标**: 自动化处理客户反馈表单提交
|
||||
**触发**: 网站表单Webhook
|
||||
**处理**: 分类、存储、分配、通知
|
||||
**输出**: 多渠道通知和工单创建
|
||||
|
||||
### 工作流架构
|
||||
|
||||
**Webhook接收** → **判断反馈类型**:
|
||||
- **投诉** → 高优先级处理 → 发送紧急通知 + 创建高优先级工单 → 发送客户确认
|
||||
- **建议** → 普通优先级处理 → 存储到数据库 + 分配给客服 → 发送客户确认
|
||||
- **咨询** → 自动回复处理 → AI自动回复 + 发送确认邮件 → 发送客户确认
|
||||
|
||||
### 核心节点配置
|
||||
|
||||
=== "Webhook接收"
|
||||
```javascript
|
||||
// Webhook 节点配置
|
||||
{
|
||||
"httpMethod": "POST",
|
||||
"path": "customer-feedback",
|
||||
"authentication": "headerAuth",
|
||||
"options": {
|
||||
"rawBody": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
=== "反馈分类逻辑"
|
||||
```javascript
|
||||
// Switch 节点 - 根据反馈类型分发
|
||||
const feedbackType = $json.body.feedback_type || 'unknown';
|
||||
const urgentKeywords = ['投诉', '不满', '退款', '问题', '错误'];
|
||||
const content = $json.body.message || '';
|
||||
|
||||
// 检查是否包含紧急关键词
|
||||
const isUrgent = urgentKeywords.some(keyword =>
|
||||
content.includes(keyword)
|
||||
);
|
||||
|
||||
if (feedbackType === 'complaint' || isUrgent) {
|
||||
return [0]; // 投诉流程
|
||||
} else if (feedbackType === 'suggestion') {
|
||||
return [1]; // 建议流程
|
||||
} else {
|
||||
return [2]; // 咨询流程
|
||||
}
|
||||
```
|
||||
|
||||
=== "数据库存储"
|
||||
```sql
|
||||
-- PostgreSQL 插入语句
|
||||
INSERT INTO customer_feedback (
|
||||
customer_name,
|
||||
customer_email,
|
||||
feedback_type,
|
||||
message,
|
||||
priority,
|
||||
status,
|
||||
created_at,
|
||||
assigned_to
|
||||
) VALUES (
|
||||
'{{$json.body.name}}',
|
||||
'{{$json.body.email}}',
|
||||
'{{$json.body.feedback_type}}',
|
||||
'{{$json.body.message}}',
|
||||
'{{$json.priority || "normal"}}',
|
||||
'new',
|
||||
NOW(),
|
||||
'{{$json.assigned_agent || null}}'
|
||||
);
|
||||
```
|
||||
|
||||
=== "AI自动回复"
|
||||
```javascript
|
||||
// AI Agent 节点配置
|
||||
{
|
||||
"model": "gpt-3.5-turbo",
|
||||
"prompt": `你是一个专业的客服助手。客户发来了以下咨询:
|
||||
|
||||
客户姓名:{{$json.body.name}}
|
||||
咨询内容:{{$json.body.message}}
|
||||
|
||||
请生成一个专业、友好的自动回复邮件,内容应该:
|
||||
1. 感谢客户的咨询
|
||||
2. 确认已收到并会尽快处理
|
||||
3. 提供预计回复时间
|
||||
4. 如果是常见问题,提供初步解答
|
||||
5. 保持礼貌和专业的语调
|
||||
|
||||
请以中文回复,格式为邮件正文。`,
|
||||
"temperature": 0.7,
|
||||
"max_tokens": 500
|
||||
}
|
||||
```
|
||||
|
||||
## 🔧 工作流最佳实践
|
||||
|
||||
### 错误处理和重试机制
|
||||
|
||||
**主流程** → **判断执行成功?**:
|
||||
- **是** → 正常完成
|
||||
- **否** → Error Trigger → **判断重试次数 < 3?**:
|
||||
- **是** → 等待延迟 → 重新执行 → 回到主流程
|
||||
- **否** → 发送失败通知 → 记录错误日志
|
||||
|
||||
### 性能优化建议
|
||||
|
||||
!!! tip "性能优化技巧"
|
||||
|
||||
**1. 批量处理**
|
||||
```javascript
|
||||
// 避免在循环中频繁API调用
|
||||
// 好的做法:批量收集数据,一次性处理
|
||||
const batchData = [];
|
||||
for (const item of $input.all()) {
|
||||
batchData.push(item.json);
|
||||
}
|
||||
|
||||
// 批量API调用
|
||||
const result = await callBatchAPI(batchData);
|
||||
```
|
||||
|
||||
**2. 缓存机制**
|
||||
```javascript
|
||||
// 使用Set节点缓存常用数据
|
||||
const cacheKey = `cache_${$json.query_key}`;
|
||||
const cachedData = $workflow.cache[cacheKey];
|
||||
|
||||
if (cachedData && cachedData.timestamp > Date.now() - 3600000) {
|
||||
return cachedData.data; // 使用1小时内的缓存
|
||||
}
|
||||
```
|
||||
|
||||
**3. 并行执行**:数据输入 → 拆分数据 → 并行处理1/2/3 → 合并结果
|
||||
|
||||
### 测试和调试策略
|
||||
|
||||
**1. 单元测试**
|
||||
- 单独测试每个节点
|
||||
- 使用测试数据验证逻辑
|
||||
- 检查数据转换正确性
|
||||
|
||||
**2. 集成测试**
|
||||
- 端到端流程测试
|
||||
- 异常情况模拟
|
||||
- 性能压力测试
|
||||
|
||||
**3. 调试技巧**
|
||||
```javascript
|
||||
// 在Code节点中添加调试信息
|
||||
console.log('调试信息:', {
|
||||
input_data: $input.all(),
|
||||
processed_count: processedItems.length,
|
||||
timestamp: new Date().toISOString()
|
||||
});
|
||||
|
||||
// 使用Set节点添加调试字段
|
||||
{
|
||||
"debug_info": {
|
||||
"node_name": "数据处理节点",
|
||||
"execution_time": "={{Date.now()}}",
|
||||
"input_size": "={{$input.all().length}}"
|
||||
},
|
||||
"original_data": "={{$json}}"
|
||||
}
|
||||
```
|
||||
|
||||
## 📚 工作流模板库
|
||||
|
||||
### 常用业务模板
|
||||
|
||||
| 模板类型 | 适用场景 | 核心节点 |
|
||||
|---------|---------|----------|
|
||||
| **数据同步** | CRM、ERP系统集成 | Schedule + HTTP + Database |
|
||||
| **内容管理** | 社交媒体自动发布 | RSS + AI + Social Media APIs |
|
||||
| **监控告警** | 系统监控、业务监控 | HTTP + IF + Email/Slack |
|
||||
| **报告生成** | 定期业务报告 | Database + AI + Email |
|
||||
| **客户服务** | 工单管理、自动回复 | Webhook + AI + Database |
|
||||
|
||||
### 学习资源
|
||||
|
||||
- **图文教程**: [n8n工作流创建完整指南](https://mp.weixin.qq.com/s/oIcmTW0Gg2r63C0Tn91r2Q)
|
||||
- **视频教程**: [从零开始的n8n实战](https://www.bilibili.com/video/BV1nejbz6Eip)
|
||||
- **官方文档**: [n8n Workflow Examples](https://docs.n8n.io/workflows/)
|
||||
|
||||
---
|
||||
|
||||
掌握了基本工作流创建后,您就可以开始构建更复杂的自动化解决方案了!
|
||||
|
||||
[上一章:常用节点](common-nodes/){ .md-button } [下一章:避坑指南](pitfalls/){ .md-button .md-button--primary }
|
||||
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 }
|
||||
399
docs/learning/community-nodes.md
Normal file
399
docs/learning/community-nodes.md
Normal file
@@ -0,0 +1,399 @@
|
||||
# 社区节点
|
||||
|
||||
## 📚 学习资源
|
||||
|
||||
- **社区节点排行榜**:[Top 100社区节点](https://github.com/restyler/awesome-n8n)
|
||||
- **官方文档**:[Community Nodes](https://docs.n8n.io/integrations/community-nodes/)
|
||||
- **安装指南**:在n8n设置中搜索并安装社区节点
|
||||
|
||||
社区节点是n8n生态系统的重要组成部分,提供了官方节点库之外的丰富功能扩展。
|
||||
|
||||
## 🌟 社区节点概述
|
||||
|
||||
### 什么是社区节点
|
||||
|
||||
社区节点是由n8n社区开发者创建的第三方节点,扩展了n8n的功能边界。它们通过npm包的形式分发,可以轻松安装和使用。
|
||||
|
||||
**社区节点的价值**:
|
||||
- 🔧 **功能扩展**: 支持更多第三方服务和API
|
||||
- 🚀 **快速集成**: 无需自己开发即可使用专业功能
|
||||
- 🌍 **全球贡献**: 世界各地开发者的智慧结晶
|
||||
- 💡 **创新实验**: 尝试最新的技术和集成方案
|
||||
|
||||
## 📊 热门社区节点排行榜
|
||||
|
||||
根据[Awesome n8n社区统计](https://github.com/restyler/awesome-n8n),以下是TOP 20热门社区节点:
|
||||
|
||||
| 排名 | 节点名称 | 功能描述 | 下载量 |
|
||||
|------|----------|----------|--------|
|
||||
| 🥇 **1** | **n8n-nodes-chatgpt** | ChatGPT集成节点 | 50K+ |
|
||||
| 🥈 **2** | **n8n-nodes-telegram** | Telegram机器人增强 | 35K+ |
|
||||
| 🥉 **3** | **n8n-nodes-redis** | Redis数据库操作 | 28K+ |
|
||||
| 4 | **n8n-nodes-youtube** | YouTube API集成 | 22K+ |
|
||||
| 5 | **n8n-nodes-shopify-plus** | Shopify电商增强 | 18K+ |
|
||||
| 6 | **n8n-nodes-firebase** | Firebase集成 | 15K+ |
|
||||
| 7 | **n8n-nodes-discord** | Discord机器人 | 14K+ |
|
||||
| 8 | **n8n-nodes-mysql-pool** | MySQL连接池 | 12K+ |
|
||||
| 9 | **n8n-nodes-wechat** | 微信集成 | 11K+ |
|
||||
| 10 | **n8n-nodes-anthropic** | Claude AI集成 | 10K+ |
|
||||
|
||||
## 🛠️ 社区节点安装
|
||||
|
||||
### 通过n8n界面安装
|
||||
|
||||
1. **进入设置页面**
|
||||
- 点击n8n界面右上角的设置图标 ⚙️
|
||||
- 选择"Community nodes"选项
|
||||
|
||||
2. **搜索和安装**
|
||||
- 在搜索框中输入节点名称
|
||||
- 点击"Install"按钮
|
||||
- 等待安装完成并重启n8n
|
||||
|
||||
3. **验证安装**
|
||||
- 在节点面板中查找新安装的节点
|
||||
- 创建测试工作流验证功能
|
||||
|
||||
### 通过命令行安装
|
||||
|
||||
```bash
|
||||
# 进入n8n安装目录
|
||||
cd ~/.n8n
|
||||
|
||||
# 安装社区节点
|
||||
npm install n8n-nodes-chatgpt
|
||||
|
||||
# 重启n8n服务
|
||||
systemctl restart n8n
|
||||
# 或
|
||||
pm2 restart n8n
|
||||
```
|
||||
|
||||
### Docker环境安装
|
||||
|
||||
```dockerfile
|
||||
# 在Dockerfile中添加社区节点
|
||||
FROM n8nio/n8n:latest
|
||||
|
||||
USER root
|
||||
RUN npm install -g n8n-nodes-chatgpt n8n-nodes-redis
|
||||
USER node
|
||||
```
|
||||
|
||||
## 🎯 推荐社区节点详解
|
||||
|
||||
### AI和机器学习
|
||||
|
||||
=== "ChatGPT节点"
|
||||
**包名**: `n8n-nodes-chatgpt`
|
||||
|
||||
**功能**:
|
||||
- 完整的OpenAI API支持
|
||||
- 支持GPT-3.5和GPT-4模型
|
||||
- 流式响应和函数调用
|
||||
- 图像分析和生成
|
||||
|
||||
**使用场景**:
|
||||
```javascript
|
||||
// 智能客服示例
|
||||
{
|
||||
"model": "gpt-3.5-turbo",
|
||||
"messages": [
|
||||
{
|
||||
"role": "system",
|
||||
"content": "你是一个专业的客服助手"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": "{{$json.customer_message}}"
|
||||
}
|
||||
],
|
||||
"temperature": 0.7
|
||||
}
|
||||
```
|
||||
|
||||
=== "Claude节点"
|
||||
**包名**: `n8n-nodes-anthropic`
|
||||
|
||||
**功能**:
|
||||
- Anthropic Claude模型集成
|
||||
- 长文本处理能力
|
||||
- 安全和对齐优化
|
||||
- 代码生成和分析
|
||||
|
||||
**特色功能**:
|
||||
- 100K+ token上下文支持
|
||||
- 更好的代码理解能力
|
||||
- 减少幻觉和错误输出
|
||||
|
||||
### 数据库和存储
|
||||
|
||||
=== "Redis节点"
|
||||
**包名**: `n8n-nodes-redis`
|
||||
|
||||
**功能**:
|
||||
- Redis数据库操作
|
||||
- 缓存管理
|
||||
- 发布/订阅模式
|
||||
- 分布式锁
|
||||
|
||||
**操作示例**:
|
||||
```javascript
|
||||
// 缓存用户会话
|
||||
{
|
||||
"operation": "set",
|
||||
"key": "user_session_{{$json.user_id}}",
|
||||
"value": "{{$json.session_data}}",
|
||||
"ttl": 3600
|
||||
}
|
||||
```
|
||||
|
||||
=== "MySQL连接池"
|
||||
**包名**: `n8n-nodes-mysql-pool`
|
||||
|
||||
**功能**:
|
||||
- 高效的数据库连接管理
|
||||
- 连接池优化
|
||||
- 事务支持
|
||||
- 批量操作
|
||||
|
||||
### 通讯和社交
|
||||
|
||||
=== "Telegram增强"
|
||||
**包名**: `n8n-nodes-telegram`
|
||||
|
||||
**功能**:
|
||||
- 高级Telegram机器人功能
|
||||
- 内联键盘支持
|
||||
- 文件上传下载
|
||||
- 群组管理
|
||||
|
||||
**机器人示例**:
|
||||
```javascript
|
||||
// 智能客服机器人
|
||||
{
|
||||
"chat_id": "{{$json.chat.id}}",
|
||||
"text": "您好!我是智能助手,请问有什么可以帮助您的?",
|
||||
"reply_markup": {
|
||||
"inline_keyboard": [[
|
||||
{"text": "产品咨询", "callback_data": "product_inquiry"},
|
||||
{"text": "技术支持", "callback_data": "tech_support"}
|
||||
]]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
=== "Discord集成"
|
||||
**包名**: `n8n-nodes-discord`
|
||||
|
||||
**功能**:
|
||||
- Discord机器人开发
|
||||
- 服务器管理
|
||||
- 消息处理
|
||||
- 语音频道操作
|
||||
|
||||
### 电商和支付
|
||||
|
||||
=== "Shopify增强"
|
||||
**包名**: `n8n-nodes-shopify-plus`
|
||||
|
||||
**功能**:
|
||||
- 扩展的Shopify API支持
|
||||
- 高级产品管理
|
||||
- 订单自动化处理
|
||||
- 库存同步
|
||||
|
||||
**自动化示例**:新订单 → 库存检查 → 发货处理 → 客户通知 → 财务记录
|
||||
|
||||
### 中国本土化
|
||||
|
||||
=== "微信集成"
|
||||
**包名**: `n8n-nodes-wechat`
|
||||
|
||||
**功能**:
|
||||
- 微信公众号API
|
||||
- 小程序后端集成
|
||||
- 企业微信支持
|
||||
- 微信支付处理
|
||||
|
||||
**应用场景**:
|
||||
- 自动回复客户消息
|
||||
- 用户管理和标签
|
||||
- 营销活动推送
|
||||
- 数据分析和报告
|
||||
|
||||
## 🔧 节点开发指南
|
||||
|
||||
### 开发环境准备
|
||||
|
||||
```bash
|
||||
# 安装n8n开发工具
|
||||
npm install -g n8n-node-dev
|
||||
|
||||
# 创建节点项目
|
||||
n8n-node-dev new my-custom-node
|
||||
|
||||
# 进入项目目录
|
||||
cd my-custom-node
|
||||
|
||||
# 安装依赖
|
||||
npm install
|
||||
```
|
||||
|
||||
### 基础节点结构
|
||||
|
||||
```typescript
|
||||
import { INodeType, INodeTypeDescription } from 'n8n-workflow';
|
||||
|
||||
export class MyCustomNode implements INodeType {
|
||||
description: INodeTypeDescription = {
|
||||
displayName: 'My Custom Node',
|
||||
name: 'myCustomNode',
|
||||
group: ['transform'],
|
||||
version: 1,
|
||||
description: '自定义节点功能描述',
|
||||
defaults: {
|
||||
name: 'My Custom Node',
|
||||
},
|
||||
inputs: ['main'],
|
||||
outputs: ['main'],
|
||||
properties: [
|
||||
{
|
||||
displayName: '配置参数',
|
||||
name: 'parameter',
|
||||
type: 'string',
|
||||
default: '',
|
||||
placeholder: '请输入参数值',
|
||||
description: '参数详细说明',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
|
||||
const items = this.getInputData();
|
||||
const returnData: INodeExecutionData[] = [];
|
||||
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
const parameter = this.getNodeParameter('parameter', i) as string;
|
||||
|
||||
// 自定义处理逻辑
|
||||
const result = await processData(parameter, items[i].json);
|
||||
|
||||
returnData.push({
|
||||
json: result,
|
||||
});
|
||||
}
|
||||
|
||||
return [returnData];
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 发布社区节点
|
||||
|
||||
1. **完善文档**
|
||||
- 详细的README说明
|
||||
- 使用示例和截图
|
||||
- API参数说明
|
||||
|
||||
2. **质量检查**
|
||||
- 单元测试覆盖
|
||||
- 错误处理机制
|
||||
- 性能优化
|
||||
|
||||
3. **发布到npm**
|
||||
```bash
|
||||
npm publish
|
||||
```
|
||||
|
||||
4. **社区推广**
|
||||
- 在n8n社区分享
|
||||
- 提交到awesome-n8n列表
|
||||
- 撰写技术博客
|
||||
|
||||
## ⚠️ 使用注意事项
|
||||
|
||||
### 安全考虑
|
||||
|
||||
!!! warning "安全提醒"
|
||||
- 只安装来源可信的社区节点
|
||||
- 定期更新节点版本
|
||||
- 注意节点的权限和访问范围
|
||||
- 在生产环境使用前充分测试
|
||||
|
||||
### 兼容性检查
|
||||
|
||||
**版本兼容性**:
|
||||
```yaml
|
||||
检查清单:
|
||||
✅ n8n版本兼容性
|
||||
✅ Node.js版本要求
|
||||
✅ 依赖包冲突检查
|
||||
✅ 操作系统兼容性
|
||||
```
|
||||
|
||||
### 性能监控
|
||||
|
||||
```javascript
|
||||
// 监控节点性能
|
||||
const startTime = Date.now();
|
||||
const result = await executeNodeLogic();
|
||||
const executionTime = Date.now() - startTime;
|
||||
|
||||
if (executionTime > 10000) { // 10秒
|
||||
console.warn(`Node execution took ${executionTime}ms`);
|
||||
}
|
||||
```
|
||||
|
||||
## 📈 社区节点趋势
|
||||
|
||||
### 热门类别分析
|
||||
|
||||
<div class="stats-grid">
|
||||
<div class="stat-item">
|
||||
<span class="stat-number">35%</span>
|
||||
<span class="stat-label">AI/ML集成</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-number">25%</span>
|
||||
<span class="stat-label">数据库连接</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-number">20%</span>
|
||||
<span class="stat-label">通讯工具</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-number">20%</span>
|
||||
<span class="stat-label">行业特定</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
### 发展趋势
|
||||
|
||||
1. **AI集成爆发**: ChatGPT、Claude等AI节点使用量激增
|
||||
2. **本土化需求**: 微信、钉钉等中国本土服务集成
|
||||
3. **行业深化**: 针对特定行业的专业节点增多
|
||||
4. **性能优化**: 更多高性能、低延迟的节点实现
|
||||
|
||||
## 🤝 贡献社区
|
||||
|
||||
### 参与方式
|
||||
|
||||
1. **使用和反馈**: 使用社区节点并提供反馈
|
||||
2. **Bug报告**: 发现问题及时报告给维护者
|
||||
3. **功能建议**: 提出新功能需求和改进建议
|
||||
4. **代码贡献**: 参与节点开发和维护
|
||||
5. **文档完善**: 帮助改进节点文档和教程
|
||||
|
||||
### 社区资源
|
||||
|
||||
- **GitHub组织**: [n8n-io](https://github.com/n8n-io)
|
||||
- **社区论坛**: [community.n8n.io](https://community.n8n.io/)
|
||||
- **Discord频道**: 实时交流和技术讨论
|
||||
- **Reddit社区**: r/n8n 用户经验分享
|
||||
|
||||
---
|
||||
|
||||
社区节点让n8n的可能性无限扩展,加入社区一起构建更强大的自动化生态!
|
||||
|
||||
[上一章:自然语言编程](natural-language.md){ .md-button } [下一章:参考资料](../reference/resources.md){ .md-button .md-button--primary }
|
||||
302
docs/learning/mcp.md
Normal file
302
docs/learning/mcp.md
Normal file
@@ -0,0 +1,302 @@
|
||||
# MCP应用
|
||||
|
||||
## 📚 参考资源
|
||||
|
||||
!!! info "核心学习资源"
|
||||
- **官方模板**: [Build your own n8n workflows MCP server](https://n8n.io/workflows/3770-build-your-own-n8n-workflows-mcp-server/)
|
||||
- **深度教程**: [n8n+MCP知乎专栏](https://zhuanlan.zhihu.com/p/1913630305291567877)
|
||||
- **MCP协议文档**: [官方文档](https://modelcontextprotocol.io/)
|
||||
- **视频教程**: [n8n+MCP实战教程](https://www.bilibili.com/video/BV11QX8YNEjU)
|
||||
- **实战案例**: [n8n+MCP+DeepSeek案例](https://blog.csdn.net/m0_59235245/article/details/147950398)
|
||||
- **社区节点**: [n8n-nodes-mcp](https://github.com/nerding-io/n8n-nodes-mcp)
|
||||
|
||||
---
|
||||
|
||||
模型上下文协议(MCP)定义了AI代理与外部工具的标准化通信框架,允许在不同LLM之间无缝切换工具集成逻辑。
|
||||
|
||||
## 🔍 MCP架构概览
|
||||
|
||||
MCP架构包含三大核心组件:
|
||||
|
||||
**Host 主机(Claude Desktop, Cursor)** → **Client 客户端(MCP通信端点)** → **Server 服务器(n8n工作流服务)** → **Tools 工具 + Resources 资源 + Prompts 提示**
|
||||
|
||||
### 组件说明
|
||||
|
||||
| 组件 | 功能 | 示例 |
|
||||
|------|------|------|
|
||||
| **Host (主机)** | 承载MCP连接的LLM应用 | Claude Desktop、Cursor IDE |
|
||||
| **Client (客户端)** | 作为对接MCP服务器的通信端点 | MCP客户端库 |
|
||||
| **Server (服务器)** | 为主机提供工具、数据或提示资源 | n8n工作流、API服务 |
|
||||
|
||||
## 🛠️ n8n的MCP角色
|
||||
|
||||
n8n能以两种角色接入MCP生态:
|
||||
|
||||
### 1. 作为MCP服务器
|
||||
|
||||
**功能**: 将n8n工作流封装为AI代理可调用的"工具"
|
||||
|
||||
**价值**:
|
||||
- 让AI能够执行复杂的自动化任务
|
||||
- 将现有工作流转化为AI工具
|
||||
- 构建强大的端到端智能工作流
|
||||
|
||||
### 2. 作为MCP客户端
|
||||
|
||||
**功能**: 在n8n中调用其他MCP服务器的能力
|
||||
|
||||
**价值**:
|
||||
- 集成第三方MCP服务
|
||||
- 扩展n8n的功能边界
|
||||
- 构建混合式智能工作流
|
||||
|
||||
## 🚀 n8n MCP服务器部署
|
||||
|
||||
### 使用官方模板
|
||||
|
||||
**官方模板**: [Build your own n8n workflows MCP server](https://n8n.io/workflows/3770-build-your-own-n8n-workflows-mcp-server/)
|
||||
|
||||
### 部署步骤
|
||||
|
||||
=== "1. 导入模板"
|
||||
1. 访问官方模板链接
|
||||
2. 点击"Use this template"
|
||||
3. 在n8n中导入工作流
|
||||
4. 更新Webhook URL
|
||||
|
||||
=== "2. 配置Redis"
|
||||
```yaml
|
||||
# Redis配置用于存储"可用"工作流信息
|
||||
Redis连接:
|
||||
host: localhost
|
||||
port: 6379
|
||||
database: 0
|
||||
password: your-redis-password
|
||||
```
|
||||
|
||||
=== "3. 设置工作流标签"
|
||||
```yaml
|
||||
# 通过标签标记可用工作流
|
||||
工作流标签: "mcp-available"
|
||||
|
||||
# 或使用其他过滤方式
|
||||
工作流前缀: "MCP_"
|
||||
```
|
||||
|
||||
=== "4. 部署MCP服务器"
|
||||
```bash
|
||||
# 启动n8n MCP服务器
|
||||
cd your-n8n-project
|
||||
npm install @n8n/mcp-server
|
||||
|
||||
# 配置环境变量
|
||||
export N8N_MCP_WEBHOOK_URL="your-webhook-url"
|
||||
export REDIS_URL="redis://localhost:6379"
|
||||
|
||||
# 启动服务
|
||||
npm run mcp-server
|
||||
```
|
||||
|
||||
### 配置示例
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "n8n-mcp-server",
|
||||
"version": "1.0.0",
|
||||
"mcpServers": {
|
||||
"n8n-workflows": {
|
||||
"command": "node",
|
||||
"args": ["mcp-server.js"],
|
||||
"env": {
|
||||
"N8N_WEBHOOK_URL": "https://your-n8n.com/webhook/mcp",
|
||||
"REDIS_URL": "redis://localhost:6379"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🎯 实际应用案例
|
||||
|
||||
### 案例1:智能客服工作流
|
||||
|
||||
**场景**: 将客服处理流程转换为MCP工具
|
||||
|
||||
**工作流设计**:MCP触发器 → 客户信息查询 → 问题分类 → AI回复生成 → 回复发送 → 工单创建
|
||||
|
||||
**MCP工具定义**:
|
||||
```json
|
||||
{
|
||||
"name": "customer_service_handler",
|
||||
"description": "处理客户咨询并生成智能回复",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"customer_id": {"type": "string"},
|
||||
"message": {"type": "string"},
|
||||
"channel": {"type": "string"}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 案例2:数据分析工作流
|
||||
|
||||
**场景**: 将复杂数据分析转换为AI可调用的分析工具
|
||||
|
||||
**核心功能**:
|
||||
- 数据清洗和预处理
|
||||
- 统计分析和可视化
|
||||
- 报告生成和发送
|
||||
|
||||
**使用方式**:
|
||||
```javascript
|
||||
// AI代理调用示例
|
||||
const analysisResult = await mcpClient.call('data_analysis_tool', {
|
||||
dataset: 'sales_data_2024',
|
||||
analysis_type: 'trend_analysis',
|
||||
date_range: '2024-01-01 to 2024-12-31'
|
||||
});
|
||||
```
|
||||
|
||||
### 案例3:内容创作工作流
|
||||
|
||||
**场景**: AI辅助内容创作和发布
|
||||
|
||||
**工作流能力**:
|
||||
- 内容主题研究
|
||||
- 多平台内容生成
|
||||
- 自动化发布调度
|
||||
- 效果跟踪分析
|
||||
|
||||
## 🔧 高级配置技巧
|
||||
|
||||
### 输入模式设计
|
||||
|
||||
**最佳实践**:
|
||||
```json
|
||||
{
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"required_field": {
|
||||
"type": "string",
|
||||
"description": "必需参数的详细描述"
|
||||
},
|
||||
"optional_field": {
|
||||
"type": "string",
|
||||
"description": "可选参数的用途说明",
|
||||
"default": "默认值"
|
||||
}
|
||||
},
|
||||
"required": ["required_field"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 错误处理机制
|
||||
|
||||
```javascript
|
||||
// 在MCP工作流中添加错误处理
|
||||
try {
|
||||
const result = await executeWorkflow(input);
|
||||
return {
|
||||
success: true,
|
||||
data: result,
|
||||
timestamp: new Date().toISOString()
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
success: false,
|
||||
error: error.message,
|
||||
error_code: error.code || 'UNKNOWN_ERROR',
|
||||
timestamp: new Date().toISOString()
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### 性能优化
|
||||
|
||||
**缓存策略**:
|
||||
```javascript
|
||||
// Redis缓存实现
|
||||
const cacheKey = `workflow_${workflowId}_${JSON.stringify(input)}`;
|
||||
const cachedResult = await redis.get(cacheKey);
|
||||
|
||||
if (cachedResult) {
|
||||
return JSON.parse(cachedResult);
|
||||
}
|
||||
|
||||
const result = await executeWorkflow(input);
|
||||
await redis.setex(cacheKey, 3600, JSON.stringify(result)); // 1小时缓存
|
||||
|
||||
return result;
|
||||
```
|
||||
|
||||
## 🌟 MCP生态集成
|
||||
|
||||
### 与Claude Desktop集成
|
||||
|
||||
**配置文件**: `~/.config/claude-desktop/claude_desktop_config.json`
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"n8n-workflows": {
|
||||
"command": "node",
|
||||
"args": ["/path/to/n8n-mcp-server/index.js"],
|
||||
"env": {
|
||||
"N8N_WEBHOOK_URL": "https://your-n8n.com/webhook/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 与Cursor IDE集成
|
||||
|
||||
**配置步骤**:
|
||||
1. 安装MCP扩展
|
||||
2. 配置n8n MCP服务器连接
|
||||
3. 在代码中调用n8n工作流
|
||||
|
||||
### 社区MCP节点
|
||||
|
||||
**推荐MCP节点**: [n8n-nodes-mcp](https://github.com/nerding-io/n8n-nodes-mcp)
|
||||
|
||||
**安装方式**:
|
||||
```bash
|
||||
# 在n8n中安装MCP社区节点
|
||||
npm install n8n-nodes-mcp
|
||||
```
|
||||
|
||||
## 💡 进阶提示
|
||||
|
||||
### MCP最佳实践
|
||||
|
||||
- **模块化设计**: 将复杂工作流拆分为可复用的MCP服务
|
||||
- **错误处理**: 确保MCP服务具备完善的异常处理机制
|
||||
- **性能优化**: 合理使用缓存和批处理提升响应速度
|
||||
- **安全考虑**: 实施适当的身份验证和权限控制
|
||||
|
||||
## 🚀 未来发展方向
|
||||
|
||||
### MCP技术趋势
|
||||
|
||||
1. **标准化程度提升**: MCP协议将更加成熟和标准化
|
||||
2. **生态系统扩展**: 更多工具和平台将支持MCP
|
||||
3. **AI能力增强**: AI代理将具备更强的工具调用能力
|
||||
4. **企业级应用**: MCP将广泛应用于企业AI解决方案
|
||||
|
||||
### n8n在MCP生态的优势
|
||||
|
||||
- **丰富的集成能力**: 400+节点支持
|
||||
- **可视化工作流**: 降低AI工具开发门槛
|
||||
- **企业级部署**: 支持私有化和大规模部署
|
||||
- **活跃的社区**: 持续的功能更新和支持
|
||||
|
||||
---
|
||||
|
||||
通过MCP协议,n8n不仅是自动化工具,更成为了AI时代的智能工作流引擎!
|
||||
|
||||
[上一章:模板套用](templates.md){ .md-button } [下一章:自然语言编程](natural-language.md){ .md-button .md-button--primary }
|
||||
347
docs/learning/natural-language.md
Normal file
347
docs/learning/natural-language.md
Normal file
@@ -0,0 +1,347 @@
|
||||
# 自然语言编程
|
||||
|
||||
## 📚 工具和资源
|
||||
|
||||
!!! tip "推荐工具"
|
||||
- **n8nChat官方工具**: [n8nchat.com](https://n8nchat.com) - 官方自然语言编程平台
|
||||
- **开源替代方案**: 社区维护的自然语言工作流生成器
|
||||
- **AI助手集成**: 与ChatGPT、Claude等大模型的集成方案
|
||||
|
||||
---
|
||||
|
||||
使用自然语言编程n8n工作流,让AI成为您的编程助手,大幅降低工作流开发门槛。
|
||||
|
||||
## 🤖 自然语言编程概述
|
||||
|
||||
### 什么是自然语言编程
|
||||
|
||||
自然语言编程(Natural Language Programming)是指使用人类自然语言描述需求,由AI自动生成相应的代码或工作流的技术。
|
||||
|
||||
**传统开发 vs 自然语言编程**:
|
||||
|
||||
| 对比维度 | 传统开发 | 自然语言编程 |
|
||||
|----------|----------|-------------|
|
||||
| **学习门槛** | 需要掌握编程语言 | 只需描述业务需求 |
|
||||
| **开发速度** | 数小时到数天 | 数分钟到数小时 |
|
||||
| **错误调试** | 需要技术专业知识 | AI辅助问题诊断 |
|
||||
| **维护成本** | 需要技术人员 | 业务人员即可维护 |
|
||||
|
||||
## 🛠️ n8nChat - 官方自然语言工具
|
||||
|
||||
### 平台介绍
|
||||
|
||||
n8nChat是官方推出的自然语言编程平台,让您可以通过对话的方式创建n8n工作流。
|
||||
|
||||
### 核心功能
|
||||
|
||||
<div class="feature-grid">
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">💬</div>
|
||||
<h3>对话式创建</h3>
|
||||
<p>用自然语言描述需求,AI自动生成工作流</p>
|
||||
</div>
|
||||
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🔄</div>
|
||||
<h3>实时修改</h3>
|
||||
<p>通过对话实时调整和优化工作流逻辑</p>
|
||||
</div>
|
||||
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">📋</div>
|
||||
<h3>代码生成</h3>
|
||||
<p>自动生成n8n工作流JSON和节点配置</p>
|
||||
</div>
|
||||
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🎯</div>
|
||||
<h3>一键导入</h3>
|
||||
<p>生成的工作流可直接导入到n8n中使用</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
### 使用流程
|
||||
|
||||
<div class="process-flow">
|
||||
<div class="flow-step">
|
||||
<div class="step-number">1</div>
|
||||
<div class="step-content">
|
||||
<h4>💬 描述需求</h4>
|
||||
<p>用自然语言描述你想要的工作流功能</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flow-arrow">→</div>
|
||||
|
||||
<div class="flow-step">
|
||||
<div class="step-number">2</div>
|
||||
<div class="step-content">
|
||||
<h4>🤖 AI理解分析</h4>
|
||||
<p>AI分析需求并理解业务逻辑</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flow-arrow">→</div>
|
||||
|
||||
<div class="flow-step">
|
||||
<div class="step-number">3</div>
|
||||
<div class="step-content">
|
||||
<h4>⚙️ 生成工作流</h4>
|
||||
<p>AI自动生成相应的n8n工作流</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flow-arrow">→</div>
|
||||
|
||||
<div class="flow-step">
|
||||
<div class="step-number">4</div>
|
||||
<div class="step-content">
|
||||
<h4>✅ 用户确认</h4>
|
||||
<p>review生成的工作流是否符合需求</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flow-arrow">→</div>
|
||||
|
||||
<div class="flow-step">
|
||||
<div class="step-number">5</div>
|
||||
<div class="step-content">
|
||||
<h4>🔧 调整优化</h4>
|
||||
<p>根据反馈进行细节调整</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flow-arrow">→</div>
|
||||
|
||||
<div class="flow-step">
|
||||
<div class="step-number">6</div>
|
||||
<div class="step-content">
|
||||
<h4>🚀 导出使用</h4>
|
||||
<p>导出到n8n平台正式使用</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
## 💡 实际应用示例
|
||||
|
||||
### 示例1:客户邮件自动回复
|
||||
|
||||
**用户描述**:
|
||||
> "我希望创建一个工作流,当收到新邮件时,自动分析邮件内容,如果是客户咨询,就生成一个礼貌的自动回复并发送。"
|
||||
|
||||
**AI生成的工作流**:
|
||||
<div class="workflow-diagram">
|
||||
<div class="workflow-step">
|
||||
<div class="step-box trigger">📧 邮件触发器</div>
|
||||
<div class="arrow">→</div>
|
||||
<div class="step-box process">🔍 内容分析</div>
|
||||
<div class="arrow">→</div>
|
||||
<div class="step-box decision">❓ 判断类型</div>
|
||||
</div>
|
||||
|
||||
<div class="decision-branches">
|
||||
<div class="branch">
|
||||
<div class="branch-label">✅ 是咨询</div>
|
||||
<div class="branch-flow">
|
||||
<div class="step-box ai">🤖 生成回复</div>
|
||||
<div class="arrow">→</div>
|
||||
<div class="step-box output">📤 发送邮件</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="branch">
|
||||
<div class="branch-label">❌ 非咨询</div>
|
||||
<div class="branch-flow">
|
||||
<div class="step-box process">🏷️ 标记处理</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
**工作流逻辑说明:**
|
||||
1. **邮件触发** → 监听新邮件到达
|
||||
2. **内容分析** → AI分析邮件内容和语义
|
||||
3. **智能判断** → 识别是否为客户咨询类邮件
|
||||
4. **分支处理** → 根据判断结果执行不同操作
|
||||
|
||||
**生成的配置示例**:
|
||||
```javascript
|
||||
// AI Agent节点配置
|
||||
{
|
||||
"model": "gpt-3.5-turbo",
|
||||
"prompt": "你是一个专业的客服助手。请为以下客户邮件生成一个礼貌、专业的自动回复:\n\n邮件内容:{{$json.body}}\n\n回复要求:\n1. 感谢客户的咨询\n2. 确认已收到邮件\n3. 告知会在24小时内回复\n4. 保持专业友好的语调",
|
||||
"temperature": 0.7
|
||||
}
|
||||
```
|
||||
|
||||
### 示例2:销售数据分析报告
|
||||
|
||||
**用户描述**:
|
||||
> "每周一早上9点,自动从销售数据库提取上周的销售数据,分析销售趋势,生成图表和报告,然后发送给销售团队。"
|
||||
|
||||
**AI生成的工作流架构**:
|
||||
```mermaid
|
||||
graph TD
|
||||
A[定时触发<br/>每周一9:00] --> B[数据库查询<br/>上周销售数据]
|
||||
B --> C[数据分析<br/>计算趋势指标]
|
||||
C --> D[图表生成<br/>可视化数据]
|
||||
D --> E[报告生成<br/>AI分析总结]
|
||||
E --> F[邮件发送<br/>团队通知]
|
||||
|
||||
style A fill:#e3f2fd
|
||||
style E fill:#fff3e0
|
||||
style F fill:#e8f5e8
|
||||
```
|
||||
|
||||
### 示例3:社交媒体内容发布
|
||||
|
||||
**用户描述**:
|
||||
> "我想要一个工作流,能够根据我提供的主题,自动生成适合不同社交平台的内容,并在合适的时间发布到微博、微信公众号和抖音。"
|
||||
|
||||
**AI分析和建议**:
|
||||
- 内容生成:使用AI根据主题生成不同风格的内容
|
||||
- 平台适配:针对不同平台调整内容格式和长度
|
||||
- 定时发布:根据平台最佳发布时间自动调度
|
||||
|
||||
## 🔧 开源解决方案
|
||||
|
||||
### 本地部署n8n自然语言编程
|
||||
|
||||
如果您希望本地部署自然语言编程能力,可以参考以下开源项目:
|
||||
|
||||
**项目资源**:
|
||||
- **GitHub项目**: 开源的n8n自然语言编程工具
|
||||
- **部署教程**: [B站视频教程](https://www.bilibili.com/video/BV1HuKEzDEaj)
|
||||
|
||||
### 自建AI助手
|
||||
|
||||
使用n8n + LLM构建自己的自然语言编程助手:
|
||||
|
||||
**用户输入** → **意图识别** → **需求分析** → **工作流生成** → **代码输出**
|
||||
|
||||
**核心组件**:
|
||||
1. **意图识别**: 理解用户的真实需求
|
||||
2. **工作流设计**: 规划最优的自动化流程
|
||||
3. **节点配置**: 生成具体的节点参数
|
||||
4. **代码生成**: 输出可执行的工作流JSON
|
||||
|
||||
## 📝 最佳实践
|
||||
|
||||
### 有效的需求描述
|
||||
|
||||
**✅ 好的描述**:
|
||||
> "每天下午5点,从CRM系统导出今日新增客户数据,使用AI分析客户特征,生成个性化的欢迎邮件模板,并发送给对应的销售代表进行后续跟进。"
|
||||
|
||||
**❌ 模糊的描述**:
|
||||
> "帮我做个自动化的东西处理客户。"
|
||||
|
||||
### 描述技巧
|
||||
|
||||
1. **明确触发条件**: 何时执行(定时/事件触发)
|
||||
2. **详细数据源**: 从哪里获取数据
|
||||
3. **处理逻辑**: 如何处理数据
|
||||
4. **输出方式**: 结果如何呈现
|
||||
5. **异常处理**: 出错时如何处理
|
||||
|
||||
### 迭代优化策略
|
||||
|
||||
=== "第一轮对话"
|
||||
```
|
||||
用户: "我需要一个邮件自动化工具"
|
||||
AI: "请详细描述您的邮件自动化需求,比如:
|
||||
- 什么时候发送邮件?
|
||||
- 发送给谁?
|
||||
- 邮件内容是什么?
|
||||
- 需要什么条件触发?"
|
||||
```
|
||||
|
||||
=== "第二轮对话"
|
||||
```
|
||||
用户: "每天早上8点给所有VIP客户发送个性化的问候邮件"
|
||||
AI: "明白了,我需要了解:
|
||||
- VIP客户名单从哪里获取?
|
||||
- 个性化内容包括哪些信息?
|
||||
- 邮件模板是否有特定格式要求?"
|
||||
```
|
||||
|
||||
=== "第三轮对话"
|
||||
```
|
||||
用户: "VIP客户从CRM系统获取,个性化内容包括客户姓名、最近购买记录、生日提醒等"
|
||||
AI: "完美!我将为您创建这个工作流..."
|
||||
```
|
||||
|
||||
## 🚀 进阶应用
|
||||
|
||||
### AI辅助工作流优化
|
||||
|
||||
**场景**: 使用AI分析现有工作流并提供优化建议
|
||||
|
||||
```javascript
|
||||
// AI分析工作流性能
|
||||
const analysis = await analyzeWorkflow(workflowData);
|
||||
|
||||
const suggestions = {
|
||||
performance: "建议将API调用改为批量处理,可提升50%性能",
|
||||
reliability: "添加错误重试机制,提高稳定性",
|
||||
maintenance: "简化条件逻辑,提高可维护性"
|
||||
};
|
||||
```
|
||||
|
||||
### 多语言支持
|
||||
|
||||
**支持语言**:
|
||||
- 🇨🇳 中文:详细的业务描述和技术要求
|
||||
- 🇺🇸 英文:国际化工作流和API集成
|
||||
- 🇯🇵 日文:本地化业务流程
|
||||
- 🇰🇷 韩文:区域特定的自动化需求
|
||||
|
||||
### 行业模板库
|
||||
|
||||
**预训练的行业知识**:
|
||||
- 📊 **金融**: 风控流程、报表自动化
|
||||
- 🛒 **电商**: 订单处理、库存管理
|
||||
- 🏥 **医疗**: 患者管理、预约系统
|
||||
- 📚 **教育**: 学员管理、课程安排
|
||||
|
||||
## 📚 学习资源
|
||||
|
||||
### 官方资源
|
||||
|
||||
- **n8nChat平台**: [https://n8nchat.com](https://n8nchat.com)
|
||||
- **使用教程**: 平台内置的交互式教程
|
||||
|
||||
### 社区资源
|
||||
|
||||
- **开源项目**: [GitHub自然语言编程工具](https://github.com/search?q=n8n+natural+language)
|
||||
- **部署教程**: [B站部署指南](https://www.bilibili.com/video/BV1HuKEzDEaj)
|
||||
- **案例分享**: 社区用户分享的实际应用案例
|
||||
|
||||
### 技术原理
|
||||
|
||||
**底层技术栈**:
|
||||
- **大语言模型**: GPT、Claude等用于理解需求
|
||||
- **代码生成**: 将自然语言转换为工作流配置
|
||||
- **模板匹配**: 基于常见模式快速生成解决方案
|
||||
- **持续学习**: 根据用户反馈优化生成质量
|
||||
|
||||
## 🔮 未来展望
|
||||
|
||||
### 技术发展趋势
|
||||
|
||||
1. **更智能的理解**: AI对业务需求的理解更加准确
|
||||
2. **多模态交互**: 支持语音、图像等多种输入方式
|
||||
3. **实时协作**: 团队成员可以共同参与工作流设计
|
||||
4. **自动优化**: AI主动发现并优化工作流性能
|
||||
|
||||
### 应用场景扩展
|
||||
|
||||
- **无代码开发**: 完全通过对话创建复杂应用
|
||||
- **智能运维**: AI助手自动管理和优化工作流
|
||||
- **业务咨询**: AI基于最佳实践提供业务建议
|
||||
- **培训教育**: 交互式学习和实践指导
|
||||
|
||||
---
|
||||
|
||||
自然语言编程让每个人都能成为自动化专家,释放创造力,专注于业务价值!
|
||||
|
||||
[上一章:MCP应用](mcp.md){ .md-button } [下一章:社区节点](community-nodes.md){ .md-button .md-button--primary }
|
||||
286
docs/learning/pitfalls.md
Normal file
286
docs/learning/pitfalls.md
Normal file
@@ -0,0 +1,286 @@
|
||||
# 避坑指南
|
||||
|
||||
## 📚 学习资源
|
||||
|
||||
- **避坑指南**:[冰糖数据的n8n避坑系列](https://x.com/binggandata/status/1951798212995829996)
|
||||
- **最佳实践**:[n8n官方最佳实践](https://docs.n8n.io/best-practices/)
|
||||
- **错误处理**:[n8n错误处理指南](https://docs.n8n.io/error-handling/)
|
||||
|
||||
n8n容易踩坑的环节,也是开发稳定性高的n8n工作流的要求。
|
||||
|
||||
!!! warning "重要提醒"
|
||||
97%的n8n工作流缺乏异常处理,在出错时默默失败。掌握这些最佳实践对于构建可靠的自动化系统至关重要。
|
||||
|
||||
## 🚨 十大常见陷阱
|
||||
|
||||
### 1️⃣ 缺乏异常处理
|
||||
|
||||
**问题**: 97%的n8n工作流缺乏异常处理,在出错时默默失败。
|
||||
|
||||
**解决方案**:
|
||||
- 为每个工作流添加一个错误触发器
|
||||
- 强制对关键节点(HTTP/API/DB)进行异常处理
|
||||
- 添加邮件/Slack通知机制
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[主工作流] --> B{执行成功?}
|
||||
B -->|是| C[正常完成]
|
||||
B -->|否| D[Error Trigger]
|
||||
D --> E[发送错误通知]
|
||||
D --> F[记录错误日志]
|
||||
D --> G[重试机制]
|
||||
|
||||
style D fill:#ffebee
|
||||
style E fill:#ffebee
|
||||
style F fill:#ffebee
|
||||
```
|
||||
|
||||
### 2️⃣ 安全配置不当
|
||||
|
||||
**问题**: 320个webhooks未进行身份验证,152个进程仍在使用明文HTTP。
|
||||
|
||||
**解决方案**:
|
||||
- 对所有webhooks强制执行身份验证
|
||||
- 全程使用HTTPS
|
||||
- 不要硬编码API密钥
|
||||
- 定期轮换密钥并加密存储
|
||||
|
||||
**安全检查清单**:
|
||||
```yaml
|
||||
✅ 所有Webhook有认证
|
||||
✅ 外部请求全HTTPS
|
||||
✅ 敏感数据加密
|
||||
✅ 权限分层管理
|
||||
✅ 异常信息不泄露隐私
|
||||
```
|
||||
|
||||
### 3️⃣ 性能优化不足
|
||||
|
||||
**问题**: 流程中有无用节点、API在循环里频繁请求、无效数据转换反复出现。
|
||||
|
||||
**解决方案**:
|
||||
- 能批量就批量,避免单个API调用
|
||||
- 流程结构清晰,节点合并
|
||||
- 并行能并行,提高执行效率
|
||||
- 复杂逻辑直接用代码节点搞定
|
||||
|
||||
**性能优化模式**:
|
||||
|
||||
=== "❌ 低效模式"
|
||||
```javascript
|
||||
// 循环中单个API调用
|
||||
for (const item of items) {
|
||||
await callAPI(item); // 串行调用,效率低
|
||||
}
|
||||
```
|
||||
|
||||
=== "✅ 高效模式"
|
||||
```javascript
|
||||
// 批量API调用
|
||||
const batchSize = 10;
|
||||
const batches = chunk(items, batchSize);
|
||||
|
||||
for (const batch of batches) {
|
||||
await Promise.all(batch.map(callAPI)); // 并行调用
|
||||
}
|
||||
```
|
||||
|
||||
### 4️⃣ AI集成缺乏优化
|
||||
|
||||
**问题**: 35%的工作流接入了AI,但大部分没做向量数据库和缓存,token消耗高。
|
||||
|
||||
**解决方案**:
|
||||
- Prompt要分块,避免超长输入
|
||||
- 简单用GPT-3.5,复杂用GPT-4
|
||||
- 批量处理+结果校验
|
||||
- AI节点也要异常处理和日志监控
|
||||
|
||||
**AI优化策略**:
|
||||
| 场景 | 模型选择 | 优化方法 |
|
||||
|------|----------|----------|
|
||||
| **简单文本处理** | GPT-3.5 Turbo | 缓存常见查询 |
|
||||
| **复杂分析** | GPT-4 | 分段处理长文本 |
|
||||
| **批量处理** | Claude | 并行调用限流 |
|
||||
| **实时响应** | 本地模型 | 预处理+缓存 |
|
||||
|
||||
### 5️⃣ 文档和管理混乱
|
||||
|
||||
**问题**: 74.7%工作流分类都是General,文档说明严重不足,协作查错全靠猜。
|
||||
|
||||
**解决方案**:
|
||||
- 流程统一命名+标签
|
||||
- 关键节点加Sticky Note
|
||||
- 协作排查省大把时间
|
||||
|
||||
**命名规范示例**:
|
||||
```
|
||||
[部门]_[业务]_[功能]_[版本]
|
||||
例如:
|
||||
- Sales_CRM_DataSync_v2
|
||||
- HR_Recruit_AutoEmail_v1
|
||||
- Finance_Report_DailyGen_v3
|
||||
```
|
||||
|
||||
### 6️⃣ 重复造轮子
|
||||
|
||||
**问题**: 高频套路重复开发:数据转换(Set→HTTP)、API链式(HTTP→HTTP)、条件分流(If/Switch→Set)、数据聚合(Set→Merge)。
|
||||
|
||||
**解决方案**: 直接套用成熟流程模板,少造轮子。
|
||||
|
||||
**常用模板**:
|
||||
- 📊 **数据同步模板**: Schedule → HTTP → Transform → Database
|
||||
- 🔄 **API集成模板**: Webhook → Validate → Process → Response
|
||||
- 📧 **通知模板**: Trigger → Content → Multi-channel → Log
|
||||
- 🤖 **AI处理模板**: Input → Preprocess → AI → Postprocess → Output
|
||||
|
||||
### 7️⃣ 部署前安全检查不足
|
||||
|
||||
**问题**: 上线前缺乏系统性的安全检查。
|
||||
|
||||
**上线前安全清单**:
|
||||
```yaml
|
||||
身份认证:
|
||||
✅ 所有webhook有认证
|
||||
✅ API密钥使用凭证管理
|
||||
✅ 数据库连接加密
|
||||
|
||||
网络安全:
|
||||
✅ 外部请求全HTTPS
|
||||
✅ 内网访问控制
|
||||
✅ 防火墙规则配置
|
||||
|
||||
数据保护:
|
||||
✅ 敏感数据加密存储
|
||||
✅ 日志不包含敏感信息
|
||||
✅ 权限最小化原则
|
||||
|
||||
监控告警:
|
||||
✅ 异常处理机制
|
||||
✅ 错误通知配置
|
||||
✅ 性能监控设置
|
||||
```
|
||||
|
||||
### 8️⃣ 维护和优化滞后
|
||||
|
||||
**问题**: 慢流程没有拆分为子流程,API并发缺乏批量处理和缓存,老旧节点未及时清理。
|
||||
|
||||
**维护策略**:
|
||||
- 慢流程拆分为子流程
|
||||
- API并发要批量/加缓存
|
||||
- 老旧节点及时清理
|
||||
- 每月安全&性能巡检
|
||||
- 流程有改动就同步文档
|
||||
|
||||
### 9️⃣ 监控缺失
|
||||
|
||||
**问题**: 很多流程没监控,出错没人知道,维护成本高。
|
||||
|
||||
**监控体系建设**:
|
||||
```mermaid
|
||||
graph TD
|
||||
A[工作流执行] --> B[日志记录]
|
||||
B --> C[性能指标]
|
||||
C --> D[异常检测]
|
||||
D --> E[告警通知]
|
||||
E --> F[问题修复]
|
||||
F --> G[优化改进]
|
||||
|
||||
B --> H[集中日志存储]
|
||||
C --> I[监控仪表板]
|
||||
D --> J[自动化恢复]
|
||||
```
|
||||
|
||||
**监控内容**:
|
||||
- 每个关键流程都加集中日志和监控
|
||||
- 记录流程名、节点、错误和时间戳
|
||||
- AI/长流程建议加进度日志
|
||||
|
||||
### 🔟 缺乏持续改进
|
||||
|
||||
**问题**: 一次部署后就不管了,缺乏持续优化。
|
||||
|
||||
**持续改进流程**:
|
||||
1. **定期评估**: 每月性能评估和优化建议
|
||||
2. **用户反馈**: 收集使用者反馈和改进建议
|
||||
3. **技术更新**: 跟进n8n新功能和最佳实践
|
||||
4. **团队培训**: 定期技能提升和知识分享
|
||||
|
||||
## 🏆 最佳实践总结
|
||||
|
||||
只要你把这些最佳实践都落地了:
|
||||
|
||||
✅ **异常处理**: 绝大部分工作流有异常处理
|
||||
✅ **安全认证**: webhook全认证、HTTPS全覆盖、无明文密钥
|
||||
✅ **文档完善**: 流程分类注释完整
|
||||
✅ **性能优化**: 平均执行时间都能压到10秒以内
|
||||
|
||||
## 📚 进阶学习
|
||||
|
||||
### 错误处理模式
|
||||
|
||||
=== "基础错误处理"
|
||||
```javascript
|
||||
// 在Code节点中添加错误处理
|
||||
try {
|
||||
const result = await processData($input.all());
|
||||
return result;
|
||||
} catch (error) {
|
||||
console.error('Processing failed:', error);
|
||||
return [{
|
||||
json: {
|
||||
error: true,
|
||||
message: error.message,
|
||||
timestamp: new Date().toISOString()
|
||||
}
|
||||
}];
|
||||
}
|
||||
```
|
||||
|
||||
=== "高级重试机制"
|
||||
```javascript
|
||||
// 指数退避重试
|
||||
async function retryWithBackoff(fn, maxRetries = 3) {
|
||||
for (let i = 0; i < maxRetries; i++) {
|
||||
try {
|
||||
return await fn();
|
||||
} catch (error) {
|
||||
if (i === maxRetries - 1) throw error;
|
||||
|
||||
const delay = Math.pow(2, i) * 1000; // 1s, 2s, 4s
|
||||
await new Promise(resolve => setTimeout(resolve, delay));
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 性能监控代码
|
||||
|
||||
```javascript
|
||||
// 在关键节点添加性能监控
|
||||
const startTime = Date.now();
|
||||
|
||||
// 执行业务逻辑
|
||||
const result = await processBusinessLogic();
|
||||
|
||||
const executionTime = Date.now() - startTime;
|
||||
|
||||
// 记录性能日志
|
||||
console.log('Performance:', {
|
||||
node: 'DataProcessing',
|
||||
executionTime,
|
||||
itemCount: $input.all().length,
|
||||
timestamp: new Date().toISOString()
|
||||
});
|
||||
|
||||
// 如果执行时间过长,发送告警
|
||||
if (executionTime > 30000) { // 30秒
|
||||
// 发送性能告警
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
遵循这些避坑指南,您的n8n工作流将更加稳定、高效和可维护!
|
||||
|
||||
[上一章:基本工作流创建](basic-workflows.md){ .md-button } [下一章:模板套用](templates.md){ .md-button .md-button--primary }
|
||||
312
docs/learning/templates.md
Normal file
312
docs/learning/templates.md
Normal file
@@ -0,0 +1,312 @@
|
||||
# 模板套用
|
||||
|
||||
## 📚 模板资源库
|
||||
|
||||
!!! tip "精选模板资源"
|
||||
- **GitHub最全集合**: [Awesome n8n Templates (2000+)](https://github.com/enescingoz/awesome-n8n-templates) ✅
|
||||
- **分类工作流集合**: [n8n Workflows Collection (2000+)](https://github.com/Zie619/n8n-workflows) ✅
|
||||
- **官方精选模板**: [n8n.io/workflows (500+)](https://n8n.io/workflows)
|
||||
- **实用案例合集**: 覆盖各行业常见自动化场景
|
||||
|
||||
---
|
||||
|
||||
n8n的模板套用方式非常直观,通过复制粘贴就能快速应用成熟的工作流方案。
|
||||
|
||||
## 🚀 快速模板应用
|
||||
|
||||
### 使用方法
|
||||
|
||||
1. **复制模板代码**:在任意位置复制整段JSON文本
|
||||
2. **粘贴到n8n**:在n8n画布任意位置粘贴
|
||||
3. **配置参数**:根据需要调整节点参数
|
||||
4. **测试运行**:验证工作流是否正常
|
||||
|
||||
**复制模板** → **粘贴到n8n** → **配置凭证** → **调整参数** → **测试运行** → **部署上线**
|
||||
|
||||
## 📚 模板资源库
|
||||
|
||||
### 模板分类浏览
|
||||
|
||||
**按业务场景分类:**
|
||||
- **营销自动化** - 邮件营销、社交媒体管理、客户关系维护
|
||||
- **数据处理** - 数据同步、清洗、转换、分析
|
||||
- **办公自动化** - 文档处理、会议安排、任务管理
|
||||
- **电商运营** - 订单处理、库存管理、客服自动回复
|
||||
- **内容管理** - 文章发布、图片处理、SEO优化
|
||||
|
||||
### 分类模板推荐
|
||||
|
||||
=== "数据处理"
|
||||
- **Excel数据清洗**: 自动化数据验证和格式化
|
||||
- **CSV文件合并**: 多文件数据整合
|
||||
- **数据库同步**: 不同系统间数据同步
|
||||
- **报表生成**: 定期业务报表自动生成
|
||||
|
||||
=== "通信自动化"
|
||||
- **邮件营销**: 个性化邮件批量发送
|
||||
- **客服机器人**: 智能客服自动回复
|
||||
- **社交媒体**: 多平台内容自动发布
|
||||
- **通知系统**: 多渠道消息推送
|
||||
|
||||
=== "业务流程"
|
||||
- **订单处理**: 电商订单自动化处理
|
||||
- **发票管理**: 发票生成和跟踪
|
||||
- **库存管理**: 库存监控和补货提醒
|
||||
- **客户关系**: CRM数据同步和更新
|
||||
|
||||
=== "AI增强"
|
||||
- **内容生成**: AI辅助内容创作
|
||||
- **图像处理**: 批量图像分析和处理
|
||||
- **文档分析**: 智能文档解析和提取
|
||||
- **情感分析**: 用户反馈情感分析
|
||||
|
||||
## 🎯 热门模板详解
|
||||
|
||||
### 1. 每日天气邮件推送
|
||||
|
||||
**应用场景**: 每天定时获取天气信息并发送邮件提醒
|
||||
|
||||
**模板代码**:
|
||||
```json
|
||||
{
|
||||
"name": "Daily Weather Email",
|
||||
"nodes": [
|
||||
{
|
||||
"parameters": {
|
||||
"rule": {
|
||||
"interval": [{"field": "cronExpression", "value": "0 8 * * *"}]
|
||||
}
|
||||
},
|
||||
"name": "Schedule Trigger",
|
||||
"type": "n8n-nodes-base.scheduleTrigger",
|
||||
"typeVersion": 1,
|
||||
"position": [240, 300]
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"url": "https://api.openweathermap.org/data/2.5/weather",
|
||||
"qs": {
|
||||
"q": "Beijing",
|
||||
"appid": "={{$credentials.openWeatherMap.apiKey}}",
|
||||
"units": "metric"
|
||||
}
|
||||
},
|
||||
"name": "Get Weather",
|
||||
"type": "n8n-nodes-base.httpRequest",
|
||||
"typeVersion": 1,
|
||||
"position": [460, 300]
|
||||
}
|
||||
],
|
||||
"connections": {
|
||||
"Schedule Trigger": {"main": [["Get Weather"]]}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**配置要点**:
|
||||
- 配置OpenWeatherMap凭证
|
||||
- 设置目标城市
|
||||
- 自定义邮件模板
|
||||
|
||||
### 2. GitHub提交通知Slack
|
||||
|
||||
**应用场景**: GitHub代码提交时自动通知Slack频道
|
||||
|
||||
**核心节点**:
|
||||
- Webhook Trigger (GitHub)
|
||||
- Set Node (数据处理)
|
||||
- Slack Node (消息发送)
|
||||
|
||||
**效果**: 开发团队实时了解代码更新情况
|
||||
|
||||
### 3. Excel报表自动生成
|
||||
|
||||
**应用场景**: 定期从数据库提取数据生成Excel报表
|
||||
|
||||
**工作流程**:定时触发 → 数据库查询 → 数据处理 → Excel生成 → 邮件发送
|
||||
|
||||
## 🛠️ 模板定制指南
|
||||
|
||||
### 基础定制
|
||||
|
||||
1. **修改触发条件**
|
||||
- 调整定时频率
|
||||
- 更改触发事件
|
||||
- 添加条件过滤
|
||||
|
||||
2. **更新数据源**
|
||||
- 替换API端点
|
||||
- 更改数据库连接
|
||||
- 修改文件路径
|
||||
|
||||
3. **调整输出格式**
|
||||
- 自定义邮件模板
|
||||
- 修改通知内容
|
||||
- 更改数据格式
|
||||
|
||||
### 高级定制
|
||||
|
||||
=== "添加错误处理"
|
||||
```javascript
|
||||
// 在关键节点添加错误处理
|
||||
try {
|
||||
const result = await processData();
|
||||
return result;
|
||||
} catch (error) {
|
||||
// 发送错误通知
|
||||
await sendErrorNotification(error);
|
||||
throw error;
|
||||
}
|
||||
```
|
||||
|
||||
=== "性能优化"
|
||||
```javascript
|
||||
// 批量处理优化
|
||||
const batchSize = 10;
|
||||
const results = [];
|
||||
|
||||
for (let i = 0; i < items.length; i += batchSize) {
|
||||
const batch = items.slice(i, i + batchSize);
|
||||
const batchResults = await Promise.all(
|
||||
batch.map(processItem)
|
||||
);
|
||||
results.push(...batchResults);
|
||||
}
|
||||
```
|
||||
|
||||
=== "动态配置"
|
||||
```javascript
|
||||
// 从环境变量读取配置
|
||||
const config = {
|
||||
apiUrl: process.env.API_URL || 'https://api.example.com',
|
||||
batchSize: parseInt(process.env.BATCH_SIZE) || 10,
|
||||
retryCount: parseInt(process.env.RETRY_COUNT) || 3
|
||||
};
|
||||
```
|
||||
|
||||
## 📊 模板分享最佳实践
|
||||
|
||||
### 创建优质模板
|
||||
|
||||
**模板结构**:
|
||||
```yaml
|
||||
模板名称: 简洁明了的名称
|
||||
描述: 详细的功能说明
|
||||
用途: 具体应用场景
|
||||
配置要求:
|
||||
- 必需凭证
|
||||
- 环境变量
|
||||
- 外部依赖
|
||||
使用说明:
|
||||
- 安装步骤
|
||||
- 配置方法
|
||||
- 测试验证
|
||||
注意事项:
|
||||
- 常见问题
|
||||
- 安全提醒
|
||||
- 性能建议
|
||||
```
|
||||
|
||||
### 模板文档模板
|
||||
|
||||
```markdown
|
||||
# 模板名称
|
||||
|
||||
## 功能描述
|
||||
简要描述模板的主要功能和价值
|
||||
|
||||
## 应用场景
|
||||
- 场景1:具体使用情况
|
||||
- 场景2:另一个使用情况
|
||||
|
||||
## 前置要求
|
||||
- [ ] n8n版本要求
|
||||
- [ ] 必需的凭证配置
|
||||
- [ ] 外部服务依赖
|
||||
|
||||
## 安装使用
|
||||
1. 复制模板JSON代码
|
||||
2. 在n8n中粘贴
|
||||
3. 配置必要的凭证
|
||||
4. 调整参数设置
|
||||
5. 测试运行
|
||||
|
||||
## 配置说明
|
||||
### 必需配置
|
||||
- **API密钥**: 用于xxx服务认证
|
||||
- **邮箱凭证**: 用于发送通知邮件
|
||||
|
||||
### 可选配置
|
||||
- **执行频率**: 默认每天执行一次
|
||||
- **数据过滤**: 可添加筛选条件
|
||||
|
||||
## 常见问题
|
||||
### Q: 无法连接API
|
||||
A: 检查API密钥是否正确配置
|
||||
|
||||
### Q: 邮件发送失败
|
||||
A: 验证SMTP设置和凭证配置
|
||||
|
||||
## 版本历史
|
||||
- v1.0: 基础功能实现
|
||||
- v1.1: 添加错误处理
|
||||
- v1.2: 性能优化
|
||||
```
|
||||
|
||||
## 🎨 自定义模板开发
|
||||
|
||||
### 模板设计原则
|
||||
|
||||
1. **通用性**: 模板应该适用于多种类似场景
|
||||
2. **可配置**: 关键参数应该容易修改
|
||||
3. **健壮性**: 包含适当的错误处理
|
||||
4. **文档化**: 提供清晰的使用说明
|
||||
|
||||
### 模板测试清单
|
||||
|
||||
```yaml
|
||||
功能测试:
|
||||
✅ 正常流程执行成功
|
||||
✅ 边界情况处理正确
|
||||
✅ 错误情况优雅处理
|
||||
|
||||
性能测试:
|
||||
✅ 执行时间在合理范围
|
||||
✅ 内存使用控制得当
|
||||
✅ 并发处理能力验证
|
||||
|
||||
兼容性测试:
|
||||
✅ 不同n8n版本兼容
|
||||
✅ 各种环境下可用
|
||||
✅ 依赖服务版本兼容
|
||||
|
||||
文档测试:
|
||||
✅ 安装说明准确完整
|
||||
✅ 配置步骤清晰易懂
|
||||
✅ 故障排除信息有效
|
||||
```
|
||||
|
||||
## 🌟 社区贡献
|
||||
|
||||
### 分享你的模板
|
||||
|
||||
1. **GitHub提交**: 向社区模板库提交PR
|
||||
2. **官方论坛**: 在n8n社区分享经验
|
||||
3. **技术博客**: 写作详细的使用教程
|
||||
4. **视频演示**: 录制操作演示视频
|
||||
|
||||
### 模板评估标准
|
||||
|
||||
| 评估维度 | 优秀 | 良好 | 一般 |
|
||||
|----------|------|------|------|
|
||||
| **功能完整性** | 覆盖完整业务流程 | 核心功能完备 | 基础功能可用 |
|
||||
| **代码质量** | 结构清晰,注释完整 | 逻辑清楚 | 基本可读 |
|
||||
| **错误处理** | 全面的异常处理 | 基本错误处理 | 缺少错误处理 |
|
||||
| **文档质量** | 详细的使用指南 | 基本说明 | 简单描述 |
|
||||
| **通用性** | 高度可配置 | 部分可配置 | 固定场景 |
|
||||
|
||||
---
|
||||
|
||||
通过模板套用,您可以快速构建专业级的自动化工作流,站在巨人的肩膀上创造价值!
|
||||
|
||||
[上一章:避坑指南](pitfalls.md){ .md-button } [下一章:MCP应用](mcp.md){ .md-button .md-button--primary }
|
||||
Reference in New Issue
Block a user