Pruebas de FAQ sobre límites de velocidad y autenticación de API

Avanzado

Este es unDocument Extraction, AI Summarizationflujo de automatización del dominio deautomatización que contiene 19 nodos.Utiliza principalmente nodos como If, Set, Code, Gmail, Slack. Usar GPT-4o-mini, Google Sheets y recordatorios de Slack para automatizar las pruebas de calidad de preguntas frecuentes de la API

Requisitos previos
  • Cuenta de Google y credenciales de API de Gmail
  • Bot Token de Slack o URL de Webhook
  • Credenciales de API de Google Sheets
  • Clave de API de OpenAI
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "id": "9F7rxHKt3weSqZaD",
  "meta": {
    "instanceId": "8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177",
    "templateCredsSetupCompleted": true
  },
  "name": "API Rate Limit & Auth FAQ Test",
  "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": "Al hacer clic en 'Ejecutar flujo de trabajo'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -944,
        3312
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "86fc4b54-b1b5-4de7-b98d-22abd8f4ba25",
      "name": "Sección: Entrada de Datos",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -848,
        3088
      ],
      "parameters": {
        "color": 7,
        "width": 580,
        "content": "## 📥 Data Input\n\nFetches FAQ data from Google Sheets and validates it before processing."
      },
      "typeVersion": 1
    },
    {
      "id": "dc53c187-0fc4-45e0-a415-13acc67a41f4",
      "name": "Sección: Evaluación de IA",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -128,
        3088
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 144,
        "content": "## 🤖 AI Evaluation\n\nScores each FAQ using GPT-4o-mini based on completeness, clarity, technical accuracy, and actionability."
      },
      "typeVersion": 1
    },
    {
      "id": "861caa0a-4607-4a31-9682-a193652fb9b1",
      "name": "Sección: Almacenamiento",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        480,
        3088
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "content": "## 💾 Results Storage\n\nSaves detailed scores to Results sheet and aggregated metrics to History sheet for trend tracking."
      },
      "typeVersion": 1
    },
    {
      "id": "6e69317c-4cdb-4871-b2e4-0f7dc8022fe5",
      "name": "Sección: Alertas",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1152,
        3040
      ],
      "parameters": {
        "color": 7,
        "width": 540,
        "content": "## 📢 Notifications\n\nSends Slack alerts when critical or warning-level issues are detected, then emails a completion summary."
      },
      "typeVersion": 1
    },
    {
      "id": "073ad6bd-87e2-409d-ab43-2546907c1aef",
      "name": "📋 Resumen del Flujo de Trabajo1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1536,
        3056
      ],
      "parameters": {
        "width": 420,
        "height": 552,
        "content": "## How it works\n\nThis workflow automatically evaluates FAQ quality using AI (GPT-4o-mini), scores each entry (0-10), and tracks improvements over time. It reads FAQs from Google Sheets, gets AI feedback on completeness and clarity, then saves detailed results and sends Slack alerts for low-scoring content.\n\n**Key features:** Historical tracking, severity-based alerts (🔴 Critical, ⚠️ Warning, ✅ Good), batch processing, and comprehensive error handling.\n\n## Setup steps\n\n1. **Connect accounts:** Add Google Sheets OAuth and Azure OpenAI credentials\n2. **Configure Sheet ID:** Update the Configuration node with your Google Sheet ID (found in the sheet URL)\n3. **Set up Slack:** Add Slack webhook and update channel ID in Configuration node (optional)\n4. **Prepare your sheet:** Create a sheet named \"TestSet\" with Question (Column A) and Answer (Column B)\n5. **Run:** Click \"Execute workflow\" to start the quality check"
      },
      "typeVersion": 1
    },
    {
      "id": "aa25afd0-e903-4352-a809-a995941dbee0",
      "name": "⚙️ Configuración1",
      "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": "📖 Obtener Preguntas Frecuentes1",
      "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": "🔍 Validar y Limpiar Datos1",
      "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": "🤖 Evaluador de IA1",
      "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": "📊 Analizar y Enriquecer Resultados1",
      "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": "💾 Guardar Resultados Detallados1",
      "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": "📈 Generar Informe Resumido1",
      "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": "📊 Guardar en Historial1",
      "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": "⚠️ Verificar si se Necesitan Alertas1",
      "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": "💬 Enviar Alerta Slack1",
      "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": "✅ Resumen de Finalización1",
      "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": "Enviar un mensaje1",
      "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": {
    "9bc66b99-cb86-4c3e-abc4-fa6fa8685e29": {
      "ai_languageModel": [
        [
          {
            "node": "5db219e2-af99-4386-b3f9-c53a79cc9cf6",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "653f3c13-0665-48ad-93a3-ed24e860518f": {
      "main": [
        [
          {
            "node": "e27c8068-5afc-4cd7-8204-6ba2a43e5b48",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5db219e2-af99-4386-b3f9-c53a79cc9cf6": {
      "main": [
        [
          {
            "node": "e2a58c64-1552-43ae-a7df-2bf665ea52a1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "aa25afd0-e903-4352-a809-a995941dbee0": {
      "main": [
        [
          {
            "node": "653f3c13-0665-48ad-93a3-ed24e860518f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0cf75d4f-f2e1-47ca-91f1-4ddffd9ff987": {
      "main": [
        [
          {
            "node": "5390e894-108c-462c-8b4e-85fa481a631c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "24cdee69-2017-47ba-961f-198a6bea352f": {
      "main": [
        [
          {
            "node": "4e661beb-0009-4de3-8388-fb7221b9afad",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4e661beb-0009-4de3-8388-fb7221b9afad": {
      "main": [
        [
          {
            "node": "e93ce33f-4bbe-476b-82f3-e122987bae3a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ad83a4b8-4cdc-40a3-b5de-49fb85ac205c": {
      "main": [
        [
          {
            "node": "853e8bba-0d8e-413a-b6fb-959e8ea1896c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e27c8068-5afc-4cd7-8204-6ba2a43e5b48": {
      "main": [
        [
          {
            "node": "5db219e2-af99-4386-b3f9-c53a79cc9cf6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e2a58c64-1552-43ae-a7df-2bf665ea52a1": {
      "main": [
        [
          {
            "node": "ad83a4b8-4cdc-40a3-b5de-49fb85ac205c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "853e8bba-0d8e-413a-b6fb-959e8ea1896c": {
      "main": [
        [
          {
            "node": "0cf75d4f-f2e1-47ca-91f1-4ddffd9ff987",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5390e894-108c-462c-8b4e-85fa481a631c": {
      "main": [
        [
          {
            "node": "24cdee69-2017-47ba-961f-198a6bea352f",
            "type": "main",
            "index": 0
          },
          {
            "node": "4e661beb-0009-4de3-8388-fb7221b9afad",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "4e661beb-0009-4de3-8388-fb7221b9afad",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "35aa638c-cbaa-4125-877d-68560d49de34": {
      "main": [
        [
          {
            "node": "aa25afd0-e903-4352-a809-a995941dbee0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿Cómo usar este flujo de trabajo?

Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.

¿En qué escenarios es adecuado este flujo de trabajo?

Avanzado - Extracción de documentos, Resumen de IA

¿Es de pago?

Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.

Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos19
Categoría2
Tipos de nodos10
Descripción de la dificultad

Adecuado para usuarios avanzados, flujos de trabajo complejos con 16+ nodos

Autor
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.

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34