{"workflow":{"id":13960,"name":"Triage and schedule healthcare appointments with Azure OpenAI, Google Sheets and Gmail","views":119,"recentViews":1,"totalViews":119,"createdAt":"2026-03-09T09:39:29.536Z","description":"## 📊 Description\nAutomate your clinic’s patient intake and scheduling with an intelligent AI Healthcare Appointment Booking Agent built in n8n. 🏥 This workflow receives patient form submissions, analyzes symptoms using AI triage, determines urgency levels, and automatically assigns the most suitable doctor based on specialty. The agent stores structured patient records in Google Sheets and sends automated appointment schedule emails to doctors. 📧 It also follows up with patients after visits by sending personalized feedback requests, creating a complete AI-driven patient management workflow. This automation acts as a virtual clinic coordinator, streamlining healthcare operations while improving response time and patient experience. 🤖\n\n## What This Template Does\n🔔 Capture Patient Leads – A webhook receives patient intake form data including name, age, gender, and symptoms.\n🤖 Run AI Medical Triage – An AI agent evaluates symptoms to determine urgency level and recommended medical department.\n📝 Store Patient Intake Data – Structured triage results are automatically saved to a Google Sheets patient database.\n🧠 Assign the Best Doctor – A second AI agent reads the doctor list and selects the most appropriate specialist.\n📅 Create Appointment Records – The assigned doctor and appointment details are written to the scheduling sheet.\n📧 Notify Doctors Automatically – Doctors receive an HTML email with their daily appointment schedule.\n⏰ Monitor Completed Visits – A scheduled workflow checks completed consultations.\n💬 Request Patient Feedback – Patients automatically receive a feedback form email after their visit.\n\n## Key Benefits\n✅ Automates the entire patient intake to appointment workflow\n ✅ Uses AI agents to perform smart symptom triage and doctor assignment\n ✅ Eliminates manual scheduling and patient routing\n ✅ Keeps patient and doctor records organized in Google Sheets\n ✅ Automatically sends doctor schedule notifications and patient feedback emails\n ✅ Improves clinic efficiency and response time\n\n## Features\n- AI-powered patient triage agent for symptom evaluation\n- AI doctor assignment agent using specialty matching\n- Webhook-based patient intake form integration\n- Google Sheets database for patient records and appointments\n- Automated HTML doctor schedule email generation\n- Scheduled follow-up system for patient feedback\n- Custom JavaScript normalization nodes for structured AI outputs\n\n## Requirements\n- Azure OpenAI API credentials\n- Google Sheets OAuth2 connection\n- Gmail OAuth2 credentials for email notifications\n- A Google Spreadsheet with the following tabs:\n- Patient forms\n- Doctor details\n- Scheduled appointments\n\n## Target Audience\n🏥 Healthcare clinics and medical practices\n🧑‍⚕️ Hospitals managing patient intake and appointment routing\n🤖 Healthcare automation builders using n8n + AI agents\n🛠️ Healthtech teams building AI-assisted scheduling systems\n","workflow":{"id":"qTRNRt0PTo2NyObN","meta":{"instanceId":"8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177","templateCredsSetupCompleted":true},"name":"Healthcare - Appointment Booking Agent","tags":[],"nodes":[{"id":"1bba7f53-0f2d-4524-b568-4c50ff57a7f1","name":"📋 Workflow Overview","type":"n8n-nodes-base.stickyNote","position":[-1136,1424],"parameters":{"color":3,"width":500,"height":940,"content":"## 🏥 Healthcare Appointment Booking Agent\n\n### How it works\nThis workflow automates the end-to-end healthcare appointment lifecycle across three parallel pipelines:\n\n**Pipeline 1 – Patient Intake & Triage:** A webhook receives new patient lead data (name, age, gender, symptoms). The data is formatted, then passed to an AI Triage Agent (Azure OpenAI) that assesses urgency level (LOW / MEDIUM / HIGH / CRITICAL), recommends a department, and sets appointment priority. Normalized results are saved to a Google Sheet (\"Patient forms\" tab).\n\n**Pipeline 2 – Doctor Assignment:** A Google Sheets trigger fires whenever a new patient row is added. A second AI Agent reads the doctor list from the sheet and assigns the most suitable doctor based on symptoms and specialty. The assignment is written back to the \"Scheduled appointments\" tab. Appointment details are then fetched and an HTML email digest is sent to the assigned doctor.\n\n**Pipeline 3 – Post-Visit Feedback:** An hourly Schedule Trigger reads the appointments sheet, filters records that have a completed visit flag, and sends a personalized feedback-form email to each patient.\n\n### Setup steps\n1. **Webhook** – Activate the workflow; note the webhook URL and configure your patient intake form to POST to it.\n2. **Azure OpenAI** – Add your Azure OpenAI credentials to both AI Agent nodes (model: `gpt-4o-mini`).\n3. **Google Sheets** – Connect Google Sheets OAuth2 to all sheet nodes. Create a spreadsheet with three tabs: *Patient forms*, *Doctor details*, and *Scheduled appointments*.\n4. **Gmail** – Connect Gmail OAuth2 to both email nodes and update the `sendTo` addresses.\n5. **Schedule Trigger** – Adjust the hourly interval to match your clinic's feedback cadence.\n\n### Customization\n- Swap Azure OpenAI for any other LLM by replacing the Chat Model sub-node.\n- Add a Slack or WhatsApp node after doctor assignment for real-time staff alerts."},"typeVersion":1},{"id":"ac280c74-63ef-48d7-a875-a195e7e86d58","name":"Section: Patient Intake & Triage","type":"n8n-nodes-base.stickyNote","position":[-512,1040],"parameters":{"width":760,"height":260,"content":"## 📥 Patient Intake & Triage\nReceives raw patient lead via webhook, normalizes fields, and runs AI triage to determine urgency level, recommended department, and appointment priority. Results are saved to the Patient forms sheet."},"typeVersion":1},{"id":"5defe252-87c6-47c1-ad25-719918a0e3dc","name":"Section: Doctor Assignment & Notification","type":"n8n-nodes-base.stickyNote","position":[-544,1568],"parameters":{"width":860,"height":560,"content":"## 🩺 Doctor Assignment\nTriggered when a new patient row lands in Google Sheets. An AI Agent consults the doctor list and assigns the best-matched specialist. The appointment is written back to the sheet and a schedule digest email is sent to the doctor."},"typeVersion":1},{"id":"8ee3e637-1a7f-496a-931b-8031836c77ad","name":"Section: Post-Visit Feedback","type":"n8n-nodes-base.stickyNote","position":[-464,2336],"parameters":{"width":620,"height":200,"content":"## 📬 Post-Visit Feedback\nRuns hourly via Schedule Trigger. Fetches appointments with a completed visit flag and sends each patient a personalized feedback form email."},"typeVersion":1},{"id":"0632ebb3-6f43-4c29-b7c2-414e5694321a","name":"⚠️ Warning: Azure OpenAI Credentials","type":"n8n-nodes-base.stickyNote","position":[544,1568],"parameters":{"color":2,"width":280,"height":176,"content":"⚠️ **Azure OpenAI Credentials Required**\nBoth AI Agent nodes depend on this model. Ensure your Azure OpenAI API key, endpoint, and deployment name are correctly configured. Misconfiguration will silently break triage and doctor assignment."},"typeVersion":1},{"id":"a2fbc4ad-9ebc-40f8-ab53-8557e165581f","name":"⚠️ Warning: Sheet Overwrite Risk","type":"n8n-nodes-base.stickyNote","position":[560,2080],"parameters":{"color":2,"width":280,"height":144,"content":"⚠️ **Google Sheets Write Risk**\nThis node appends or overwrites rows in the Scheduled Appointments sheet. Ensure column headers in the sheet exactly match the mapped fields to avoid data loss or misalignment."},"typeVersion":1},{"id":"de14fad4-bd31-44c1-a639-600f5faf6cfb","name":"🔔 Patient Lead Webhook","type":"n8n-nodes-base.webhook","position":[-480,1312],"webhookId":"d5846cc8-caba-4d65-9815-6d7ff1d4c10e","parameters":{"path":"patient-lead","options":{},"httpMethod":"POST"},"typeVersion":1},{"id":"38b38cfc-c8a4-4ebb-b217-1058a116eb90","name":"🗂️ Format Patient Data","type":"n8n-nodes-base.set","position":[-256,1312],"parameters":{"values":{"string":[{"name":"patient_name","value":"={{$json[\"name\"]}}"},{"name":"phone","value":"={{$json[\"phone\"]}}"},{"name":"symptoms","value":"={{$json[\"symptoms\"]}}"},{"name":"age","value":"={{$json[\"age\"]}}"},{"name":"gender","value":"={{$json[\"gender\"]}}"},{"name":"additonal notes","value":"={{$json[\"additonal notes\"]}}"}]},"options":{}},"typeVersion":2},{"id":"9edcdc48-1d7c-4a41-b59f-da560b2d806c","name":"🤖 AI Triage Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[-32,1200],"parameters":{"text":"=Analyze the following patient intake information and perform triage.\n\nPatient Name: {{$json.patient_name}}\n\nAge: {{$json.age}}\n\nGender: {{$json.gender}}\n\nPhone: {{$json.phone}}\n\nSymptoms: {{$json.symptoms}}\n\nAdditional Notes: {{$json.notes}}\n\nPlease determine urgency level, recommended department, appointment priority, and recommended action.","options":{"systemMessage":"=You are an AI healthcare triage assistant working for a medical clinic.\n\nYour role is NOT to diagnose diseases. Your responsibility is to analyze patient-reported symptoms and determine:\n\n1. Urgency level\n2. Recommended department\n3. Suggested appointment priority\n4. Whether emergency care may be required\n\nYou must follow safe triage rules.\n\nUrgency levels:\nLOW → routine consultation within 3–5 days\nMEDIUM → consultation within 24–48 hours\nHIGH → same day appointment\nCRITICAL → immediate emergency care recommended\n\nDepartments available:\nGeneral Physician\nCardiology\nOrthopedics\nDermatology\nNeurology\nENT\nGastroenterology\nPulmonology\nGynecology\nPediatrics\n\nInstructions:\n• Analyze symptoms carefully\n• Prioritize patient safety\n• If symptoms suggest severe danger (chest pain, breathing difficulty, unconsciousness, stroke symptoms), mark CRITICAL.\n• If unsure, classify as MEDIUM.\n\nOutput must ALWAYS be structured JSON.\n\nReturn ONLY valid JSON in this format:\n\n{\n\"patient_name\": \"\",\n\"patient_age\": \"\",\n\"patient_gender\": \"\",\n\"phone\": \"\",\n\"symptoms\": \"\",\n\"symptom_duration\": \"\",\n\"urgency_level\": \"\",\n\"recommended_department\": \"\",\n\"appointment_priority\": \"\",\n\"triage_reasoning\": \"\",\n\"recommended_action\": \"\",\n\"sheet_row\": {\n  \"Name\": \"\",\n  \"Age\": \"\",\n  \"Gender\": \"\",\n  \"Phone\": \"\",\n  \"Symptoms\": \"\",\n  \"Urgency\": \"\",\n  \"Department\": \"\",\n  \"Priority\": \"\",\n  \"Recommended Action\": \"\"\n}\n}\n\nDo not include any extra text outside the JSON."},"promptType":"define"},"typeVersion":3},{"id":"724790a3-9506-40c2-9724-d10295e742ef","name":"🧠 Azure OpenAI – Triage Model","type":"@n8n/n8n-nodes-langchain.lmChatAzureOpenAi","position":[400,1600],"parameters":{"model":"gpt-4o-mini","options":{}},"credentials":{"azureOpenAiApi":{"id":"C3WzT18XqF8OdVM6","name":"Azure Open AI account"}},"typeVersion":1},{"id":"e30b1134-b3ed-40e1-b214-b784625f76ed","name":"⚙️ Normalize Triage Output","type":"n8n-nodes-base.code","position":[320,1312],"parameters":{"jsCode":"// Get AI response\nconst raw = $json;\n\n// Sometimes AI returns JSON as string\nlet data;\n\ntry {\n  data = typeof raw === \"string\" ? JSON.parse(raw) : raw;\n} catch (error) {\n  data = JSON.parse(raw.output || \"{}\");\n}\n\n// Helper function\nconst safe = (value, fallback = \"\") => {\n  if (value === undefined || value === null) return fallback;\n  return String(value).trim();\n};\n\n// Normalize urgency\nconst normalizeUrgency = (urgency) => {\n  if (!urgency) return \"MEDIUM\";\n  \n  const u = urgency.toLowerCase();\n\n  if (u.includes(\"critical\")) return \"CRITICAL\";\n  if (u.includes(\"high\")) return \"HIGH\";\n  if (u.includes(\"medium\")) return \"MEDIUM\";\n  if (u.includes(\"low\")) return \"LOW\";\n\n  return \"MEDIUM\";\n};\n\nconst urgency = normalizeUrgency(data.urgency_level);\n\n// Normalize department\nconst department = safe(data.recommended_department, \"General Physician\");\n\n// Priority mapping\nlet priority = \"Routine\";\n\nif (urgency === \"CRITICAL\") priority = \"Immediate\";\nif (urgency === \"HIGH\") priority = \"Same Day\";\nif (urgency === \"MEDIUM\") priority = \"24-48 Hours\";\nif (urgency === \"LOW\") priority = \"3-5 Days\";\n\n// Normalized object\nconst normalized = {\n  patient_name: safe(data.patient_name),\n  patient_age: safe(data.patient_age),\n  patient_gender: safe(data.patient_gender),\n  phone: safe(data.phone),\n  symptoms: safe(data.symptoms),\n  symptom_duration: safe(data.symptom_duration),\n  urgency_level: urgency,\n  recommended_department: department,\n  appointment_priority: priority,\n  triage_reasoning: safe(data.triage_reasoning),\n  recommended_action: safe(data.recommended_action),\n  sheet_row: {\n    Name: safe(data.patient_name),\n    Age: safe(data.patient_age),\n    Gender: safe(data.patient_gender),\n    Phone: safe(data.phone),\n    Symptoms: safe(data.symptoms),\n    Urgency: urgency,\n    Department: department,\n    Priority: priority,\n    \"Recommended Action\": safe(data.recommended_action)\n  }\n};\n\nreturn [{ json: normalized }];"},"typeVersion":2},{"id":"1ae0015a-5eb5-4b7a-a0f9-0fe62fdd4138","name":"📝 Save Triage to Patient Forms Sheet","type":"n8n-nodes-base.googleSheets","position":[544,1312],"parameters":{"columns":{"value":{},"schema":[],"mappingMode":"autoMapInputData","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"appendOrUpdate","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8/edit#gid=0","cachedResultName":"Patient forms"},"documentId":{"__rl":true,"mode":"list","value":"1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8/edit?usp=drivesdk","cachedResultName":"Patient & Doctors details"}},"credentials":{"googleSheetsOAuth2Api":{"id":"s4dP1fNuVZ2gWvs3","name":"Google Sheets account"}},"typeVersion":4.7},{"id":"e789fa52-cba1-4957-9f0c-900e518934a2","name":"📊 New Patient Row Trigger","type":"n8n-nodes-base.googleSheetsTrigger","position":[-432,1832],"parameters":{"options":{},"pollTimes":{"item":[{"mode":"everyMinute"}]},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8/edit#gid=0","cachedResultName":"Patient forms"},"documentId":{"__rl":true,"mode":"list","value":"1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8/edit?usp=drivesdk","cachedResultName":"Patient & Doctors details"}},"credentials":{"googleSheetsTriggerOAuth2Api":{"id":"tjY8nawuuRO1rxAE","name":"Google Sheets Trigger account"}},"typeVersion":1},{"id":"84c3a139-d345-4376-b824-5394d648603e","name":"🤖 AI Doctor Assignment Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[-208,1728],"parameters":{"text":"=Analyze the following patient intake form and assign the most suitable doctor.\n\nPatient Information:\n\nName: {{$json.name}}\n\nAge: {{$json.age}}\n\nGender: {{$json.gender}}\n\nSymptoms: {{$json.symptoms}}\n\nUse the connected doctor sheet tool to find available doctors and their specialties.\n\nSelect the most appropriate doctor based on the symptoms.\n","options":{"systemMessage":"=You are an AI medical routing assistant working for a healthcare clinic.\n\nYour job is to read a patient's intake form and assign the most appropriate doctor based on the symptoms and the doctor's specialty.\n\nYou have access to a tool connected to a Google Sheet that contains a list of doctors and their specialties.\n\nYou MUST follow these rules:\n\n1. Always read the doctor list from the sheet tool before selecting a doctor.\n2. Match the patient symptoms with the most relevant medical specialty.\n3. Only choose a doctor that exists in the sheet data.\n4. If multiple doctors match the specialty, choose one randomly or the first available.\n5. If no direct specialty match exists, assign a \"General Physician\".\n6. Do NOT diagnose diseases. Your job is only to route the patient to the correct doctor.\n\nDoctor specialties may include:\nGeneral Physician\nCardiologist\nDermatologist\nOrthopedic\nNeurologist\nENT Specialist\nGastroenterologist\nPulmonologist\nGynecologist\nPediatrician\n\nSymptoms → Specialty Guidelines:\n\nChest pain / heart issues → Cardiologist\nSkin rash / acne → Dermatologist\nBone pain / injury → Orthopedic\nHeadache / seizures → Neurologist\nEar / nose / throat → ENT\nStomach pain / digestion → Gastroenterologist\nBreathing problems → Pulmonologist\nWomen's health → Gynecologist\nChildren under 14 → Pediatrician\nGeneral illness → General Physician\n\nAfter selecting the doctor, return structured JSON.\n\nOutput format must be:\n\n{\n\"patient_details\": {\n\"name\": \"\",\n\"age\": \"\",\n\"gender\": \"\",\n\"symptoms\": \"\"\n},\n\"recommended_specialty\": \"\",\n\"assigned_doctor\": \"\",\n\"assignment_reason\": \"\",\n\"sheet_update\": {\n\"Patient Name\": \"\",\n\"Age\": \"\",\n\"Gender\": \"\",\n\"Symptoms\": \"\",\n\"Specialty\": \"\",\n\"Doctor Assigned\": \"\"\n}\n}\n\nReturn ONLY JSON. Do not include explanations outside the JSON.\n"},"promptType":"define"},"typeVersion":3},{"id":"99406cde-5ede-4567-b8c7-ef41b8da747d","name":"🧠 Azure OpenAI – Assignment Model","type":"@n8n/n8n-nodes-langchain.lmChatAzureOpenAi","position":[-200,1952],"parameters":{"model":"gpt-4o-mini","options":{}},"credentials":{"azureOpenAiApi":{"id":"C3WzT18XqF8OdVM6","name":"Azure Open AI account"}},"typeVersion":1},{"id":"ab7c8c9a-14f8-4276-8d70-ed48759ae002","name":"📋 Fetch Doctor List from Sheet","type":"n8n-nodes-base.googleSheetsTool","position":[-72,1952],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":1035960590,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8/edit#gid=1035960590","cachedResultName":"Doctor details"},"documentId":{"__rl":true,"mode":"list","value":"1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8/edit?usp=drivesdk","cachedResultName":"Patient & Doctors details"}},"credentials":{"googleSheetsOAuth2Api":{"id":"s4dP1fNuVZ2gWvs3","name":"Google Sheets account"}},"typeVersion":4.7},{"id":"437529df-3dbf-47f9-b1f1-89683952c744","name":"⚙️ Normalize Assignment Output","type":"n8n-nodes-base.code","position":[144,1832],"parameters":{"jsCode":"// Get raw AI response\nlet raw = $json;\n\n// If AI returned text containing JSON\nif (typeof raw === \"string\") {\n  try {\n    raw = JSON.parse(raw);\n  } catch {\n    const match = raw.match(/\\{[\\s\\S]*\\}/);\n    if (match) {\n      raw = JSON.parse(match[0]);\n    } else {\n      raw = {};\n    }\n  }\n}\n\n// Helper functions\nconst clean = (value, fallback = \"\") => {\n  if (value === undefined || value === null) return fallback;\n  return String(value).trim();\n};\n\nconst normalizeGender = (gender) => {\n  const g = clean(gender).toLowerCase();\n  if (g.includes(\"male\")) return \"Male\";\n  if (g.includes(\"female\")) return \"Female\";\n  return \"Other\";\n};\n\nconst normalizeAge = (age) => {\n  const num = parseInt(age);\n  if (isNaN(num)) return \"\";\n  return num;\n};\n\nconst normalizeSpecialty = (specialty) => {\n  if (!specialty) return \"General Physician\";\n\n  const s = specialty.toLowerCase();\n\n  if (s.includes(\"cardio\")) return \"Cardiologist\";\n  if (s.includes(\"derma\")) return \"Dermatologist\";\n  if (s.includes(\"ortho\")) return \"Orthopedic\";\n  if (s.includes(\"neuro\")) return \"Neurologist\";\n  if (s.includes(\"ent\")) return \"ENT Specialist\";\n  if (s.includes(\"gastro\")) return \"Gastroenterologist\";\n  if (s.includes(\"pulmo\")) return \"Pulmonologist\";\n  if (s.includes(\"gyn\")) return \"Gynecologist\";\n  if (s.includes(\"pedia\")) return \"Pediatrician\";\n\n  return \"General Physician\";\n};\n\n// Extract patient details\nconst patient = raw.patient_details || {};\n\n// Normalize fields\nconst name = clean(patient.name);\nconst age = normalizeAge(patient.age);\nconst gender = normalizeGender(patient.gender);\nconst symptoms = clean(patient.symptoms);\n\nconst specialty = normalizeSpecialty(raw.recommended_specialty);\nconst doctor = clean(raw.assigned_doctor);\nconst reason = clean(raw.assignment_reason);\n\n// Final normalized object\nconst normalized = {\n  patient_name: name,\n  patient_age: age,\n  patient_gender: gender,\n  symptoms: symptoms,\n  recommended_specialty: specialty,\n  assigned_doctor: doctor,\n  assignment_reason: reason,\n\n  sheet_row: {\n    \"Patient Name\": name,\n    \"Age\": age,\n    \"Gender\": gender,\n    \"Symptoms\": symptoms,\n    \"Specialty\": specialty,\n    \"Doctor Assigned\": doctor\n  }\n};\n\nreturn [{ json: normalized }];"},"typeVersion":2},{"id":"917f4ee8-1b44-427d-b1f6-1a8d17ee6123","name":"📝 Save Assignment to Appointments Sheet","type":"n8n-nodes-base.googleSheets","position":[368,1832],"parameters":{"columns":{"value":{},"schema":[],"mappingMode":"autoMapInputData","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"appendOrUpdate","sheetName":{"__rl":true,"mode":"list","value":813175484,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8/edit#gid=813175484","cachedResultName":"Scheduled appointments"},"documentId":{"__rl":true,"mode":"list","value":"1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8/edit?usp=drivesdk","cachedResultName":"Patient & Doctors details"}},"credentials":{"googleSheetsOAuth2Api":{"id":"s4dP1fNuVZ2gWvs3","name":"Google Sheets account"}},"typeVersion":4.7},{"id":"37b9522c-7e6d-4d81-9499-175bba974b89","name":"📋 Fetch Appointments for Doctor Email","type":"n8n-nodes-base.googleSheets","position":[592,1832],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":813175484,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8/edit#gid=813175484","cachedResultName":"Scheduled appointments"},"documentId":{"__rl":true,"mode":"list","value":"1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8/edit?usp=drivesdk","cachedResultName":"Patient & Doctors details"}},"credentials":{"googleSheetsOAuth2Api":{"id":"s4dP1fNuVZ2gWvs3","name":"Google Sheets account"}},"typeVersion":4.7},{"id":"59e63ad0-287e-41a7-a2d7-c882407b6478","name":"⚙️ Build Doctor Schedule Email HTML","type":"n8n-nodes-base.code","position":[816,1832],"parameters":{"jsCode":"const items = $input.all();\n\n// Extract doctor info from first record\nconst doctorName = items[0]?.json?.doctor_name || \"Doctor\";\nconst date = new Date().toLocaleDateString();\n\n// Build table rows\nlet rows = \"\";\n\nfor (const item of items) {\n  const a = item.json;\n\n  rows += `\n  <tr>\n    <td>${a.time || \"-\"}</td>\n    <td>${a.patient_name || \"-\"}</td>\n    <td>${a.age || \"-\"}</td>\n    <td>${a.gender || \"-\"}</td>\n    <td>${a.symptoms || \"-\"}</td>\n  </tr>\n  `;\n}\n\n// HTML Email Template\nconst html = `\n<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"UTF-8\">\n<style>\nbody{\nfont-family: Arial, sans-serif;\nbackground:#f4f6f9;\nmargin:0;\npadding:0;\n}\n\n.container{\nmax-width:700px;\nmargin:auto;\nbackground:white;\nborder-radius:10px;\noverflow:hidden;\nbox-shadow:0 4px 12px rgba(0,0,0,0.1);\n}\n\n.header{\nbackground:#2c7be5;\ncolor:white;\npadding:25px;\ntext-align:center;\n}\n\n.header h1{\nmargin:0;\nfont-size:22px;\n}\n\n.content{\npadding:25px;\n}\n\n.table{\nwidth:100%;\nborder-collapse:collapse;\nmargin-top:20px;\n}\n\n.table th{\nbackground:#f1f3f7;\npadding:12px;\ntext-align:left;\nfont-size:14px;\nborder-bottom:1px solid #ddd;\n}\n\n.table td{\npadding:12px;\nborder-bottom:1px solid #eee;\nfont-size:13px;\n}\n\n.footer{\npadding:20px;\ntext-align:center;\nfont-size:12px;\ncolor:#888;\nbackground:#f7f7f7;\n}\n</style>\n</head>\n\n<body>\n\n<div class=\"container\">\n\n<div class=\"header\">\n<h1>Daily Appointment Schedule</h1>\n</div>\n\n<div class=\"content\">\n\n<p>Hello <strong>${doctorName}</strong>,</p>\n\n<p>Here is your appointment schedule for <strong>${date}</strong>.</p>\n\n<table class=\"table\">\n\n<thead>\n<tr>\n<th>Time</th>\n<th>Patient</th>\n<th>Age</th>\n<th>Gender</th>\n<th>Symptoms</th>\n</tr>\n</thead>\n\n<tbody>\n\n${rows}\n\n</tbody>\n\n</table>\n\n<p style=\"margin-top:20px;\">\nPlease review the schedule and prepare for the consultations.\n</p>\n\n</div>\n\n<div class=\"footer\">\nAutomated Healthcare Operations System\n</div>\n\n</div>\n\n</body>\n</html>\n`;\n\nreturn [\n{\njson: {\nemail_html: html\n}\n}\n];"},"typeVersion":2},{"id":"e32eaa6d-7abf-4421-80b2-d2c268ee83d5","name":"📧 Send Schedule Email to Doctor","type":"n8n-nodes-base.gmail","position":[1040,1832],"webhookId":"2f8d034d-ca3f-46aa-8ae4-7cd1306c9ca2","parameters":{"sendTo":"info@example.com","message":"={{$json.email_html}}","options":{},"subject":"Today's Appointment Schedule"},"credentials":{"gmailOAuth2":{"id":"RchiXdmY8WaQhOSJ","name":"Gmail account"}},"typeVersion":2.2},{"id":"76c06afc-5d1d-4fad-a69a-9943dee7d3d4","name":"⏰ Hourly Feedback Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[-432,2160],"parameters":{"rule":{"interval":[{"field":"hours"}]}},"typeVersion":1.3},{"id":"f8994eed-f199-48de-bdcc-9d34ea2262a8","name":"📋 Fetch All Appointments for Feedback","type":"n8n-nodes-base.googleSheets","position":[-208,2160],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":813175484,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8/edit#gid=813175484","cachedResultName":"Scheduled appointments"},"documentId":{"__rl":true,"mode":"list","value":"1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1qyt7yT1AzbOurF4P55duqaUoeeAZhyFgbxjMiOONRz8/edit?usp=drivesdk","cachedResultName":"Patient & Doctors details"}},"credentials":{"googleSheetsOAuth2Api":{"id":"s4dP1fNuVZ2gWvs3","name":"Google Sheets account"}},"typeVersion":4.7},{"id":"3c649240-625b-4d33-b192-fcb7a7d09e23","name":"🔀 Filter Completed Visits","type":"n8n-nodes-base.if","position":[16,2160],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"8f0ea0a1-d188-4b82-a51c-8472f75a638d","operator":{"type":"string","operation":"notEmpty","singleValue":true},"leftValue":"={{$json.visit}}","rightValue":""}]}},"typeVersion":2.3},{"id":"26e36e5e-d509-464f-a762-3bcfe818a620","name":"📧 Send Feedback Email to Patient","type":"n8n-nodes-base.gmail","position":[240,2160],"webhookId":"43f92300-e082-44b2-b2c6-8bc964af3025","parameters":{"sendTo":"info@example.com","message":"=Hi {{$json.name}},\n\nPlease rate your experience!\nhere is the feedback form: {{$json.form_link}}","options":{},"subject":"Feedback Form","emailType":"text"},"credentials":{"gmailOAuth2":{"id":"RchiXdmY8WaQhOSJ","name":"Gmail account"}},"typeVersion":2.2}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"5bd13f18-df08-497d-ac5a-2f302f80a812","connections":{"🤖 AI Triage Agent":{"main":[[{"node":"⚙️ Normalize Triage Output","type":"main","index":0}]]},"🔔 Patient Lead Webhook":{"main":[[{"node":"🗂️ Format Patient Data","type":"main","index":0}]]},"🗂️ Format Patient Data":{"main":[[{"node":"🤖 AI Triage Agent","type":"main","index":0}]]},"📊 New Patient Row Trigger":{"main":[[{"node":"🤖 AI Doctor Assignment Agent","type":"main","index":0}]]},"🔀 Filter Completed Visits":{"main":[[{"node":"📧 Send Feedback Email to Patient","type":"main","index":0}]]},"⚙️ Normalize Triage Output":{"main":[[{"node":"📝 Save Triage to Patient Forms Sheet","type":"main","index":0}]]},"🤖 AI Doctor Assignment Agent":{"main":[[{"node":"⚙️ Normalize Assignment Output","type":"main","index":0}]]},"📋 Fetch Doctor List from Sheet":{"ai_tool":[[{"node":"🤖 AI Doctor Assignment Agent","type":"ai_tool","index":0}]]},"⚙️ Normalize Assignment Output":{"main":[[{"node":"📝 Save Assignment to Appointments Sheet","type":"main","index":0}]]},"🧠 Azure OpenAI – Triage Model":{"ai_languageModel":[[{"node":"🤖 AI Triage Agent","type":"ai_languageModel","index":0}]]},"⏰ Hourly Feedback Schedule Trigger":{"main":[[{"node":"📋 Fetch All Appointments for Feedback","type":"main","index":0}]]},"🧠 Azure OpenAI – Assignment Model":{"ai_languageModel":[[{"node":"🤖 AI Doctor Assignment Agent","type":"ai_languageModel","index":0}]]},"⚙️ Build Doctor Schedule Email HTML":{"main":[[{"node":"📧 Send Schedule Email to Doctor","type":"main","index":0}]]},"📋 Fetch All Appointments for Feedback":{"main":[[{"node":"🔀 Filter Completed Visits","type":"main","index":0}]]},"📋 Fetch Appointments for Doctor Email":{"main":[[{"node":"⚙️ Build Doctor Schedule Email HTML","type":"main","index":0}]]},"📝 Save Assignment to Appointments Sheet":{"main":[[{"node":"📋 Fetch Appointments for Doctor Email","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":25,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.set":{"count":1},"n8n-nodes-base.code":{"count":3},"n8n-nodes-base.gmail":{"count":2},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.stickyNote":{"count":6},"n8n-nodes-base.googleSheets":{"count":4},"@n8n/n8n-nodes-langchain.agent":{"count":2},"n8n-nodes-base.scheduleTrigger":{"count":1},"n8n-nodes-base.googleSheetsTool":{"count":1},"n8n-nodes-base.googleSheetsTrigger":{"count":1},"@n8n/n8n-nodes-langchain.lmChatAzureOpenAi":{"count":2}}},"status":"published","readyToDemo":null,"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":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"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/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"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/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/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/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/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/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"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/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"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"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"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":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":841,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheetsTrigger","codex":{"data":{"alias":["CSV","Spreadsheet","GS"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.googlesheetstrigger/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"Google Sheets Trigger"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets Trigger","typeVersion":1,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"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":40,"name":"Support Chatbot"},{"id":47,"name":"AI Chatbot"}],"image":[]}}