{"workflow":{"id":14292,"name":"Triage and escalate tenant complaints from Gmail or forms to Slack with Claude AI","views":22,"recentViews":1,"totalViews":22,"createdAt":"2026-03-24T13:24:40.744Z","description":"\n### How it works\n1. Complaints arrive via Gmail or a web form webhook\n2. Claude AI classifies each complaint: fault category, priority (P1/P2/P3), tenant tone, and drafts an acknowledgement email\n3. The right technician is looked up in Airtable by fault category\n4. A work order is created and the tenant receives an ACK email with their ticket reference and SLA commitment\n5. The FM team is notified in Slack with ticket summary\n6. An hourly schedule checks open tickets — any past their SLA deadline trigger an urgent escalation to FM management\n\n\n### How to set up\n1. Connect Gmail to the **Gmail Trigger** and **Send ACK email** nodes\n2. Create your Airtable base with a **Complaints** table and a **Technician** table (one row per fault category)\n3. Connect Airtable, Anthropic, and Slack in their respective nodes\n4. If using a web form, point it to the Webhook URL","workflow":{"meta":{"instanceId":"9f01dd50b017d28f0948c1eeaced30d9cdf3b675046575bfe1926560a403c1d4","templateCredsSetupCompleted":true},"nodes":[{"id":"c7c2c558-de10-4644-8bb2-89573e22c3f6","name":"Normalise email inputs","type":"n8n-nodes-base.set","position":[1456,496],"parameters":{"fields":{"values":[{"name":"source","stringValue":"Email"},{"name":"raw_complaint","stringValue":"={{ $json.text }}"},{"name":"tenant_email","stringValue":"={{ $json.from.value[0].address }}"},{"name":"tenant_name","stringValue":"={{ $json.from.value[0].name }}"},{"name":"received_at","stringValue":"={{ $json.date }}"}]},"options":{}},"typeVersion":3},{"id":"52e4c530-55fe-4648-bf6f-c65f842d530b","name":"Normalise form inputs","type":"n8n-nodes-base.set","position":[1456,688],"parameters":{"fields":{"values":[{"name":"source","stringValue":"Form"},{"name":"raw_complaint","stringValue":"={{ $json.body.data.fields[2].value }}"},{"name":"tenant_email","stringValue":"={{ $json.body.data.fields[1].value }}"},{"name":"tenant_name","stringValue":"={{ $json.body.data.fields[0].value }}"},{"name":"received_at","stringValue":"={{ $json.body.createdAt }}"}]},"options":{}},"typeVersion":3},{"id":"0b0fe996-34e3-4f79-80f1-532e516753c7","name":"Merge inputs","type":"n8n-nodes-base.merge","position":[1680,592],"parameters":{},"typeVersion":2},{"id":"2c69b3f7-731e-4f9d-8a78-d6a9e149baf2","name":"LLM extract & classify","type":"@n8n/n8n-nodes-langchain.anthropic","position":[1904,592],"parameters":{"modelId":{"__rl":true,"mode":"list","value":"claude-sonnet-4-6","cachedResultName":"claude-sonnet-4-6"},"options":{"temperature":0.1},"messages":{"values":[{"role":"assistant","content":"You are an FM operations assistant for a Singapore commercial building. Extract structured data from tenant complaint text. Tenant base is multilingual (English, Mandarin, Singlish) — always output English.\n\nReturn ONLY valid JSON with these exact fields:\n{\n  \"unit\": \"unit number e.g. #05-12, or 'unknown' if not mentioned\",\n  \"fault_category\": \"one of: ACMV | Plumbing | Electrical | Cleanliness | Access | Noise\",\n  \"urgency_indicators\": \"brief string of urgency signals found in text\",\n  \"tenant_tone\": \"one of: Frustrated | Neutral | Urgent | Abusive\",\n  \"recurrence_signal\": Yes or No,\n  \"priority_tier\": \"one of: P1 | P2 | P3\",\n  \"summary\": \"one sentence plain English summary\",\n  \"ack_email_body\": \"professional acknowledgement, salutation then empty line then body, max 120 words, tone-matched to tenant, no sign-off\"\n}\n\nPriority rules:\n- P1 (2hr SLA): safety hazard, flooding, fire risk, lift entrapment, total power failure multi-unit\n- P2 (4hr SLA): single-unit failure significantly impacting operations\n- P3 (24hr SLA): minor inconvenience, cosmetic, low urgency\n\nFault category rules:\n- ACMV: aircon, ventilation, airflow, cooling, fan coil, freezing, not cold\n- Plumbing: water leak, tap, toilet, drainage, flooding from pipes\n- Electrical: power trip, lights, sockets, circuit breaker, no power\n- Cleanliness: rubbish, pest, cockroach, smell, dirty, bin overflow\n- Access: door, lift, gate, key card, security, intercom, barrier\n- Noise: noise, banging, drilling, music, vibration, loud neighbour"},{"content":"={{ $json.raw_complaint }}"}]}},"typeVersion":1},{"id":"3e84cdbc-5701-4ee9-a1b3-a20ac30501d1","name":"Parse LLM output","type":"n8n-nodes-base.code","position":[2256,592],"parameters":{"jsCode":"// Get LLM response content (handles Anthropic langchain node output formats)\nconst llmRaw = $input.first().json;\nconst content = llmRaw.output\n  || llmRaw.text\n  || llmRaw.message?.content\n  || llmRaw.content?.[0]?.text\n  || '';\n\n// Parse LLM JSON output\nlet parsed;\ntry {\n  const cleaned = content.replace(/```json\\n?/g, '').replace(/```\\n?/g, '').trim();\n  parsed = JSON.parse(cleaned);\n} catch (e) {\n  throw new Error('LLM output is not valid JSON: ' + content.substring(0, 300));\n}\n\n// Pull normalised complaint fields from Merge node (pre-LLM)\nconst norm = $('Merge inputs').first().json;\n\n// SLA deadline calculation\nconst slaHours = { P1: 2, P2: 4, P3: 24 };\nconst hours = slaHours[parsed.priority_tier] || 24;\nconst slaDeadline = new Date(Date.now() + hours * 3600000).toISOString();\n\n// Short ticket ID\nconst ticketId = 'FM-' + Math.random().toString(36).substring(2, 8).toUpperCase();\n\nreturn [{\n  json: {\n    source: norm.source,\n    raw_complaint: norm.raw_complaint,\n    tenant_email: norm.tenant_email,\n    tenant_name: norm.tenant_name,\n    received_at: norm.received_at,\n    ...parsed,\n    ticket_id: ticketId,\n    sla_deadline: slaDeadline,\n    sla_hours: hours\n  }\n}];"},"typeVersion":2},{"id":"fa06f5b6-22f3-41a3-8857-9b6fb97cd2b8","name":"SLA breached?","type":"n8n-nodes-base.if","position":[1904,1136],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"f278200b-ee85-4b22-8234-b47e77ae92cb","operator":{"type":"dateTime","operation":"after"},"leftValue":"={{ $now }}","rightValue":"={{ $json['SLA Deadline'] }}"}]}},"typeVersion":2.3},{"id":"ac4ef243-53fc-4d24-9f71-c757de462ed2","name":"Loop over tickets","type":"n8n-nodes-base.splitInBatches","position":[1680,1136],"parameters":{"options":{"reset":false}},"typeVersion":3},{"id":"25b76e0c-502f-4661-b0f0-ccab3fd8b840","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[1232,1136],"parameters":{"rule":{"interval":[{"field":"hours"}]}},"typeVersion":1.3},{"id":"501e8b4b-4240-48b7-8123-d6560f9443a2","name":"Webhook","type":"n8n-nodes-base.webhook","position":[1232,688],"webhookId":"640466a8-aa16-49ac-b4b2-79cf05a537f3","parameters":{"path":"640466a8-aa16-49ac-b4b2-79cf05a537f3","options":{},"httpMethod":"POST"},"typeVersion":2.1},{"id":"5ee20e19-0fe9-4fff-b794-4b99511f35ac","name":"Search technician","type":"n8n-nodes-base.airtable","position":[2480,592],"parameters":{"base":{"__rl":true,"mode":"list","value":""},"table":{"__rl":true,"mode":"list","value":""},"options":{"fields":["Technician Name","Technician Email"]},"operation":"search","returnAll":false,"filterByFormula":"={Fault Category} = '{{ $json.fault_category }}'"},"typeVersion":2.1},{"id":"25e1c3bd-8608-44ec-9013-48354fd0728d","name":"Create work order","type":"n8n-nodes-base.airtable","position":[2704,592],"parameters":{"base":{"__rl":true,"mode":"list","value":""},"table":{"__rl":true,"mode":"list","value":""},"columns":{"value":{"Unit":"={{ $('Parse LLM output').item.json.unit }}","Source":"={{ $('Merge inputs').item.json.source }}","Status":"Open","Priority":"={{ $('Parse LLM output').item.json.priority_tier }}","Complaint":"={{ $('Parse LLM output').item.json.raw_complaint }}","Recurrence":"={{ $('Parse LLM output').item.json.recurrence_signal }}","CreatedDate":"={{ $now }}","Tenant Name":"={{ $('Parse LLM output').item.json.tenant_name }}","Tenant Tone":"={{ $('Parse LLM output').item.json.tenant_tone }}","SLA Deadline":"={{ $('Parse LLM output').item.json.sla_deadline }}","Tenant Email":"={{ $('Parse LLM output').item.json.tenant_email }}","﻿Ticket ID":"={{ $('Parse LLM output').item.json.ticket_id }}","Fault Category":"={{ $('Parse LLM output').item.json.fault_category }}","Acknowledgement Sent":false,"Assigned Technician Name":"={{ $json['Technician Name'] }}","Assigned Technician Email":"={{ $json['Technician Email'] }}"},"schema":[{"id":"﻿Ticket ID","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"﻿Ticket ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tenant Name","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Tenant Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tenant Email","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Tenant Email","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Unit","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Unit","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Source","type":"options","display":true,"options":[{"name":"Email","value":"Email"},{"name":"Form","value":"Form"}],"removed":false,"readOnly":false,"required":false,"displayName":"Source","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Fault Category","type":"options","display":true,"options":[{"name":"Access","value":"Access"},{"name":"ACMV","value":"ACMV"},{"name":"Cleanliness","value":"Cleanliness"},{"name":"Electrical","value":"Electrical"},{"name":"Noise","value":"Noise"},{"name":"Plumbing","value":"Plumbing"}],"removed":false,"readOnly":false,"required":false,"displayName":"Fault Category","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Complaint","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Complaint","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Priority","type":"options","display":true,"options":[{"name":"P1","value":"P1"},{"name":"P2","value":"P2"},{"name":"P3","value":"P3"}],"removed":false,"readOnly":false,"required":false,"displayName":"Priority","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tenant Tone","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Tenant Tone","defaultMatch":false,"canBeUsedToMatch":true},{"id":"SLA Deadline","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"SLA Deadline","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Status","type":"options","display":true,"options":[{"name":"Open","value":"Open"},{"name":"Closed","value":"Closed"}],"removed":false,"readOnly":false,"required":false,"displayName":"Status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Assigned Technician Name","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Assigned Technician Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Assigned Technician Email","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Assigned Technician Email","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Acknowledgement Sent","type":"boolean","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Acknowledgement Sent","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Closed Date","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Closed Date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"CreatedDate","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"CreatedDate","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Recurrence","type":"options","display":true,"options":[{"name":"Yes","value":"Yes"},{"name":"No","value":"No"}],"removed":false,"readOnly":false,"required":false,"displayName":"Recurrence","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"create"},"typeVersion":2.1},{"id":"14b352b8-34ed-4487-9992-4d86fe29bd24","name":"Send ACK email","type":"n8n-nodes-base.gmail","position":[2928,592],"webhookId":"5e33535f-c5e1-4443-b208-d960f923c741","parameters":{"sendTo":"={{ $('Merge inputs').item.json.tenant_email }}","message":"={{ $('Parse LLM output').item.json.ack_email_body + '\\n\\nTicket reference: ' + $('Parse LLM output').item.json.ticket_id + '\\nExpected response: within ' + $('Parse LLM output').item.json.sla_hours + ' hour(s) — by ' + new Date($('Parse LLM output').item.json.sla_deadline).toLocaleString('en-SG', { timeZone: 'Asia/Singapore', dateStyle: 'short', timeStyle: 'short' }) + ' SGT.\\n\\nFM Management Team' }}","options":{},"subject":"={{ '[' + $('Parse LLM output').item.json.ticket_id + '] Complaint received — ' + $('Parse LLM output').item.json.fault_category }}","emailType":"text"},"typeVersion":2.2},{"id":"3498e956-210a-481d-b248-88f91cff55f3","name":"Update ACK status","type":"n8n-nodes-base.airtable","position":[3152,592],"parameters":{"base":{"__rl":true,"mode":"list","value":""},"table":{"__rl":true,"mode":"list","value":""},"columns":{"value":{"id":"={{ $('Create work order').item.json.id }}","Acknowledgement Sent":true},"schema":[{"id":"id","type":"string","display":true,"removed":false,"readOnly":true,"required":false,"displayName":"id","defaultMatch":true},{"id":"﻿Ticket ID","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"﻿Ticket ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tenant Name","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Tenant Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tenant Email","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Tenant Email","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Unit","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Unit","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Source","type":"options","display":true,"options":[{"name":"Email","value":"Email"}],"removed":false,"readOnly":false,"required":false,"displayName":"Source","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Fault Category","type":"options","display":true,"options":[{"name":"ACMV","value":"ACMV"}],"removed":false,"readOnly":false,"required":false,"displayName":"Fault Category","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Complaint","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Complaint","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Priority","type":"options","display":true,"options":[{"name":"P2","value":"P2"}],"removed":false,"readOnly":false,"required":false,"displayName":"Priority","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tenant Tone","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Tenant Tone","defaultMatch":false,"canBeUsedToMatch":true},{"id":"SLA Deadline","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"SLA Deadline","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Status","type":"options","display":true,"options":[{"name":"Open","value":"Open"},{"name":"Closed","value":"Closed"}],"removed":false,"readOnly":false,"required":false,"displayName":"Status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Assigned Technician Name","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Assigned Technician Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Assigned Technician Email","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Assigned Technician Email","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Acknowledgement Sent","type":"boolean","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Acknowledgement Sent","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Closed Date","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Closed Date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"CreatedDate","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"CreatedDate","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Recurrence","type":"options","display":true,"options":[{"name":"Yes","value":"Yes"},{"name":"No","value":"No"}],"removed":false,"readOnly":false,"required":false,"displayName":"Recurrence","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["id"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update"},"typeVersion":2.1},{"id":"5b5fe4e9-7df8-4f86-b3e7-13133e782ab7","name":"Gmail trigger","type":"n8n-nodes-base.gmailTrigger","position":[1232,496],"parameters":{"simple":false,"filters":{"labelIds":["UNREAD","INBOX"]},"options":{},"pollTimes":{"item":[{"mode":"everyMinute"}]}},"typeVersion":1.3},{"id":"e56b4307-8dba-4ba2-86f1-697cecb9b95b","name":"Send a message","type":"n8n-nodes-base.slack","position":[3376,592],"webhookId":"cda4a086-1b4f-44a5-8b73-04740c243a03","parameters":{"text":"=[{{ $('Create work order').item.json.fields['﻿Ticket ID'] }}] {{ $('Create work order').item.json.fields.Priority }} — {{ $('Create work order').item.json.fields['Fault Category'] }}\n\nUnit: {{ $('Create work order').item.json.fields.Unit }}\nTenant: {{ $('Create work order').item.json.fields['Tenant Name'] }}\nSummary: {{ $('Parse LLM output').item.json.summary }}\nPriority: {{ $('Parse LLM output').item.json.priority_tier }}\nRecurring: {{ $('Create work order').item.json.fields.RecurrenceFlag = 1 ? \"Yes\" : \"No\" }}\n\nAssigned to: {{ $('Create work order').item.json.fields['Assigned Technician Name'] }}\nSLA deadline: {{ new Date($('Parse LLM output').item.json.sla_deadline).toLocaleString('en-SG', { timeZone: 'Asia/Singapore', dateStyle: 'short', timeStyle: 'short' }) }} SGT \n\nUpdate ticket status in AirTable when work begins and when resolved.","select":"channel","blocksUi":"={\n\t\"blocks\": [\n\t\t{\n\t\t\t\"type\": \"section\",\n\t\t\t\"text\": {\n\t\t\t\t\"type\": \"mrkdwn\",\n\t\t\t\t\"text\": \"*[{{ $('Create work order').item.json.fields['﻿Ticket ID'] }}] {{ $('Create work order').item.json.fields.Priority }} — {{ $('Create work order').item.json.fields['Fault Category'] }}*\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"section\",\n\t\t\t\"text\": {\n\t\t\t\t\"type\": \"mrkdwn\",\n\t\t\t\t\"text\": \"*Unit: * {{ $('Create work order').item.json.fields.Unit }}\\n *Tenant: * {{ $('Create work order').item.json.fields['Tenant Name'] }}\\n *Summary: * {{ $('Parse LLM output').item.json.summary }}\\n *Priority: * {{ $('Parse LLM output').item.json.priority_tier }} \\n *Recurring: * {{ $('Create work order').item.json.fields.Recurrence }}\\n\\n *Assigned to: * {{ $('Create work order').item.json.fields['Assigned Technician Name'] }} \\n *SLA deadline: * {{ new Date($('Parse LLM output').item.json.sla_deadline).toLocaleString('en-SG', { timeZone: 'Asia/Singapore', dateStyle: 'short', timeStyle: 'short' }) }} SGT \\n\\n Update ticket status in AirTable when work begins and when resolved.\"\n\t\t\t}\n\t\t}\n\t]\n}","channelId":{"__rl":true,"mode":"list","value":""},"messageType":"block","otherOptions":{},"authentication":"oAuth2"},"typeVersion":2.4},{"id":"775997fe-0156-4fa0-9a92-4d0b9b3bb37b","name":"Search records","type":"n8n-nodes-base.airtable","position":[1456,1136],"parameters":{"base":{"__rl":true,"mode":"list","value":""},"table":{"__rl":true,"mode":"list","value":"","cachedResultUrl":"","cachedResultName":""},"options":{},"operation":"search","returnAll":false,"filterByFormula":"NOT({Status} = 'Closed')"},"typeVersion":2.1},{"id":"134fc5e1-a484-4e1e-99f0-920a451ed841","name":"Escalate to FM Management","type":"n8n-nodes-base.slack","position":[2128,1136],"webhookId":"0fb85ffa-2079-4156-ba24-9eeccb177e22","parameters":{"text":"=SLA BREACH — Immediate Action Required\n\nTicket: {{ $('Loop over tickets').item.json['﻿Ticket ID'] }}\nPriority: {{ $('Loop over tickets').item.json.Priority }}\nCategory: {{ $('Loop over tickets').item.json['Fault Category'] }}\nUnit: {{ $('Loop over tickets').item.json.Unit }}\nTenant: {{ $('Loop over tickets').item.json['Tenant Name'] }}\n\nAssigned to: {{ $('Loop over tickets').item.json['Assigned Technician Name'] }}\nStatus at deadline: {{ $('Loop over tickets').item.json.Status }}\n\nUpdate the ticket in SharePoint and advise the tenant of the delay.","select":"channel","channelId":{"__rl":true,"mode":"list","value":""},"otherOptions":{},"authentication":"oAuth2"},"typeVersion":2.4},{"id":"2952f473-8193-461b-9295-dd733465246b","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[544,224],"parameters":{"width":576,"height":1136,"content":"## FM Complaint Triage & SLA Escalation                                                                                                                                                                             \nFacility management teams waste hours manually reading tenant emails, deciding urgency, and chasing overdue tickets. This workflow automates the entire intake-to-dispatch loop from complaint received to technician notified.\n\n               \n### Who's it for                                                                                                                                            \nFM managers and operations teams in commercial buildings who receive tenant complaints by email or web form.\n\n\n### How it works\n1. Complaints arrive via Gmail or a web form webhook\n2. Claude AI classifies each complaint: fault category, priority (P1/P2/P3), tenant tone, and drafts an acknowledgement email\n3. The right technician is looked up in Airtable by fault category\n4. A work order is created and the tenant receives an ACK email with their ticket reference and SLA commitment\n5. The FM team is notified in Slack with ticket summary\n6. An hourly schedule checks open tickets — any past their SLA deadline trigger an urgent escalation to FM management\n\n\n### How to set up\n1. Connect Gmail to the **Gmail Trigger** and **Send ACK email** nodes\n2. Create your Airtable base with a **Complaints** table and a **Technician** table (one row per fault category)\n3. Connect Airtable, Anthropic, and Slack in their respective nodes\n4. If using a web form, point it to the Webhook URL\n\n\n### Requirements\n- Gmail account\n- Airtable account\n- Anthropic API key\n- Slack workspace.\n\n\n### How to customize the workflow\n- Edit the LLM system prompt and the **Parse LLM output** node to change fault categories or SLA hours.\n- Point the escalation node to a separate management-only Slack channel if needed. \n- Remove the Webhook trigger and **Normalise form inputs** node if you only use email."},"typeVersion":1},{"id":"92cd41f1-a1a5-42f2-bd50-9cceab22455f","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[1152,224],"parameters":{"color":7,"width":672,"height":672,"content":"**1. Complaint ingestion**\n\nAccepts complaints from two sources:\n- **Gmail Trigger** polls your shared FM inbox every minute for new INBOX messages\n- **Webhook** receives POST requests from a web form (Tally, Typeform, Power Automate, etc.)\n\nBoth paths are normalised into identical fields (source, raw_complaint, tenant_email, tenant_name, received_at) and merged into a single item before classification."},"typeVersion":1},{"id":"7072c2ea-62db-4c4b-9a03-a0d3e59f04f6","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1856,224],"parameters":{"color":7,"width":528,"height":672,"content":"**2. AI triage (Claude Sonnet)**\n\nClaude classifies the complaint and returns structured JSON:\n- Fault category: ACMV | Plumbing | Electrical | Cleanliness | Access | Noise\n- Priority: P1 (2hr SLA) | P2 (4hr SLA) | P3 (24hr SLA)\n- Tenant tone: Frustrated | Neutral | Urgent | Abusive\n- Recurrence signal, urgency indicators, plain-English summary\n- Draft acknowledgement email (tone-matched, max 120 words)\n\nThe Parse LLM output node strips markdown fences, parses JSON, generates a ticket ID (FM-XXXXXX), and calculates the SLA deadline timestamp."},"typeVersion":1},{"id":"29a0f377-d27b-4f68-bbeb-ed6216b219a1","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[2416,224],"parameters":{"color":7,"width":416,"height":672,"content":"**3. Technician assignment & work order**\n\nLooks up the on-call technician for the fault category from your Airtable Technician table, then creates a full work order in the Complaints table.\n\nThe Technician table must have at least one row per fault category (ACMV, Plumbing, Electrical, Cleanliness, Access, Noise) with Technician Name and Technician Email columns."},"typeVersion":1},{"id":"5e21da6b-77e3-41e9-938b-7fb2aeb4991f","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[2864,224],"parameters":{"color":7,"width":720,"height":672,"content":"**4. Tenant acknowledgement and dispatch**\n\nSends the AI-drafted acknowledgement email to the tenant with:\n- Ticket reference (FM-XXXXXX)\n- SLA commitment (e.g. \"within 4 hours — by 3:45 PM SGT\")\n\nAcknowledgement Sent is then updated to true in Airtable so the SLA monitor knows not to double-escalate on a fresh ticket.\n\nOn-call technician is dispatched via an AI-drafted Slack message."},"typeVersion":1},{"id":"24c5cbb6-03d2-4053-94c8-1f84aa27c3f4","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[1152,928],"parameters":{"color":7,"width":1232,"height":432,"content":"**5. Hourly SLA monitoring**\n\nRuns independently on a 1-hour schedule. Fetches all open tickets from Airtable, loops through each one, and checks whether the SLA Deadline has passed.\n\nAny breached ticket triggers an urgent Slack message to the FM management channel with ticket details, assigned technician, and current status.\n\nTickets are only removed from the escalation loop once their Status is set to \"Closed\" in Airtable."},"typeVersion":1}],"pinData":{},"connections":{"Webhook":{"main":[[{"node":"Normalise form inputs","type":"main","index":0}]]},"Merge inputs":{"main":[[{"node":"LLM extract & classify","type":"main","index":0}]]},"Gmail trigger":{"main":[[{"node":"Normalise email inputs","type":"main","index":0}]]},"SLA breached?":{"main":[[{"node":"Escalate to FM Management","type":"main","index":0}]]},"Search records":{"main":[[{"node":"Loop over tickets","type":"main","index":0}]]},"Send ACK email":{"main":[[{"node":"Update ACK status","type":"main","index":0}]]},"Parse LLM output":{"main":[[{"node":"Search technician","type":"main","index":0}]]},"Schedule Trigger":{"main":[[{"node":"Search records","type":"main","index":0}]]},"Create work order":{"main":[[{"node":"Send ACK email","type":"main","index":0}]]},"Loop over tickets":{"main":[[],[{"node":"SLA breached?","type":"main","index":0}]]},"Search technician":{"main":[[{"node":"Create work order","type":"main","index":0}]]},"Update ACK status":{"main":[[{"node":"Send a message","type":"main","index":0}]]},"Normalise form inputs":{"main":[[{"node":"Merge inputs","type":"main","index":1}]]},"LLM extract & classify":{"main":[[{"node":"Parse LLM output","type":"main","index":0}]]},"Normalise email inputs":{"main":[[{"node":"Merge inputs","type":"main","index":0}]]},"Escalate to FM Management":{"main":[[{"node":"Loop over tickets","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":23,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.set":{"count":2},"n8n-nodes-base.code":{"count":1},"n8n-nodes-base.gmail":{"count":1},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.slack":{"count":2},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.airtable":{"count":4},"n8n-nodes-base.stickyNote":{"count":6},"n8n-nodes-base.gmailTrigger":{"count":1},"n8n-nodes-base.splitInBatches":{"count":1},"n8n-nodes-base.scheduleTrigger":{"count":1},"@n8n/n8n-nodes-langchain.anthropic":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Andrew Loh","username":"andrewloh","bio":"Helping Singapore SMEs unlock their untapped potentials through automation.","verified":false,"links":["https://cadence-innovations.com/"],"avatar":"https://gravatar.com/avatar/af365d0f088f12655ddb160f420551a0953a2eb1c02ca1bdbf22a9887f621a75?r=pg&d=retro&size=200"},"nodes":[{"id":2,"icon":"file:airtable.svg","name":"n8n-nodes-base.airtable","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/2021-goals-level-up-your-vocabulary-with-vonage-and-n8n/","icon":"🎯","label":"2021 Goals: Level Up Your Vocabulary With Vonage and n8n"},{"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/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/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/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"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/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/sending-sms-the-low-code-way-with-airtable-twilio-programmable-sms-and-n8n/","icon":"📱","label":"Sending SMS the Low-Code Way with Airtable, Twilio Programmable SMS, and n8n"},{"url":"https://n8n.io/blog/automating-conference-organization-processes-with-n8n/","icon":"🙋‍♀️","label":"Automating Conference Organization Processes with n8n"},{"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/app-nodes/n8n-nodes-base.airtable/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/airtable/"}]},"categories":["Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Airtable"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMTcwIj48cGF0aCBmaWxsPSIjZmNiNDAwIiBkPSJNODkgNC44IDE2LjIgMzQuOWMtNC4xIDEuNy00IDcuNC4xIDkuMWw3My4yIDI5YzYuNCAyLjYgMTMuNiAyLjYgMjAgMGw3My4yLTI5YzQuMS0xLjYgNC4xLTcuNC4xLTkuMWwtNzMtMzAuMUMxMDMuMiAyIDk1LjcgMiA4OSA0LjgiLz48cGF0aCBmaWxsPSIjMThiZmZmIiBkPSJNMTA1LjkgODguOXY3Mi41YzAgMy40IDMuNSA1LjggNi43IDQuNWw4MS42LTMxLjdjMS45LS43IDMuMS0yLjUgMy4xLTQuNVY1Ny4yYzAtMy40LTMuNS01LjgtNi43LTQuNUwxMDkgODQuM2MtMS45LjgtMy4xIDIuNi0zLjEgNC42Ii8+PHBhdGggZmlsbD0iI2Y4MmI2MCIgZD0ibTg2LjkgOTIuNi0yNC4yIDExLjctMi41IDEuMkw5LjEgMTMwYy0zLjIgMS42LTcuNC0uOC03LjQtNC40VjU3LjVjMC0xLjMuNy0yLjQgMS42LTMuM3EuNi0uNiAxLjItLjljMS4yLS43IDMtLjkgNC40LS4zbDc3LjUgMzAuN2M0IDEuNSA0LjMgNy4xLjUgOC45Ii8+PHBhdGggZmlsbD0iI2JhMWU0NSIgZD0ibTg2LjkgOTIuNi0yNC4yIDExLjctNTkuNC01MHEuNi0uNiAxLjItLjljMS4yLS43IDMtLjkgNC40LS4zbDc3LjUgMzAuN2M0IDEuNCA0LjMgNyAuNSA4LjgiLz48L3N2Zz4="},"displayName":"Airtable","typeVersion":2,"nodeCategories":[{"id":3,"name":"Data & Storage"}]},{"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":24,"icon":"file:merge.svg","name":"n8n-nodes-base.merge","codex":{"data":{"alias":["Join","Concatenate","Wait"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-sync-data-between-two-systems/","icon":"🏬","label":"How to synchronize data between two systems (one-way vs. two-way sync"},{"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/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"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/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/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.merge/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Merge"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Merge","typeVersion":3,"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":39,"icon":"fa:sync","name":"n8n-nodes-base.splitInBatches","codex":{"data":{"alias":["Loop","Concatenate","Batch","Split","Split In Batches"],"resources":{"generic":[{"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/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"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Loop Over Items","color":"#007755"},"iconData":{"icon":"sync","type":"icon"},"displayName":"Loop Over Items (Split in Batches)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":40,"icon":"file:slack.svg","name":"n8n-nodes-base.slack","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/slack/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Slack"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIgZD0iTTQwLjc0MSA5My41NWMwLTguNzM1IDYuNjA3LTE1Ljc3MiAxNC44MTUtMTUuNzcyczE0LjgxNSA3LjAzNyAxNC44MTUgMTUuNzcydjM4LjgyNGMwIDguNzM3LTYuNjA3IDE1Ljc3NC0xNC44MTUgMTUuNzc0cy0xNC44MTUtNy4wMzctMTQuODE1LTE1Ljc3MnoiLz48cGF0aCBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiIGQ9Ik05My41NSAxMDcuNDA4Yy04LjczNSAwLTE1Ljc3Mi02LjYwNy0xNS43NzItMTQuODE1czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiLz48cGF0aCBmaWxsPSIjMmZiNjdjIiBzdHJva2U9IiMyZmI2N2MiIGQ9Ik03Ny43NzggMTUuNzcyQzc3Ljc3OCA3LjAzNyA4NC4zODUgMCA5Mi41OTMgMHMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjZjMCA4LjczNS02LjYwNyAxNS43NzItMTQuODE1IDE1Ljc3MnMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6Ii8+PHBhdGggZmlsbD0iIzM2YzVmMSIgc3Ryb2tlPSIjMzZjNWYxIiBkPSJNMTUuNzcyIDcwLjM3MUM3LjAzNyA3MC4zNzEgMCA2My43NjMgMCA1NS41NTZzNy4wMzctMTQuODE1IDE1Ljc3Mi0xNC44MTVoMzguODI2YzguNzM1IDAgMTUuNzcyIDYuNjA3IDE1Ljc3MiAxNC44MTVzLTcuMDM3IDE0LjgxNS0xNS43NzIgMTQuODE1eiIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIgZD0iTTc3Ljc3OCAxMzMuMzMzYzAgOC4yMDggNi42MDcgMTQuODE1IDE0LjgxNSAxNC44MTVzMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNS0xNC44MTVINzcuNzc4eiIvPjxwYXRoIGZpbGw9IiMyZmI2N2MiIHN0cm9rZT0iIzJmYjY3YyIgZD0iTTEzMy4zMzQgNzAuMzcxaC0xNC44MTVWNTUuNTU2YzAtOC4yMDcgNi42MDctMTQuODE1IDE0LjgxNS0xNC44MTVzMTQuODE1IDYuNjA3IDE0LjgxNSAxNC44MTUtNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTV6Ii8+PHBhdGggZmlsbD0iI2UwMWU1YSIgc3Ryb2tlPSIjZTAxZTVhIiBkPSJNMTQuODE1IDc3Ljc3OEgyOS42M3YxNC44MTVjMCA4LjIwNy02LjYwNyAxNC44MTUtMTQuODE1IDE0LjgxNVMwIDEwMC44IDAgOTIuNTkzczYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1eiIvPjxwYXRoIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIgZD0iTTcwLjM3MSAxNC44MTVWMjkuNjNINTUuNTU2Yy04LjIwNyAwLTE0LjgxNS02LjYwNy0xNC44MTUtMTQuODE1UzQ3LjM0OCAwIDU1LjU1NiAwczE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1eiIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Slack","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"id":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":824,"icon":"file:gmail.svg","name":"n8n-nodes-base.gmailTrigger","codex":{"data":{"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/trigger-nodes/n8n-nodes-base.gmailtrigger/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Communication"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"Gmail Trigger"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"},"displayName":"Gmail Trigger","typeVersion":1,"nodeCategories":[{"id":6,"name":"Communication"}]},{"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":1312,"icon":"file:anthropic.svg","name":"@n8n/n8n-nodes-langchain.anthropic","codex":{"data":{"alias":["LangChain","document","image","assistant","claude"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-langchain.anthropic/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Miscellaneous","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"Anthropic"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzdEN0Q4NyIgZD0iTTMyLjczIDBoLTYuOTQ1TDM4LjQ1IDMyaDYuOTQ1ek0xMi42NjUgMCAwIDMyaDcuMDgybDIuNTktNi43MmgxMy4yNWwyLjU5IDYuNzJoNy4wODJMMTkuOTI5IDB6bS0uNzAyIDE5LjMzNyA0LjMzNC0xMS4yNDYgNC4zMzQgMTEuMjQ2eiIvPjwvc3ZnPgo="},"displayName":"Anthropic","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":41,"name":"Ticket Management"},{"id":49,"name":"AI Summarization"}],"image":[]}}