{
  "workflow": {
    "id": 9139,
    "name": "Audit interview feedback & report via Slack with GPT-4o-mini and Google Sheets",
    "views": 63,
    "recentViews": 0,
    "totalViews": 63,
    "createdAt": "2025-10-01T07:26:44.866Z",
    "description": "## Description\nThis workflow automates the evaluation of interviewer feedback using AI. It retrieves raw notes from Google Sheets, processes them through GPT-4o-mini for structured scoring, validates outputs, and calculates weighted quality scores. The system provides real-time Slack feedback to interviewers, logs AI errors for transparency, and recommends training if the feedback quality is low.\n## What This Template Does (Step-by-Step)\n- ⚡ Manual Trigger – Runs the workflow manually to start evaluation.\n-  📋 Fetch Raw Feedback Data (Google Sheets) – Reads all feedback entries (Role, Stage, Interviewer Email, Feedback Text, row_number).\n-  🧠 AI Quality Evaluator (Azure GPT-4o-mini) – Processes feedback into structured JSON across 5 dimensions.\n-  🔍 Analyze Feedback Quality (LLM Chain) – Applies scoring rules (Specificity, STAR, Bias-Free, Actionability, Depth) and outputs structured JSON.\n-  ✅ Validate AI Response – Ensures AI output isn’t undefined or malformed.\n-  🚨 Log AI Errors (Google Sheets) – Records invalid AI responses for debugging and auditing.\n-  🔄 Parse AI JSON Output (Code Node) – Converts AI JSON text into structured n8n objects with error handling.\n-  🧮 Calculate Weighted Quality Score (Code Node) – Computes final weighted score (0–100), generates flags, formats vague phrases, and preserves context.\n-  💾 Save Scores to Spreadsheet (Google Sheets) – Updates the original feedback row with Score, Flags, and AI JSON.\n-  💬 Send Feedback Summary to Interviewer (Slack) – Sends interviewers a structured Slack report (score, flags, vague phrases, STAR improvement tips).\n-  🎯 Check if Training Needed – Applies threshold logic: if score &lt; 50, route to training recommendations.\n-  📚 Send Training Recommendations (Slack) – Delivers STAR method guides and bias-free interviewing resources to low scorers.\n\n## Prerequisites\n- Google Sheets (Raw_Feedback + Error Log Sheet)\n- Azure OpenAI API credentials (for GPT-4o-mini)\n- Slack API credentials (for sending feedback & training notifications)\n- n8n instance (cloud or self-hosted)\n\n## Key Benefits\n ✅ Automated interview feedback quality scoring\n ✅ Bias detection and vague feedback flagging\n ✅ Real-time Slack feedback to interviewers\n ✅ Error logging for AI reliability tracking\n ✅ Training recommendations for low scorers\n ✅ Audit trail maintained in Google Sheets\n\n## Perfect For\n- HR & Recruitment teams ensuring structured interviewer feedback\n- Organizations enforcing STAR method & bias-free hiring\n- Teams seeking continuous interviewer coaching\n- Companies needing audit-ready records of interview quality",
    "workflow": {
      "id": "DZrX6urOE53Tm4jp",
      "meta": {
        "instanceId": "8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177",
        "templateCredsSetupCompleted": true
      },
      "name": "Interview Quality Audit",
      "tags": [],
      "nodes": [
        {
          "id": "9e228e13-31c4-4f40-8bc1-83ffc0c0df21",
          "name": "When clicking ‘Execute workflow’",
          "type": "n8n-nodes-base.manualTrigger",
          "position": [
            -176,
            16
          ],
          "parameters": {},
          "typeVersion": 1
        },
        {
          "id": "4656de9f-4ad6-4b48-a8b0-6802cd1e88ca",
          "name": "Sticky Note",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            576,
            160
          ],
          "parameters": {
            "height": 384,
            "content": " ✅ Validate AI Response\nType: Conditional Logic\nPurpose: Quality control checkpoint\nValidation:\n\nResponse text is not undefined\nContains valid data structure\n\nRouting:\n\n✅ Valid → Continue to JSON parsing\n❌ Invalid → Log to error sheet\n\nFunction: Prevents malformed responses from corrupting pipeline"
          },
          "typeVersion": 1
        },
        {
          "id": "ed2e275a-ea76-4d78-b9da-2149ec9f5b50",
          "name": "Sticky Note1",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            224,
            352
          ],
          "parameters": {
            "height": 320,
            "content": "🤖 AI Quality Evaluator (GPT-4o)\nType: AI Language Model\nPurpose: Cognitive engine for feedback analysis\nConfiguration:\n\nModel: gpt-4o-mini\nPlatform: Azure OpenAI\nIntegration: LangChain\n\nConnects to Azure GPT-4o-mini\nPowers NLP evaluation\nGenerates structured JSON outputs"
          },
          "typeVersion": 1
        },
        {
          "id": "97cdbdb7-5306-4910-8e93-927940ed699d",
          "name": "Sticky Note2",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            224,
            -560
          ],
          "parameters": {
            "width": 336,
            "height": 544,
            "content": "🔍 Analyze Feedback Quality\nType: LangChain LLM Chain\nPurpose: Core AI evaluation engine\nEvaluation Dimensions (1-5 Scale):\n\nSpecificity (35%) - Concrete details\nStructure/STAR (15%) - Situation-Task-YOUR_OPENAI_KEY_HERE-Result\nBias-Free Language (15%) - No gender/appearance bias\nActionability (10%) - Decision usefulness\nDepth (25%) - Multiple competencies\n\nScoring:\n\n5: Excellent - Clear STAR with evidence\n3: Adequate - Some info but vague\n1: Unusable - Purely subjective\n\nSpecial Rules:\n\nFeedback <30 words → Scores ≤2\nExtracts vague phrases (\"great guy\", \"nice energy\")\n\nOutput: JSON with scores and vague_phrases array"
          },
          "typeVersion": 1
        },
        {
          "id": "6681d513-9520-4c78-8595-cbb27bdfff9c",
          "name": "Sticky Note3",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -64,
            192
          ],
          "parameters": {
            "height": 368,
            "content": "📋 Fetch Interview Feedback\nType: Google Sheets Read\nPurpose: Retrieve raw feedback data\nConfiguration:\n\nDocument: Interviewer Brief Pack\nSheet: Raw_Feedback\nOperation: Read all rows\n\nData Retrieved:\nTimestamp, Candidate_ID, Role, Stage, Interviewer_Email, Feedback_Text, row_number\nOutput: All feedback records passed to AI evaluation"
          },
          "typeVersion": 1
        },
        {
          "id": "f3e8a974-86fa-4a81-a5bd-3cbebf6302b4",
          "name": "Sticky Note4",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            928,
            -224
          ],
          "parameters": {
            "width": 288,
            "height": 208,
            "content": "🔄 Parse AI JSON Output\nType: JavaScript Code\nPurpose: Convert string to structured data\nFunction:\n\nSafely parses AI text to JSON object\nTry-catch error handling\nThrows descriptive errors for debugging"
          },
          "typeVersion": 1
        },
        {
          "id": "78deb6fe-c12f-4281-974d-19a9155f0f0e",
          "name": "Sticky Note5",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1664,
            448
          ],
          "parameters": {
            "width": 320,
            "height": 224,
            "content": "🎯 Check if Training Needed\nType: Conditional Logic\nPurpose: Identify low performers\nCondition: Score < 50\nRouting:\n\n✅ <50 → Send training resources\n❌ ≥50 → No additional action\n\nFunction: Triggers enhanced coaching for scores below threshold"
          },
          "typeVersion": 1
        },
        {
          "id": "97e18f0a-359c-4bf3-8ff8-bfe51a193e7d",
          "name": "Sticky Note6",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2064,
            464
          ],
          "parameters": {
            "width": 400,
            "height": 304,
            "content": "📚 Send Training Recommendations\nType: Slack Notification\nPurpose: Deliver coaching resources\nMessage Content:\n\nScore, Flags, Specific vague phrases\nImprovement guidance (STAR method)\n📘 STAR Method Guide link\n🎥 Bias-Free Interviewing Video link\n\nFunction:\n\nDetailed coaching for scores <50\nLinks to training resources\nSupportive, growth-focused tone"
          },
          "typeVersion": 1
        },
        {
          "id": "b88c8198-7941-41a6-8b7f-406f62371288",
          "name": "Sticky Note7",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            880,
            464
          ],
          "parameters": {
            "height": 320,
            "content": "🚨 Log AI Errors\nType: Google Sheets Append\nPurpose: Error tracking\nConfiguration:\n\nSheet: error log sheet\nOperation: APPEND\n\nFunction:\n\nCaptures AI failures\nCreates error audit trail\nEnables debugging and monitoring\nTracks system reliability\n\n"
          },
          "typeVersion": 1
        },
        {
          "id": "a98fbf8e-388a-40fe-a7a7-5e54866da422",
          "name": "Sticky Note9",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1808,
            -144
          ],
          "parameters": {
            "width": 336,
            "height": 304,
            "content": "💬 Send Feedback Summary\nType: Slack Notification\nPurpose: Deliver quality report\nMessage Structure:\n\nRole, Stage, Score (X/100), Flags\nHigh Quality: Congratulations message\nNeeds Improvement: Vague phrases + STAR tips\n\nFunction:\n\nImmediate feedback to interviewer\nSpecific, actionable guidance\nEncourages continuous improvement"
          },
          "typeVersion": 1
        },
        {
          "id": "989baf43-960a-4393-9640-02b4454289d3",
          "name": "Sticky Note10",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1488,
            -592
          ],
          "parameters": {
            "width": 352,
            "height": 336,
            "content": "💾 Save Scores to Spreadsheet\nType: Google Sheets Update\nPurpose: Persist quality metrics\nConfiguration:\n\nSheet: Raw_Feedback\nOperation: UPDATE (match by row_number)\n\nFields Updated:\n\nScore (0-100)\nFlags (quality issues)\nLLM_JSON (complete AI analysis)\n\nFunction: Updates original rows, creates audit trail for trend analysis"
          },
          "typeVersion": 1
        },
        {
          "id": "c7fbcc25-cdde-4b02-b4ec-afdae31fff2e",
          "name": "Sticky Note11",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1152,
            160
          ],
          "parameters": {
            "width": 288,
            "height": 480,
            "content": "🧮 Calculate Weighted Quality Score\nType: JavaScript Code\nPurpose: Compute final score and flags\nWeights:\nSpecificity 35% | Depth 25% | Structure 15% | Bias-Free 15% | Actionability 10%\nFlags:\n\n\"low_detail\": specificity < 3 OR depth < 3\n\"bias\": bias_free_language < 3\n\nFunction:\n\nCalculates 0-100 score\nGenerates quality flags\nFormats vague phrases for Slack\nPreserves context (Role, Stage, row_number)\n\nOutput: Score, Flags, LLM_JSON, VaguePhrasesFormatted"
          },
          "typeVersion": 1
        },
        {
          "id": "69339a87-95fa-4827-a768-a6a9aa1def9e",
          "name": "Fetch Raw Feedback Data",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            32,
            16
          ],
          "parameters": {
            "options": {},
            "sheetName": {
              "__rl": true,
              "mode": "list",
              "value": 315277036,
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y/edit#gid=315277036",
              "cachedResultName": "Raw_Feedback"
            },
            "documentId": {
              "__rl": true,
              "mode": "list",
              "value": "1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y",
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y/edit?usp=drivesdk",
              "cachedResultName": "Interviewer Brief Pack "
            }
          },
          "credentials": {
            "googleSheetsOAuth2Api": {
              "id": "credential-id",
              "name": "googleSheetsOAuth2Api Credential"
            }
          },
          "typeVersion": 4.6,
          "alwaysOutputData": false
        },
        {
          "id": "99814f2b-ab97-49bf-8eec-43083f731dad",
          "name": "AI Quality Evaluator (GPT-4o1",
          "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
          "position": [
            272,
            192
          ],
          "parameters": {
            "model": "gpt-4o-mini",
            "options": {}
          },
          "credentials": {
            "azureOpenAiApi": {
              "id": "credential-id",
              "name": "azureOpenAiApi Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "6517c215-19c5-4644-97f6-26d650c65540",
          "name": "Analyze Feedback Quality",
          "type": "@n8n/n8n-nodes-langchain.chainLlm",
          "position": [
            288,
            16
          ],
          "parameters": {
            "text": "=You are an Interview Feedback Quality Auditor.\n\nYour task is to evaluate interviewer feedback notes and score them across 5 dimensions:\n- specificity (1–5)\n- structure_STAR (1–5)\n- bias_free_language (1–5)\n- actionability (1–5)\n- depth (1–5)\n\n⚖️ Scoring Guidelines:\n- 5 = Excellent: Clear, detailed, STAR format (Situation, Task, Action, Result) explicitly used or strongly implied, with evidence/examples.\n- 4 = Good: Mostly structured, some detail, minor gaps, still useful for decisions.\n- 3 = Adequate: Some relevant info but mixed with vagueness, missing STAR elements.\n- 2 = Poor: Mostly vague or generic, no clear evidence, over-reliant on subjective phrasing.\n- 1 = Unusable: Purely subjective (“great guy”, “nice energy”), no actionable details.\n\nBias-free language: Score low if feedback references gender, looks, personality, or irrelevant traits.\n\nActionability: Score higher if the feedback directly helps in making a decision (e.g., “passed all test cases under time constraint” vs “seems smart”).\n\nDepth: Score higher if multiple competencies or dimensions are covered, lower if only 1 vague point.\n\n🚨 Additional Rules:\n- If text <30 words OR contains mostly emojis/placeholders → set ALL scores ≤2 and add `\"too_short\"` to vague_phrases.\n- Extract vague phrases (e.g., “good energy”, “smart guy”, “should be fine”) into `\"vague_phrases\"` array.\n\nReturn ONLY valid JSON in this schema:\n{\n  \"specificity\": <1–5>,\n  \"structure\": <1–5>,\n  \"bias_free_language\": <1–5>,\n  \"actionability\": <1–5>,\n  \"depth\": <1–5>,\n  \"vague_phrases\": [ ... ]\n}\n",
            "batching": {},
            "messages": {
              "messageValues": [
                {
                  "message": "You are an Interview Feedback Quality Auditor.   Evaluate interview feedback for specificity, structure (STAR), bias-free language, actionability, and depth.   Be strict but fair. Always return **only valid JSON** that follows the given schema.Return ONLY valid JSON, no explanations, no markdown, no quotes wrapping the whole object.\n"
                },
                {
                  "type": "HumanMessagePromptTemplate",
                  "message": "=Role: {{$json[\"Role\"]}}   Stage: {{$json[\"Stage\"]}}   Feedback: {{$json[\"Feedback_Text\"]}}"
                }
              ]
            },
            "promptType": "define"
          },
          "typeVersion": 1.7
        },
        {
          "id": "0612aeb7-a3a2-4215-9910-4cd077e06586",
          "name": "Validate AI Response",
          "type": "n8n-nodes-base.if",
          "position": [
            640,
            16
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 2,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "4901c65c-6aaf-4efe-a133-1fedfedc0bca",
                  "operator": {
                    "type": "string",
                    "operation": "notEquals"
                  },
                  "leftValue": "={{ $json.text }}",
                  "rightValue": "undefined "
                }
              ]
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "f89f5698-5d3c-4771-8b0b-511b32b9fc33",
          "name": "Parse AI JSON Output",
          "type": "n8n-nodes-base.code",
          "position": [
            1024,
            0
          ],
          "parameters": {
            "jsCode": "// OpenAI output comes as string in $json.text\nconst raw = $json[\"text\"];\n\n// Parse safely\nlet parsed;\ntry {\n  parsed = JSON.parse(raw);\n} catch (e) {\n  throw new Error(\"Invalid JSON returned by OpenAI: \" + raw);\n}\n\nreturn parsed;\n"
          },
          "typeVersion": 2
        },
        {
          "id": "1174cddb-9bf5-4582-a7ba-aed412336b7f",
          "name": "Calculate Weighted Quality Score",
          "type": "n8n-nodes-base.code",
          "position": [
            1232,
            0
          ],
          "parameters": {
            "jsCode": "// Input = parsed JSON from AI\nconst data = $json;\n\n// Weights (can be adjusted or moved to Config sheet later)\nconst weights = {\n  specificity: 0.35,\n  structure: 0.15,\n  bias_free_language: 0.15,\n  actionability: 0.10,\n  depth: 0.25,\n};\n\n// ✅ Fallback for structure (AI might send structure or structure_star)\nconst structureValue = data.structure ?? data.structure_star ?? 0;\n\n// Calculate weighted score safely\nlet total = (\n  (data.specificity * weights.specificity) +\n  (structureValue * weights.structure) +\n  (data.bias_free_language * weights.bias_free_language) +\n  (data.actionability * weights.actionability) +\n  (data.depth * weights.depth)\n) / (\n  weights.specificity +\n  weights.structure +\n  weights.bias_free_language +\n  weights.actionability +\n  weights.depth\n);\n\n// Scale to 0–100\ntotal = Math.round(total * 20);\n\n// Flags\nconst flags = [];\nif ((data.specificity ?? 0) < 3 || (data.depth ?? 0) < 3) {\n  flags.push(\"low_detail\");\n}\nif ((data.bias_free_language ?? 0) < 3) {\n  flags.push(\"bias\");\n}\n\n// Format vague phrases if they exist\nlet vagueFormatted = \"\";\nif (Array.isArray(data.vague_phrases) && data.vague_phrases.length > 0) {\n  vagueFormatted = data.vague_phrases.map(p => `• ${p}`).join(\"\\n\");\n}\n\n// Return clean JSON\nreturn {\n  json: {\n    Score: total,\n    Flags: flags.join(\", \"),\n    LLM_JSON: JSON.stringify(data),\n    VaguePhrasesFormatted: vagueFormatted,   // for Slack message\n    row_number: $json.row_number,            // keep tracking the row\n    Role: $item(0).$node[\"Fetch Raw Feedback Data\"].json.Role,\n    Stage: $item(0).$node[\"Fetch Raw Feedback Data\"].json.Stage\n  }\n};\n"
          },
          "typeVersion": 2
        },
        {
          "id": "5d940fc3-8727-4dc4-9a58-133ab5180f08",
          "name": "Save Scores to Spreadsheet",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            1600,
            -208
          ],
          "parameters": {
            "columns": {
              "value": {
                "Flags": "={{ $json.Flags }}",
                "Score": "={{ $json.Score }}",
                "LLM_JSON": "={{ $json.LLM_JSON }}",
                "row_number": "={{ $('Fetch Raw Feedback Data').item.json.row_number }}"
              },
              "schema": [
                {
                  "id": "Timestamp",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Timestamp",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Candidate_ID",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Candidate_ID",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Role",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Role",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Stage",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Stage",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Interviewer_Email",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Interviewer_Email",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Feedback_Text",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Feedback_Text",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Score",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Score",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Flags",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Flags",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "LLM_JSON",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "LLM_JSON",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "row_number",
                  "type": "number",
                  "display": true,
                  "removed": false,
                  "readOnly": true,
                  "required": false,
                  "displayName": "row_number",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                }
              ],
              "mappingMode": "defineBelow",
              "matchingColumns": [
                "row_number"
              ],
              "attemptToConvertTypes": false,
              "convertFieldsToString": false
            },
            "options": {},
            "operation": "update",
            "sheetName": {
              "__rl": true,
              "mode": "list",
              "value": 315277036,
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y/edit#gid=315277036",
              "cachedResultName": "Raw_Feedback"
            },
            "documentId": {
              "__rl": true,
              "mode": "list",
              "value": "1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y",
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y/edit?usp=drivesdk",
              "cachedResultName": "Interviewer Brief Pack "
            }
          },
          "credentials": {
            "googleSheetsOAuth2Api": {
              "id": "credential-id",
              "name": "googleSheetsOAuth2Api Credential"
            }
          },
          "typeVersion": 4.6,
          "alwaysOutputData": true
        },
        {
          "id": "40df551b-4ca7-4268-a1fe-4ebb01fd304f",
          "name": "Send Feedback Summary to Interviewer",
          "type": "n8n-nodes-base.slack",
          "position": [
            1616,
            0
          ],
          "webhookId": "ddaa7632-9e35-4bd3-82d6-572d5cae84cc",
          "parameters": {
            "text": "=:mag: *Interview Feedback Audit*\n\n*Role:* {{ $json[\"Role\"] }}\n*Stage:* {{ $json[\"Stage\"] }}\n\n:bar_chart: *Score:* {{ $json[\"Score\"] }}/100  \n:warning: *Flags:* {{ $json[\"Flags\"] || \"none\" }}\n\n{{ $json[\"VaguePhrasesFormatted\"] ? \n    (\"_We noticed vague or incomplete feedback. Examples:_\\n\" + $json[\"VaguePhrasesFormatted\"] + \n    \"\\n\\n_To improve: try being more specific and evidence-based (e.g., STAR method)._\") \n    : \n    \"_✅ Great job! Your feedback was specific, structured, and bias-free._\" \n}}\n\nKeep it up — your detailed notes help us make fairer hiring decisions 🚀\n\n_Automated with this n8n workflow_\n",
            "user": {
              "__rl": true,
              "mode": "list",
              "value": "U09HMPVD466",
              "cachedResultName": "newscctv22"
            },
            "select": "user",
            "otherOptions": {}
          },
          "credentials": {
            "slackApi": {
              "id": "credential-id",
              "name": "slackApi Credential"
            }
          },
          "typeVersion": 2.3
        },
        {
          "id": "de2e5d93-df58-41ef-a22f-e7a681308a64",
          "name": "Check if Training Needed",
          "type": "n8n-nodes-base.if",
          "position": [
            1776,
            288
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 2,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "loose"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "62f94225-d1b6-42a0-a3e9-7afceb9b937d",
                  "operator": {
                    "type": "number",
                    "operation": "lt"
                  },
                  "leftValue": "={{$json[\"Score\"]}}",
                  "rightValue": 50
                }
              ]
            },
            "looseTypeValidation": true
          },
          "typeVersion": 2.2
        },
        {
          "id": "49b80e52-27d3-455d-8082-e3e0f2365a69",
          "name": "Send Training Recommendations",
          "type": "n8n-nodes-base.slack",
          "position": [
            2064,
            272
          ],
          "webhookId": "ddaa7632-9e35-4bd3-82d6-572d5cae84cc",
          "parameters": {
            "text": "=:books: *Training Recommendation*\n\nYour interview feedback for **{{$json[\"Role\"]}} ({{$json[\"Stage\"]}})** was reviewed.\n\n📊 **Score:** {{$json[\"Score\"]}}/100  \n⚠️ **Flags:** {{$json[\"Flags\"] || \"none\"}}  \n\nWe noticed vague or incomplete feedback. Here are some examples:  \n{{  $json.VaguePhrasesFormatted }}\n\nTo improve: try using structured, evidence-based feedback (e.g., STAR method).  \n\n👉 Helpful resources:  \n📘 [STAR Method Guide](https://example.com/star-training)  \n🎥 [Bias-Free Interviewing Video](https://example.com/interview-bias)  \n\nYour detailed notes help us make fairer hiring decisions 🚀\n",
            "user": {
              "__rl": true,
              "mode": "list",
              "value": "U09HMPVD466",
              "cachedResultName": "newscctv22"
            },
            "select": "user",
            "otherOptions": {}
          },
          "credentials": {
            "slackApi": {
              "id": "credential-id",
              "name": "slackApi Credential"
            }
          },
          "typeVersion": 2.3
        },
        {
          "id": "48988700-46e2-4464-87a5-99054d6e9cbc",
          "name": "Log AI Errors",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            944,
            304
          ],
          "parameters": {
            "columns": {
              "value": {},
              "schema": [],
              "mappingMode": "defineBelow",
              "matchingColumns": [],
              "attemptToConvertTypes": false,
              "convertFieldsToString": false
            },
            "options": {},
            "operation": "append",
            "sheetName": {
              "__rl": true,
              "mode": "list",
              "value": 1338537721,
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y/edit#gid=1338537721",
              "cachedResultName": "error log sheet"
            },
            "documentId": {
              "__rl": true,
              "mode": "list",
              "value": "1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y",
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y/edit?usp=drivesdk",
              "cachedResultName": "Interviewer Brief Pack "
            }
          },
          "credentials": {
            "googleSheetsOAuth2Api": {
              "id": "credential-id",
              "name": "googleSheetsOAuth2Api Credential"
            }
          },
          "typeVersion": 4.7
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "e2d8cf56-20c5-4e9a-9d03-d8b8536128fe",
      "connections": {
        "Parse AI JSON Output": {
          "main": [
            [
              {
                "node": "Calculate Weighted Quality Score",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Validate AI Response": {
          "main": [
            [
              {
                "node": "Parse AI JSON Output",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "Log AI Errors",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Fetch Raw Feedback Data": {
          "main": [
            [
              {
                "node": "Analyze Feedback Quality",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Analyze Feedback Quality": {
          "main": [
            [
              {
                "node": "Validate AI Response",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Check if Training Needed": {
          "main": [
            [
              {
                "node": "Send Training Recommendations",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Save Scores to Spreadsheet": {
          "main": [
            []
          ]
        },
        "AI Quality Evaluator (GPT-4o1": {
          "ai_languageModel": [
            [
              {
                "node": "Analyze Feedback Quality",
                "type": "ai_languageModel",
                "index": 0
              }
            ]
          ]
        },
        "Calculate Weighted Quality Score": {
          "main": [
            [
              {
                "node": "Send Feedback Summary to Interviewer",
                "type": "main",
                "index": 0
              },
              {
                "node": "Save Scores to Spreadsheet",
                "type": "main",
                "index": 0
              },
              {
                "node": "Check if Training Needed",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "When clicking ‘Execute workflow’": {
          "main": [
            [
              {
                "node": "Fetch Raw Feedback Data",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 1,
    "workflowInfo": {
      "nodeCount": 23,
      "nodeTypes": {
        "n8n-nodes-base.if": {
          "count": 2
        },
        "n8n-nodes-base.code": {
          "count": 2
        },
        "n8n-nodes-base.slack": {
          "count": 2
        },
        "n8n-nodes-base.stickyNote": {
          "count": 11
        },
        "n8n-nodes-base.googleSheets": {
          "count": 3
        },
        "n8n-nodes-base.manualTrigger": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.chainLlm": {
          "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": 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": 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": 1123,
        "icon": "fa:link",
        "name": "@n8n/n8n-nodes-langchain.chainLlm",
        "codex": {
          "data": {
            "alias": [
              "LangChain"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm/"
                }
              ]
            },
            "categories": [
              "AI",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Chains",
                "Root Nodes"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Basic LLM Chain",
          "color": "#909298"
        },
        "iconData": {
          "icon": "link",
          "type": "icon"
        },
        "displayName": "Basic LLM Chain",
        "typeVersion": 2,
        "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": 17,
        "name": "HR"
      },
      {
        "id": 49,
        "name": "AI Summarization"
      }
    ],
    "image": []
  }
}