🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

WhatsApp + Cal.com bookings, logged in Google Sheets

Lisa Granqvist Partner Workflow Automation Expert

Booking requests sound simple until you’re trapped in a WhatsApp thread asking the same questions, checking your calendar, and still worrying you’ll miss a message. Then someone no-shows because they “didn’t see the details.”

If you run client sessions, WhatsApp booking automation hits fast. Coaches feel it in the DMs at night. Clinic admins feel it at the front desk. And consultants notice it when leads go cold after too much back-and-forth.

This workflow turns a single WhatsApp message into a real Cal.com booking, logs it in Google Sheets, and sends a reminder SMS before the appointment. You’ll see how it works, what you need, and where teams usually trip up.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: WhatsApp + Cal.com bookings, logged in Google Sheets

The Problem: WhatsApp Booking Chats Create Hidden Chaos

Most appointment businesses don’t lose leads because they lack demand. They lose leads because booking is slow. A prospect messages on WhatsApp, you reply, they reply later, you check Cal.com, propose times, then something changes and you start over. Meanwhile you’re also trying to deliver sessions, run payroll, or handle patients. The “quick chat” becomes a tiny project, and those projects stack up every week. Worse, manual scheduling invites errors: two people asked for the same slot, someone’s email gets mistyped, or the reminder never gets sent.

It adds up fast. Here’s where it breaks down in real life.

  • You end up asking the same qualifying questions repeatedly (name, email, service), and it steals attention from the work you actually sell.
  • Checking availability manually creates delays, which means prospects often book somewhere else or simply stop responding.
  • Details live in scattered places, so you don’t have a clean log of bookings, statuses, and who needs follow-up.
  • Reminders are easy to forget, and no-shows hurt twice because you lose both time and revenue.

The Solution: AI Handles the Chat, Cal.com Handles the Slot

This workflow starts the moment someone messages you on WhatsApp. Instead of you jumping into “What day works?” mode, an AI scheduling assistant replies instantly, asks for the right details, and keeps the conversation moving. Once it knows who they are and what they want (name, email, selected service), it checks Cal.com availability through the API, offers valid time slots, and books the appointment when the client confirms. Then it updates a Google Sheets log so you can track every booking in one place. Finally, it runs on a schedule in the background, finds sessions coming up soon, and sends an SMS reminder about 2 hours before the appointment.

The workflow begins with a WhatsApp webhook, then routes the message: normal chat goes to the AI agent, while confirmations go down the booking path. In the booking path it formats the date, creates the Cal.com booking request, verifies success, and responds back on WhatsApp so the client knows it’s locked in. Later, the hourly reminder trigger checks Google Sheets and sends SMS to people who are due soon.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you get 12 booking inquiries a week on WhatsApp. Manually, you might spend about 10 minutes per inquiry across replies, checking Cal.com, confirming details, and sending reminders, which is roughly 2 hours weekly. With this workflow, the “human time” drops to quick oversight: maybe 2 minutes to review edge cases or exceptions, so around 20 minutes total. The rest runs in the background, including the SMS reminder about 2 hours before the session.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • WhatsApp API provider for receiving and sending messages.
  • Cal.com to fetch slots and create bookings.
  • Google Sheets to log bookings and reminder status.
  • OpenAI API key (get it from the OpenAI API dashboard).
  • Cal.com API key (get it from Cal.com developer settings).
  • SMS provider credentials (get them from your SMS service, such as sms77).

Skill level: Intermediate. You’ll mostly connect accounts and paste API keys, but you should be comfortable testing webhooks and checking logs when something fails.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

A WhatsApp message triggers the workflow. The WhatsApp Intake Webhook receives inbound chat messages from your provider (like 360dialog, Twilio, or Ultramsg) and immediately hands them to routing logic.

Messages get routed to “chat” or “confirm.” A Switch node separates normal conversation from confirmation-style replies, so the workflow knows when to keep asking questions versus when to actually book a time slot.

The AI assistant runs the conversation. The AI Scheduling Assistant uses an OpenAI chat model plus a conversation memory buffer, which keeps context so it doesn’t ask the same thing three times. It can also call an HTTP tool to retrieve Cal.com availability during the chat.

Booking and logging happen automatically. When the client confirms, the workflow normalizes timestamps, formats the booking date, creates the booking request in Cal.com, and verifies the outcome. It updates Google Sheets with fields like name, email, date, time, status, and reminder_sent, then responds back on WhatsApp with the result.

Reminders run in the background. An hourly schedule trigger reads upcoming bookings from Google Sheets, filters visits in the next 2 hours, dispatches an SMS reminder, then marks that reminder as sent so people don’t get spammed.

You can easily modify the reminder timing to fit your business (1 hour before, 24 hours before) based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Webhook Trigger

This workflow starts when a WhatsApp message hits your webhook and then routes the conversation based on confirmation intent.

  1. Add and open WhatsApp Intake Webhook.
  2. Set HTTP Method to POST and Path to 6438cd95-74cb-4f40-a1a5-853706fe96f6.
  3. Set Response Mode to responseNode so Return WhatsApp Reply can respond.
  4. In Route Confirm vs Chat, keep the rules using ={{ $json.body.userInput }} to split “confirm” vs chat messages.

Tip: Send a sample WhatsApp payload to the webhook to confirm body.userInput and body.contactId exist before continuing.

Step 2: Connect Google Sheets

Multiple nodes read and update the same spreadsheet for lead capture, booking details, and reminder tracking.

  1. Open Add Prospect to Sheet and select your spreadsheet: Document [YOUR_ID] and Sheet gid=0 (“mes RDV”).
  2. Credential Required: Connect your googleSheetsOAuth2Api credentials in Add Prospect to Sheet.
  3. Open Update Sheet Booking Info and confirm the same Document [YOUR_ID] and Sheet gid=0.
  4. Credential Required: Connect your googleSheetsOAuth2Api credentials in Update Sheet Booking Info.
  5. Open Lookup Prospect Record and ensure the filter uses ={{ $('WhatsApp Intake Webhook').item.json.body.contactId }} with Lookup Column set to ID du contact.
  6. Credential Required: Connect your googleSheetsOAuth2Api credentials in Lookup Prospect Record, Flag Booking Confirmed, Read Upcoming Bookings, and Mark SMS Sent.

⚠️ Common Pitfall: Mark SMS Sent has Document and Sheet set to =. Replace both with your actual spreadsheet ID and sheet (e.g., [YOUR_ID], gid=0), or the update will fail.

Step 3: Set Up the AI Scheduling Assistant

The AI agent handles the conversation, saves leads, and calls tools to check availability and update booking data.

  1. Open AI Scheduling Assistant and keep the Text input as =input : {{ $json.body.userInput }}.
  2. Review the System Message to ensure your service mapping, tone, and language rules align with your offer.
  3. Open GPT-4o Chat Engine and keep the model set to gpt-4o.
  4. Credential Required: Connect your openAiApi credentials in GPT-4o Chat Engine. This node powers AI Scheduling Assistant.
  5. In Conversation Memory Buffer, keep Session Key set to ={{ $json.body.contactId }} and Context Window Length to 50.

Tip: Conversation Memory Buffer, Add Prospect to Sheet, Update Sheet Booking Info, and Retrieve Available Slots are AI tools—credentials and access should be configured in their respective nodes, but their execution is controlled by AI Scheduling Assistant.

Step 4: Configure Booking Creation and WhatsApp Responses

When a user confirms, the workflow looks up their record, normalizes the time, creates the booking, and responds with success or error.

  1. Confirm the execution path: WhatsApp Intake WebhookRoute Confirm vs ChatLookup Prospect RecordNormalize Booking TimestampCreate Booking RequestFormat Booking DateVerify Booking Outcome.
  2. In Normalize Booking Timestamp, keep the JS code that outputs normalized in UTC Z format.
  3. In Create Booking Request, set URL to https://api.cal.com/v2/bookings and keep the JSON body expression: { "eventTypeId": {{ $('Lookup Prospect Record').item.json['ID de l’événement'] }}, "start": "{{ $json.normalized }}", "attendee": { "name": "{{ $('Lookup Prospect Record').item.json.Nom }}", "email": "{{ $('Lookup Prospect Record').item.json.Courriel }}", "timeZone": "Europe/Paris" }, "bookingFieldsResponses": { "title": "{{ $('Lookup Prospect Record').item.json['Résumé'] }}" } }
  4. In Create Booking Request headers, set Authorization to Bearer [CONFIGURE_YOUR_TOKEN], Content-Type to application/json, and cal-api-version to 2024-08-13.
  5. In Verify Booking Outcome, keep the success and error checks using ={{ $('Create Booking Request').item.json.status }}.
  6. Customize Respond: Booking Success and Respond: Booking Error Response Body messages if needed.
  7. In Flag Booking Confirmed, ensure Réservé is set to confirm and ID du contact uses ={{ $('Lookup Prospect Record').item.json['ID du contact'] }}.

⚠️ Common Pitfall: The Cal.com API token placeholder [CONFIGURE_YOUR_TOKEN] appears in Create Booking Request and Retrieve Available Slots. Replace it with a valid token or all booking actions will fail.

Step 5: Configure the SMS Reminder Loop

An hourly schedule reads upcoming bookings, filters those within 2 hours, then sends and logs SMS reminders.

  1. Open Hourly Appointment Trigger and keep the Interval set to hours so it runs every hour.
  2. Open Read Upcoming Bookings and verify it points to Document [YOUR_ID] and Sheet gid=0.
  3. In Filter Next 2h Visits, keep the JS logic that checks Réservé and Rappel SMS envoyé, and calculates the two-hour window.
  4. In Dispatch SMS Reminder, set To to ={{ $('Read Upcoming Bookings').item.json['Numéro de téléphone'] }} and Message to =Bonjour {{ $json.Nom }}, ceci est un petit rappel : votre rendez-vous pour {{ $json['Nom de l’événement'] }} est prévu dans les 2 prochaines heures .
  5. Credential Required: Connect your sms77Api credentials in Dispatch SMS Reminder.
  6. In Mark SMS Sent, ensure Rappel SMS envoyé is set to envoyer and ID du contact uses ={{ $('Read Upcoming Bookings').item.json['ID du contact'] }}.

Tip: Use a test row in your sheet with a booking date within the next 2 hours and Réservé = confirm to validate the reminder path.

Step 6: Test and Activate Your Workflow

Validate each path—chat flow, booking confirmation, and reminders—before going live.

  1. Click Execute Workflow and send a WhatsApp test payload to WhatsApp Intake Webhook with body.userInput, body.contactId, and body.phoneNumber.
  2. Confirm that AI Scheduling Assistant replies via Return WhatsApp Reply and that leads are saved in Add Prospect to Sheet.
  3. Test a “confirm” message to follow the booking path and verify Create Booking Request returns status: success and Respond: Booking Success fires.
  4. Trigger Hourly Appointment Trigger manually and verify Dispatch SMS Reminder sends a message and Mark SMS Sent updates the sheet.
  5. When all paths succeed, switch the workflow to Active to enable production use.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • WhatsApp provider credentials can expire or require specific permissions for replying to messages. If things break, check your provider dashboard logs and webhook delivery history first.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • OpenAI prompts are often too generic out of the box. Add your service list, booking rules, and brand voice in the system prompt early or you will be editing outputs forever.

Frequently Asked Questions

How long does it take to set up this WhatsApp booking automation automation?

About 45 minutes if you already have your WhatsApp, Cal.com, and Sheets accounts ready.

Do I need coding skills to automate WhatsApp booking automation?

No. You’ll connect accounts, add API keys, and test a few sample chats. The only “technical” part is verifying your webhook is receiving messages.

Is n8n free to use for this WhatsApp booking automation workflow?

Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API usage plus WhatsApp/SMS provider fees.

Where can I host n8n to run this automation?

Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.

Can I customize this WhatsApp booking automation workflow for multiple services and different reminder times?

Yes, and it’s one of the best reasons to use n8n here. Update the AI Scheduling Assistant prompt to reflect your services, durations, and rules (for example, “intake calls are 15 minutes, sessions are 60”). If you want different availability per service, adjust the Retrieve Available Slots HTTP tool call so it filters by event type or calendar/team member in Cal.com. For reminders, change the “next 2 hours” filter logic and the schedule trigger frequency, then keep using the reminder_sent field in Google Sheets to prevent duplicates.

Why is my WhatsApp connection failing in this workflow?

Usually it’s the WhatsApp provider setup, not n8n. Confirm your webhook URL is correct, the provider is actually delivering events, and you’re replying within the provider’s allowed messaging window. If the workflow receives messages but can’t respond, check the provider’s auth token and message-send permissions. Also confirm your Route Confirm vs Chat logic matches the exact reply formats your users send (people rarely type “confirm” the same way twice, honestly).

How many appointments can this WhatsApp booking automation automation handle?

A lot, as long as your providers can keep up. On n8n Cloud you’re mainly limited by your monthly executions and plan size; self-hosting is limited by your server. Practically, most small businesses can run hundreds of bookings a month without issues, then scale up by optimizing prompts, reducing unnecessary calls to Cal.com, and batching reminder checks in Google Sheets.

Is this WhatsApp booking automation automation better than using Zapier or Make?

Often, yes. This flow needs branching (chat vs confirm), memory for the conversation, HTTP calls to Cal.com, and a scheduled reminder job, which is where n8n tends to stay flexible and affordable. Zapier or Make can still work for simpler “new booking → log row” automations, but they get awkward when you want an AI agent driving the chat. If you’re unsure, Talk to an automation expert and describe your volume and booking rules.

Once this is live, bookings stop living in your head (or your chat history). The workflow handles the repetitive parts so you can focus on the actual appointment.

Need Help Setting This Up?

Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal