Azure AI Foundry 集成:部署配置 / Structured Outputs Beta / 企业 Entra ID 接入
第六十一章:与 n8n/Zapier 集成:无代码工作流中的 Claude 节点
61.1 无代码自动化平台的价值
n8n 和 Zapier 代表了"工作流自动化"这一类平台的两种形态:
- Zapier 是面向非技术用户的 SaaS 平台,拥有 6000+ 应用集成,操作简单直观,但灵活性有限,深度定制需要付费
- n8n 是开源、可自托管的工作流平台,支持复杂逻辑(条件分支、循环、子工作流)、代码节点(JavaScript/Python),以及完整的 HTTP 请求能力
将 Claude 嵌入这两个平台,能让不懂编程的业务团队直接构建 AI 驱动的自动化流程:客户邮件自动分类回复、表单数据智能提取、报告自动生成发送、多渠道内容发布等。
61.2 在 n8n 中配置 Claude HTTP 节点
n8n 内置了 Anthropic 节点(从 n8n v1.22+ 开始),也可以通过通用 HTTP Request 节点手动配置。本节重点介绍手动配置方式,以便理解底层原理。
61.2.1 创建 Anthropic API 凭据
在 n8n 中:
- 进入 Settings → Credentials → New Credential
- 选择 HTTP Header Auth
- 设置 Header Name 为
x-api-key,Header Value 为你的 Anthropic API Key
61.2.2 配置 HTTP Request 节点调用 Claude
// n8n HTTP Request 节点配置(JSON 视图)
{
"method": "POST",
"url": "https://api.anthropic.com/v1/messages",
"authentication": "headerAuth",
"headers": {
"anthropic-version": "2023-06-01",
"content-type": "application/json"
},
"body": {
"model": "claude-opus-4-5",
"max_tokens": 1024,
"system": "{{ $json.systemPrompt }}",
"messages": [
{
"role": "user",
"content": "{{ $json.userMessage }}"
}
]
},
"options": {
"response": {
"response": {
"responseFormat": "json"
}
}
}
}
在 n8n 的 GUI 中配置步骤:
- 拖入 HTTP Request 节点
- Method:
POST - URL:
https://api.anthropic.com/v1/messages - Authentication: 选择之前创建的 Header Auth 凭据
- Headers 标签页:
anthropic-version:2023-06-01Content-Type:application/json
- Body 标签页 → JSON:粘贴上方 body 内容
- 使用
{{ $json.fieldName }}引用上游节点的数据
61.2.3 提取 Claude 响应内容
Claude API 返回的响应结构为:
{
"id": "msg_01xxx",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "这里是 Claude 的回复内容..."
}
],
"stop_reason": "end_turn",
"usage": {
"input_tokens": 42,
"output_tokens": 128
}
}
在 n8n 中使用 Set 节点 提取文本内容:
// Set 节点中的表达式
{{ $json.content[0].text }}
或使用 Code 节点 进行更复杂的处理:
// Code 节点
const response = $input.first().json;
const text = response.content[0].text;
const inputTokens = response.usage.input_tokens;
const outputTokens = response.usage.output_tokens;
return [{
json: {
claudeResponse: text,
tokensUsed: inputTokens + outputTokens,
cost: ((inputTokens * 3 + outputTokens * 15) / 1_000_000).toFixed(6)
}
}];
61.3 构建实用的 n8n Claude 工作流
61.3.1 工作流一:Gmail 邮件智能分类与自动回复
触发器:Gmail Trigger(新邮件到达)
↓
Set 节点:构建分类 Prompt
↓
HTTP Request:调用 Claude(分类)
↓
IF 节点:根据分类分支
├── 技术支持 → 查询知识库 → Claude 生成回复 → Gmail Reply
├── 销售询价 → 通知 Slack → 创建 CRM 记录
└── 投诉 → 标记高优先级 → 通知主管 → 人工处理
分类节点的 Claude 配置:
// HTTP Request 节点 - Body
{
"model": "claude-haiku-4-5",
"max_tokens": 64,
"messages": [
{
"role": "user",
"content": "将以下邮件分类为:technical_support/sales_inquiry/complaint/general。只输出分类名称,不要解释。\n\n邮件主题:{{ $json.subject }}\n邮件内容:{{ $json.snippet }}"
}
]
}
回复生成节点:
{
"model": "claude-opus-4-5",
"max_tokens": 512,
"system": "你是公司的技术支持专员。根据知识库内容(如有提供)生成专业、友好的回复邮件。用与来信相同的语言回复。",
"messages": [
{
"role": "user",
"content": "客户邮件:\n{{ $json.emailBody }}\n\n知识库参考:\n{{ $json.knowledgeBaseResult }}\n\n请生成回复邮件正文(不要包含邮件头和签名):"
}
]
}
61.3.2 工作流二:Webhook 触发的文档处理流水线
触发器:Webhook(接收 POST 请求,携带文档 URL)
↓
HTTP Request:下载文档内容
↓
Code 节点:文本预处理(去除 HTML 标签、截断到 50000 字符)
↓
HTTP Request:Claude 提取结构化信息
↓
Set 节点:解析 Claude 的 JSON 输出
↓
Google Sheets:写入提取的数据
↓
Webhook Response:返回处理结果
Claude 提取节点配置:
{
"model": "claude-opus-4-5",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": "从以下文档中提取关键信息,严格按照 JSON 格式输出,不要包含任何其他文字:\n\n文档内容:\n{{ $json.documentText }}\n\n需要提取的字段:\n- company_name: 公司名称\n- contact_person: 联系人\n- phone: 联系电话\n- email: 邮箱地址\n- product_mentioned: 提到的产品列表(数组)\n- key_requirements: 关键需求(最多3条,数组)\n- urgency: 紧迫程度(high/medium/low)\n\n输出示例:{\"company_name\": \"...\", ...}"
}
]
}
Code 节点解析 JSON 输出:
const claudeText = $input.first().json.content[0].text;
// Claude 有时会在 JSON 前后加上说明文字,需要提取 JSON 部分
const jsonMatch = claudeText.match(/\{[\s\S]*\}/);
if (!jsonMatch) {
throw new Error(`Claude 未返回有效 JSON: ${claudeText}`);
}
const extracted = JSON.parse(jsonMatch[0]);
return [{ json: extracted }];
61.3.3 工作流三:定时内容生成与多渠道发布
触发器:Schedule(每天 9:00 AM)
↓
HTTP Request:获取今日热点话题(RSS/API)
↓
HTTP Request:Claude 生成多格式内容
↓
Code 节点:解析不同格式的内容
↓
并行执行:
├── Twitter API:发布简短版本(280字符)
├── LinkedIn API:发布专业版本
└── Notion API:存档完整版本
Claude 多格式生成节点:
{
"model": "claude-opus-4-5",
"max_tokens": 2048,
"messages": [
{
"role": "user",
"content": "基于以下话题,生成三种格式的内容。严格按照 JSON 格式输出。\n\n话题:{{ $json.topic }}\n背景信息:{{ $json.background }}\n\n输出格式:\n{\n \"twitter\": \"Twitter 帖子(最多280字符,可含 hashtag)\",\n \"linkedin\": \"LinkedIn 长文(300-500字,专业语气,可含换行)\",\n \"full_article\": \"完整文章(800-1200字,包含标题、引言、正文、结语)\"\n}"
}
]
}
61.4 在 Zapier 中集成 Claude
Zapier 通过 Webhooks by Zapier 或 HTTP 操作(需要 Zapier Premium)调用 Claude API。
61.4.1 使用 Webhooks by Zapier 调用 Claude
Zap 结构:
触发器:你的应用(如 Typeform 新表单提交)
↓
操作:Webhooks by Zapier - Custom Request
↓
操作:Formatter by Zapier - Text(提取 Claude 回复)
↓
操作:下游应用(Gmail/Slack/Google Sheets 等)
Webhooks by Zapier 节点配置:
-
Method: POST
-
URL:
https://api.anthropic.com/v1/messages -
Headers:
x-api-key: sk-ant-xxxxxxxxxx anthropic-version: 2023-06-01 Content-Type: application/json -
Data(Raw Body,JSON 格式):
{ "model": "claude-haiku-4-5", "max_tokens": 512, "messages": [ { "role": "user", "content": "请总结以下客户反馈的核心问题(不超过3句话):__feedback_content__" } ] }注意:Zapier 中使用双下划线包裹变量名(
__fieldName__)引用上一步的字段。
提取回复的 Formatter 配置:
- Transform: Extract Pattern
- Input: 上一步 Webhook 的
body字段 - Pattern:
"text":"(.*?)"(使用正则提取 text 字段)
或者使用 Zapier 的 Code by Zapier(Python/JavaScript):
// Zapier Code by Zapier - JavaScript
const responseBody = JSON.parse(inputData.webhookBody);
const claudeText = responseBody.content[0].text;
return {
claudeResponse: claudeText,
inputTokens: responseBody.usage.input_tokens,
outputTokens: responseBody.usage.output_tokens
};
61.4.2 Zapier 工作流示例:Typeform → Claude 分析 → Google Sheets
触发器:Typeform - New Entry(新客户调研表单)
↓
操作:Webhooks by Zapier(POST 到 Claude API)
- 分析表单答案,提取关键痛点和优先级
↓
操作:Code by Zapier(解析 Claude JSON 输出)
↓
操作:Google Sheets - Create Spreadsheet Row
- 写入提取的结构化数据
↓
操作:Slack - Send Channel Message
- 通知产品团队有新的高优先级反馈
61.5 Webhook 触发器:让外部事件驱动 Claude
n8n 的 Webhook 触发器允许外部系统主动触发 Claude 处理。
61.5.1 n8n Webhook 接收 + Claude 处理
// 工作流:HTTP POST 请求 → Claude 分析 → 返回结果
POST https://your-n8n.com/webhook/analyze-text
Content-Type: application/json
{
"text": "需要分析的文本内容",
"analysis_type": "sentiment|summary|extraction",
"language": "zh"
}
n8n 工作流节点:
- Webhook 触发器:监听 POST 请求,记录 Body
- Switch 节点:根据
analysis_type分支 - HTTP Request(Claude):对应不同 analysis_type 使用不同 prompt
- Set 节点:格式化输出
- Webhook Response 节点:返回结果给调用方
// Webhook Response 的返回内容(Set 节点配置)
{
"success": true,
"result": "{{ $json.claudeResponse }}",
"tokens_used": "{{ $json.tokensUsed }}",
"processing_time_ms": "{{ $json.processingTime }}"
}
61.6 错误处理与稳定性
61.6.1 n8n 的错误处理节点
HTTP Request(Claude)
↓ 成功
Set 节点(处理结果)
↓ 失败(Error Trigger)
↓
IF 节点:检查错误类型
├── 429 Rate Limit → Wait 节点(等待 60s)→ 重试
├── 500 Server Error → 发送告警到 Slack
└── 其他 → 记录日志 → 跳过处理
Rate Limit 处理的 Code 节点:
// 检查是否是速率限制错误
const statusCode = $input.first().json.statusCode;
const retryAfter = $input.first().json.headers?.['retry-after'];
if (statusCode === 429) {
const waitSeconds = retryAfter ? parseInt(retryAfter) : 60;
return [{
json: {
shouldRetry: true,
waitMs: waitSeconds * 1000,
message: `Rate limited, waiting ${waitSeconds}s`
}
}];
}
return [{ json: { shouldRetry: false, error: $input.first().json } }];
61.6.2 成本控制:按需选择模型
// Code 节点:根据任务复杂度选择模型
const taskType = $input.first().json.taskType;
const textLength = $input.first().json.text?.length || 0;
let model = "claude-haiku-4-5"; // 默认用最便宜的模型
if (taskType === "complex_analysis" || textLength > 10000) {
model = "claude-opus-4-5";
} else if (taskType === "summarization" || taskType === "translation") {
model = "claude-sonnet-4-5";
}
return [{
json: {
...$input.first().json,
selectedModel: model
}
}];
61.7 最佳实践
提示词管理
在 n8n 中,将系统提示词存储在专用的数据节点或环境变量中,而非硬编码在每个节点里:
// n8n 环境变量(Settings → Environment Variables)
// CLAUDE_SYSTEM_PROMPT_CUSTOMER_SERVICE = "你是..."
// CLAUDE_SYSTEM_PROMPT_ANALYTICS = "你是数据分析..."
// 在 Code 节点中读取
const systemPrompt = $env.CLAUDE_SYSTEM_PROMPT_CUSTOMER_SERVICE;
输出验证
// 验证 Claude 输出是否为有效 JSON
function safeParseClaudeJson(text) {
// 尝试直接解析
try {
return JSON.parse(text);
} catch (e) {}
// 尝试提取 JSON 块
const jsonMatch = text.match(/```json\n?([\s\S]*?)\n?```/) ||
text.match(/\{[\s\S]*\}/);
if (jsonMatch) {
try {
return JSON.parse(jsonMatch[1] || jsonMatch[0]);
} catch (e) {}
}
throw new Error(`无法解析 Claude 输出为 JSON: ${text.substring(0, 200)}`);
}
小结
n8n 和 Zapier 通过 HTTP Request 节点将 Claude API 整合进可视化工作流。关键配置要素包括:Header Auth 凭据(x-api-key)、anthropic-version 请求头,以及使用表达式(n8n 的 {{ $json.field }},Zapier 的 __field__)动态注入上下文。实用工作流场景涵盖邮件自动分类回复、文档结构化提取、多格式内容生成。生产化要点是:速率限制重试、按任务复杂度路由模型、Claude 输出的 JSON 安全解析,以及集中管理系统提示词。