{
  "workflow": {
    "id": 10330,
    "name": "Automate API FAQ quality testing with GPT-4o-mini, Google Sheets & Slack alerts",
    "views": 136,
    "recentViews": 0,
    "totalViews": 136,
    "createdAt": "2025-10-30T11:20:00.196Z",
    "description": "## Description:\nKeep your API documentation accurate and reliable with this n8n automation template.\n The workflow automatically tests your FAQ content related to authentication and rate limits, evaluating each answer using Azure OpenAI GPT-4o-mini for completeness, edge-case coverage, and technical clarity. It logs all results to Google Sheets, scores FAQs from 0–10, and sends Slack alerts when low-quality answers are detected.\nIdeal for API teams, developer relations managers, and technical writers who want to maintain high-quality documentation with zero manual review effort.\n\n## ✅ What This Template Does (Step-by-Step)\n\n▶️ Manual Trigger or On-Demand Run\n Start the evaluation anytime you update your FAQs — perfect for regression testing before documentation releases.\n\n📖 Fetch FAQ Q&A from Google Sheets\n Reads FAQ questions and answers from your designated test sheet (columns A:B). Each Q&A pair becomes a test case for AI evaluation.\n\n🤖 AI Evaluation via GPT-4o-mini\n Uses Azure OpenAI GPT-4o-mini to evaluate how well each FAQ covers critical aspects of API authentication and rate limiting.\n The AI provides a numeric score (0–10) and a short explanation.\n\n🔍 Parse & Format AI Results\n Extracts structured JSON data (Question, Score, Explanation, Timestamp) and prepares it for reporting and filtering.\n\n💾 Save Evaluation to Google Sheets\n Appends all results to a Results Sheet (A:D) — creating a running history of FAQ quality audits.\n\n⚠️ Filter for Low-Scoring FAQs\n Identifies any FAQ with a score below 7, flagging them as needing review or rewrite.\n\n🔔 Send Slack Alerts for Weak Entries\n Posts an alert message in your chosen Slack channel, including:\nThe question text\nScore received\nAI’s explanation\nLink to the full results sheet\nThis ensures your documentation team can quickly address weak or incomplete FAQ answers.\n\n## 🧠 Key Features\n 🤖 AI-powered FAQ quality scoring (0–10)\n 📊 Automated tracking of doc health over time\n 📥 Seamless Google Sheets integration for results storage\n ⚙️ Slack notifications for underperforming FAQs\n 🧩 Ideal for continuous documentation improvement\n\n## 💼 Use Cases\n 📘 Validate FAQ accuracy before API documentation updates\n ⚡ Auto-test new FAQ sets during content refresh cycles\n 🧠 Ensure API rate limit and auth topics cover all edge cases\n 📢 Alert documentation owners about weak answers instantly\n\n## 📦 Required Integrations\n- Google Sheets API – for reading and storing FAQs and test results\n- Azure OpenAI (GPT-4o-mini) – for evaluating FAQ coverage and clarity\n- Slack API – for sending quality alerts and notifications\n\n## 🎯 Why Use This Template?\n ✅ Ensures API FAQ accuracy and completeness automatically\n ✅ Replaces tedious manual content reviews with AI scoring\n ✅ Builds an ongoing record of documentation improvements\n ✅ Keeps technical FAQs consistent, relevant, and developer-friendly\n",
    "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": "When clicking ‘Execute workflow’",
          "type": "n8n-nodes-base.manualTrigger",
          "position": [
            -944,
            3312
          ],
          "parameters": {},
          "typeVersion": 1
        },
        {
          "id": "86fc4b54-b1b5-4de7-b98d-22abd8f4ba25",
          "name": "Section: Data Input",
          "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: AI Evaluation",
          "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: Storage",
          "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: Alerts",
          "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": "📋 Workflow Overview1",
          "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": "📖 Fetch FAQs1",
          "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": "credential-id",
              "name": "googleSheetsOAuth2Api Credential"
            }
          },
          "typeVersion": 4.4
        },
        {
          "id": "e27c8068-5afc-4cd7-8204-6ba2a43e5b48",
          "name": "🔍 Validate & Clean Data1",
          "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 Evaluator1",
          "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": "credential-id",
              "name": "azureOpenAiApi Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "e2a58c64-1552-43ae-a7df-2bf665ea52a1",
          "name": "📊 Parse & Enrich Results1",
          "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": "💾 Save Detailed Results1",
          "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": "credential-id",
              "name": "googleSheetsOAuth2Api Credential"
            }
          },
          "typeVersion": 4.4
        },
        {
          "id": "853e8bba-0d8e-413a-b6fb-959e8ea1896c",
          "name": "📈 Generate Summary Report1",
          "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": "📊 Save to History1",
          "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": "credential-id",
              "name": "googleSheetsOAuth2Api Credential"
            }
          },
          "typeVersion": 4.4
        },
        {
          "id": "5390e894-108c-462c-8b4e-85fa481a631c",
          "name": "⚠️ Check if Alerts Needed1",
          "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": "💬 Send Slack Alert1",
          "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": "credential-id",
              "name": "slackApi Credential"
            }
          },
          "typeVersion": 2.1
        },
        {
          "id": "4e661beb-0009-4de3-8388-fb7221b9afad",
          "name": "✅ Completion Summary1",
          "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": "Send a 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": "credential-id",
              "name": "gmailOAuth2 Credential"
            }
          },
          "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
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 1,
    "workflowInfo": {
      "nodeCount": 19,
      "nodeTypes": {
        "n8n-nodes-base.if": {
          "count": 1
        },
        "n8n-nodes-base.set": {
          "count": 2
        },
        "n8n-nodes-base.code": {
          "count": 3
        },
        "n8n-nodes-base.gmail": {
          "count": 1
        },
        "n8n-nodes-base.slack": {
          "count": 1
        },
        "n8n-nodes-base.stickyNote": {
          "count": 5
        },
        "n8n-nodes-base.googleSheets": {
          "count": 3
        },
        "n8n-nodes-base.manualTrigger": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.agent": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "Rahul Joshi",
      "username": "rahul08",
      "bio": "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.\n\n",
      "verified": true,
      "links": [
        "https://www.linkedin.com/in/callrahul/"
      ],
      "avatar": "https://gravatar.com/avatar/b6cf57822463143589b36ada06fbf6cb1509223a740fae3160b28f1ce41ccc12?r=pg&d=retro&size=200"
    },
    "nodes": [
      {
        "id": 18,
        "icon": "file:googleSheets.svg",
        "name": "n8n-nodes-base.googleSheets",
        "codex": {
          "data": {
            "alias": [
              "CSV",
              "Sheet",
              "Spreadsheet",
              "GS"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/",
                  "icon": "❤️",
                  "label": "Love at first sight: Ricardo’s n8n journey"
                },
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/",
                  "icon": "🧾",
                  "label": "Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/",
                  "icon": "🎫",
                  "label": "Supercharging your conference registration process with n8n"
                },
                {
                  "url": "https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/",
                  "icon": "⏲",
                  "label": "Creating triggers for n8n workflows using polling"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/",
                  "icon": "📈",
                  "label": "Migrating Community Metrics to Orbit using n8n"
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/your-business-doesnt-need-you-to-operate/",
                  "icon": " 🖥️",
                  "label": "Hey founders! Your business doesn't need you to operate"
                },
                {
                  "url": "https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/",
                  "icon": "🍔",
                  "label": "How Honest Burgers Use Automation to Save $100k per year"
                },
                {
                  "url": "https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/",
                  "icon": "💻",
                  "label": "How a digital strategist uses n8n for online marketing"
                },
                {
                  "url": "https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/",
                  "icon": "🧠",
                  "label": "Why this Product Manager loves workflow automation with n8n"
                },
                {
                  "url": "https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/",
                  "icon": "🙌",
                  "label": "Sending Automated Congratulations with Google Sheets, Twilio, and n8n "
                },
                {
                  "url": "https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/",
                  "icon": "📈",
                  "label": "How a Membership Development Manager automates his work and investments"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"
                }
              ]
            },
            "categories": [
              "Data & Storage",
              "Productivity"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"input\",\"output\"]",
        "defaults": {
          "name": "Google Sheets"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="
        },
        "displayName": "Google Sheets",
        "typeVersion": 5,
        "nodeCategories": [
          {
            "id": 3,
            "name": "Data & Storage"
          },
          {
            "id": 4,
            "name": "Productivity"
          }
        ]
      },
      {
        "id": 20,
        "icon": "fa:map-signs",
        "name": "n8n-nodes-base.if",
        "codex": {
          "data": {
            "alias": [
              "Router",
              "Filter",
              "Condition",
              "Logic",
              "Boolean",
              "Branch"
            ],
            "details": "The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.",
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/",
                  "icon": "🏭",
                  "label": "Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"
                },
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/",
                  "icon": "🤬",
                  "label": "Create a toxic language detector for Telegram in 4 step"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/",
                  "icon": "🔗",
                  "label": "How to build a low-code, self-hosted URL shortener in 3 steps"
                },
                {
                  "url": "https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/",
                  "icon": "⚙️",
                  "label": "Automate your data processing pipeline in 9 steps"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/",
                  "icon": "🏷️",
                  "label": "How to automatically manage contributions to open-source projects"
                },
                {
                  "url": "https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/",
                  "icon": " 🕸️",
                  "label": "How uProc scraped a multi-page website with a low-code workflow"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/",
                  "icon": "🧠",
                  "label": "Why this Product Manager loves workflow automation with n8n"
                },
                {
                  "url": "https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/",
                  "icon": "🙌",
                  "label": "Sending Automated Congratulations with Google Sheets, Twilio, and n8n "
                },
                {
                  "url": "https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/",
                  "icon": "🎡",
                  "label": "How to set up a no-code CI/CD pipeline with GitHub and TravisCI"
                },
                {
                  "url": "https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/",
                  "icon": "🎖",
                  "label": "Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Flow"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "If",
          "color": "#408000"
        },
        "iconData": {
          "icon": "map-signs",
          "type": "icon"
        },
        "displayName": "If",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 38,
        "icon": "fa:pen",
        "name": "n8n-nodes-base.set",
        "codex": {
          "data": {
            "alias": [
              "Set",
              "JS",
              "JSON",
              "Filter",
              "Transform",
              "Map"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/",
                  "icon": "🏭",
                  "label": "Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"
                },
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                },
                {
                  "url": "https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/",
                  "icon": "📈",
                  "label": "Automatically pulling and visualizing data with n8n"
                },
                {
                  "url": "https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/",
                  "icon": "📡",
                  "label": "Database Monitoring and Alerting with n8n"
                },
                {
                  "url": "https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/",
                  "icon": "🧾",
                  "label": "Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/",
                  "icon": "🔗",
                  "label": "How to build a low-code, self-hosted URL shortener in 3 steps"
                },
                {
                  "url": "https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/",
                  "icon": "⚙️",
                  "label": "Automate your data processing pipeline in 9 steps"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/",
                  "icon": " 🕸️",
                  "label": "How uProc scraped a multi-page website with a low-code workflow"
                },
                {
                  "url": "https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/",
                  "icon": "📱",
                  "label": "Building an expense tracking app in 10 minutes"
                },
                {
                  "url": "https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/",
                  "icon": "📹",
                  "label": "The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/",
                  "icon": "🧰",
                  "label": "Learn to Build Powerful API Endpoints Using Webhooks"
                },
                {
                  "url": "https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/",
                  "icon": "📈",
                  "label": "How a Membership Development Manager automates his work and investments"
                },
                {
                  "url": "https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/",
                  "icon": "📈",
                  "label": "A low-code bitcoin ticker built with QuestDB and n8n.io"
                },
                {
                  "url": "https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/",
                  "icon": "🎡",
                  "label": "How to set up a no-code CI/CD pipeline with GitHub and TravisCI"
                },
                {
                  "url": "https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/",
                  "icon": "🎖",
                  "label": "Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"
                },
                {
                  "url": "https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/",
                  "icon": "🛵",
                  "label": "How Goomer automated their operations with over 200 n8n workflows"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Edit Fields"
        },
        "iconData": {
          "icon": "pen",
          "type": "icon"
        },
        "displayName": "Edit Fields (Set)",
        "typeVersion": 3,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 40,
        "icon": "file:slack.svg",
        "name": "n8n-nodes-base.slack",
        "codex": {
          "data": {
            "alias": [
              "human",
              "form",
              "wait",
              "hitl",
              "approval"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/",
                  "icon": "⚙️",
                  "label": "Automate your data processing pipeline in 9 steps"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/",
                  "icon": "👦",
                  "label": "Build your own virtual assistant with n8n: A step by step guide"
                },
                {
                  "url": "https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/",
                  "icon": "👏",
                  "label": "How to automatically give kudos to contributors with GitHub, Slack, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/automations-for-activists/",
                  "icon": "✨",
                  "label": "How Common Knowledge use workflow automation for activism"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/slack/"
                }
              ]
            },
            "categories": [
              "Communication",
              "HITL"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "Slack"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIgZD0iTTQwLjc0MSA5My41NWMwLTguNzM1IDYuNjA3LTE1Ljc3MiAxNC44MTUtMTUuNzcyczE0LjgxNSA3LjAzNyAxNC44MTUgMTUuNzcydjM4LjgyNGMwIDguNzM3LTYuNjA3IDE1Ljc3NC0xNC44MTUgMTUuNzc0cy0xNC44MTUtNy4wMzctMTQuODE1LTE1Ljc3MnoiLz48cGF0aCBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiIGQ9Ik05My41NSAxMDcuNDA4Yy04LjczNSAwLTE1Ljc3Mi02LjYwNy0xNS43NzItMTQuODE1czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiLz48cGF0aCBmaWxsPSIjMmZiNjdjIiBzdHJva2U9IiMyZmI2N2MiIGQ9Ik03Ny43NzggMTUuNzcyQzc3Ljc3OCA3LjAzNyA4NC4zODUgMCA5Mi41OTMgMHMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjZjMCA4LjczNS02LjYwNyAxNS43NzItMTQuODE1IDE1Ljc3MnMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6Ii8+PHBhdGggZmlsbD0iIzM2YzVmMSIgc3Ryb2tlPSIjMzZjNWYxIiBkPSJNMTUuNzcyIDcwLjM3MUM3LjAzNyA3MC4zNzEgMCA2My43NjMgMCA1NS41NTZzNy4wMzctMTQuODE1IDE1Ljc3Mi0xNC44MTVoMzguODI2YzguNzM1IDAgMTUuNzcyIDYuNjA3IDE1Ljc3MiAxNC44MTVzLTcuMDM3IDE0LjgxNS0xNS43NzIgMTQuODE1eiIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIgZD0iTTc3Ljc3OCAxMzMuMzMzYzAgOC4yMDggNi42MDcgMTQuODE1IDE0LjgxNSAxNC44MTVzMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNS0xNC44MTVINzcuNzc4eiIvPjxwYXRoIGZpbGw9IiMyZmI2N2MiIHN0cm9rZT0iIzJmYjY3YyIgZD0iTTEzMy4zMzQgNzAuMzcxaC0xNC44MTVWNTUuNTU2YzAtOC4yMDcgNi42MDctMTQuODE1IDE0LjgxNS0xNC44MTVzMTQuODE1IDYuNjA3IDE0LjgxNSAxNC44MTUtNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTV6Ii8+PHBhdGggZmlsbD0iI2UwMWU1YSIgc3Ryb2tlPSIjZTAxZTVhIiBkPSJNMTQuODE1IDc3Ljc3OEgyOS42M3YxNC44MTVjMCA4LjIwNy02LjYwNyAxNC44MTUtMTQuODE1IDE0LjgxNVMwIDEwMC44IDAgOTIuNTkzczYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1eiIvPjxwYXRoIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIgZD0iTTcwLjM3MSAxNC44MTVWMjkuNjNINTUuNTU2Yy04LjIwNyAwLTE0LjgxNS02LjYwNy0xNC44MTUtMTQuODE1UzQ3LjM0OCAwIDU1LjU1NiAwczE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1eiIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+"
        },
        "displayName": "Slack",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 6,
            "name": "Communication"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      },
      {
        "id": 356,
        "icon": "file:gmail.svg",
        "name": "n8n-nodes-base.gmail",
        "codex": {
          "data": {
            "alias": [
              "email",
              "human",
              "form",
              "wait",
              "hitl",
              "approval"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/",
                  "icon": "🎫",
                  "label": "Supercharging your conference registration process with n8n"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/your-business-doesnt-need-you-to-operate/",
                  "icon": " 🖥️",
                  "label": "Hey founders! Your business doesn't need you to operate"
                },
                {
                  "url": "https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/",
                  "icon": "💪",
                  "label": "Using Automation to Boost Productivity in the Workplace"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"
                }
              ]
            },
            "categories": [
              "Communication",
              "HITL"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Gmail"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"
        },
        "displayName": "Gmail",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 6,
            "name": "Communication"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      },
      {
        "id": 565,
        "icon": "fa:sticky-note",
        "name": "n8n-nodes-base.stickyNote",
        "codex": {
          "data": {
            "alias": [
              "Comments",
              "Notes",
              "Sticky"
            ],
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Sticky Note",
          "color": "#FFD233"
        },
        "iconData": {
          "icon": "sticky-note",
          "type": "icon"
        },
        "displayName": "Sticky Note",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 834,
        "icon": "file:code.svg",
        "name": "n8n-nodes-base.code",
        "codex": {
          "data": {
            "alias": [
              "cpde",
              "Javascript",
              "JS",
              "Python",
              "Script",
              "Custom Code",
              "Function"
            ],
            "details": "The Code node allows you to execute JavaScript in your workflow.",
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers",
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Code"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="
        },
        "displayName": "Code",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 838,
        "icon": "fa:mouse-pointer",
        "name": "n8n-nodes-base.manualTrigger",
        "codex": {
          "data": {
            "resources": {
              "generic": [],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.manualworkflowtrigger/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"trigger\"]",
        "defaults": {
          "name": "When clicking ‘Execute workflow’",
          "color": "#909298"
        },
        "iconData": {
          "icon": "mouse-pointer",
          "type": "icon"
        },
        "displayName": "Manual Trigger",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 1119,
        "icon": "fa:robot",
        "name": "@n8n/n8n-nodes-langchain.agent",
        "codex": {
          "data": {
            "alias": [
              "LangChain",
              "Chat",
              "Conversational",
              "Plan and Execute",
              "ReAct",
              "Tools"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"
                }
              ]
            },
            "categories": [
              "AI",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Agents",
                "Root Nodes"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "AI Agent",
          "color": "#404040"
        },
        "iconData": {
          "icon": "robot",
          "type": "icon"
        },
        "displayName": "AI Agent",
        "typeVersion": 3,
        "nodeCategories": [
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      },
      {
        "id": 1253,
        "icon": "file:azure.svg",
        "name": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
        "codex": {
          "data": {
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatazureopenai/"
                }
              ]
            },
            "categories": [
              "AI",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Language Models",
                "Root Nodes"
              ],
              "Language Models": [
                "Chat Models (Recommended)"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Azure OpenAI Chat Model"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMjQyIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iNTguOTcyJSIgeDI9IjM3LjE5MSUiIHkxPSI3LjQxMSUiIHkyPSIxMDMuNzYyJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzExNEE4QiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzA2NjlCQyIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iNTkuNzE5JSIgeDI9IjUyLjY5MSUiIHkxPSI1Mi4zMTMlIiB5Mj0iNTQuODY0JSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1vcGFjaXR5PSIuMyIvPjxzdG9wIG9mZnNldD0iNy4xJSIgc3RvcC1vcGFjaXR5PSIuMiIvPjxzdG9wIG9mZnNldD0iMzIuMSUiIHN0b3Atb3BhY2l0eT0iLjEiLz48c3RvcCBvZmZzZXQ9IjYyLjMlIiBzdG9wLW9wYWNpdHk9Ii4wNSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImMiIHgxPSIzNy4yNzklIiB4Mj0iNjIuNDczJSIgeTE9IjQuNiUiIHkyPSI5OS45NzklIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjM0NDQkY0Ii8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMjg5MkRGIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHBhdGggZmlsbD0idXJsKCNhKSIgZD0iTTg1LjM0My4wMDNoNzUuNzUzTDgyLjQ1NyAyMzNhMTIuMDggMTIuMDggMCAwIDEtMTEuNDQyIDguMjE2SDEyLjA2QTEyLjA2IDEyLjA2IDAgMCAxIC42MzMgMjI1LjMwM0w3My44OTggOC4yMTlBMTIuMDggMTIuMDggMCAwIDEgODUuMzQzIDB6Ii8+PHBhdGggZmlsbD0iIzAwNzhENCIgZD0iTTE5NS40MjMgMTU2LjI4Mkg3NS4yOTdhNS41NiA1LjU2IDAgMCAwLTMuNzk2IDkuNjI3bDc3LjE5IDcyLjA0N2ExMi4xNCAxMi4xNCAwIDAgMCA4LjI4IDMuMjZoNjguMDJ6Ii8+PHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTg1LjM0My4wMDNhMTEuOTggMTEuOTggMCAwIDAtMTEuNDcxIDguMzc2TC43MjMgMjI1LjEwNWExMi4wNDUgMTIuMDQ1IDAgMCAwIDExLjM3IDE2LjExMmg2MC40NzVhMTIuOTMgMTIuOTMgMCAwIDAgOS45MjEtOC40MzdsMTQuNTg4LTQyLjk5MSA1Mi4xMDUgNDguNmExMi4zMyAxMi4zMyAwIDAgMCA3Ljc1NyAyLjgyOGg2Ny43NjZsLTI5LjcyMS04NC45MzUtODYuNjQzLjAyTDE2MS4zNy4wMDN6Ii8+PHBhdGggZmlsbD0idXJsKCNjKSIgZD0iTTE4Mi4wOTggOC4yMDdBMTIuMDYgMTIuMDYgMCAwIDAgMTcwLjY3LjAwM0g4Ni4yNDVjNS4xNzUgMCA5Ljc3MyAzLjMwMSAxMS40MjggOC4yMDRMMTcwLjk0IDIyNS4zYTEyLjA2MiAxMi4wNjIgMCAwIDEtMTEuNDI4IDE1LjkyaDg0LjQyOWExMi4wNjIgMTIuMDYyIDAgMCAwIDExLjQyNS0xNS45MnoiLz48L3N2Zz4="
        },
        "displayName": "Azure OpenAI Chat Model",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 35,
        "name": "Document Extraction"
      },
      {
        "id": 49,
        "name": "AI Summarization"
      }
    ],
    "image": []
  }
}