🔓 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

Telegram + Google Calendar bookings, logged to Sheets

Lisa Granqvist Partner Workflow Automation Expert

Your “booking system” shouldn’t be a messy Telegram thread, a half-updated calendar, and a sticky note you swear you’ll copy into a spreadsheet later. But that’s how double bookings happen, and it’s also how cancellations get missed.

This is where Telegram booking automation pays off fast. Solo consultants feel it first, but front-desk teams and agency owners juggling client calls run into the same headache: too much back-and-forth, not enough certainty. You get confirmed appointments, fewer clashes, and a clean record in Sheets without babysitting the process.

This workflow turns a Telegram bot into a scheduling assistant that checks Google Calendar availability, creates events, logs every booking, and lets people cancel or view upcoming appointments. Here’s what it does, what you need, and how to make it fit your business.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Telegram + Google Calendar bookings, logged to Sheets

The Problem: Booking Requests Turn Into Calendar Chaos

Booking through chat sounds “simple” until you do it all week. People message at random times, they don’t include the details you need, and you end up asking two or three follow-up questions just to confirm one slot. Then you switch apps, check your calendar, come back to Telegram, and hope nobody else grabbed that time while you were away. Cancellations are worse. They often show up as a casual “can’t make it” message, which means you forget to remove the event or you remove the wrong one.

None of this is hard. It’s just constant. And it steals attention from work that actually brings in revenue.

  • Every booking turns into a mini-project: confirm details, check availability, create event, and notify the client.
  • You rely on memory (or scrolling) to know what was booked, changed, or cancelled last week.
  • One missed update causes the classic nightmare: two clients showing up for the same time.
  • Without a clean log, you can’t easily answer basic questions like “How many appointments did we do this month?”

The Solution: A Telegram Bot That Confirms, Schedules, and Logs

This n8n workflow turns Telegram into a real scheduling front door. A client sends a message in a format like “agendar 2026-02-10 14:00 Alex Johnson” and the bot takes it from there. It parses the date/time and name, checks your Google Calendar for that slot, and only confirms the booking if it’s actually free. Once confirmed, it creates the Google Calendar event automatically, then writes the appointment to Google Sheets as a permanent record. If the slot is taken, the bot replies right away so you’re not stuck negotiating times manually.

It also handles the annoying (but necessary) lifecycle stuff. Clients can cancel with a message, the workflow finds the matching calendar event, removes it, deletes the related row in Sheets, and sends a cancellation notice. They can also list upcoming appointments, which is surprisingly useful when someone forgets what they booked.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you handle 15 appointments a week through Telegram. Manually, each one usually costs about 10 minutes: clarify details, check Google Calendar, create the event, then write it somewhere you can find later. That’s around 2.5 hours weekly, plus extra time when cancellations happen. With this workflow, the “human time” becomes a quick message review and occasional edge-case handling, maybe 1–2 minutes per booking. The rest is automatic checks, event creation, and logging in Sheets.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Telegram to receive booking messages in chat
  • Google Calendar to check availability and create events
  • Google Sheets for a searchable booking database
  • Telegram Bot token (get it from BotFather in Telegram)
  • Google OAuth Client ID/Secret (get it from Google Cloud Console APIs & Services)

Skill level: Intermediate. You’ll mostly be connecting accounts and selecting the right calendar/sheet, plus minor tweaks to message formats.

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

How It Works

A Telegram message triggers everything. The workflow starts when someone sends your bot a command like agendar, cancelar, or mis citas. n8n picks it up instantly via the Telegram trigger.

The message is routed and parsed. A switch routes the request based on intent, then small “transform” steps extract the date, time, and client name so Google Calendar and Google Sheets receive clean fields instead of messy text.

Availability is checked before confirming. The workflow looks at your Google Calendar to retrieve slots and confirm the requested time is free. If it’s not available, the bot replies immediately and the booking is stopped right there.

Events and logs stay in sync. When a booking is valid, it creates the calendar event, writes a row in Google Sheets, and sends a confirmation message back in Telegram. For cancellations, it finds the matching event, deletes it, deletes the Sheets row, and notifies the client.

You can easily modify the command format and the Sheet columns to match how your clients already talk. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Telegram Trigger

Set up the entry point that listens for incoming Telegram messages and routes them into the workflow.

  1. Add the Telegram Incoming Trigger node and open its settings.
  2. Set Updates to message.
  3. Credential Required: Connect your telegramApi credentials in Telegram Incoming Trigger.
  4. Confirm Telegram Incoming Trigger connects to Route by Condition in the canvas.

Step 2: Configure the Command Router

Route messages to the correct booking, cancellation, listing, or fallback path based on the text content.

  1. Open Route by Condition and add four rules that evaluate {{$json.message.text}}.
  2. Rule 1: equals /start to send the user to Send Welcome Guide.
  3. Rule 2: startsWith agendar to route to Transform Schedule Data.
  4. Rule 3: startsWith cancelar to route to Prepare Cancel Request.
  5. Rule 4: startsWith citas to route to Parse Client Name.
  6. Enable Fallback Output so unmatched messages go to Fallback Bot Reply.

Step 3: Set Up the Booking Flow (Schedule Path)

This path parses the appointment request, checks availability, creates the calendar event, and records it in Sheets.

  1. In Transform Schedule Data, keep the JavaScript that parses agendar AAAA-MM-DD HH:MM Nombre and produces startDateTime and endDateTime in ISO format.
  2. Configure Retrieve Calendar Slots with Operation getAll, Return All enabled, Time Min set to {{$json.startDateTime}}, and Time Max set to {{$json.endDateTime}}. Credential Required: Connect your googleCalendarOAuth2Api credentials.
  3. In Check Slot Availability, verify the condition uses {{$json.isEmpty()}} to allow booking only when the slot is free.
  4. Configure Generate Calendar Event with Start {{$('Transform Schedule Data').item.json.startDateTime}} and End {{$('Transform Schedule Data').item.json.endDateTime}}; set Summary to {{$('Transform Schedule Data').item.json.summary}}; set Use Default Reminders to false. Credential Required: Connect your googleCalendarOAuth2Api credentials.
  5. Configure Record Booking in Sheets with Operation appendOrUpdate and map columns: id {{$json.id}}, Fecha ISO {{$json.start.dateTime}}, Fecha y hora {{DateTime.fromISO($('Transform Schedule Data').item.json.startDateTime).setLocale('es').toFormat("EEEE, dd 'de' MMMM 'de' yyyy 'a las' HH:mm")}}, Nombre Cliente {{$('Transform Schedule Data').item.json.name}}. Credential Required: Connect your googleSheetsOAuth2Api credentials.
  6. Ensure the execution flow follows: Transform Schedule DataRetrieve Calendar SlotsCheck Slot AvailabilityGenerate Calendar EventRecord Booking in Sheets.

⚠️ Common Pitfall: The time zone in Transform Schedule Data is set to America/Guayaquil. Update it if your calendar uses a different time zone to prevent off-by-one-hour bookings.

Step 4: Configure the Cancellation Flow

This path parses a cancel request, finds the event, removes it from Google Calendar, and deletes the matching row in Sheets.

  1. In Prepare Cancel Request, keep the JavaScript that returns startDateTime and endDateTime based on the cancelar command.
  2. Set Fetch Events for Cancel to Operation getAll, Time Min {{$json.startDateTime}}, Time Max {{$json.endDateTime}}, and Return All enabled. Credential Required: Connect your googleCalendarOAuth2Api credentials.
  3. In Confirm Event Exists, keep the condition using {{$json.isEmpty()}} to decide between Alert Booking Not Found and Remove Calendar Event.
  4. Configure Remove Calendar Event with Operation delete and Event ID set to {{$json.id}}. Credential Required: Connect your googleCalendarOAuth2Api credentials.
  5. Set Lookup Sheet Booking to filter by id with Lookup Value {{$('Confirm Event Exists').item.json.id}} and connect googleSheetsOAuth2Api credentials.
  6. Configure Delete Sheet Entry with Operation delete and Start Index {{$json.row_number}}. Credential Required: Connect your googleSheetsOAuth2Api credentials.

Step 5: Configure the Booking Lookup (List Path)

This path finds upcoming bookings for a client name and returns a summary message.

  1. In Parse Client Name, keep the JavaScript that builds name and searchTerm from citas Tu Nombre.
  2. Configure Find Client Bookings to filter by Nombre Cliente using Lookup Value {{$json.name}}. Credential Required: Connect your googleSheetsOAuth2Api credentials.
  3. In Validate Booking List, keep the condition {{$json.isEmpty()}} to route to Reply No Upcoming Bookings when no rows are found.
  4. Keep the Build Booking Summary code that filters by future dates and outputs message.
  5. Set Send Booking Summary Text to {{$json.message}} and Chat ID to {{$('Telegram Incoming Trigger').first().json.message.chat.id}}. Credential Required: Connect your telegramApi credentials.

Step 6: Configure User Replies and Notifications

Ensure all Telegram responses are connected for success, errors, and fallback replies.

  1. Connect Send Welcome Guide to the /start route and set Chat ID to {{$json.message.chat.id}}. Credential Required: Connect your telegramApi credentials.
  2. Connect Notify Time Unavailable to the false branch of Check Slot Availability with Chat ID {{$('Telegram Incoming Trigger').item.json.message.chat.id}}. Credential Required: Connect your telegramApi credentials.
  3. Send success messages via Send Booking Confirmation after Record Booking in Sheets and Send Cancellation Notice after Delete Sheet Entry. Credential Required: Connect your telegramApi credentials.
  4. Connect Alert Booking Not Found to the true branch of Confirm Event Exists, and connect Fallback Bot Reply to the fallback output from Route by Condition. Credential Required: Connect your telegramApi credentials for all Telegram reply nodes (8 total).

Step 7: Test and Activate Your Workflow

Validate each path and then enable the workflow for production use.

  1. Click Execute Workflow and send test messages to your bot: /start, agendar 2025-09-22 15:00 Ana Rodriguez, cancelar 2025-09-22 15:00 Ana Rodriguez, and citas Ana Rodriguez.
  2. Confirm successful execution paths: event created in Google Calendar, row appended in Google Sheets, and a confirmation sent via Send Booking Confirmation.
  3. Confirm cancellation paths: event deleted in Google Calendar, row deleted in Google Sheets, and Send Cancellation Notice sent to the user.
  4. Verify the listing path returns a summary via Send Booking Summary or a no-results response via Reply No Upcoming Bookings.
  5. Toggle the workflow to Active for production use.
🔒

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 n8n Credentials page first, then confirm the Google Cloud OAuth consent screen is still valid.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • Telegram bot tokens get copied around and sometimes rotated. If the bot suddenly goes silent, re-check the token from BotFather and update the Telegram credential in n8n.

Frequently Asked Questions

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

About an hour if your Google and Telegram credentials are ready.

Do I need coding skills to automate Telegram booking automation?

No. You’ll connect accounts and adjust a few fields in n8n. The only “technical” part is copying keys and picking the right calendar and spreadsheet.

Is n8n free to use for this Telegram 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 Google Workspace costs if you’re on a paid plan (the Calendar/Sheets APIs themselves are typically low-cost for normal usage).

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 Telegram booking automation workflow for different commands or languages?

Yes, and it’s one of the easiest wins. You can change the command words in the routing logic (the switch that decides between scheduling, cancelling, listing, and fallback), then update the parsing steps that extract date/time and name. Common customizations include using “book” instead of “agendar,” adding a timezone rule, and writing extra columns to Google Sheets like phone number or service type.

Why is my Telegram connection failing in this workflow?

Usually it’s the bot token. Re-copy it from BotFather, update the Telegram credential in n8n, and run a test message. If it still fails, confirm you’re messaging the correct bot username and that the workflow is active.

How many bookings can this Telegram booking automation automation handle?

On n8n Cloud Starter, you can typically handle hundreds of booking messages a month without thinking about it. If you self-host, there’s no execution limit, so capacity mostly depends on your server and how busy your calendar checks are. In practice, this workflow processes one request at a time per chat message, so it scales cleanly for most small businesses.

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

Often, yes, because booking flows aren’t just one trigger and one action. You need branching (book vs cancel vs list), validation (is the slot free?), and cleanup (delete calendar and sheet rows together). n8n handles that kind of logic without turning your automation into a spiderweb of separate Zaps or Scenarios. Also, self-hosting matters when volume grows. If your needs are truly simple, Zapier or Make can be quicker to start. Talk to an automation expert if you want a straight recommendation for your exact case.

Once this is live, bookings stop feeling fragile. You get a calendar that matches reality, plus a Sheets log you can actually trust.

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