🔓 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 + Google Calendar: confirmations handled

Lisa Granqvist Partner Workflow Automation Expert

Appointment confirmations sound simple until your front desk is buried in WhatsApp threads, reminders get forgotten, and “See you tomorrow” turns into a no-show.

This WhatsApp calendar automation hits clinic managers first, but reception teams and busy practice owners feel it too. You get confirmations sent on time, replies routed to the right place, and your schedule stays accurate without someone babysitting it.

Below is the exact workflow, what it fixes, and how it keeps WhatsApp messages and Google Calendar appointments in sync day after day.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: WhatsApp + Google Calendar: confirmations handled

The Problem: Confirmations fall through the cracks

Most clinics don’t lose patients because the care is bad. They lose time (and revenue) because communication is messy. A receptionist confirms five appointments, gets pulled into an urgent call, then comes back to 30 unread WhatsApp messages. Somewhere in that pile is a patient trying to reschedule, another asking “what time was it again?”, and someone who never replies at all. Now your Google Calendar is technically “correct”, but reality isn’t. Staff prep the wrong room, the wrong clinician, or nobody shows up. Honestly, it’s exhausting.

The friction compounds. Here’s where it breaks down in real clinics.

  • Confirmations are sent inconsistently, so patients who would have replied “yes” simply don’t see a prompt.
  • Reschedule requests arrive, but they’re buried in chat history and handled too late to reuse the slot.
  • WhatsApp voice notes and photos slow everything down because someone has to listen, interpret, and type it back out.
  • Calendar changes and chat updates drift apart, which creates double-bookings or awkward “we don’t see you scheduled” moments.

The Solution: WhatsApp confirmations that update your calendar

This n8n workflow acts like a clinic communication layer between WhatsApp, Telegram (for staff), and Google Calendar. Incoming WhatsApp messages hit a webhook first, then get classified by type (text, image, audio, document). If it’s media, the workflow fetches the file and uses AI to turn it into usable text (audio transcription or image understanding). From there, a specialized WhatsApp assistant agent handles common patient intents like confirming, rescheduling, and basic questions, then a formatting agent ensures the outgoing message matches WhatsApp-friendly structure before sending it through the Evolution API. Separately, every weekday morning the workflow checks tomorrow’s Google Calendar appointments and proactively sends confirmation messages, so the “please confirm” step happens reliably even on busy days.

The workflow starts with two entry points: patient messages in WhatsApp and staff requests in Telegram. It then routes the conversation through the right AI agent, pulls or updates appointment details via Google Calendar tools, and finally sends a clean confirmation back to the patient (and a clear response back to staff when they initiate changes).

What You Get: Automation vs. Results

Example: What This Looks Like

Say your clinic has 25 appointments tomorrow. Manually, sending a WhatsApp reminder, waiting, then logging the outcome often takes about 4 minutes per patient once you include context switching, which is roughly 100 minutes. And that’s on a “smooth” day. With this workflow, confirmations go out automatically at 08:00, and replies route themselves to the right agent. You might spend 10 minutes reviewing edge cases, not nearly two hours chasing people.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Evolution API (WhatsApp) for sending and receiving WhatsApp messages.
  • Google Calendar to read and update appointment details.
  • Telegram Bot for staff commands and internal notifications.
  • OpenAI API key (get it from your OpenAI API dashboard).
  • PostgreSQL database for persistent chat memory sessions.

Skill level: Intermediate. You’ll connect a few credentials, paste API keys, and test message flows end-to-end.

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

How It Works

Patient messages trigger the workflow. An incoming WhatsApp webhook receives each message, then fields are mapped so the workflow has a consistent format to work with.

Content gets understood, even when it’s messy. A switch routes text straight to the WhatsApp assistant, while audio and images are fetched and converted so AI can transcribe or interpret what the patient actually sent.

AI agents handle intent and next actions. The Clinic WhatsApp Assistant and Appointment Confirmation Agent decide if the patient is confirming, asking to reschedule, or needs escalation. When staff initiate changes from Telegram, the Internal Clinic Assistant handles those requests and replies back in Telegram.

Confirmed messaging goes out cleanly. A Message Formatting Agent prepares the final WhatsApp reply, then the Evolution API dispatch nodes send it. On weekdays at 08:00, the scheduled trigger runs a next-day reminder batch so confirmations happen consistently.

You can easily modify the confirmation timing to match your clinic hours based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Triggers

Set up the inbound WhatsApp, Telegram, and scheduled triggers that initiate the workflow’s three core flows.

  1. Open Incoming WhatsApp Webhook and set HTTP Method to POST and Path to evolutionAPIKORE.
  2. Open Telegram Message Intake and confirm it listens for updates of message. Credential Required: Connect your telegramApi credentials.
  3. Open Weekday Schedule Trigger and set the cron expression to 0 8 * * 1-5 (weekday 08:00).
If you change the webhook path, you must update the Evolution API webhook URL to match evolutionAPIKORE.

Step 2: Map and Route Incoming WhatsApp Data

Normalize the incoming WhatsApp payload and route it by content type (text, image, audio, or document).

  1. In Map Incoming Fields, add assignments for key fields like number with {{$json.body.data.key.remoteJid}} and text with {{$json.body.data.message.conversation}}.
  2. In Map Incoming Fields, include media fields such as image.url with {{$json.body.data.message.imageMessage.url}} and audio.url with {{$json.body.data.message.audioMessage.url}}.
  3. In Route by Content Type, verify the rules check {{$json.text}}, {{$json.image.url}}, {{$json.audio.url}}, and {{$json.document.url}} for notEmpty.
⚠️ Common Pitfall: If media URLs are missing in the inbound payload, the switch rules won’t match, and the message won’t reach downstream processors.

Step 3: Configure Media Processing for Audio and Images

Set up the audio transcription and image analysis paths before responses are generated.

  1. In Evolution Media Fetch, set Operation to get-media-base64, Message ID to {{$json.key_id}}, and Instance Name to {{$('Incoming WhatsApp Webhook').item.json.body.instance}}. Credential Required: Connect your evolutionApi credentials.
  2. In Binary File Converter, set Operation to toBinary and Source Property to data.base64.
  3. In OpenAI Audio Transcriber, set Resource to audio, Operation to transcribe, and Binary Property Name to =data. Credential Required: Connect your openAiApi credentials.
  4. In OpenAI Vision Analyzer, set Resource to image, Operation to analyze, Text to TRANSCRIBE OS TEXTOS e describe a imagem, and Image URLs to {{$json.image}}. Credential Required: Connect your openAiApi credentials.
  5. In Image Insight Agent, set Text to {{$json.output}} and ensure it uses OpenRouter Chat Engine B as the language model. Credential Required: Connect your openRouterApi credentials to OpenRouter Chat Engine B.

Step 4: Configure the WhatsApp AI Response Chain

Build the assistant that interprets messages, applies memory, formats the reply, and sends it to WhatsApp.

  1. In Clinic WhatsApp Assistant, set Text to {{$json.text}}{{$json.output}} and review the system message for clinic policy.
  2. Attach Postgres Memory Session as memory with Session Key set to {{ $('Incoming WhatsApp Webhook').item.json.body.data.key.id }} and Context Window Length to 50. Credential Required: Connect your postgres credentials on Clinic WhatsApp Assistant (the memory node is a sub-node).
  3. Set the language model for Clinic WhatsApp Assistant to OpenAI Chat Engine. Credential Required: Connect your openAiApi credentials to OpenAI Chat Engine.
  4. For tools used by Clinic WhatsApp Assistant, ensure Send Cancellation Alert is available with Text {{$fromAI('Text', ``, 'string')}} and Chat ID {{$fromAI('Chat_ID', ``, 'string')}}. Credential Required: Connect your telegramApi credentials on Clinic WhatsApp Assistant (tool credentials belong to the parent agent).
  5. Open Run Sub-Workflow (Configure Required) and set Workflow ID to your escalation workflow. Keep inputs mapped to {{$fromAI('nome', ``, 'string')}}, {{$fromAI('telefone', ``, 'string')}}, and {{$fromAI('ultima_mensagem', ``, 'string')}}.
  6. In Message Formatting Agent, set Text to {{$json.output}} and use OpenRouter Chat Engine A as the language model. Credential Required: Connect your openRouterApi credentials to OpenRouter Chat Engine A.
  7. In WhatsApp Message Dispatch, set Remote JID to {{$('Incoming WhatsApp Webhook').item.json.body.data.key.remoteJid}}, Message Text to {{$json.output}}, and Instance Name to {{$('Incoming WhatsApp Webhook').item.json.body.instance}}. Credential Required: Connect your evolutionApi credentials.
⚠️ Common Pitfall: Run Sub-Workflow (Configure Required) ships with an empty Workflow ID. The escalation tool will fail until you select a real workflow.

Step 5: Configure the Telegram Internal Assistant Flow

Set up the internal Telegram-driven assistant for staff-driven rescheduling and task reminders.

  1. In Internal Clinic Assistant, set Text to {{$json.message.text}} and verify the system instructions for internal rescheduling and shopping list tasks.
  2. Assign OpenAI Chat Engine A as the language model. Credential Required: Connect your openAiApi credentials to OpenAI Chat Engine A.
  3. Connect Postgres Conversation Memory with Session Key set to 100 and Context Window Length to 10. Credential Required: Connect your postgres credentials on Internal Clinic Assistant (memory credentials belong to the parent agent).
  4. Ensure tool nodes for this agent are attached: MCP Calendar Access and Add Task Reminder. Credential Required: Connect your googleTasksOAuth2Api credentials on Internal Clinic Assistant (the Add Task Reminder tool is a sub-node).
  5. In Telegram Reply Sender, set Text to {{$json.output}} and Chat ID to {{$('Telegram Message Intake').item.json.message.chat.id}}. Credential Required: Connect your telegramApi credentials.

Step 6: Configure Appointment Confirmation Automation

Automate daily appointment confirmation messages based on the calendar.

  1. Open Appointment Confirmation Agent and confirm the prompt instructs it to list next-day events and send reminders.
  2. Assign OpenAI Chat Engine B as the language model. Credential Required: Connect your openAiApi credentials to OpenAI Chat Engine B.
  3. Attach the MCP tools MCP Calendar Tool and MCP Gmail Connector to Appointment Confirmation Agent so it can read the schedule and related communications.
  4. In Appointment Reminder Sender, set Remote JID to [YOUR_EMAIL], Message Text to {{$fromAI("reminder")}}, and Instance Name to instance name. Credential Required: Connect your evolutionApi credentials.
⚠️ Common Pitfall: Replace [YOUR_EMAIL] and instance name in Appointment Reminder Sender or reminders will not reach real recipients.

Step 7: Review Execution Flow Connections

Verify the node order matches the intended execution paths for WhatsApp, Telegram, and scheduled reminders.

  1. Confirm the WhatsApp chain: Incoming WhatsApp WebhookMap Incoming FieldsRoute by Content TypeClinic WhatsApp AssistantMessage Formatting AgentWhatsApp Message Dispatch.
  2. Confirm the audio branch: Route by Content TypeEvolution Media FetchBinary File ConverterOpenAI Audio TranscriberClinic WhatsApp Assistant.
  3. Confirm the image branch: Route by Content TypeOpenAI Vision AnalyzerImage Insight AgentClinic WhatsApp Assistant.
  4. Confirm the Telegram chain: Telegram Message IntakeInternal Clinic AssistantTelegram Reply Sender.
  5. Confirm the scheduled reminders: Weekday Schedule TriggerAppointment Confirmation AgentAppointment Reminder Sender.

Step 8: Test & Activate Your Workflow

Validate each trigger and confirm the responses before turning on the workflow in production.

  1. Use Execute Workflow to send a test message into Incoming WhatsApp Webhook and confirm the response is sent by WhatsApp Message Dispatch.
  2. Send a Telegram message to verify Telegram Message Intake triggers Internal Clinic Assistant and returns a reply via Telegram Reply Sender.
  3. Run Weekday Schedule Trigger manually to confirm Appointment Reminder Sender sends a reminder with {{$fromAI("reminder")}}.
  4. When tests succeed, toggle the workflow to Active to enable production execution.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Google Calendar OAuth credentials can expire or need specific permissions. If things break, check your Google Cloud OAuth consent screen and token status 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.
  • Evolution API (WhatsApp) instances often fail due to an incorrect instance name or revoked API key. Verify the instance and key in your Evolution dashboard, then re-test a single outbound message.
  • Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.

Frequently Asked Questions

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

Plan for about 60 minutes if your credentials are ready.

Do I need coding skills to automate WhatsApp calendar automation?

No. You’ll mostly connect accounts and paste API keys. The logic is already built into the workflow.

Is n8n free to use for this WhatsApp calendar 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 costs, which are usually a few cents per conversation depending on message length and media.

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 calendar automation workflow for a different confirmation schedule and message style?

Yes, and you should. You can change the weekday timing in the “Weekday Schedule Trigger” node, then adjust the wording inside the “Appointment Confirmation Agent” and “Message Formatting Agent” so it matches your clinic’s tone. Common tweaks include adding a cancellation policy line, supporting multiple languages, and sending staff a Telegram alert when a patient asks to reschedule.

Why is my WhatsApp connection failing in this workflow?

Usually it’s an Evolution API credential issue: wrong instance name, expired key, or the WhatsApp session disconnected. Update the Evolution credentials in n8n, then send one simple outbound test message to confirm delivery. If inbound messages aren’t arriving, double-check the webhook URL configured in Evolution. Also watch for rate limits if you blast many reminders at once.

How many appointments can this WhatsApp calendar automation handle?

For a typical small clinic schedule, dozens to a few hundred confirmations a day is realistic.

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

Often, yes, if you care about reliability and flexibility. This workflow isn’t just “send a reminder”; it routes messages by content type, processes audio and images, and uses memory so patient conversations don’t reset every time. n8n also gives you branching logic without paying per-path, and self-hosting avoids execution caps if volume grows. Zapier or Make can be quicker for very simple two-step reminders, but they get awkward once you add media processing and escalation rules. If you want help choosing, Talk to an automation expert and map it to your actual patient volume.

Once confirmations run on autopilot, the schedule stops being a daily guessing game. The workflow handles the repetitive follow-ups so your staff can focus on patients.

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