使用 n8n 和 OpenRouter 构建 AI 驱动的 CRM 聊天助手
发布: (2026年3月10日 GMT+8 18:50)
4 分钟阅读
原文: Dev.to
Source: Dev.to
技术栈
- n8n – 自托管工作流自动化
- OpenRouter – AI 模型 API 网关
- CRM – 任意具备 REST API 的 CRM
- Docker – 容器运行时
- Claude Sonnet 4.6(通过 OpenRouter) – 为代理提供动力的 LLM
架构
[Employee] → n8n Chat UI → [AI Agent (Claude via OpenRouter)]
├── Tool: Search API
└── Tool: Search API
↓
[CRM API]
↓
[AI generates response in Japanese]
↓
[Employee receives answer]关键思路是让 AI 代理根据用户的自然语言查询决定调用哪个 CRM API。
第 1 步 — 使用 Docker 运行 n8n
在本地启动 n8n 只需一条命令:
docker run -d \
--name n8n \
--restart always \
-p 5678:5678 \
-e WEBHOOK_URL=http://YOUR_IP:5678/ \
-e N8N_EDITOR_BASE_URL=http://YOUR_IP:5678/ \
-v n8n_data:/home/node/.n8n \
n8nio/n8n关键收获
- 认证方式已更改 – 旧指南中提到的
N8N_BASIC_AUTH_*已废弃。n8n 现在在首次启动时通过网页 UI 使用基于邮箱的账户设置。 - 局域网访问需要正确的环境变量 – 若未设置
WEBHOOK_URL和N8N_EDITOR_BASE_URL,聊天 UI 可能会调用localhost,导致其他网络用户出现 CORS 错误。
第 2 步 — 构建 AI 代理
与下面这种简单流水线不同:
Chat → HTTP Request → AI我实现了一个 具备工具的 AI 代理,让 LLM 自主选择正确的 CRM 端点。
工作流结构:
Chat Trigger → AI Agent
├── Tool: search
└── Tool: search每个工具调用特定的 CRM 端点。动态查询示例:
{{ $json.query }}第 3 步 — 系统提示(最关键的部分)
系统提示 决定了代理的可靠性。请仔细编写,以:
- 定义代理的角色和能力。
- 列出可用工具及其预期的输入/输出。
- 设置防护措施(例如,“绝不要在未进行摘要的情况下返回原始数据”。)
(为简洁起见,具体提示文本已省略。)
第 4 步 — 在局域网共享
获取本机 IP 地址:
ipconfig getifaddr en0将聊天链接分享给团队成员:
http://YOUR_IP:5678/webhook/xxxxx/chat为安全起见启用 Basic Auth。
挑战与经验教训
Token 限制爆炸
对 CRM 进行无过滤查询会返回整个数据集,导致 超过 800 万 token。
解决方案
- 强制使用搜索条件。
- 阻止空查询。
成本
| 组件 | 成本 |
|---|---|
| n8n(自托管) | $0 |
| OpenRouter(Claude Sonnet) | ~ $26 / 月 |
| 基础设施 | $0 |
支持大约 10 位用户 × 每日 5 次查询。
结论
使用 n8n + OpenRouter,我在 不到一天的时间 内构建了可用的 AI CRM 助手。
最大收获是:系统提示的设计至关重要。有了合适的防护措施,你可以将任何基于 API 的系统转变为 自然语言接口。