{"workflow":{"id":14824,"name":"Book and manage appointments with Google Calendar and Gmail","views":257,"recentViews":51,"totalViews":257,"createdAt":"2026-04-06T16:09:57.153Z","description":"\n## Overview\nThis workflow automates the complete appointment booking process, from request validation to scheduling, notifications, and reminders.\n\nIt checks calendar availability in real time, prevents double bookings, suggests alternative slots when unavailable, and automatically sends confirmations and reminders—ensuring a smooth and reliable booking experience.\n\nPerfect for service-based businesses, consultants, and teams managing appointments at scale.\n\n---\n\n## How It Works\n\n1. **Webhook Trigger**\n   - Receives booking requests (name, email, date, time, notes).\n\n2. **Workflow Configuration**\n   - Defines:\n     - Google Calendar ID\n     - Appointment duration\n     - Business hours\n     - Sender email\n\n3. **Data Validation**\n   - Parses and validates input fields\n   - Ensures required data is present and correctly formatted\n\n4. **Calendar Availability Check**\n   - Fetches existing events from Google Calendar\n   - Compares requested time with existing bookings\n\n5. **Conflict Detection**\n   - Detects overlapping events\n   - Determines whether the slot is available\n\n6. **Decision Logic**\n   - If available → proceed with booking  \n   - If not available → trigger alternative flow  \n\n---\n\n###  Booking Flow (Available Slot)\n\n7. **Create Calendar Event**\n   - Schedules appointment in Google Calendar\n   - Adds attendee and event details\n\n8. **Confirmation Email**\n   - Sends booking confirmation with event details\n   - Includes calendar event link\n\n9. **Webhook Response**\n   - Returns success response to client/system\n\n10. **Reminder System**\n   - Schedules automated reminders:\n     - 24-hour reminder before appointment\n     - 1-hour reminder before appointment\n   - Uses wait nodes to trigger emails at exact times\n   - Includes appointment details to reduce no-shows\n\n---\n\n###  Alternative Flow (Unavailable Slot)\n\n11. **Generate Alternative Slots**\n   - Finds next available time slots within business hours\n   - Ensures slots are within a defined time window\n\n12. **Alternative Email Notification**\n   - Sends suggested time slots to the user\n\n13. **Webhook Response**\n   - Returns unavailable status with alternatives\n\n---\n\n## Setup Instructions\n\n1. **Webhook Setup**\n   - Configure endpoint (`booking`)\n   - Connect to your frontend or booking form\n\n2. **Google Calendar**\n   - Add Google Calendar credentials\n   - Set calendar ID\n\n3. **Gmail Integration**\n   - Add Gmail credentials for:\n     - Confirmation emails\n     - Reminder emails\n     - Alternative slot notifications\n\n4. **Configure Parameters**\n   - Set:\n     - Appointment duration (e.g., 60 minutes)\n     - Business hours (e.g., 9–17)\n     - Sender email\n\n5. **Customize Messages**\n   - Edit email templates for:\n     - Confirmation\n     - Alternatives\n     - Reminders\n\n---\n\n## Use Cases\n\n- Appointment booking systems for businesses  \n- Coaching and consulting session scheduling  \n- Service-based business automation (salons, clinics, etc.)  \n- Internal team scheduling tools  \n- Calendly-style booking workflows  \n\n---\n\n## Requirements\n\n- Google Calendar account  \n- Gmail account  \n- n8n instance (cloud or self-hosted)  \n\n---\n\n## Key Features\n\n- Real-time availability checking  \n- Automatic conflict detection  \n- Calendar event creation  \n- Alternative slot suggestions  \n- Email notifications and confirmations  \n- Automated reminder system (24h + 1h)  \n- Fully customizable booking logic  \n\n---\n\n## Summary\n\nA complete appointment scheduling system that automates booking validation, calendar management, notifications, and reminders. It reduces manual coordination, prevents scheduling conflicts, and improves attendance with automated follow-ups.","workflow":{"meta":{"instanceId":"48aac30adfc5487a33ef16e0e958096f27cef40df3ed0febcbe1ca199e789786"},"nodes":[{"id":"2fb14430-f0bb-49da-9bb4-54b9ce1ba475","name":"Booking Request Webhook","type":"n8n-nodes-base.webhook","position":[-1792,192],"webhookId":"0d8c6146-0619-4a91-8030-5cf18e2f2fd4","parameters":{"path":"booking","options":{},"httpMethod":"POST","responseMode":"lastNode"},"typeVersion":2.1},{"id":"6e4794f2-91e6-41a9-85ec-41413b94651c","name":"Workflow Configuration","type":"n8n-nodes-base.set","position":[-1504,192],"parameters":{"options":{},"assignments":{"assignments":[{"id":"id-1","name":"calendarId","type":"string","value":"<__PLACEHOLDER_VALUE__Your Google Calendar ID__>"},{"id":"id-2","name":"appointmentDuration","type":"number","value":60},{"id":"id-3","name":"businessHoursStart","type":"number","value":9},{"id":"id-4","name":"businessHoursEnd","type":"number","value":17},{"id":"id-5","name":"senderEmail","type":"string","value":"<__PLACEHOLDER_VALUE__Your email address for sending confirmations__>"}]},"includeOtherFields":true},"typeVersion":3.4},{"id":"be0e66e9-a02b-4819-aa57-a3b126fb42d2","name":"Parse Booking Data","type":"n8n-nodes-base.code","position":[-1248,192],"parameters":{"jsCode":"// Parse and validate booking request data from webhook\nconst items = $input.all();\nconst output = [];\n\nfor (const item of items) {\n  const body = item.json.body || item.json;\n  \n  // Extract booking fields\n  const name = body.name || '';\n  const email = body.email || '';\n  const requestedDate = body.requestedDate || '';\n  const requestedTime = body.requestedTime || '';\n  const notes = body.notes || '';\n  \n  // Validate required fields\n  const errors = [];\n  \n  if (!name || name.trim() === '') {\n    errors.push('Name is required');\n  }\n  \n  if (!email || email.trim() === '') {\n    errors.push('Email is required');\n  } else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) {\n    errors.push('Invalid email format');\n  }\n  \n  if (!requestedDate || requestedDate.trim() === '') {\n    errors.push('Requested date is required');\n  }\n  \n  if (!requestedTime || requestedTime.trim() === '') {\n    errors.push('Requested time is required');\n  }\n  \n  // Create output object\n  const bookingData = {\n    name: name.trim(),\n    email: email.trim(),\n    requestedDate: requestedDate.trim(),\n    requestedTime: requestedTime.trim(),\n    notes: notes.trim(),\n    isValid: errors.length === 0,\n    validationErrors: errors,\n    rawData: body\n  };\n  \n  output.push({\n    json: bookingData\n  });\n}\n\nreturn output;"},"typeVersion":2},{"id":"e35412be-3209-456b-bab0-78945966780e","name":"Check Calendar Availability","type":"n8n-nodes-base.googleCalendar","position":[-992,192],"parameters":{"options":{},"calendar":{"__rl":true,"mode":"id","value":"={{ $('Workflow Configuration').first().json.calendarId }}"},"operation":"getAll","returnAll":true},"typeVersion":1.3},{"id":"dc8feda8-6ac3-40c2-ae76-e2d24503e6a4","name":"Check for Conflicts","type":"n8n-nodes-base.code","position":[-672,192],"parameters":{"jsCode":"// Get the calendar events from the previous node\nconst calendarEvents = $('Check Calendar Availability').all();\n\n// Get the requested booking time from the parsed data\nconst requestedStart = $('Parse Booking Data').item.json.startTime;\nconst requestedEnd = $('Parse Booking Data').item.json.endTime;\n\n// Check if there are any conflicting events\nlet hasConflict = false;\nlet conflictingEvents = [];\n\nif (calendarEvents && calendarEvents.length > 0) {\n  for (const event of calendarEvents) {\n    if (event.json && event.json.start && event.json.end) {\n      const eventStart = new Date(event.json.start.dateTime || event.json.start.date);\n      const eventEnd = new Date(event.json.end.dateTime || event.json.end.date);\n      const reqStart = new Date(requestedStart);\n      const reqEnd = new Date(requestedEnd);\n      \n      // Check for overlap: events conflict if they overlap in any way\n      if (reqStart < eventEnd && reqEnd > eventStart) {\n        hasConflict = true;\n        conflictingEvents.push({\n          summary: event.json.summary,\n          start: event.json.start.dateTime || event.json.start.date,\n          end: event.json.end.dateTime || event.json.end.date\n        });\n      }\n    }\n  }\n}\n\n// Return the result\nreturn [{\n  json: {\n    isAvailable: !hasConflict,\n    hasConflict: hasConflict,\n    requestedStart: requestedStart,\n    requestedEnd: requestedEnd,\n    conflictingEvents: conflictingEvents,\n    totalEventsChecked: calendarEvents.length\n  }\n}];"},"typeVersion":2},{"id":"b33d1e94-f61e-439d-bbb7-5f963b515a05","name":"Is Available?","type":"n8n-nodes-base.if","position":[-480,192],"parameters":{"options":{},"conditions":{"options":{"leftValue":"","caseSensitive":false,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"id-1","operator":{"type":"boolean","operation":"true"},"leftValue":"={{ $('Check for Conflicts').item.json.isAvailable }}"}]}},"typeVersion":2.3},{"id":"d1905396-9921-4633-9489-dc1ba071c5db","name":"Create Calendar Event","type":"n8n-nodes-base.googleCalendar","position":[-80,16],"parameters":{"end":"={{ new Date(new Date($json.requestedDateTime).getTime() + $('Workflow Configuration').first().json.appointmentDuration*60*1000).toISOString() }}","start":"={{ $json.requestedDateTime }}","calendar":{"__rl":true,"mode":"id","value":"={{ $('Workflow Configuration').first().json.calendarId }}"},"additionalFields":{"summary":"=Appointment with {{ $json.name }}","attendees":["={{ $json.email }}"],"description":"={{ $json.notes }}"}},"typeVersion":1.3},{"id":"8e2656d3-25d8-4c7b-b1ef-7fa81ccef5af","name":"Send Confirmation Email","type":"n8n-nodes-base.gmail","position":[144,16],"webhookId":"eebd3b07-d80b-47dc-a9ed-b01a9bd3ef40","parameters":{"sendTo":"={{ $json.email }}","message":"=<p>Dear {{ $json.name }},</p>\n\n<p>Your appointment has been confirmed!</p>\n\n<p><strong>Appointment Details:</strong></p>\n<ul>\n  <li><strong>Date & Time:</strong> {{ new Date($json.requestedDateTime).toLocaleString() }}</li>\n  <li><strong>Duration:</strong> {{ $json.duration || '30' }} minutes</li>\n</ul>\n\n<p>A calendar invitation has been sent to your email. You can also view the event in your calendar using the link below:</p>\n\n<p><a href=\"{{ $('Create Calendar Event').item.json.htmlLink }}\">View Calendar Event</a></p>\n\n<p>If you need to reschedule or cancel, please contact us as soon as possible.</p>\n\n<p>We look forward to seeing you!</p>\n\n<p>Best regards,<br>Your Team</p>","options":{"senderName":"={{ $('Workflow Configuration').first().json.senderEmail }}"},"subject":"=Appointment Confirmed - {{ new Date($json.requestedDateTime).toLocaleString() }}"},"typeVersion":2.2},{"id":"6d351346-9862-47bb-8fb1-9fba8aff877e","name":"Respond Success","type":"n8n-nodes-base.respondToWebhook","position":[496,-144],"parameters":{"options":{},"respondWith":"json","responseBody":"{\n  \"success\": true,\n  \"message\": \"Booking confirmed successfully\"\n}"},"typeVersion":1.5},{"id":"d62b05c2-ea91-4b49-a1d0-3a393f8dfc7f","name":"Find Alternative Slots","type":"n8n-nodes-base.code","position":[-128,496],"parameters":{"jsCode":"// Get the requested booking time from the previous node\nconst requestedTime = new Date($('Parse Booking Data').item.json.bookingTime);\n\n// Business hours configuration\nconst businessHours = {\n  start: 9, // 9 AM\n  end: 17   // 5 PM\n};\nconst slotDuration = 60; // 60 minutes per slot\n\n// Function to check if a time is within business hours\nfunction isBusinessHours(date) {\n  const hour = date.getHours();\n  const day = date.getDay();\n  // Monday to Friday (1-5), during business hours\n  return day >= 1 && day <= 5 && hour >= businessHours.start && hour < businessHours.end;\n}\n\n// Generate alternative slots\nconst alternativeSlots = [];\nlet currentDate = new Date();\ncurrentDate.setHours(currentDate.getHours() + 1); // Start from next hour\n\nwhile (alternativeSlots.length < 3) {\n  // Move to next hour\n  currentDate.setHours(currentDate.getHours() + 1);\n  currentDate.setMinutes(0);\n  currentDate.setSeconds(0);\n  \n  // Check if within 7 days\n  const daysDiff = (currentDate - new Date()) / (1000 * 60 * 60 * 24);\n  if (daysDiff > 7) break;\n  \n  // Check if within business hours\n  if (isBusinessHours(currentDate)) {\n    alternativeSlots.push({\n      startTime: new Date(currentDate).toISOString(),\n      endTime: new Date(currentDate.getTime() + slotDuration * 60000).toISOString(),\n      formatted: currentDate.toLocaleString('en-US', {\n        weekday: 'long',\n        year: 'numeric',\n        month: 'long',\n        day: 'numeric',\n        hour: '2-digit',\n        minute: '2-digit'\n      })\n    });\n  }\n}\n\nreturn [{\n  json: {\n    originalRequest: requestedTime.toISOString(),\n    alternativeSlots: alternativeSlots,\n    message: `Found ${alternativeSlots.length} alternative time slots`\n  }\n}];"},"typeVersion":2},{"id":"28908770-a67e-49d2-ab8c-471823716479","name":"Send Alternative Slots Email","type":"n8n-nodes-base.gmail","position":[96,496],"webhookId":"df74e6b5-9190-4aa3-a9b7-acdcaa9eec29","parameters":{"sendTo":"={{ $json.email }}","message":"=Hello {{ $json.name }},\n\nUnfortunately, your requested appointment time on {{ $json.requestedDateTime }} is not available.\n\nHowever, we have the following alternative time slots available:\n\n{{ $json.alternativeSlots }}\n\nPlease let us know which time works best for you, and we'll be happy to schedule your appointment.\n\nBest regards","options":{"senderName":"={{ $('Workflow Configuration').first().json.senderEmail }}"},"subject":"=Appointment Unavailable - Alternative Times Available"},"typeVersion":2.2},{"id":"aba22ee7-a3f6-4927-8a56-bd08aba7e758","name":"Respond Unavailable","type":"n8n-nodes-base.respondToWebhook","position":[320,496],"parameters":{"options":{},"respondWith":"json","responseBody":"={\n  \"status\": \"unavailable\",\n  \"message\": \"The requested time slot is not available\",\n  \"alternativeSlots\": {{ $json.alternativeSlots }}\n}"},"typeVersion":1.5},{"id":"c2067282-e65e-4a74-a3a9-0cdb88de0e31","name":"Wait 24 Hours Before","type":"n8n-nodes-base.wait","position":[400,224],"webhookId":"8141a980-5de2-4438-8825-488f579638a6","parameters":{"resume":"specificTime","dateTime":"={{ new Date(new Date($json.requestedDateTime).getTime() - 24*60*60*1000).toISOString() }}"},"typeVersion":1.1},{"id":"21e9a67e-f03a-4fbe-bd65-cfee4ce73bb6","name":"Send 24h Reminder","type":"n8n-nodes-base.gmail","position":[592,224],"webhookId":"f427fddc-3311-4490-b2c1-c8e2cc9b178d","parameters":{"sendTo":"={{ $json.email }}","message":"=Hello {{ $json.name }},\n\nThis is a friendly reminder that you have an appointment scheduled for tomorrow:\n\n📅 Date & Time: {{ new Date($json.requestedDateTime).toLocaleString() }}\n📍 Service: {{ $json.service }}\n⏱️ Duration: {{ $json.duration }} minutes\n\nPlease make sure to arrive on time. If you need to reschedule or cancel, please let us know as soon as possible.\n\nLooking forward to seeing you!\n\nBest regards","options":{"senderName":"={{ $('Workflow Configuration').first().json.senderEmail }}"},"subject":"=Reminder: Appointment Tomorrow - {{ new Date($json.requestedDateTime).toLocaleString() }}"},"typeVersion":2.2},{"id":"c77cb5af-9a40-46e5-9ebc-a37da9e27b9d","name":"Wait 1 Hour Before","type":"n8n-nodes-base.wait","position":[832,224],"webhookId":"29402ce2-047d-4500-9758-aa1f04e3f058","parameters":{"resume":"specificTime","dateTime":"={{ new Date(new Date($json.requestedDateTime).getTime() - 60*60*1000).toISOString() }}"},"typeVersion":1.1},{"id":"be47cbad-215c-4b8b-a3a1-61b27276e50c","name":"Send 1h Reminder","type":"n8n-nodes-base.gmail","position":[1056,224],"webhookId":"b0769c4c-32b3-46c6-b78d-c8e57e3fb720","parameters":{"sendTo":"={{ $json.email }}","message":"=<p>Hello {{ $json.name }},</p>\n\n<p>This is a friendly reminder that your appointment is coming up in <strong>1 hour</strong>.</p>\n\n<p><strong>Appointment Details:</strong></p>\n<ul>\n  <li><strong>Date & Time:</strong> {{ new Date($json.requestedDateTime).toLocaleString() }}</li>\n  <li><strong>Duration:</strong> {{ $json.duration }} minutes</li>\n  <li><strong>Service:</strong> {{ $json.service }}</li>\n</ul>\n\n<p>Please make sure you're ready for your appointment. If you need to make any changes, please contact us as soon as possible.</p>\n\n<p>We look forward to seeing you soon!</p>\n\n<p>Best regards,<br>{{ $('Workflow Configuration').first().json.senderName }}</p>","options":{"senderName":"={{ $('Workflow Configuration').first().json.senderName }}"},"subject":"=Reminder: Appointment in 1 Hour - {{ new Date($json.requestedDateTime).toLocaleString() }}"},"typeVersion":2.2},{"id":"390d4718-7585-4015-b1a1-48b829d7f2bc","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-1920,64],"parameters":{"color":7,"width":304,"height":304,"content":"## Input Layer\nReceive booking request via webhook"},"typeVersion":1},{"id":"a6413ac2-d5ec-49e4-89c9-2729db109643","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1600,64],"parameters":{"color":7,"width":256,"height":304,"content":"## Configuration\nSet calendar, duration, and business hours"},"typeVersion":1},{"id":"0355f826-17b5-4a09-814d-be376350fc8d","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-1312,64],"parameters":{"color":7,"width":224,"height":304,"content":"## Data Validation\nParse and validate booking request fields"},"typeVersion":1},{"id":"f241f879-0ffd-4072-a0a1-31b76950899d","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-1056,64],"parameters":{"color":7,"width":304,"height":304,"content":"## Availability Check\nFetch calendar events and check conflicts"},"typeVersion":1},{"id":"b7529ca8-9469-44e0-b455-fcb46589135a","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-720,64],"parameters":{"color":7,"width":336,"height":320,"content":"## Decision Logic\nRoute based on availability status"},"typeVersion":1},{"id":"239407fe-3f8a-4aa5-a31d-439d74ce281a","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[-144,-64],"parameters":{"color":7,"width":432,"height":304,"content":"## Booking Flow\nCreate calendar event and confirm booking"},"typeVersion":1},{"id":"62e26f02-c3f6-462a-a438-a933a72359e4","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[432,-224],"parameters":{"color":7,"width":304,"height":240,"content":"## Confirmation\nSend confirmation email and response"},"typeVersion":1},{"id":"9ede2529-0a5a-4e94-a3d3-4fcbe2063b5b","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[352,80],"parameters":{"color":7,"width":992,"height":288,"content":"## Reminder System\nSend 24h and 1h reminder emails. After a booking is confirmed, the workflow schedules two timed reminders:\n- A 24-hour reminder to notify the user one day before\n- A 1-hour reminder for last-minute confirmation"},"typeVersion":1},{"id":"7f9e1f6a-a524-4f94-8ad1-fd14c90f612a","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[-176,400],"parameters":{"color":7,"width":672,"height":320,"content":"## Alternative Flow\nSuggest available time slots if unavailable"},"typeVersion":1},{"id":"9ce7d0cd-7e8d-49da-bd64-67e5af90b440","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[-2672,-16],"parameters":{"width":544,"height":496,"content":"## How it works\nThis workflow automates appointment booking by validating requests, checking calendar availability, and scheduling confirmed slots.\n\nWhen a booking request is received via webhook, the system validates input data and checks for conflicts in Google Calendar. If the requested time is available, an event is created, and a confirmation email is sent.\n\nIf unavailable, alternative time slots are generated and shared with the user. The workflow also sends automated reminders 24 hours and 1 hour before the appointment.\n\n## Setup steps\n- Configure webhook endpoint for booking requests\n- Add Google Calendar credentials\n- Set Gmail credentials for notifications\n- Define business hours and appointment duration\n- Customize email templates and reminders"},"typeVersion":1}],"pinData":{},"connections":{"Is Available?":{"main":[[{"node":"Create Calendar Event","type":"main","index":0}],[{"node":"Find Alternative Slots","type":"main","index":0}]]},"Send 24h Reminder":{"main":[[{"node":"Wait 1 Hour Before","type":"main","index":0}]]},"Parse Booking Data":{"main":[[{"node":"Check Calendar Availability","type":"main","index":0}]]},"Wait 1 Hour Before":{"main":[[{"node":"Send 1h Reminder","type":"main","index":0}]]},"Check for Conflicts":{"main":[[{"node":"Is Available?","type":"main","index":0}]]},"Wait 24 Hours Before":{"main":[[{"node":"Send 24h Reminder","type":"main","index":0}]]},"Create Calendar Event":{"main":[[{"node":"Send Confirmation Email","type":"main","index":0}]]},"Find Alternative Slots":{"main":[[{"node":"Send Alternative Slots Email","type":"main","index":0}]]},"Workflow Configuration":{"main":[[{"node":"Parse Booking Data","type":"main","index":0}]]},"Booking Request Webhook":{"main":[[{"node":"Workflow Configuration","type":"main","index":0}]]},"Send Confirmation Email":{"main":[[{"node":"Respond Success","type":"main","index":0},{"node":"Wait 24 Hours Before","type":"main","index":0}]]},"Check Calendar Availability":{"main":[[{"node":"Check for Conflicts","type":"main","index":0}]]},"Send Alternative Slots Email":{"main":[[{"node":"Respond Unavailable","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":26,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.set":{"count":1},"n8n-nodes-base.code":{"count":3},"n8n-nodes-base.wait":{"count":2},"n8n-nodes-base.gmail":{"count":4},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.stickyNote":{"count":10},"n8n-nodes-base.googleCalendar":{"count":2},"n8n-nodes-base.respondToWebhook":{"count":2}}},"status":"published","readyToDemo":null,"user":{"name":"ResilNext","username":"rnair1996","bio":"","verified":true,"links":[""],"avatar":"https://gravatar.com/avatar/c20bc6c3bcdf260fac3c28c556a8db661ee93670037a3ceb857e047851f6f438?r=pg&d=retro&size=200"},"nodes":[{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":317,"icon":"file:googleCalendar.svg","name":"n8n-nodes-base.googleCalendar","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-host-virtual-coffee-breaks-with-n8n/","icon":"☕️","label":"How to host virtual coffee breaks with n8n"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/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/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automation for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/tracking-time-spent-in-meetings-with-google-calendar-twilio-and-n8n/","icon":"🗓","label":"Tracking Time Spent in Meetings With Google Calendar, Twilio, and n8n"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlecalendar/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Google Calendar"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgODEgODIiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZD0iTTYxLjA1MiAxOC45NDdIMTguOTQ3djQyLjEwNWg0Mi4xMDV6Ii8+PHBhdGggZmlsbD0iI2VhNDMzNSIgZD0iTTYxLjA1MyA4MCA4MCA2MS4wNTNINjEuMDUzeiIvPjxwYXRoIGZpbGw9IiNmYmJjMDQiIGQ9Ik04MCAxOC45NDdINjEuMDUzdjQyLjEwNUg4MHoiLz48cGF0aCBmaWxsPSIjMzRhODUzIiBkPSJNNjEuMDUyIDYxLjA1M0gxOC45NDdWODBoNDIuMTA1eiIvPjxwYXRoIGZpbGw9IiMxODgwMzgiIGQ9Ik0wIDYxLjA1M3YxMi42MzJBNi4zMTQgNi4zMTQgMCAwIDAgNi4zMTYgODBoMTIuNjMyVjYxLjA1M3oiLz48cGF0aCBmaWxsPSIjMTk2N2QyIiBkPSJNODAgMTguOTQ3VjYuMzE2QTYuMzE0IDYuMzE0IDAgMCAwIDczLjY4NSAwSDYxLjA1M3YxOC45NDd6Ii8+PHBhdGggZmlsbD0iIzQyODVmNCIgZD0iTTYxLjA1MyAwSDYuMzE2QTYuMzE0IDYuMzE0IDAgMCAwIDAgNi4zMTZ2NTQuNzM3aDE4Ljk0N1YxOC45NDdoNDIuMTA1VjB6TTI3LjU4NCA1MS42MTFjLTEuNTc0LTEuMDYzLTIuNjYzLTIuNjE2LTMuMjU4LTQuNjY4bDMuNjUzLTEuNTA1cS40OTggMS44OTQgMS43MzcgMi45MzdjMS4yMzkgMS4wNDMgMS44MjEgMS4wMzcgMi45ODkgMS4wMzdxMS43OTIgMCAzLjA3OS0xLjA4OWMxLjI4Ny0xLjA4OSAxLjI5LTEuNjUzIDEuMjktMi43NzRhMy40NCAzLjQ0IDAgMCAwLTEuMzU4LTIuODExYy0uOTA1LS43MjctMi4wNDItMS4wODktMy40LTEuMDg5aC0yLjExMXYtMy42MTZIMzIuMXExLjc1MiAwIDIuOTUzLS45NDdjMS4yMDEtLjk0NyAxLjItMS40OTUgMS4yLTIuNTk1cTAtMS40NjctMS4wNzQtMi4zNDJjLTEuMDc0LS44NzUtMS42MjEtLjg3OS0yLjcyMS0uODc5cS0xLjYxLS4wMDItMi41NTguODU4Yy0uOTQ4Ljg2LTEuMTA2IDEuMzAxLTEuMzc5IDIuMTExbC0zLjYxNi0xLjUwNWMuNDc5LTEuMzU4IDEuMzU4LTIuNTU4IDIuNjQ3LTMuNTk1czIuOTM3LTEuNTU4IDQuOTM3LTEuNTU4cTIuMjItLjAwMiAzLjk4OS44NThjMS43NjkuODYgMi4xMDUgMS4zNjggMi43NzQgMi4zNzlzMSAyLjE1MyAxIDMuNDE2cTAgMS45MzItLjkzMiAzLjI3NGMtLjkzMiAxLjM0Mi0xLjM4NCAxLjU3OS0yLjI4OSAyLjA1OHYuMjE2YTYuOTUgNi45NSAwIDAgMSAyLjkzNyAyLjI4OXExLjE0NiAxLjUzOCAxLjE0NyAzLjY4NGMuMDAxIDIuMTQ2LS4zNjMgMi43MTEtMS4wODkgMy44MzJzLTEuNzMyIDIuMDA1LTMuMDA1IDIuNjQ3Yy0xLjI3OS42NDItMi43MTYuOTY4LTQuMzExLjk2OC0xLjg0Ny4wMDUtMy41NTMtLjUyNi01LjEyNi0xLjU4OXptMjIuNDM3LTE4LjEyNi00LjAxIDIuOS0yLjAwNS0zLjA0MiA3LjE5NS01LjE4OWgyLjc1OHYyNC40NzloLTMuOTM3VjMzLjQ4NHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Google Calendar","typeVersion":1,"nodeCategories":[{"id":4,"name":"Productivity"}]},{"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":514,"icon":"fa:pause-circle","name":"n8n-nodes-base.wait","codex":{"data":{"alias":["pause","sleep","delay","timeout"],"resources":{"generic":[{"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/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.wait/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Wait","color":"#804050"},"iconData":{"icon":"pause-circle","type":"icon"},"displayName":"Wait","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":535,"icon":"file:webhook.svg","name":"n8n-nodes-base.respondToWebhook","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"transform\"]","defaults":{"name":"Respond to Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Respond to Webhook","typeVersion":2,"nodeCategories":[{"id":7,"name":"Utility"},{"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"}]}],"categories":[{"id":40,"name":"Support Chatbot"}],"image":[]}}