AutomationFlowsAI & RAG › Send Whatsapp Notifications for Cal.com & Calendly Bookings Using Google Gemini

Send Whatsapp Notifications for Cal.com & Calendly Bookings Using Google Gemini

ByRoshan Ramani @rawsun007 on n8n.io

Business owners, freelancers, and professionals who use Cal.com or Calendly for scheduling and want instant WhatsApp notifications for all booking activities without constantly checking their email or calendar apps.

Event trigger★★★☆☆ complexityAI-powered8 nodesGoogle Gemini ChatMemory Buffer WindowCal TriggerCalendly TriggerAgentWhatsApp
AI & RAG Trigger: Event Nodes: 8 Complexity: ★★★☆☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #7375 — we link there as the canonical source.

This workflow follows the Agent → Google Gemini Chat recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "a68e6e70-f71f-41ff-8ac3-d1906cdd67d2",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        368,
        304
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b3138023-015d-4ef1-8283-a8ca5ee4ec36",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        512,
        320
      ],
      "parameters": {
        "sessionKey": "heello",
        "sessionIdType": "customKey"
      },
      "typeVersion": 1.3
    },
    {
      "id": "25656038-1452-4ec9-b915-36ca81ca77fc",
      "name": "Cal.com Events ",
      "type": "n8n-nodes-base.calTrigger",
      "position": [
        -80,
        192
      ],
      "parameters": {
        "events": [
          "BOOKING_RESCHEDULED",
          "BOOKING_CREATED",
          "BOOKING_CANCELLED",
          "MEETING_ENDED"
        ],
        "options": {}
      },
      "credentials": {
        "calApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "e70b9230-97e9-418d-bdfe-5603bdf50945",
      "name": "Calendly Events",
      "type": "n8n-nodes-base.calendlyTrigger",
      "position": [
        -80,
        0
      ],
      "parameters": {
        "events": [
          "invitee.created",
          "invitee.canceled"
        ],
        "authentication": "oAuth2"
      },
      "credentials": {
        "calendlyOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "13ab2534-452a-48b1-b7a8-71a1353bb804",
      "name": "Merge Data",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        144,
        96
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "2c340a24-4777-4892-a0f1-d07f477954d4",
      "name": "Message Generator",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        368,
        96
      ],
      "parameters": {
        "text": "={{ $json.data.toJsonString() }}",
        "options": {
          "systemMessage": "You are an automation that listens to booking events from Cal.com or Calendly and sends an instant WhatsApp message to the meeting host.\n\nThe output must be ONLY the WhatsApp message body \u2014 no explanations, no labels, no markdown instructions.\n\nRules:\n\nUse WhatsApp markdown formatting for readability:\n\nBold: text\n\nItalic: text (optional)\n\nUse line breaks generously to separate sections.\n\nAlways put date and time on separate lines.\n\nNo duplicate fields. If data is missing, skip that line entirely.\n\nIf event_link is identical to location, show it only once (under Location).\n\nUse emojis sparingly:\n\n\ud83d\udd14 for New Booking\n\n\ud83d\udd04 for Rescheduled\n\n\u274c for Cancelled\n\n\u2705 for Meeting Ended\n\n\ud83d\udcc4 for event links\n\n\ud83d\uddd2\ufe0f for notes\n\nKeep spacing clean \u2014 one blank line between main sections (guest info, date/time, location, notes, link).\n\nIf multiple guests, show in the format:\nName (email), Name2 (email2)\n\nAlways end with:\n\u2014 Your Scheduling Assistant\n\nBooking Created:\nHello {{owner_name}},\n\n\ud83d\udd14 New Booking Alert!\n\nGuest(s): {{#each guests}}{{this.name}} ({{this.email}}){{#unless @last}}, {{/unless}}{{/each}}\nEvent: {{event_name}}\nDate:\n{{date}}\nTime:\n{{time}} ({{timezone}})\n\n{{#if location}}Location:\n{{location}}{{/if}}\n\n{{#if guest_notes}}\ud83d\uddd2\ufe0f Notes:\n{{guest_notes}}{{/if}}\n\n{{#if event_link}}\n{{#unless (eq event_link location)}}\n\ud83d\udcc4 View Details:\n{{event_link}}\n{{/unless}}\n{{/if}}\n\n\u2014 Your Scheduling Assistant\n\nBooking Rescheduled:\nHello {{owner_name}},\n\n\ud83d\udd04 Booking Rescheduled!\n\nGuest(s): {{#each guests}}{{this.name}} ({{this.email}}){{#unless @last}}, {{/unless}}{{/each}}\nEvent: {{event_name}}\nOld Date:\n{{old_date}}\nOld Time:\n{{old_time}} ({{old_timezone}})\nNew Date:\n{{new_date}}\nNew Time:\n{{new_time}} ({{new_timezone}})\n\n{{#if location}}Location:\n{{location}}{{/if}}\n\n{{#if guest_notes}}\ud83d\uddd2\ufe0f Notes:\n{{guest_notes}}{{/if}}\n{{#if reschedule_reason}}(Reschedule Reason: {{reschedule_reason}}){{/if}}\n\n{{#if event_link}}\n{{#unless (eq event_link location)}}\n\ud83d\udcc4 View Details:\n{{event_link}}\n{{/unless}}\n{{/if}}\n\n\u2014 Your Scheduling Assistant\n\nBooking Cancelled:\nHello {{owner_name}},\n\n\u274c Booking Cancelled!\n\nGuest(s): {{#each guests}}{{this.name}} ({{this.email}}){{#unless @last}}, {{/unless}}{{/each}}\nEvent: {{event_name}}\nOriginal Date:\n{{date}}\nOriginal Time:\n{{time}} ({{timezone}})\n\n{{#if location}}Location:\n{{location}}{{/if}}\n\n{{#if guest_notes}}\ud83d\uddd2\ufe0f Notes:\n{{guest_notes}}{{/if}}\n\n{{#if event_link}}\n{{#unless (eq event_link location)}}\n\ud83d\udcc4 View Details:\n{{event_link}}\n{{/unless}}\n{{/if}}\n\n\u2014 Your Scheduling Assistant\n\nMeeting Ended:\nHello {{owner_name}},\n\n\u2705 Meeting Ended\n\nGuest(s): {{#each guests}}{{this.name}} ({{this.email}}){{#unless @last}}, {{/unless}}{{/each}}\nEvent: {{event_name}}\nDate:\n{{date}}\nTime:\n{{time}} ({{timezone}})\n\n{{#if location}}Location:\n{{location}}{{/if}}\n\n{{#if event_link}}\n{{#unless (eq event_link location)}}\n\ud83d\udcc4 View Details:\n{{event_link}}\n{{/unless}}\n{{/if}}\n\n\u2014 Your Scheduling Assistant"
        },
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "9df30eeb-afdd-4ed7-8ef5-792ac47a9a0e",
      "name": "WhatsApp Notification",
      "type": "n8n-nodes-base.whatsApp",
      "position": [
        720,
        96
      ],
      "parameters": {
        "textBody": "={{ $json.output }}",
        "operation": "send",
        "phoneNumberId": "661627073710535",
        "additionalFields": {},
        "recipientPhoneNumber": "mobile number"
      },
      "credentials": {
        "whatsAppApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "71bf0b28-f188-4d4b-b282-03d78c4a77eb",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -768,
        -128
      ],
      "parameters": {
        "width": 1808,
        "height": 672,
        "content": "## \ud83d\udcc5 Calendar Booking Notifications to WhatsApp\n\n**What this workflow does:**\n- Monitors booking events from both Cal.com and Calendly\n- Automatically generates formatted WhatsApp messages for booking updates\n- Sends instant notifications to the meeting host\n\n**Supported Events:**\n- \u2705 New Bookings\n- \ud83d\udd04 Rescheduled Meetings \n- \u274c Cancelled Bookings\n- \ud83c\udfc1 Meeting Ended (Cal.com only)\n\n**Features:**\n- Smart message formatting with WhatsApp markdown\n- Emoji-enhanced notifications\n- Guest details and meeting information\n- Timezone-aware time display\n- Memory for context awareness\n\n**Setup Required:**\n1. Connect your Cal.com/Calendly accounts\n2. Configure WhatsApp Business API credentials\n3. Update recipient phone number in WhatsApp node\n4. Test with sample bookings\n\n\ud83d\udca1 **Pro Tip:** Customize the message templates in the AI Agent node to match your brand voice!"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Merge Data": {
      "main": [
        [
          {
            "node": "Message Generator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "Message Generator",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Cal.com Events ": {
      "main": [
        [
          {
            "node": "Merge Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calendly Events": {
      "main": [
        [
          {
            "node": "Merge Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Message Generator": {
      "main": [
        [
          {
            "node": "WhatsApp Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Message Generator",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Business owners, freelancers, and professionals who use Cal.com or Calendly for scheduling and want instant WhatsApp notifications for all booking activities without constantly checking their email or calendar apps.

Source: https://n8n.io/workflows/7375/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This workflow automatically transforms your messy inbox into a neatly organized space while ensuring you never miss a critical message. It connects to your Gmail account and triggers for every new ema

Gmail Trigger, Output Parser Structured, Gmail Tool +8
AI & RAG

Main. Uses whatsApp, agent, httpRequest, memoryBufferWindow. Event-driven trigger; 25 nodes.

WhatsApp, Agent, HTTP Request +7
AI & RAG

This template is designed for businesses that provide customer support and appointment-based services over WhatsApp. It’s ideal for service providers (e.g., clinics, salons, repair shops, consultants)

WhatsApp Trigger, OpenAI, WhatsApp +6
AI & RAG

⚠️ Disclaimer: This workflow uses WhatsApp, Google Calendar, and Gmail nodes that must be configured manually.

Agent, Google Gemini Chat, Memory Buffer Window +5
AI & RAG

An intelligent, fully customizable WhatsApp customer support chatbot template that works for ANY business - whether you sell fashion, electronics, food, furniture, cosmetics, or anything else. This wo

WhatsApp Trigger, Agent, Google Gemini Chat +3