Test des FAQ sur la limitation de débit et l'authentification d'API

Avancé

Ceci est unDocument Extraction, AI Summarizationworkflow d'automatisation du domainecontenant 19 nœuds.Utilise principalement des nœuds comme If, Set, Code, Gmail, Slack. Utiliser GPT-4o-mini, Google Sheets et Slack reminders pour automatiser le test qualité des FAQs API

Prérequis
  • Compte Google et informations d'identification Gmail API
  • Token Bot Slack ou URL Webhook
  • Informations d'identification Google Sheets API
  • Clé API OpenAI
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "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": "Au clic sur 'Exécuter le workflow'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -944,
        3312
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "86fc4b54-b1b5-4de7-b98d-22abd8f4ba25",
      "name": "Section : Saisie des données",
      "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": "Section : Évaluation 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": "Section : Stockage",
      "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": "Section : Alertes",
      "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": "📋 Aperçu du workflow1",
      "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": "⚙️ Configuration1",
      "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": "📖 Récupérer les 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": "🔍 Valider & nettoyer les données1",
      "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": "🤖 Évaluateur 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": "📊 Analyser & enrichir les résultats1",
      "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": "💾 Enregistrer les résultats détaillés1",
      "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": "📈 Générer un rapport récapitulatif1",
      "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": "📊 Sauvegarder dans l'historique1",
      "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": "⚠️ Vérifier si des alertes sont nécessaires1",
      "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": "💬 Envoyer une alerte 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": "✅ Récapitulatif de fin1",
      "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": "Envoyer un message1",
      "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
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Avancé - Extraction de documents, Résumé IA

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds19
Catégorie2
Types de nœuds10
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

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

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34