Telegram Bot for Appointment Booking: Step-by-Step Guide

Learn how to build a Telegram appointment booking bot with calendar sync, double-booking prevention, automated reminders, and deposit payments.

Telegram16 min read

Why Service Businesses Run Bookings Inside Telegram

Service businesses such as hair salons, medical clinics, private tutors, and independent consultants often face high friction when directing clients to external booking platforms. Forcing a client to download a dedicated mobile application or navigate a multi-step web form creates drop-off. Customers abandon registration screens, forget passwords, or misplace email confirmation links.

Operating inside Telegram removes these barriers. According to Finance Magnates, Telegram reaches 1 billion monthly active users. For a salon booking bot or medical scheduling tool, this platform offers an existing channel where clients already chat daily. Because the interface is familiar, clients can schedule appointments in seconds without registering a separate account or leaving their messenger app.

Native Chat Thread Advantages

Running appointment operations inside native chat threads provides measurable benefits over traditional web interfaces:

  • Zero Account Friction: The client's Telegram account provides immediate verification, eliminating sign-up forms and SMS verification codes.
  • High Visibility: Confirmations and status updates arrive as standard chat messages, bypassing email spam folders and achieving high open rates.
  • Persistent Context: The appointment history, business address, and instructions stay organized within a single conversation thread that the client can reference at any time.

The Four Essential Booking Flows

A production-ready telegram booking bot must handle more than picking an open slot. To operate reliably without staff intervention, the bot architecture must cover four core flows:

FlowSystem ActionClient Experience
Initial Slot BookingValidates duration, checks staff availability, and reserves the calendar entry.Guided step-by-step selection of service, provider, date, and time.
Automated RemindersSchedules asynchronous notifications ahead of the booking time.Interactive push alert with appointment details and arrival instructions.
Frictionless ReschedulingFrees the old slot in the database and reassigns the new selected time.In-chat button prompt allowing the client to move their time without calling.
CancellationsReleases calendar inventory immediately and notifies business staff.Simple cancellation button that frees the slot for other customers.

Step 1: Bot Setup and Architecture with BotFather and Webhooks

Every Telegram booking bot begins inside Telegram itself through @BotFather, the official bot management interface.

Registering the Bot and Menu Commands

To register your bot account:

  1. Open Telegram, search for @BotFather, and send /newbot.
  2. Provide a display name (for example, "Downtown Salon Bookings") and a unique username ending in bot (such as downtown_salon_booking_bot).
  3. Store the issued HTTP API authentication token in your backend environment variables. Never expose this key in client-side code or public repositories.

Configure your primary command menu using /setcommands so clients can access essential actions instantly:

  • start - Initialize the bot, register the user profile, and display the main menu
  • book - Begin the appointment scheduling flow
  • appointments - View, reschedule, or cancel upcoming bookings
  • help - Display opening hours, location details, and support contacts

The Telegram Communication Constraint

Telegram enforces strict user privacy rules. As documented in the Telegram bot features specification, bots cannot initiate conversations with arbitrary users or cold-message external phone numbers.

A customer must trigger the interaction by clicking your direct bot link (such as t.me/your_salon_bot) and pressing Start. This action sends a /start payload containing the user's unique chat_id. Persisting this chat_id in your database is what makes the rest of the system work: it provides the channel required to send booking confirmations, status changes, and reminder notifications later.

Webhook Infrastructure vs. Long Polling

While local development often relies on long polling (getUpdates), production appointment booking systems require webhooks. Long polling pulls updates sequentially, increasing latency and consuming server overhead when multiple clients attempt to reserve limited time slots concurrently.

A webhook architecture configures Telegram's servers to push incoming events instantly to your application endpoint via an HTTPS POST request.

curl -F "url=https://api.yourdomain.com/telegram/webhook" \
     -F "secret_token=YOUR_SECURE_RANDOM_STRING" \
     https://api.telegram.org/bot<YOUR_BOT_TOKEN>/setWebhook

To run a resilient webhook infrastructure:

  • HTTPS Enforcement: Telegram only delivers webhook payloads to servers presenting a valid, non-self-signed TLS certificate.
  • Payload Verification: Set a secret_token during configuration. Telegram passes this string in the X-Telegram-Bot-Api-Secret-Token header on every push. Your application must drop any request missing this signature to prevent unauthorized external submissions.
  • Immediate Response: Return an HTTP 200 OK status to Telegram immediately upon receiving the event, handing off the scheduling logic to an asynchronous background worker. If your server takes too long to respond, Telegram marks the delivery as failed and initiates automated retries, causing duplicate messages and race conditions.

Step 2: Designing the Booking Flow: Inline Keyboards vs. Mini App UI

When architecting a Telegram booking bot, the primary user experience decision is choosing between native inline keyboards and an embedded Telegram Mini App interface.

Inline Keyboards for Linear, Low-Complexity Bookings

Telegram inline keyboards (InlineKeyboardMarkup) display structured action buttons directly inside chat messages. They are suitable for businesses offering a small, defined set of services with fixed durations—such as a single barber chair, a fitness assessment, or a 30-minute consultation.

A standard conversational flow proceeds step-by-step:

  1. The user taps a service button (e.g., "Consultation").
  2. The bot returns a date selection menu (e.g., "Today", "Tomorrow", "Pick Day").
  3. The bot generates rows of open time slots queried from your database.
  4. The user confirms their phone number and booking summary.

Because inline keyboards use native client components, they open instantly with zero web asset download latency across mobile and desktop clients.

Limitations of Button-Based Chat Menus

As your service catalog grows, inline keyboards run into structural interface constraints:

  • Complex calendar browsing: Displaying a 30-day month requires awkward pagination controls (<< Previous Week / Next Week >>), cluttering the user's message history.
  • Multi-tier staff and add-ons: Selecting a specific staff member alongside optional treatments turns into a repetitive sequence of 6 to 8 back-and-forth messages.
  • Stale state interactions: Users can scroll up and tap inline buttons from previous messages. Unless your bot validates session states defensively on every callback query, obsolete taps can trigger invalid or conflicting database writes.

Visual Scheduling with Telegram Mini Apps

For salons with multiple stylists, medical clinics, or businesses offering service packages, an embedded Telegram Mini App provides a full web interface directly inside the chat. According to the Telegram WebApp documentation, Mini Apps render web technologies (such as React or Next.js) inside a seamless modal window.

This setup allows you to display:

  • An intuitive monthly calendar grid with unavailable dates grayed out.
  • Dynamic, real-time time slots updated live from your calendar API.
  • Multi-select checklists for add-on treatments and staff preference tabs.

After completing their selection, the client sends the booking payload back to the bot via Telegram.WebApp.sendData() or through authenticated API endpoints.

Complexity and Budget Comparison

FeatureInline Keyboard BotTelegram Mini App UI
Best For1–3 standardized services, single staffSalons, clinics, multi-staff scheduling
InterfaceSequential chat prompts and buttonsVisual calendar grid and slot selectors
Development ScopeBot backend logic and callback routersFrontend web app + Bot backend API
Starting PriceFrom $300 (Standard $500–900)From $700 (Standard $1,000–1,500)

A conversational inline bot requires minimal UI engineering, with prices starting from $300 (standard setups run $500–900; pro builds from $1,200). A Telegram Mini App requires building and hosting a dedicated web frontend, starting from $700 (standard setups run $1,000–1,500; pro builds from $2,000). For a detailed walkthrough of web client architecture inside chat, read our guide to build a Telegram Mini App.

Step 3: Handling Availability, Time Zones, and Preventing Double Bookings

A reliable booking bot must calculate valid open slots dynamically instead of serving static, pre-rendered options. In your central database (such as PostgreSQL), manage availability through four core variables:

  • Staff shifts and business hours: The overall open window for each specialist, room, or location.
  • Service durations: Distinct runtimes assigned to each service (for example, a 30-minute checkup versus a 75-minute treatment).
  • Buffer windows: Mandatory cleanup, rest, or travel periods inserted automatically between appointments (e.g., 10 minutes).
  • Existing commitments: Blocks pulled from current bookings and external calendar syncs.

The booking engine calculates open slots by taking the staff shift, subtracting confirmed bookings and their respective buffers, and evaluating whether the remaining contiguous blocks match or exceed the requested service duration.

Preventing Double Bookings with Atomic Slot Locking

When multiple users interact with your bot at the same time, two people may tap the same available slot simultaneously. Without strict concurrency handling, both users could confirm the exact same booking.

To prevent race conditions, implement short-term checkout locks using atomic database transactions in PostgreSQL:

-- Secure a 5-minute hold on a selected time window
UPDATE appointment_slots
SET status = 'HELD',
    locked_until = NOW() + INTERVAL '5 minutes',
    locked_by_user = $telegram_user_id
WHERE id = $slot_id
  AND (status = 'AVAILABLE' OR locked_until < NOW())
RETURNING id;

If the query returns a row, the transaction succeeded, and the user has a 5-minute window to enter contact details or submit a deposit. If the update returns zero rows, another user secured the lock milliseconds earlier. The bot detects this immediately and prompts the customer to pick a different slot. A background job releases expired holds back to AVAILABLE status if a user drops off.

Clean Time Zone Management

Scheduling errors frequently occur when systems mix local server times with user devices.

  • Storage: Always store booking timestamps in UTC using PostgreSQL TIMESTAMPTZ columns.
  • Display for physical locations: For salons, clinics, or local studios, convert UTC timestamps to the venue's fixed IANA time zone (e.g., America/New_York or Europe/Berlin) before generating messages and keyboard labels.
  • Display for remote services: For virtual consultations, store the client’s identified time zone offset during onboarding and display both the specialist's time and the client's local time in all booking prompts and confirmations.

Rather have a booking bot that just works on day one? We build them from $300 with care at $59/month. Explore our options on our pricing page or get in touch via contact.

Step 4: Two-Way Synchronization with Google Calendar

A telegram booking bot cannot operate in an isolated silo. If a receptionist schedules a walk-in client directly inside Google Calendar, or a staff member blocks out personal time, the bot must immediately remove those time slots from Telegram. Likewise, confirmed Telegram bookings must appear on staff schedules in real time.

Outbound Sync: Telegram to Google Calendar

Once a client confirms their appointment and completes any required deposit, the bot backend calls the Google Calendar API (events.insert) using an authorized service account or OAuth2 refresh token.

The API returns a response payload containing an external event id. Your application database must store this ID directly on the booking record:

ALTER TABLE appointments ADD COLUMN google_event_id VARCHAR(255);
ALTER TABLE appointments ADD COLUMN sync_status VARCHAR(50) DEFAULT 'synced';

Storing google_event_id provides an exact reference point. When a customer modifies their time slot or cancels their appointment inside Telegram, the bot executes an events.patch or events.delete call against that exact identifier.

Inbound Sync: Webhooks for Walk-Ins and Schedule Changes

Polling the Google Calendar API every few seconds exhausts API quotas and introduces sync delays. Instead, implement bi-directional synchronization using Google Calendar push notifications:

  1. Create a watch channel: Send an events.watch request pointing to your secure webhook URL.
  2. Listen for change notifications: When a staff member creates, modifies, or deletes an event directly in Google Calendar, Google issues a POST request to your webhook endpoint.
  3. Execute an incremental sync: Query events.list using a stored nextSyncToken to retrieve only the events that changed. The bot updates its internal availability tables and blocks out the newly occupied slots.

Handling API Rate Limits and Downtime

External calendar APIs can experience transient 5xx errors or 429 rate-limit responses during peak hours. Your booking engine must isolate the client experience from these failures:

Failure ScenarioImmediate ActionRecovery Strategy
API Rate Limit (429)Confirm booking locally, set sync_status = 'pending'Enqueue task in a background queue with exponential backoff retries
Google Service Outage (503)Lock slot in local PostgreSQL databaseRetry automatically once Google services restore; client never loses slot
Persistent Sync FailureRetain local record as activeDispatch an alert to an admin Telegram channel for manual staff review

By committing the booking locally first and handling calendar synchronization via an asynchronous worker, your bot remains fast and avoids dropped appointments during third-party outages.

Step 5: Automated Reminders and No-Show Prevention

Under Telegram's architecture, bots cannot initiate contact with users who have not messaged them first (Telegram Bot Features). Because the customer starts the bot during the initial booking step, your system receives and stores their unique chat_id. This grants explicit permission to send direct booking reminders telegram notifications without paying third-party SMS fees.

Timed Notification Cadence

Configure a background task worker (such as BullMQ on Node.js or Celery in Python) to query your database and dispatch reminders at two intervals:

  • 24 hours prior: Serves as a confirmation check, prompting the client to confirm attendance or free up the slot before cancellation windows close.
  • 2 hours prior: Provides day-of logistics, such as address coordinates, entry codes, or preparation guidelines.

One-Tap Inline Actions

Every reminder payload should carry an inline keyboard directly beneath the message text:

  • [✅ Confirm]: Updates the booking state to confirmed in your system.
  • [🔄 Reschedule]: Re-opens the availability selector directly in the chat to choose a new slot.
  • [❌ Cancel]: Instantly releases the time block in PostgreSQL and Google Calendar, allowing waitlisted clients to claim the opening.

Providing frictionless cancellation inside the message minimizes no-shows and ensures unused calendar blocks are freed up automatically.

Routing Support and Message Logging

Clients frequently reply to reminder messages with special requests or late notices. Route arbitrary inbound text replies through an integrated staff escalation flow, as outlined in our guide on building a Telegram support bot. This allows team members to reply directly from an internal group chat.

When dispatching reminders in batches, safeguard your queue against Telegram's broadcast limits (roughly 30 messages per second across different users). Log each notification event (queued, sent, failed) in your database. If Telegram returns a 403 Forbidden response code because a user blocked the bot, log the state immediately to halt retry queues and notify your operational dashboard.

Step 6: Collecting Prepayments and Booking Deposits

For appointment-based businesses such as aesthetic clinics, specialized salons, and private consultants, late cancellations and no-shows directly waste staff capacity and billable hours. Requiring an upfront deposit—whether a fixed booking fee or a percentage of the total service—filters out casual intent and secures commitment before a slot is locked out in your schedule.

Native In-Chat Payment Flow

Telegram provides a native checkout interface through the Telegram Bot Payments API. Customers complete transactions directly within the chat window using credit cards or stored payment credentials without being redirected to an external browser.

The native transaction lifecycle operates across three technical stages:

  1. sendInvoice: Once the customer selects their service, staff member, and time slot, your backend issues a sendInvoice request. This payload specifies the currency, price breakdown, invoice description, payment provider token, and an internal payload parameter linking the transaction to a pending booking record.
  2. pre_checkout_query verification: When the customer submits their payment details, Telegram sends a pre_checkout_query update to your webhook. Your backend must respond within 10 seconds using answerPreCheckoutQuery(ok=True). This 10-second window is critical: use it to verify that the requested slot remains available in your database and that pricing remains valid. If your server does not answer within 10 seconds, Telegram cancels the transaction automatically.
  3. successful_payment event: After the payment gateway processes the charge, Telegram delivers a message containing the successful_payment object to your webhook. Your server updates the appointment status to confirmed, synchronizes the slot to your calendar, and sends an automated receipt with rescheduling instructions to the customer.

Telegram Stars vs. Traditional Payment Providers

Platform rules and regulatory structures dictate how services are billed inside Telegram:

Service CategoryPermitted Payment RailsProcessing Method
Physical Services (salons, clinics, consults, repairs)Traditional payment providers (Stripe, Smart Glocal, regional gateways)Direct fiat provider token linked via BotFather
Digital Services (virtual bots, digital content, software access)Telegram StarsTelegram in-app virtual currency

Telegram Stars apply strictly to digital goods and virtual bots. Physical services like salons, medical practices, and in-person consultations are required to use traditional payment provider tokens configured through @BotFather. Local tax laws, invoicing mandates, and merchant account terms apply to all transactions; consult a qualified accountant or legal professional, as this technical overview does not constitute legal, tax, or financial advice.

To learn more about configuring merchant credentials, webhook verification, and currency handling, see our technical walkthrough on how to add payments to Telegram bots.

Step 7: No-Code Automation vs. Custom Bot Engineering

When building an appointment booking bot on Telegram, you can assemble visual workflows using no-code platforms like Make or n8n, or engineer a custom service using TypeScript and Node.js on top of a dedicated relational database.

No-code platforms allow teams to prototype basic scheduling sequences quickly. However, appointment workflows involve multi-step state management, atomic time slot reservations, external API calls, and strict response windows. Choosing the right architecture depends on your transaction volume and technical requirements.

Trade-Offs: Visual Workflows vs. Engineered Bots

Architectural FactorNo-Code Platforms (n8n, Make)Custom Engineering (TypeScript, Node.js, PostgreSQL)
Concurrent Slot LockingRelies on sequential webhooks; vulnerable to race conditions and double bookings during traffic spikes.Uses native database transactions (SELECT ... FOR UPDATE) to guarantee atomic slot reservation.
Response LatencyWebhook execution chains can introduce latency, risking timeouts on payment queries that require answers within 10 seconds.Direct webhook handling with optimized queries, ensuring instant UI responses and adherence to Telegram limits.
Complex LogicBranching conditions for variable service durations, staff buffers, and time zones create complex, fragile node trees.Strongly typed modular logic, version-controlled code, automated testing, and predictable edge-case execution.
Operating CostsMonthly subscription tiers scale based on operation or task counts, increasing as appointment traffic grows.Predictable, fixed infrastructure hosting costs without per-booking execution markups.

If you run a simple booking flow with low appointment frequency, self-hosted n8n or Make can serve as a functional starting point. When your business relies on instant payment validation, simultaneous client bookings, or custom calendar synchronization, a dedicated codebase prevents synchronization failures and system lockups.

Production Engineering and Care

At WEB3 Build Studio, we design and deploy production-ready Telegram products built on solid infrastructure rather than fragile templates:

  • Telegram Bot: Starts from $300 (standard configurations $500–$900; complex or pro implementations from $1,200).
  • Telegram Mini App: Starts from $700 (standard setups $1,000–$1,500; pro implementations from $2,000).
  • Third-party calendar integrations, deposit payment gateways, and custom administrative interfaces are quoted as straightforward extras based on your stack.

Every build includes architecture, interface design, deployment, and 30 days of post-launch bug fixes.

To keep your booking operations online without interruption, we provide ongoing server hosting and care packages on our own infrastructure for $59/month for Telegram Bots and $79/month for Mini Apps. This covers hosting, SSL certificates, daily database backups, proactive monitoring, security patches, and ongoing maintenance. Our operational standard is backed by active monitoring infrastructure, such as our production deployment on wizzy.help monitoring approximately 28 self-hosted applications.

Tell us your services and opening hours and get a fixed quote — https://web3buildstudio.com.

Frequently asked questions

Can a Telegram bot send appointment reminders?

Yes. Telegram bots can push direct messages to users who have previously initiated a chat with the bot. With a dedicated backend built in Node.js and PostgreSQL, scheduled background workers trigger automated reminders at defined intervals—such as 24 hours and 1 hour before the scheduled booking. These reminder messages can include interactive inline buttons allowing users to confirm, reschedule, or cancel directly within Telegram. Because these alerts arrive as native push notifications on mobile and desktop devices without requiring an email app, they achieve high visibility and help businesses reduce missed appointments and manual follow-ups.

Does it sync with Google Calendar?

Yes. The backend powering the Telegram bot integrates directly with the Google Calendar API via OAuth2 or service account credentials. When a user requests an appointment, the backend queries the target calendar's free-busy schedule to display open slots in real time. Once the user confirms the booking, the bot inserts a new calendar event, records customer contact details, and can automatically attach a video link like Google Meet. Synchronization works bi-directionally using webhooks: if an administrator moves or deletes the event in Google Calendar, the backend detects the update, adjusts the database record, and notifies the client via Telegram.

How do I stop two people booking the same slot?

Preventing double bookings requires transactional concurrency control on the backend rather than relying on chat-level validation. Using a relational database such as PostgreSQL with Prisma, slot reservations are wrapped inside an atomic transaction. When a user selects a time, the system flags the slot as temporarily reserved with an expiration timer (such as 10 minutes) and applies a database row lock. If another user attempts to select the same slot simultaneously, the transaction rejects the second attempt and prompts them to pick an alternative time. A unique constraint on the calendar resource and timestamp guarantees that duplicate bookings cannot be written to the database.

Can customers pay a deposit in Telegram?

Yes. Telegram supports native payments via the Telegram Bot API, allowing businesses to accept card payments via providers such as Stripe directly inside the chat interface, as well as Telegram Stars for digital services. For Web3 projects, the backend can also generate crypto payment prompts or verify on-chain transactions on networks like Solana before locking in the reservation. Once the payment webhook verifies that the funds have cleared, the system marks the appointment as confirmed in the database. At WEB3 Build Studio, base Telegram bots start from $300, with payment integrations and third-party gateways scoped as additional requirements based on the chosen provider.

Bot or Mini App for booking?

A conversational bot works well for straightforward, linear flows where users pick a date and time from quick-reply buttons. When bookings involve complex calendars, service catalogs, seat selection, or team member profiles, a Telegram Mini App provides a superior user experience. Built with React or Next.js, Mini Apps run directly inside Telegram as full web interfaces with rich visual layouts. Conversational Telegram bots start from $300 (standard $500–900), while Telegram Mini Apps start from $700 (standard $1,000–1,500). Many teams deploy a hybrid model: users select appointments visually inside the Mini App, while the bot delivers automated confirmations and reminders in chat.

What happens if the customer changes time zone?

To prevent scheduling discrepancies, the backend stores all appointment timestamps in Coordinated Universal Time (UTC) within the database. When a customer accesses the booking bot or Mini App, the system detects their device time zone or prompts them to select their location. Available slots are calculated against business availability in UTC and converted into the customer's local time zone for display. When confirmation messages, calendar invites, and automated reminders are dispatched, the system renders the time relative to the user's configured locale. If the customer updates their time zone later, the stored UTC timestamp ensures notifications recalculate correctly without shifting the business's actual calendar slot.

Sources

More from the blog

Telegram · November 13, 2026

Telegram Bot vs Website: Which Is Better for Customer Support?

A structured decision framework comparing Telegram bots and website support layers across six factors to help you choose the right channel.

15 min read
Telegram · November 13, 2026

How Much Does a Custom Telegram Bot Cost for a Business?

A plain-language breakdown of every cost driver behind custom Telegram bot development — so you can budget confidently and evaluate quotes.

17 min read
Engineering · November 12, 2026

Case Study: The Payment Layer – A Policy and Approval Layer for AI-Agent Payments

An architectural breakdown of The Payment Layer, a policy and approval gateway engineered to enforce spending limits, isolation, and auditability on autonomous AI agents.

16 min read