{"workflow":{"id":13723,"name":"Automate WhatsApp lead follow-ups and nurturing with WATI, Airtable and OpenAI","views":137,"recentViews":1,"totalViews":137,"createdAt":"2026-02-26T08:59:13.465Z","description":"Maximize your conversion rates with this end-to-end automated outreach and lead nurturing system. This workflow manages the entire sales lifecycle—from instant contact enrollment via WhatsApp to AI-personalized follow-ups and comprehensive A/B performance tracking—all integrated through WATI, Airtable, and OpenAI.\n\n---\n\n## 🎯 What This Workflow Does\n\nThis template operates across four specialized pipelines to ensure no lead is left behind:\n\n### 📥 Pipeline A: Instant Enrollment\nSales reps can enroll a new lead directly from WhatsApp by typing a simple command (e.g., `enroll &lt;phone&gt; &lt;name&gt; &lt;company&gt; &lt;campaignId&gt;`). The system automatically assigns an A/B testing variant and saves the record to Airtable.\n\n### ⏰ Pipeline B: Intelligent Follow-up Scheduler\nEvery morning at 9 AM, the bot identifies leads due for a touchpoint. OpenAI generates a unique, personalized message based on the lead's profile and assigned tone (Formal vs. Casual), which is then delivered via WATI.\n\n### 💬 Pipeline C: Engagement & Intent Tracker\nEvery inbound reply is analyzed by AI to detect the lead's intent (e.g., \"Interested\", \"Question\", or \"Unsubscribe\"). The system automatically updates the CRM status and, if a lead unsubscribes or converts, instantly pauses future automated follow-ups.\n\n### 📊 Pipeline D: Real-time Analytics\nBy sending the command `report`, you receive an instant performance dashboard showing conversion rates, total engagement, and a clear comparison of which A/B variant is winning.\n\n---\n\n## ✨ Key Features\n\n- **Command-Based Control:** Manage your entire CRM database using simple WhatsApp keywords like `enroll`, `report`, and `pause`.\n- **Dynamic Personalization:** OpenAI crafts context-aware messages that mention the lead’s specific company and name, avoiding the \"bot feel\" of standard templates.\n- **Built-in A/B Testing:** Automatically splits leads into two groups to test different messaging strategies and find what converts best.\n- **Reputation Protection:** Immediate status updates for \"Unsubscribe\" or \"Not Interested\" intents ensure you remain compliant and professional.\n- **Rich CRM Integration:** Uses Airtable to store detailed logs of every sent message and received reply for a complete audit trail.\n\n---\n\n## 💼 Perfect For\n\n- **SDR & Sales Teams:** Automating the first 5–7 touchpoints so reps can focus only on \"Interested\" leads.\n- **Event Organizers:** Following up with attendees post-webinar or conference.\n- **Recruiters:** Managing candidate outreach and tracking initial screening responses.\n- **Agencies:** Running outreach campaigns for multiple clients from a single dashboard.\n\n---\n\n## 🔧 What You'll Need\n\n### Required Integrations\n\n- **WATI:** For WhatsApp triggering and message dispatch.\n- **Airtable:** To act as your central campaign database.\n- **OpenAI API:** For intelligent message generation and intent detection.\n\n### Configuration Steps\n\n1. **Airtable:** Create a base with four tables:\n   - `Contacts`\n   - `Campaigns`\n   - `FollowUps`\n   - `Engagement`\n\n2. **Airtable IDs:** Replace the placeholder Base and Table IDs in all Airtable nodes.\n\n3. **WATI:** Set up your WATI API credentials.\n\n---\n\nReady to scale your outreach? Import this template and connect your Airtable to start automating your follow-up campaigns today!","workflow":{"meta":{"instanceId":"277842713620d9f5554de3b1518b865a152c8c4db680008bd8aec536fc18b4a8","templateCredsSetupCompleted":true},"nodes":[{"id":"0c72eca1-6a9b-4160-953e-2db5fd3a68fd","name":"📥 Pipeline A · Campaign Setup","type":"n8n-nodes-base.stickyNote","position":[512,640],"parameters":{"color":7,"width":880,"height":448,"content":" *(enroll path)*\n`Parse Enroll Command` *(code — extracts phone/name/company/campaignId, assigns A/B variant randomly)*.`Airtable – Create Contact` *(appends row to Contacts table)*.`WATI – Confirm Enrollment` *(confirms to the sales rep)*.`WATI – Send Welcome to Contact` *(sends first touch message to the new contact)*"},"typeVersion":1},{"id":"ccc5979b-edeb-4ffb-9eaa-409e714736e3","name":"📊 Pipeline D · Analytics Dashboard","type":"n8n-nodes-base.stickyNote","position":[496,1168],"parameters":{"color":7,"width":968,"height":384,"content":"Analytics Dashboard\n**Flow:**\n*(routed from Command Router when sender types `report`)*.`Airtable – Read All FollowUps`*(lists all FollowUps records)*.`Airtable – Read All Engagement`*(lists all Engagement records)*.`Build Analytics Report`*(code — computes all stats and A/B comparison)*.`WATI – Send Analytics Report`*(sends full dashboard to the requester)*"},"typeVersion":1},{"id":"c959b458-4f23-42a2-8cda-45002cce6fad","name":"Wati Trigger","type":"n8n-nodes-wati.watiTrigger","position":[-480,1472],"webhookId":"wh-001","parameters":{"event":"messageReceived"},"credentials":{"watiApi":{"id":"PDZjPbDJZxEuQ0Bv","name":"Wati account"}},"typeVersion":1},{"id":"37f201d3-163c-40c6-b8a5-0e669c853bb6","name":"Command Router","type":"n8n-nodes-base.switch","position":[-64,1440],"parameters":{"rules":{"values":[{"outputKey":"Enroll Contact","conditions":{"options":{"caseSensitive":false,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"startsWith"},"leftValue":"={{ $json.text }}","rightValue":"enroll "}]},"renameOutput":true},{"outputKey":"Analytics Report","conditions":{"options":{"caseSensitive":false,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.text.toLowerCase().trim() }}","rightValue":"report"}]},"renameOutput":true},{"outputKey":"Pause Contact","conditions":{"options":{"caseSensitive":false,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"startsWith"},"leftValue":"={{ $json.text }}","rightValue":"pause "}]},"renameOutput":true}]},"options":{"fallbackOutput":"extra"}},"typeVersion":3},{"id":"a6823936-61cb-484f-9865-fe4030a02c0d","name":"Parse Enroll Command","type":"n8n-nodes-base.code","position":[544,816],"parameters":{"jsCode":"// Parse: enroll <phone> <name> <company> <campaignId>\n// Example: enroll 919876543210 Priya Sharma Acme Corp CAMP-001\nconst text = ($json.text || '').trim();\nconst senderPhone = $json.waId || $json.from;\nconst senderName  = $json.senderName || 'Rep';\n\nconst parts = text.replace(/^enroll\\s+/i,'').trim().split(' ');\nif (parts.length < 4) {\n  return [{ json: {\n    senderPhone, senderName, valid: false,\n    errMsg: `⚠️ Invalid format. Use:\\n*enroll <phone> <name> <company> <campaignId>*\\nExample: *enroll 919876543210 Priya Acme CAMP-001*`\n  }}];\n}\n\nconst contactPhone = parts[0];\nconst campaignId   = parts[parts.length - 1];\nconst company      = parts.slice(2, parts.length - 1).join(' ') || 'Unknown';\nconst contactName  = parts[1];\n\n// Assign A/B variant randomly\nconst variant = Math.random() < 0.5 ? 'A' : 'B';\n\nconst now = new Date();\nconst tomorrow = new Date(now); tomorrow.setDate(tomorrow.getDate() + 1);\n\nreturn [{ json: {\n  senderPhone, senderName, valid: true,\n  contactPhone, contactName, company, campaignId, variant,\n  enrolledAt:    now.toISOString(),\n  nextFollowUp:  tomorrow.toISOString().split('T')[0],\n  confirmMsg: `✅ *Contact Enrolled!*\\n\\n👤 *${contactName}* (${company})\\n📞 ${contactPhone}\\n🎯 Campaign: ${campaignId}\\n🔀 Variant: ${variant}\\n\\n📅 First follow-up: tomorrow`\n}}];"},"typeVersion":2},{"id":"d823f64e-d2a3-47df-85cd-9024a154f3e7","name":"Airtable – Create Contact","type":"n8n-nodes-base.airtable","position":[800,816],"parameters":{"base":{"__rl":true,"mode":"list","value":"appBOslXzqBuBTIv8","cachedResultUrl":"https://airtable.com/appBOslXzqBuBTIv8","cachedResultName":"Campaign Manager"},"table":{"__rl":true,"mode":"list","value":"tbl7ZtUheEOFOvPEL","cachedResultUrl":"https://airtable.com/appBOslXzqBuBTIv8/tbl7ZtUheEOFOvPEL","cachedResultName":"Contacts Table"},"columns":{"value":{"phone":"={{ $json.contactPhone }}","status":"Active","company":"={{ $json.company }}","enrolledAt":"={{ $json.enrolledAt }}","nextFollowUp":"={{ $json.nextFollowUp }}","followUpCount":"=0"},"schema":[{"id":"Name","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"phone","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"phone","defaultMatch":false,"canBeUsedToMatch":true},{"id":"company","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"company","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Campaign Id","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Campaign Id","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Variant","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Variant","defaultMatch":false,"canBeUsedToMatch":true},{"id":"followUpCount","type":"number","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"followUpCount","defaultMatch":false,"canBeUsedToMatch":true},{"id":"nextFollowUp","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"nextFollowUp","defaultMatch":false,"canBeUsedToMatch":true},{"id":"status","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"enrolledAt","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"enrolledAt","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"create"},"credentials":{"airtableTokenApi":{"id":"LqCCbENo1u06foZ9","name":"Airtable - Deepanshi"}},"typeVersion":2},{"id":"1ed3b49c-4e4e-48d2-af08-86c0f85516da","name":"WATI – Confirm Enrollment","type":"n8n-nodes-wati.wati","position":[1040,736],"parameters":{"target":"={{ $('Parse Enroll Command').item.json.senderPhone }}","messageText":"={{ $('Parse Enroll Command').item.json.confirmMsg }}"},"credentials":{"watiApi":{"id":"LeAm3lDk4hC1D2Qy","name":"wati - templates"}},"typeVersion":1},{"id":"73444670-14cd-4e79-9c26-c8eb0770e60a","name":"WATI – Send Welcome to Contact","type":"n8n-nodes-wati.wati","position":[1056,912],"parameters":{"target":"={{ $('Parse Enroll Command').item.json.contactPhone }}","messageText":"=👋 Hi *{{ $('Parse Enroll Command').item.json.contactName }}*!\n\nWe wanted to reach out and introduce ourselves. We'll be in touch soon with something relevant to *{{ $('Parse Enroll Command').item.json.company }}*.\n\nFeel free to reply anytime — we're here to help! 🙌"},"credentials":{"watiApi":{"id":"LeAm3lDk4hC1D2Qy","name":"wati - templates"}},"typeVersion":1},{"id":"3bb67842-3006-4c5d-a96c-8e1d18857696","name":"Parse Pause Command","type":"n8n-nodes-base.code","position":[576,1712],"parameters":{"jsCode":"const text  = ($json.text || '').trim();\nconst phone = text.replace(/^pause\\s+/i,'').trim();\nconst senderPhone = $json.waId || $json.from;\nreturn [{ json: { phone, senderPhone, msg: `⏸️ Contact *${phone}* has been paused.\\nThey will no longer receive follow-ups until resumed.` } }];"},"typeVersion":2},{"id":"b71c7a1f-54d3-48c5-8a7f-eac1a84418c4","name":"Airtable – Pause Contact","type":"n8n-nodes-base.airtable","position":[784,1712],"parameters":{"base":{"__rl":true,"mode":"list","value":"appBOslXzqBuBTIv8","cachedResultUrl":"https://airtable.com/appBOslXzqBuBTIv8","cachedResultName":"Campaign Manager"},"table":{"__rl":true,"mode":"list","value":"tbl7ZtUheEOFOvPEL","cachedResultUrl":"https://airtable.com/appBOslXzqBuBTIv8/tbl7ZtUheEOFOvPEL","cachedResultName":"Contacts Table"},"columns":{"value":{},"schema":[{"id":"id","type":"string","display":true,"removed":false,"readOnly":true,"required":false,"displayName":"id","defaultMatch":true},{"id":"Name","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"phone","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"phone","defaultMatch":false,"canBeUsedToMatch":true},{"id":"company","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"company","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Campaign Id","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Campaign Id","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Variant","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Variant","defaultMatch":false,"canBeUsedToMatch":true},{"id":"followUpCount","type":"number","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"followUpCount","defaultMatch":false,"canBeUsedToMatch":true},{"id":"nextFollowUp","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"nextFollowUp","defaultMatch":false,"canBeUsedToMatch":true},{"id":"status","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"enrolledAt","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"enrolledAt","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["id"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update"},"credentials":{"airtableTokenApi":{"id":"LqCCbENo1u06foZ9","name":"Airtable - Deepanshi"}},"typeVersion":2},{"id":"65c89e37-a59d-4090-91fa-69d0976c7698","name":"WATI – Confirm Pause","type":"n8n-nodes-wati.wati","position":[992,1712],"parameters":{"target":"={{ $json.senderPhone }}","messageText":"={{ $json.msg }}"},"credentials":{"watiApi":{"id":"LeAm3lDk4hC1D2Qy","name":"wati - templates"}},"typeVersion":1},{"id":"ac02ba19-d670-4539-95ec-819fd9766525","name":"Schedule Trigger – 9AM Daily","type":"n8n-nodes-base.scheduleTrigger","position":[2576,1504],"parameters":{"rule":{"interval":[{"field":"cronExpression","expression":"0 9 * * *"}]}},"typeVersion":1.2},{"id":"d344cbf1-10db-4904-beb8-a7e71e7d3755","name":"Airtable – Read Active Contacts","type":"n8n-nodes-base.airtable","position":[2816,1504],"parameters":{"options":{},"resource":"base"},"credentials":{"airtableTokenApi":{"id":"3t89Q5x8gm0hM0Tx","name":"Airtable Personal Access Token account"}},"typeVersion":2},{"id":"f9ec16ae-ba7e-45a6-a066-ed29e252a254","name":"Filter Due Follow-ups","type":"n8n-nodes-base.code","position":[3056,1504],"parameters":{"jsCode":"// Filter contacts where nextFollowUp <= today AND status = Active\nconst allRows = $input.all();\nconst today   = new Date().toISOString().split('T')[0];\n\nconst due = allRows.filter(r => {\n  const s = (r.json.status || '').toLowerCase();\n  const d = r.json.nextFollowUp || '';\n  return s === 'active' && d <= today;\n});\n\nif (due.length === 0) return [{ json: { message: 'No follow-ups due today', count: 0 } }];\n\nreturn due.map(r => ({ json: {\n  recordId:      r.json.id,\n  contactId:     r.json.id,\n  phone:         r.json.phone,\n  name:          r.json.name,\n  company:       r.json.company,\n  campaignId:    r.json.campaignId,\n  variant:       r.json.variant || 'A',\n  followUpCount: parseInt(r.json.followUpCount || 0),\n  stepNumber:    parseInt(r.json.followUpCount || 0) + 1,\n  lastFollowUp:  r.json.lastFollowUp || null\n}}));"},"typeVersion":2},{"id":"fe514b6c-4747-48a3-a1c8-8d2c44461c87","name":"Airtable – Read Campaign","type":"n8n-nodes-base.airtable","position":[3296,1504],"parameters":{"options":{},"resource":"base"},"credentials":{"airtableTokenApi":{"id":"3t89Q5x8gm0hM0Tx","name":"Airtable Personal Access Token account"}},"typeVersion":2},{"id":"cf1115a6-1b14-4b9b-ae6f-829a48967cc5","name":"OpenAI – Personalise Follow-up Message","type":"n8n-nodes-base.httpRequest","position":[3536,1504],"parameters":{"url":"https://api.openai.com/v1/chat/completions","method":"POST","options":{},"sendHeaders":true,"authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]},"nodeCredentialType":"openAiApi"},"credentials":{"openAiApi":{"id":"8IkhtT3EbXygnvcr","name":"Mediajade"},"httpHeaderAuth":{"id":"GKgCj9WxmYpiz70D","name":"Stripe Header Auth"}},"typeVersion":4.2},{"id":"d4108fc2-e81a-4203-a3f9-33974c08824e","name":"Build Follow-up Row","type":"n8n-nodes-base.code","position":[3776,1504],"parameters":{"jsCode":"// Build the FollowUps log row + compute next follow-up date\nconst contact  = $('Filter Due Follow-ups').item.json;\nconst msgRaw   = $json?.choices?.[0]?.message?.content || '';\nconst message  = msgRaw.trim();\nconst now      = new Date();\n\n// Compute next follow-up: 3 days from today (adjust per campaign intervalDays if available)\nconst allCampaigns = $('Airtable – Read Campaign').all ? $('Airtable – Read Campaign').all() : [];\nconst campaign = allCampaigns.find(r => r.json.campaignId === contact.campaignId);\nconst intervalDays = parseInt(campaign?.json?.intervalDays || 3);\n\nconst nextDate = new Date(now);\nnextDate.setDate(nextDate.getDate() + intervalDays);\n\nconst followUpId = `FU-${contact.phone}-${now.getTime()}`;\n\nreturn [{ json: {\n  followUpId,\n  contactId:    contact.contactId,\n  recordId:     contact.recordId,\n  phone:        contact.phone,\n  name:         contact.name,\n  campaignId:   contact.campaignId,\n  variant:      contact.variant,\n  stepNumber:   contact.stepNumber,\n  messageText:  message,\n  sentAt:       now.toISOString(),\n  nextFollowUp: nextDate.toISOString().split('T')[0],\n  newCount:     contact.followUpCount + 1\n}}];"},"typeVersion":2},{"id":"f04f5e61-95e0-4d93-a8e6-ff1342f89d77","name":"Airtable – Log Follow-up Sent","type":"n8n-nodes-base.airtable","position":[4016,1504],"parameters":{"base":{"__rl":true,"mode":"list","value":"appBOslXzqBuBTIv8","cachedResultUrl":"https://airtable.com/appBOslXzqBuBTIv8","cachedResultName":"Campaign Manager"},"table":{"__rl":true,"mode":"list","value":"tblSlSYnAeIG2LVA9","cachedResultUrl":"https://airtable.com/appBOslXzqBuBTIv8/tblSlSYnAeIG2LVA9","cachedResultName":"FollowUps Table"},"columns":{"value":{"phone":"={{ $json.phone }}","sentAt":"={{ $json.sentAt }}","variant":"={{ $json.variant }}","contactId":"={{ $json.contactId }}","campaignId":"={{ $json.campaignId }}","stepNumber":"={{ $json.stepNumber }}","messageText":"={{ $json.messageText }}"},"schema":[{"id":"followUpId","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"followUpId","defaultMatch":false,"canBeUsedToMatch":true},{"id":"contactId","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"contactId","defaultMatch":false,"canBeUsedToMatch":true},{"id":"phone","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"phone","defaultMatch":false,"canBeUsedToMatch":true},{"id":"campaignId","type":"number","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"campaignId","defaultMatch":false,"canBeUsedToMatch":true},{"id":"variant","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"variant","defaultMatch":false,"canBeUsedToMatch":true},{"id":"stepNumber","type":"number","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"stepNumber","defaultMatch":false,"canBeUsedToMatch":true},{"id":"messageText","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"messageText","defaultMatch":false,"canBeUsedToMatch":true},{"id":"sentAt","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"sentAt","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"create"},"credentials":{"airtableTokenApi":{"id":"LqCCbENo1u06foZ9","name":"Airtable - Deepanshi"}},"typeVersion":2},{"id":"eb128198-faaa-4640-8cb1-872504057e8e","name":"Airtable – Update Contact After Send","type":"n8n-nodes-base.airtable","position":[4256,1504],"parameters":{"base":{"__rl":true,"mode":"list","value":"appBOslXzqBuBTIv8","cachedResultUrl":"https://airtable.com/appBOslXzqBuBTIv8","cachedResultName":"Campaign Manager"},"table":{"__rl":true,"mode":"list","value":"tbl7ZtUheEOFOvPEL","cachedResultUrl":"https://airtable.com/appBOslXzqBuBTIv8/tbl7ZtUheEOFOvPEL","cachedResultName":"Contacts Table"},"columns":{"value":{"nextFollowUp":"={{ $('Build Follow-up Row').item.json.nextFollowUp }}","followUpCount":"={{ $('Build Follow-up Row').item.json.newCount }}"},"schema":[{"id":"id","type":"string","display":true,"removed":false,"readOnly":true,"required":false,"displayName":"id","defaultMatch":true},{"id":"Name","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"phone","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"phone","defaultMatch":false,"canBeUsedToMatch":true},{"id":"company","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"company","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Campaign Id","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Campaign Id","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Variant","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Variant","defaultMatch":false,"canBeUsedToMatch":true},{"id":"followUpCount","type":"number","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"followUpCount","defaultMatch":false,"canBeUsedToMatch":true},{"id":"nextFollowUp","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"nextFollowUp","defaultMatch":false,"canBeUsedToMatch":true},{"id":"status","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"enrolledAt","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"enrolledAt","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update"},"credentials":{"airtableTokenApi":{"id":"LqCCbENo1u06foZ9","name":"Airtable - Deepanshi"}},"typeVersion":2},{"id":"94ca322c-8279-4335-9778-5b4562c85e75","name":"WATI – Send Follow-up","type":"n8n-nodes-wati.wati","position":[4496,1504],"parameters":{"target":"={{ $('Build Follow-up Row').item.json.phone }}","messageText":"={{ $('Build Follow-up Row').item.json.messageText }}"},"credentials":{"watiApi":{"id":"PDZjPbDJZxEuQ0Bv","name":"Wati account"}},"typeVersion":1},{"id":"7d1ee1f8-0451-4a5a-9e6c-0532a9532650","name":"Airtable – Find Contact by Phone","type":"n8n-nodes-base.airtable","position":[528,2384],"parameters":{"options":{},"resource":"base"},"credentials":{"airtableTokenApi":{"id":"3t89Q5x8gm0hM0Tx","name":"Airtable Personal Access Token account"}},"typeVersion":2},{"id":"83d0dfdc-00aa-4d00-a94f-875ecb2d17cd","name":"Find Contact Record","type":"n8n-nodes-base.code","position":[784,2384],"parameters":{"jsCode":"// Find the matching contact record for the inbound phone number\nconst inboundPhone = $('Wati Trigger').item.json.waId || $('Wati Trigger').item.json.from;\nconst allRows = $input.all();\nconst match = allRows.find(r => (r.json.phone||'').replace(/\\D/g,'') === inboundPhone.replace(/\\D/g,''));\n\nif (!match) {\n  return [{ json: { found: false, inboundPhone, replyText: $('Wati Trigger').item.json.text } }];\n}\nreturn [{ json: {\n  found:       true,\n  inboundPhone,\n  recordId:    match.json.id,\n  contactId:   match.json.id,\n  name:        match.json.name,\n  company:     match.json.company,\n  campaignId:  match.json.campaignId,\n  variant:     match.json.variant,\n  replyText:   $('Wati Trigger').item.json.text\n}}];"},"typeVersion":2},{"id":"837581e7-94bf-4f5f-8c79-c76a82a11b51","name":"OpenAI – Detect Reply Intent","type":"n8n-nodes-base.httpRequest","position":[1024,2384],"parameters":{"url":"https://api.openai.com/v1/chat/completions","method":"POST","options":{},"sendHeaders":true,"authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]},"nodeCredentialType":"openAiApi"},"credentials":{"openAiApi":{"id":"8IkhtT3EbXygnvcr","name":"Mediajade"},"httpHeaderAuth":{"id":"GKgCj9WxmYpiz70D","name":"Stripe Header Auth"}},"typeVersion":4.2},{"id":"e528ff43-3c9d-4964-a67c-8bdb81664558","name":"Process Reply & Build Log","type":"n8n-nodes-base.code","position":[1280,2384],"parameters":{"jsCode":"const intent = ($json?.choices?.[0]?.message?.content || 'other').trim().toLowerCase();\nconst contact = $('Find Contact Record').item.json;\nconst now = new Date();\n\nconst intentEmoji = {\n  interested:     '👀 Interested!',\n  not_interested: '🙏 Not Interested',\n  question:       '❓ Has a Question',\n  converted:      '🎉 CONVERTED!',\n  unsubscribe:    '🚫 Unsubscribed',\n  other:          '💬 Other'\n}[intent] || '💬 Other';\n\n// Build response message based on intent\nconst responseMap = {\n  interested:     `😊 Great to hear, *${contact.name}!* We'll be in touch very soon with more details. Is there anything specific you'd like to know?`,\n  not_interested: `No worries at all, *${contact.name}!* We appreciate your time. Feel free to reach out anytime if things change. Wishing you all the best! 👋`,\n  question:       `Thanks for reaching out, *${contact.name}!* We'll get someone from our team to answer your question as soon as possible. 🙌`,\n  converted:      `🎉 Wonderful, *${contact.name}!* We're so excited to work with you and *${contact.company}*. Our team will contact you shortly to get started!`,\n  unsubscribe:    `Understood, *${contact.name}.* We've removed you from our follow-up list. No more messages from us! Take care. 👋`,\n  other:          `Thanks for your message, *${contact.name}!* Our team will review and get back to you shortly.`\n};\n\n// New contact status based on intent\nconst newStatus = { converted: 'Converted', unsubscribe: 'Unsubscribed', not_interested: 'Paused' }[intent] || null;\n\nreturn [{ json: {\n  inboundPhone:  contact.inboundPhone,\n  recordId:      contact.recordId,\n  contactId:     contact.contactId,\n  campaignId:    contact.campaignId,\n  variant:       contact.variant,\n  replyText:     contact.replyText,\n  intent,\n  intentEmoji,\n  repliedAt:     now.toISOString(),\n  responseMsg:   responseMap[intent],\n  newStatus,\n  shouldUpdate:  !!newStatus\n}}];"},"typeVersion":2},{"id":"9d4e616a-535e-4df7-9877-8717920c3b32","name":"Airtable – Log Engagement","type":"n8n-nodes-base.airtable","position":[1456,2384],"parameters":{"base":{"__rl":true,"mode":"list","value":"appBOslXzqBuBTIv8","cachedResultUrl":"https://airtable.com/appBOslXzqBuBTIv8","cachedResultName":"Campaign Manager"},"table":{"__rl":true,"mode":"list","value":"tblQS5jEqJD0sGk9O","cachedResultUrl":"https://airtable.com/appBOslXzqBuBTIv8/tblQS5jEqJD0sGk9O","cachedResultName":"Engagement Table"},"columns":{"value":{"intent":"={{ $json.intent }}","contactId":"={{ $json.contactId }}","repliedAt":"={{ $json.repliedAt }}","replyText":"={{ $json.replyText }}"},"schema":[{"id":"engagementId","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"engagementId","defaultMatch":false,"canBeUsedToMatch":true},{"id":"contactId","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"contactId","defaultMatch":false,"canBeUsedToMatch":true},{"id":"intent","type":"boolean","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"intent","defaultMatch":false,"canBeUsedToMatch":true},{"id":"replyText","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"replyText","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Attachments","type":"array","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Attachments","defaultMatch":false,"canBeUsedToMatch":true},{"id":"repliedAt","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"repliedAt","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"create"},"credentials":{"airtableTokenApi":{"id":"LqCCbENo1u06foZ9","name":"Airtable - Deepanshi"}},"typeVersion":2},{"id":"64560c52-0b22-4ac1-b8fa-2f45a5c2cf91","name":"Airtable – Update Contact Status","type":"n8n-nodes-base.airtable","position":[1680,2384],"parameters":{"base":{"__rl":true,"mode":"list","value":"appBOslXzqBuBTIv8","cachedResultUrl":"https://airtable.com/appBOslXzqBuBTIv8","cachedResultName":"Campaign Manager"},"table":{"__rl":true,"mode":"list","value":"tbl7ZtUheEOFOvPEL","cachedResultUrl":"https://airtable.com/appBOslXzqBuBTIv8/tbl7ZtUheEOFOvPEL","cachedResultName":"Contacts Table"},"columns":{"value":{"status":"={{ $('Process Reply & Build Log').item.json.newStatus }}","followUpCount":0},"schema":[{"id":"id","type":"string","display":true,"removed":false,"readOnly":true,"required":false,"displayName":"id","defaultMatch":true},{"id":"Name","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"phone","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"phone","defaultMatch":false,"canBeUsedToMatch":true},{"id":"company","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"company","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Campaign Id","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Campaign Id","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Variant","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Variant","defaultMatch":false,"canBeUsedToMatch":true},{"id":"followUpCount","type":"number","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"followUpCount","defaultMatch":false,"canBeUsedToMatch":true},{"id":"nextFollowUp","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"nextFollowUp","defaultMatch":false,"canBeUsedToMatch":true},{"id":"status","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"enrolledAt","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"enrolledAt","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["id"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update"},"credentials":{"airtableTokenApi":{"id":"LqCCbENo1u06foZ9","name":"Airtable - Deepanshi"}},"typeVersion":2},{"id":"aa55efda-bd57-4a62-b603-2900e8226366","name":"WATI – Send Reply Acknowledgement","type":"n8n-nodes-wati.wati","position":[1904,2384],"parameters":{"target":"={{ $('Process Reply & Build Log').item.json.inboundPhone }}","messageText":"={{ $('Process Reply & Build Log').item.json.responseMsg }}"},"credentials":{"watiApi":{"id":"LeAm3lDk4hC1D2Qy","name":"wati - templates"}},"typeVersion":1},{"id":"9d83a298-23b8-4254-b6f6-db9a325ce5d7","name":"Airtable – Read All Follow-ups","type":"n8n-nodes-base.airtable","position":[560,1328],"parameters":{"options":{},"resource":"base"},"credentials":{"airtableTokenApi":{"id":"LqCCbENo1u06foZ9","name":"Airtable - Deepanshi"}},"typeVersion":2},{"id":"21cf8238-68c0-4c61-b099-d3a4edd91682","name":"Airtable – Read All Engagement","type":"n8n-nodes-base.airtable","position":[736,1328],"parameters":{"options":{},"resource":"base"},"credentials":{"airtableTokenApi":{"id":"3t89Q5x8gm0hM0Tx","name":"Airtable Personal Access Token account"}},"typeVersion":2},{"id":"f7cca15c-1900-4555-b489-9950fc335f41","name":"Build Analytics Report","type":"n8n-nodes-base.code","position":[944,1328],"parameters":{"jsCode":"// Build A/B analytics + campaign dashboard\n// Reads from both FollowUps and Engagement tables\n\nconst requesterPhone = $('Wati Trigger').item.json.waId || $('Wati Trigger').item.json.from;\nconst requesterName  = $('Wati Trigger').item.json.senderName || 'User';\n\nconst followUps  = $('Airtable – Read All Follow-ups').all().map(r => r.json);\nconst engagement = $('Airtable – Read All Engagement').all().map(r => r.json);\n\nconst now = new Date();\n\n// ── Overall stats ─────────────────────────────────────────────────────\nconst totalSent    = followUps.length;\nconst totalReplies = engagement.length;\nconst converted    = engagement.filter(e => e.intent === 'converted').length;\nconst unsubscribed = engagement.filter(e => e.intent === 'unsubscribe').length;\nconst replyRate    = totalSent > 0 ? ((totalReplies / totalSent) * 100).toFixed(1) : '0.0';\nconst convRate     = totalSent > 0 ? ((converted    / totalSent) * 100).toFixed(1) : '0.0';\n\n// ── A/B breakdown ─────────────────────────────────────────────────────\nconst sentA = followUps.filter(f => f.variant === 'A').length;\nconst sentB = followUps.filter(f => f.variant === 'B').length;\nconst replA = engagement.filter(e => e.variant === 'A').length;\nconst replB = engagement.filter(e => e.variant === 'B').length;\nconst convA = engagement.filter(e => e.variant === 'A' && e.intent === 'converted').length;\nconst convB = engagement.filter(e => e.variant === 'B' && e.intent === 'converted').length;\nconst rrA   = sentA > 0 ? ((replA / sentA) * 100).toFixed(1) : '0.0';\nconst rrB   = sentB > 0 ? ((replB / sentB) * 100).toFixed(1) : '0.0';\nconst crA   = sentA > 0 ? ((convA / sentA) * 100).toFixed(1) : '0.0';\nconst crB   = sentB > 0 ? ((convB / sentB) * 100).toFixed(1) : '0.0';\nconst winner = parseFloat(crA) >= parseFloat(crB) ? '🏆 Variant A wins on conversion' : '🏆 Variant B wins on conversion';\n\n// ── Per-campaign stats ────────────────────────────────────────────────\nconst byCampaign = {};\nfor (const f of followUps) {\n  const c = f.campaignId || 'Unknown';\n  if (!byCampaign[c]) byCampaign[c] = { sent:0, replies:0, conversions:0 };\n  byCampaign[c].sent++;\n}\nfor (const e of engagement) {\n  const c = e.campaignId || 'Unknown';\n  if (!byCampaign[c]) byCampaign[c] = { sent:0, replies:0, conversions:0 };\n  byCampaign[c].replies++;\n  if (e.intent === 'converted') byCampaign[c].conversions++;\n}\n\nconst campLines = Object.entries(byCampaign).map(([id, s]) => {\n  const rr = s.sent > 0 ? ((s.replies/s.sent)*100).toFixed(0) : 0;\n  return `  📁 *${id}* — Sent: ${s.sent} | Replies: ${s.replies} (${rr}%) | Conv: ${s.conversions}`;\n});\n\n// ── Recent replies ────────────────────────────────────────────────────\nconst intentEmoji = { interested:'👀',not_interested:'🙏',question:'❓',converted:'🎉',unsubscribe:'🚫',other:'💬' };\nconst recentReplies = engagement\n  .sort((a,b) => new Date(b.repliedAt) - new Date(a.repliedAt))\n  .slice(0,5)\n  .map(e => {\n    const dt = e.repliedAt ? new Date(e.repliedAt).toLocaleDateString('en-IN',{day:'numeric',month:'short',hour:'2-digit',minute:'2-digit'}) : '';\n    return `  ${intentEmoji[e.intent]||'💬'} ${e.phone} — ${e.intent} (${dt})`;\n  });\n\n// ── Build message ─────────────────────────────────────────────────────\nconst lines = [\n  `📊 *Follow-up Campaign Analytics*`,\n  `👤 ${requesterName} · ${now.toLocaleDateString('en-IN',{day:'numeric',month:'short',year:'numeric'})}`,\n  '',\n  `━━ *Overall Performance* ━━`,\n  `📤 Total Sent:      *${totalSent}*`,\n  `💬 Total Replies:   *${totalReplies}* (${replyRate}%)`,\n  `🎉 Conversions:    *${converted}* (${convRate}%)`,\n  `🚫 Unsubscribed:   *${unsubscribed}*`,\n  '',\n  `━━ *A/B Test Results* ━━`,\n  `🅰️ Variant A — Sent: ${sentA} | Reply: ${rrA}% | Conv: ${crA}%`,\n  `🅱️ Variant B — Sent: ${sentB} | Reply: ${rrB}% | Conv: ${crB}%`,\n  winner,\n  '',\n  `━━ *By Campaign* ━━`,\n  ...campLines,\n  '',\n  `━━ *Recent Replies* ━━`,\n  ...recentReplies,\n  '',\n  'Reply *enroll* to add a contact — *pause* to pause one.'\n];\n\nreturn [{ json: { requesterPhone, report: lines.join('\\n') } }];"},"typeVersion":2},{"id":"ffa4b9e0-0301-4d52-b919-23ba426106e9","name":"WATI – Send Analytics Report","type":"n8n-nodes-wati.wati","position":[1200,1328],"parameters":{"target":"={{ $json.requesterPhone }}","messageText":"={{ $json.report }}"},"credentials":{"watiApi":{"id":"LeAm3lDk4hC1D2Qy","name":"wati - templates"}},"typeVersion":1},{"id":"ba01ef3f-db26-4af1-b0ad-754a96b5d4f6","name":"Pipeline B Guide","type":"n8n-nodes-base.stickyNote","position":[2544,1264],"parameters":{"color":7,"width":2168,"height":448,"content":"### ⏰ Pipeline B: Follow-up Scheduler\n**Nodes:** `9AM Trigger` → `Read Contacts` → `OpenAI Message` → `Update Contact`.\n\n**Function:**\n1. **Filtering:** Lists all Airtable contacts where `Status=Active` and `NextFollowUp <= Today`.\n2. **AI Writer:** OpenAI generates a custom follow-up message using the contact's name, company, and assigned A/B tone (Formal vs. Friendly).\n3. **CRM Sync:** Increments the follow-up counter and schedules the next touchpoint date."},"typeVersion":1},{"id":"93b4c274-97a6-4c09-b68a-b5bbb0177023","name":"Pipeline C Guide","type":"n8n-nodes-base.stickyNote","position":[512,2064],"parameters":{"color":7,"width":1592,"height":640,"content":"Engagement Tracker\n**Nodes:** `Reply Trigger` → `Find Record` → `OpenAI Intent` → `Log Engagement`.\n\n**Function:**\n1. **Identification:** Matches the sender's WhatsApp number to an existing lead in Airtable.\n2. **AI Intent:** OpenAI classifies the reply (e.g., 'Interested', 'Question', 'Unsubscribe').\n3. **Action:** If the lead is 'Converted' or 'Unsubscribed', the bot automatically pauses further follow-ups to save your reputation."},"typeVersion":1},{"id":"f21df589-0287-4a0c-8dac-0d47b427e737","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[512,1600],"parameters":{"color":7,"width":944,"height":400,"content":"Branch: Pause Outreach\nHow it works:Command Parsing: Extracts the target phone number from the WhatsApp command and prepares the confirmation text.\nCRM Update: Updates the lead's status to 'Paused' in Airtable to exclude them from the 9 AM automated follow-up scheduler.\nConfirmation: Sends a WhatsApp alert back to the representative confirming that automated outreach for that lead has stopped."},"typeVersion":1},{"id":"94279b21-975b-49dc-8391-dadd8c8dbc28","name":"📌 Overview","type":"n8n-nodes-base.stickyNote","position":[-1696,-32],"parameters":{"width":820,"height":680,"content":"📣 WhatsApp Follow-up Campaign Manager\nWorkflow Purpose\nAutomates personalized outreach via WATI, lead management in Airtable, and AI-driven messaging with OpenAI. Supports A/B testing and real-time performance analytics.\n\n🚀 Core Pipelines\nCampaign Setup: Enrolls contacts and assigns A/B variants via WhatsApp commands.\n\nFollow-up Scheduler: Daily 9 AM trigger for AI-personalized follow-ups based on lead variant.\n\nReply Tracker: Detects reply intent (e.g., Interested, Unsubscribe) and auto-updates CRM status.\n\nAnalytics Dashboard: Generates on-demand A/B stats and conversion reports via the report command.\n\n🔧 Setup Essentials\nRequired Apps\n\nWATI: Triggers and sends WhatsApp communications.\n\nAirtable: Acts as the central lead and campaign CRM.\n\nOpenAI: Handles message personalization and intent classification."},"typeVersion":1},{"id":"d3565254-6cb9-4c8a-b442-b5997c6f9c09","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-592,992],"parameters":{"color":7,"width":880,"height":1120,"content":"Branch: Command Routing\nNodes: Wati Trigger → Command Router\n\nHow it works:\n\nCentral Intake: The Wati Trigger listens for all incoming WhatsApp messages and passes the text to the router.\n\nIntent Detection: The Command Router (Switch node) acts as the traffic controller, sorting messages into four distinct paths based on keywords:\n\nEnrollment: Messages starting with enroll .\n\nAnalytics: Messages exactly matching report.\n\nManual Override: Messages starting with pause .\n\nEngagement Tracking: All other replies (via the extra output)."},"typeVersion":1}],"pinData":{},"connections":{"Wati Trigger":{"main":[[{"node":"Command Router","type":"main","index":0}]]},"Command Router":{"main":[[{"node":"Parse Enroll Command","type":"main","index":0}],[{"node":"Airtable – Read All Follow-ups","type":"main","index":0}],[{"node":"Parse Pause Command","type":"main","index":0}],[{"node":"Airtable – Find Contact by Phone","type":"main","index":0}]]},"Build Follow-up Row":{"main":[[{"node":"Airtable – Log Follow-up Sent","type":"main","index":0}]]},"Find Contact Record":{"main":[[{"node":"OpenAI – Detect Reply Intent","type":"main","index":0}]]},"Parse Pause Command":{"main":[[{"node":"Airtable – Pause Contact","type":"main","index":0}]]},"Parse Enroll Command":{"main":[[{"node":"Airtable – Create Contact","type":"main","index":0}]]},"Filter Due Follow-ups":{"main":[[{"node":"Airtable – Read Campaign","type":"main","index":0}]]},"Build Analytics Report":{"main":[[{"node":"WATI – Send Analytics Report","type":"main","index":0}]]},"Process Reply & Build Log":{"main":[[{"node":"Airtable – Log Engagement","type":"main","index":0}]]},"Airtable – Pause Contact":{"main":[[{"node":"WATI – Confirm Pause","type":"main","index":0}]]},"Airtable – Read Campaign":{"main":[[{"node":"OpenAI – Personalise Follow-up Message","type":"main","index":0}]]},"Airtable – Create Contact":{"main":[[{"node":"WATI – Confirm Enrollment","type":"main","index":0},{"node":"WATI – Send Welcome to Contact","type":"main","index":0}]]},"Airtable – Log Engagement":{"main":[[{"node":"Airtable – Update Contact Status","type":"main","index":0}]]},"OpenAI – Detect Reply Intent":{"main":[[{"node":"Process Reply & Build Log","type":"main","index":0}]]},"Schedule Trigger – 9AM Daily":{"main":[[{"node":"Airtable – Read Active Contacts","type":"main","index":0}]]},"Airtable – Log Follow-up Sent":{"main":[[{"node":"Airtable – Update Contact After Send","type":"main","index":0}]]},"Airtable – Read All Engagement":{"main":[[{"node":"Build Analytics Report","type":"main","index":0}]]},"Airtable – Read All Follow-ups":{"main":[[{"node":"Airtable – Read All Engagement","type":"main","index":0}]]},"Airtable – Read Active Contacts":{"main":[[{"node":"Filter Due Follow-ups","type":"main","index":0}]]},"Airtable – Find Contact by Phone":{"main":[[{"node":"Find Contact Record","type":"main","index":0}]]},"Airtable – Update Contact Status":{"main":[[{"node":"WATI – Send Reply Acknowledgement","type":"main","index":0}]]},"Airtable – Update Contact After Send":{"main":[[{"node":"WATI – Send Follow-up","type":"main","index":0}]]},"OpenAI – Personalise Follow-up Message":{"main":[[{"node":"Build Follow-up Row","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":36,"nodeTypes":{"n8n-nodes-base.code":{"count":7},"n8n-nodes-wati.wati":{"count":6},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.airtable":{"count":11},"n8n-nodes-base.stickyNote":{"count":7},"n8n-nodes-base.httpRequest":{"count":2},"n8n-nodes-wati.watiTrigger":{"count":1},"n8n-nodes-base.scheduleTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Jitesh Dugar","username":"jiteshdugar","bio":"AI Automation Specialist - OpenAI, CRM & Automation Expert with a solid understanding of various tools that include Zapier, Make, Zoho CRM, Hubspot, Google Sheets, Airtable, Pipedrive, Google Analytics, and more.","verified":true,"links":["https://www.linkedin.com/in/jiteshdugar"],"avatar":"https://gravatar.com/avatar/edaa3abb99806b0586dced559d0a5417f24a507e7c4464a63960f0638a4b1b90?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":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"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/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"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/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/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"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/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"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/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"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/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/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"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-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/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"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.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":112,"icon":"fa:map-signs","name":"n8n-nodes-base.switch","codex":{"data":{"alias":["Router","If","Path","Filter","Condition","Logic","Branch","Case"],"resources":{"generic":[{"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-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/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/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"Switch","color":"#506000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"Switch","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"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"}]}],"categories":[{"id":38,"name":"Lead Nurturing"},{"id":47,"name":"AI Chatbot"}],"image":[]}}