8
n8n 中文网amn8n.com

API速率限制与认证FAQ测试

高级

这是一个Document Extraction, AI Summarization领域的自动化工作流,包含 19 个节点。主要使用 If, Set, Code, Gmail, Slack 等节点。 使用GPT-4o-mini、Google表格和Slack提醒自动化API常见问题质量测试

前置要求
  • Google 账号和 Gmail API 凭证
  • Slack Bot Token 或 Webhook URL
  • Google Sheets API 凭证
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "9F7rxHKt3weSqZaD",
  "meta": {
    "instanceId": "8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177",
    "templateCredsSetupCompleted": true
  },
  "name": "API 速率限制与认证 FAQ 测试",
  "tags": [
    {
      "id": "DWhGhh4ifGbElCsl",
      "name": "Quality Assurance",
      "createdAt": "2025-11-03T11:37:00.082Z",
      "updatedAt": "2025-11-03T11:37:00.082Z"
    },
    {
      "id": "OaQsaj1GDsV2DDag",
      "name": "AI",
      "createdAt": "2025-11-03T11:37:00.112Z",
      "updatedAt": "2025-11-03T11:37:00.112Z"
    },
    {
      "id": "u5sfzrVZ11a9nsuB",
      "name": "Documentation",
      "createdAt": "2025-11-03T11:37:00.152Z",
      "updatedAt": "2025-11-03T11:37:00.152Z"
    }
  ],
  "nodes": [
    {
      "id": "35aa638c-cbaa-4125-877d-68560d49de34",
      "name": "当点击\"执行工作流\"时",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -944,
        3312
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "86fc4b54-b1b5-4de7-b98d-22abd8f4ba25",
      "name": "部分:数据输入",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -848,
        3088
      ],
      "parameters": {
        "color": 7,
        "width": 580,
        "content": "## 📥 数据输入"
      },
      "typeVersion": 1
    },
    {
      "id": "dc53c187-0fc4-45e0-a415-13acc67a41f4",
      "name": "部分:AI 评估",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -128,
        3088
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 144,
        "content": "## 🤖 AI 评估"
      },
      "typeVersion": 1
    },
    {
      "id": "861caa0a-4607-4a31-9682-a193652fb9b1",
      "name": "部分:存储",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        480,
        3088
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "content": "## 💾 结果存储"
      },
      "typeVersion": 1
    },
    {
      "id": "6e69317c-4cdb-4871-b2e4-0f7dc8022fe5",
      "name": "部分:提醒",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1152,
        3040
      ],
      "parameters": {
        "color": 7,
        "width": 540,
        "content": "## 📢 通知"
      },
      "typeVersion": 1
    },
    {
      "id": "073ad6bd-87e2-409d-ab43-2546907c1aef",
      "name": "📋 工作流概览1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1536,
        3056
      ],
      "parameters": {
        "width": 420,
        "height": 552,
        "content": "## 工作原理"
      },
      "typeVersion": 1
    },
    {
      "id": "aa25afd0-e903-4352-a809-a995941dbee0",
      "name": "⚙️ 配置1",
      "type": "n8n-nodes-base.set",
      "position": [
        -736,
        3312
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "config_sheet_id",
              "name": "sheet_id",
              "type": "string",
              "value": "1ABC_REPLACE_WITH_YOUR_SHEET_ID_xyz123"
            },
            {
              "id": "config_threshold_critical",
              "name": "threshold_critical",
              "type": "number",
              "value": 5
            },
            {
              "id": "config_threshold_warning",
              "name": "threshold_warning",
              "type": "number",
              "value": 7
            },
            {
              "id": "config_threshold_good",
              "name": "threshold_good",
              "type": "number",
              "value": 8
            },
            {
              "id": "config_slack_channel",
              "name": "slack_channel_id",
              "type": "string",
              "value": "C09GNB90TED"
            },
            {
              "id": "config_batch_size",
              "name": "batch_size",
              "type": "number",
              "value": 10
            },
            {
              "id": "config_test_sheet",
              "name": "test_sheet_name",
              "type": "string",
              "value": "TestSet"
            },
            {
              "id": "config_results_sheet",
              "name": "results_sheet_name",
              "type": "string",
              "value": "Results"
            },
            {
              "id": "config_history_sheet",
              "name": "history_sheet_name",
              "type": "string",
              "value": "History"
            },
            {
              "id": "run_id",
              "name": "run_id",
              "type": "string",
              "value": "={{ $now.format('yyyyMMdd-HHmmss') }}"
            }
          ]
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "653f3c13-0665-48ad-93a3-ed24e860518f",
      "name": "📖 获取 FAQ1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -512,
        3312
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "={{ $json.test_sheet_name }}"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.sheet_id }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "s4dP1fNuVZ2gWvs3",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "e27c8068-5afc-4cd7-8204-6ba2a43e5b48",
      "name": "🔍 验证和清理数据1",
      "type": "n8n-nodes-base.code",
      "position": [
        -288,
        3312
      ],
      "parameters": {
        "jsCode": "// Validate and clean FAQ data\nconst items = $input.all();\nconst config = items[0].json;\nconst cleanedItems = [];\n\nfor (let i = 0; i < items.length; i++) {\n  const item = items[i];\n  \n  // Skip if it's the config item or header row\n  if (item.json.sheet_id || i === 0) continue;\n  \n  // Get question and answer (handle different column name formats)\n  const question = item.json.Question || item.json.question || item.json.A || '';\n  const answer = item.json.Answer || item.json.answer || item.json.B || '';\n  \n  // Skip empty rows\n  if (!question || !answer || question.trim() === '' || answer.trim() === '') {\n    continue;\n  }\n  \n  // Create cleaned item\n  cleanedItems.push({\n    json: {\n      question: question.trim(),\n      answer: answer.trim(),\n      row_number: i,\n      run_id: config.run_id,\n      sheet_id: config.sheet_id,\n      batch_size: config.batch_size,\n      threshold_critical: config.threshold_critical,\n      threshold_warning: config.threshold_warning,\n      threshold_good: config.threshold_good\n    }\n  });\n}\n\nif (cleanedItems.length === 0) {\n  throw new Error('No valid FAQ entries found in the sheet. Please check your data format.');\n}\n\nconsole.log(`Validated ${cleanedItems.length} FAQ entries for processing`);\nreturn cleanedItems;"
      },
      "typeVersion": 2
    },
    {
      "id": "5db219e2-af99-4386-b3f9-c53a79cc9cf6",
      "name": "🤖 AI 评估器1",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -64,
        3312
      ],
      "parameters": {
        "text": "=You are an expert technical documentation reviewer specializing in API documentation, authentication systems, and rate limiting policies.\n\n**Task:** Evaluate the quality and completeness of this FAQ entry.\n\n**Question:** {{ $json.question }}\n\n**Answer:** {{ $json.answer }}\n\n**Evaluation Criteria:**\n1. **Completeness (0-3 points)**: Does it address edge cases and scenarios?\n2. **Clarity (0-3 points)**: Is the explanation clear and unambiguous?\n3. **Technical Accuracy (0-2 points)**: Are technical details correct?\n4. **Actionability (0-2 points)**: Can users act on this information?\n\n**Output Requirements:**\nProvide ONLY valid JSON with this exact structure:\n{\n  \"score\": <number 0-10>,\n  \"explanation\": \"<brief one-sentence explanation>\",\n  \"strengths\": \"<what's good about this answer>\",\n  \"improvements\": \"<specific suggestions for improvement>\"\n}\n\n**Important:** Return ONLY the JSON object, no additional text.",
        "options": {
          "systemMessage": "You are a technical documentation quality analyst. Provide objective, constructive evaluations in valid JSON format only."
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "9bc66b99-cb86-4c3e-abc4-fa6fa8685e29",
      "name": "Azure OpenAI1",
      "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
      "position": [
        16,
        3536
      ],
      "parameters": {
        "model": "gpt-4o-mini",
        "options": {
          "maxTokens": 500,
          "temperature": 0.3
        }
      },
      "credentials": {
        "azureOpenAiApi": {
          "id": "C3WzT18XqF8OdVM6",
          "name": "Azure Open AI account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e2a58c64-1552-43ae-a7df-2bf665ea52a1",
      "name": "📊 解析和丰富结果1",
      "type": "n8n-nodes-base.code",
      "position": [
        304,
        3312
      ],
      "parameters": {
        "jsCode": "// Parse and enrich AI evaluation results with error handling\nconst items = $input.all();\nconst enrichedItems = [];\n\nfor (const item of items) {\n  try {\n    // Get the AI output\n    const aiOutput = item.json.output || '{}';\n    \n    // Try to parse JSON from the output\n    let evaluation;\n    try {\n      // Handle case where output might have markdown code blocks\n      const jsonMatch = aiOutput.match(/\\{[\\s\\S]*\\}/);\n      const jsonString = jsonMatch ? jsonMatch[0] : aiOutput;\n      evaluation = JSON.parse(jsonString);\n    } catch (parseError) {\n      console.error('Failed to parse AI response:', aiOutput);\n      evaluation = {\n        score: 0,\n        explanation: 'AI response parsing failed',\n        strengths: 'N/A',\n        improvements: 'Error in evaluation - needs manual review'\n      };\n    }\n    \n    // Determine severity level\n    let severity = 'good';\n    let severity_emoji = '✅';\n    \n    if (evaluation.score < item.json.threshold_critical) {\n      severity = 'critical';\n      severity_emoji = '🔴';\n    } else if (evaluation.score < item.json.threshold_warning) {\n      severity = 'warning';\n      severity_emoji = '⚠️';\n    } else if (evaluation.score < item.json.threshold_good) {\n      severity = 'acceptable';\n      severity_emoji = '🟡';\n    }\n    \n    // Create enriched item\n    enrichedItems.push({\n      json: {\n        // Original data\n        question: item.json.question,\n        answer: item.json.answer,\n        row_number: item.json.row_number,\n        run_id: item.json.run_id,\n        \n        // Evaluation results\n        score: evaluation.score || 0,\n        explanation: evaluation.explanation || 'No explanation provided',\n        strengths: evaluation.strengths || 'N/A',\n        improvements: evaluation.improvements || 'N/A',\n        \n        // Metadata\n        severity: severity,\n        severity_emoji: severity_emoji,\n        timestamp: new Date().toISOString(),\n        evaluated_at: new Date().toLocaleString('en-US', { \n          timeZone: 'UTC',\n          dateStyle: 'medium',\n          timeStyle: 'short'\n        }),\n        \n        // For filtering\n        needs_attention: evaluation.score < item.json.threshold_warning,\n        \n        // Config passthrough\n        sheet_id: item.json.sheet_id\n      }\n    });\n  } catch (error) {\n    console.error('Error processing item:', error);\n    // Add error item to results\n    enrichedItems.push({\n      json: {\n        question: item.json.question || 'Unknown',\n        answer: item.json.answer || 'Unknown',\n        score: 0,\n        explanation: `Processing error: ${error.message}`,\n        severity: 'error',\n        severity_emoji: '❌',\n        timestamp: new Date().toISOString(),\n        needs_attention: true,\n        sheet_id: item.json.sheet_id,\n        run_id: item.json.run_id\n      }\n    });\n  }\n}\n\nconsole.log(`Processed ${enrichedItems.length} evaluations`);\nreturn enrichedItems;"
      },
      "typeVersion": 2
    },
    {
      "id": "ad83a4b8-4cdc-40a3-b5de-49fb85ac205c",
      "name": "💾 保存详细结果1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        528,
        3312
      ],
      "parameters": {
        "columns": {
          "value": {
            "Score": "={{ $json.score }}",
            "Run ID": "={{ $json.run_id }}",
            "Question": "={{ $json.question }}",
            "Severity": "={{ $json.severity_emoji }} {{ $json.severity.toUpperCase() }}",
            "Strengths": "={{ $json.strengths }}",
            "Timestamp": "={{ $json.evaluated_at }}",
            "Explanation": "={{ $json.explanation }}",
            "Improvements": "={{ $json.improvements }}"
          },
          "mappingMode": "defineBelow"
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Results"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.sheet_id }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "s4dP1fNuVZ2gWvs3",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "853e8bba-0d8e-413a-b6fb-959e8ea1896c",
      "name": "📈 生成摘要报告1",
      "type": "n8n-nodes-base.code",
      "position": [
        752,
        3312
      ],
      "parameters": {
        "jsCode": "// Generate comprehensive summary report\nconst items = $input.all();\n\nif (items.length === 0) {\n  return [{\n    json: {\n      error: 'No items to summarize'\n    }\n  }];\n}\n\n// Calculate statistics\nconst scores = items.map(item => item.json.score);\nconst totalFaqs = scores.length;\nconst avgScore = (scores.reduce((a, b) => a + b, 0) / totalFaqs).toFixed(2);\nconst maxScore = Math.max(...scores);\nconst minScore = Math.min(...scores);\n\n// Count by severity\nconst critical = items.filter(item => item.json.severity === 'critical').length;\nconst warning = items.filter(item => item.json.severity === 'warning').length;\nconst acceptable = items.filter(item => item.json.severity === 'acceptable').length;\nconst good = items.filter(item => item.json.severity === 'good').length;\n\n// Calculate pass rate (score >= 7)\nconst passCount = scores.filter(s => s >= 7).length;\nconst passRate = ((passCount / totalFaqs) * 100).toFixed(1);\n\n// Get config from first item\nconst config = items[0].json;\n\n// Find top 3 worst performing FAQs\nconst worstFaqs = items\n  .sort((a, b) => a.json.score - b.json.score)\n  .slice(0, 3)\n  .map(item => ({\n    question: item.json.question.substring(0, 100),\n    score: item.json.score,\n    improvements: item.json.improvements\n  }));\n\n// Create summary\nconst summary = {\n  json: {\n    // Summary stats\n    run_id: config.run_id,\n    timestamp: new Date().toISOString(),\n    total_faqs: totalFaqs,\n    average_score: parseFloat(avgScore),\n    max_score: maxScore,\n    min_score: minScore,\n    pass_rate: parseFloat(passRate),\n    \n    // Severity breakdown\n    critical_count: critical,\n    warning_count: warning,\n    acceptable_count: acceptable,\n    good_count: good,\n    \n    // Status\n    overall_status: critical > 0 ? 'CRITICAL' : warning > 0 ? 'NEEDS_ATTENTION' : 'HEALTHY',\n    \n    // Worst performers\n    worst_performers: JSON.stringify(worstFaqs),\n    \n    // For display\n    summary_text: `📊 FAQ Quality Report\\n\\n` +\n      `📈 Overall Score: ${avgScore}/10 (${passRate}% pass rate)\\n` +\n      `📝 Total FAQs Evaluated: ${totalFaqs}\\n\\n` +\n      `🎯 Severity Breakdown:\\n` +\n      `  🔴 Critical: ${critical}\\n` +\n      `  ⚠️ Warning: ${warning}\\n` +\n      `  🟡 Acceptable: ${acceptable}\\n` +\n      `  ✅ Good: ${good}\\n\\n` +\n      `📉 Score Range: ${minScore} - ${maxScore}`,\n    \n    // For alerts\n    needs_alert: critical > 0 || warning > 0,\n    sheet_id: config.sheet_id,\n    \n    // Pass through all items for next node\n    all_results: items\n  }\n};\n\nconsole.log('Summary generated:', summary.json.summary_text);\nreturn [summary];"
      },
      "typeVersion": 2
    },
    {
      "id": "0cf75d4f-f2e1-47ca-91f1-4ddffd9ff987",
      "name": "📊 保存到历史1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        976,
        3312
      ],
      "parameters": {
        "columns": {
          "value": {
            "Good": "={{ $json.good_count }}",
            "Run ID": "={{ $json.run_id }}",
            "Status": "={{ $json.overall_status }}",
            "Warning": "={{ $json.warning_count }}",
            "Critical": "={{ $json.critical_count }}",
            "Pass Rate": "={{ $json.pass_rate }}%",
            "Timestamp": "={{ $json.timestamp }}",
            "Acceptable": "={{ $json.acceptable_count }}",
            "Total FAQs": "={{ $json.total_faqs }}",
            "Average Score": "={{ $json.average_score }}"
          },
          "mappingMode": "defineBelow"
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "History"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.sheet_id }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "s4dP1fNuVZ2gWvs3",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "5390e894-108c-462c-8b4e-85fa481a631c",
      "name": "⚠️ 检查是否需要提醒1",
      "type": "n8n-nodes-base.if",
      "position": [
        1200,
        3312
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "boolean": [
            {
              "value1": "={{ $json.needs_alert }}",
              "value2": true
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "24cdee69-2017-47ba-961f-198a6bea352f",
      "name": "💬 发送 Slack 提醒1",
      "type": "n8n-nodes-base.slack",
      "position": [
        1424,
        3232
      ],
      "webhookId": "32545389-7dfc-490c-b4e4-933298983f3e",
      "parameters": {
        "text": "=🚨 *FAQ Quality Alert* 🚨\n\n{{ $json.summary_text }}\n\n---\n\n⚠️ *Action Required:*\n{{ $json.critical_count > 0 ? '🔴 ' + $json.critical_count + ' CRITICAL issues need immediate attention\\n' : '' }}{{ $json.warning_count > 0 ? '⚠️ ' + $json.warning_count + ' warnings should be reviewed\\n' : '' }}\n📋 View full details: https://docs.google.com/spreadsheets/d/{{ $json.sheet_id }}/edit#gid=0\n\n*Run ID:* `{{ $json.run_id }}`",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "C09GNB90TED"
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "id": "rNqvWj9TfChPVRYY",
          "name": "Slack account vivek"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "4e661beb-0009-4de3-8388-fb7221b9afad",
      "name": "✅ 完成摘要1",
      "type": "n8n-nodes-base.set",
      "position": [
        1632,
        3408
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "complete_message",
              "name": "completion_message",
              "type": "string",
              "value": "=✅ FAQ Quality Check Complete!\n\nRun ID: {{ $json.run_id }}\nTotal FAQs Evaluated: {{ $json.total_faqs }}\nAverage Score: {{ $json.average_score }}/10\nPass Rate: {{ $json.pass_rate }}%\n\nResults saved to Google Sheets.\n{{ $json.needs_alert ? 'Alerts sent to team.' : 'No alerts needed - all FAQs meeting quality standards!' }}"
            },
            {
              "id": "results_url",
              "name": "results_url",
              "type": "string",
              "value": "=https://docs.google.com/spreadsheets/d/{{ $json.sheet_id }}/edit"
            }
          ]
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "e93ce33f-4bbe-476b-82f3-e122987bae3a",
      "name": "发送消息1",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1872,
        3312
      ],
      "webhookId": "0e92bde1-6732-420d-a95e-94378cfee529",
      "parameters": {
        "sendTo": "info@example.com",
        "message": "={{ $json.text }}",
        "options": {},
        "subject": "={{ $json.text }}",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "RchiXdmY8WaQhOSJ",
          "name": "Gmail account"
        }
      },
      "typeVersion": 2.1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "3fb46229-1e78-4bb1-9e72-90cfba38bf71",
  "connections": {
    "Azure OpenAI1": {
      "ai_languageModel": [
        [
          {
            "node": "🤖 AI Evaluator1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "📖 Fetch FAQs1": {
      "main": [
        [
          {
            "node": "🔍 Validate & Clean Data1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "🤖 AI Evaluator1": {
      "main": [
        [
          {
            "node": "📊 Parse & Enrich Results1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "⚙️ Configuration1": {
      "main": [
        [
          {
            "node": "📖 Fetch FAQs1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "📊 Save to History1": {
      "main": [
        [
          {
            "node": "⚠️ Check if Alerts Needed1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "💬 Send Slack Alert1": {
      "main": [
        [
          {
            "node": "✅ Completion Summary1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "✅ Completion Summary1": {
      "main": [
        [
          {
            "node": "Send a message1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "💾 Save Detailed Results1": {
      "main": [
        [
          {
            "node": "📈 Generate Summary Report1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "🔍 Validate & Clean Data1": {
      "main": [
        [
          {
            "node": "🤖 AI Evaluator1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "📊 Parse & Enrich Results1": {
      "main": [
        [
          {
            "node": "💾 Save Detailed Results1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "📈 Generate Summary Report1": {
      "main": [
        [
          {
            "node": "📊 Save to History1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "⚠️ Check if Alerts Needed1": {
      "main": [
        [
          {
            "node": "💬 Send Slack Alert1",
            "type": "main",
            "index": 0
          },
          {
            "node": "✅ Completion Summary1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "✅ Completion Summary1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Execute workflow’": {
      "main": [
        [
          {
            "node": "⚙️ Configuration1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

高级 - 文档提取, AI 摘要总结

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量19
分类2
节点类型10
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
Rahul Joshi

Rahul Joshi

@rahul08

Rahul Joshi is a seasoned technology leader specializing in the n8n automation tool and AI-driven workflow automation. With deep expertise in building open-source workflow automation and self-hosted automation platforms, he helps organizations eliminate manual processes through intelligent n8n ai agent automation solutions.

外部链接
在 n8n.io 查看

分享此工作流