Calendar chatbot: build AI-powered meeting scheduling
Calendar chatbot: build AI-powered meeting scheduling
Scheduling a meeting between three people shouldn't require six emails. Yet the average professional spends 4.8 hours per week coordinating meetings (Clockwise 2024 Workplace Report). That's 250 hours per year — over six full work weeks — lost to the logistics of finding a mutual 30-minute window.
A calendar chatbot collapses that coordination into a single conversation. Someone messages "Can we meet Thursday afternoon?" and the bot checks availability, proposes slots, handles conflicts, and sends calendar invites — all within the chat thread. No switching apps. No back-and-forth chains.
Unlike generic AI automation posts, this guide shows real CodeWords workflows — not just theory. You'll build a chatbot that understands natural language time expressions, integrates with Google Calendar, and handles the edge cases that make scheduling genuinely hard.
Think of the calendar chatbot as a translator between human intent ("sometime next week works") and calendar reality (three blocked mornings, two conflicting recurring meetings, a timezone gap with the London office).
APP: CodeWords — build conversational scheduling workflows with LLMs, calendar APIs, and messaging integrations.
TL;DR - Parse natural language time expressions ("next Tuesday afternoon," "sometime this week") into calendar queries using an LLM - Check availability across multiple calendars, handle timezone conversion, and propose optimal slots based on preferences - Deploy through Slack, WhatsApp, or web chat with automatic invite sending and rescheduling support
Why do existing scheduling tools still frustrate users?
Tools like Calendly and Cal.com solve one-to-one booking well. You share a link, the other person picks a slot, done. The friction points they don't solve:
- Multi-party scheduling — Finding overlap between 3+ calendars requires iterative negotiation, not a link
- Context-aware preferences — "I prefer mornings for deep work calls" isn't expressible in a booking link
- Conversational flow — Most scheduling happens inside existing conversations (Slack threads, WhatsApp groups), not in separate tools
- Rescheduling — Handling "actually, can we move that?" without starting the process over
- Informal requests — "Hey, when are you free this week?" doesn't warrant a formal booking flow
A chatbot that lives in your team's messaging platform handles all of these naturally. According to Reclaim.ai's 2025 data, teams using AI scheduling assistants reduced meeting coordination time by 73%.
How does natural language scheduling actually work?
The architecture has three layers:
Layer 1: Intent parsing (LLM)
Take the user's message and extract structured scheduling intent:
- Input: "Let's do a 30-min sync with Sarah and Mike, ideally Wednesday or Thursday morning"
- Output: {duration: 30, participants: ["sarah@...", "mike@..."], preferred_days: ["Wed", "Thu"], preferred_time: "morning", flexibility: "medium"}
An LLM handles this extraction reliably because scheduling language follows predictable patterns. Edge cases ("the week after next," "not Monday because I'm traveling") are where LLMs shine over regex-based parsing.
Layer 2: Availability engine (calendar API) Query each participant's calendar for the requested window: - Fetch busy/free data from Google Calendar or Microsoft 365 - Apply timezone conversions (critical for distributed teams) - Filter by working hours and scheduling preferences - Compute overlapping free slots
Layer 3: Proposal and confirmation (messaging) Present available options in the chat: - Rank slots by preference match (morning preference → morning slots first) - Show 2–3 options, not 10 (decision fatigue is real) - One-tap confirmation buttons - On confirmation, create calendar events for all participants and send invites
In CodeWords, this runs as a workflow triggered by messages in your connected Slack or WhatsApp channel. The LLM handles parsing, the Google Calendar API handles availability, and the messaging integration handles responses.
How do you handle conflicts and edge cases?
Real scheduling is messy. Your chatbot needs to handle:
No overlap exists When participants have zero mutual availability in the requested window: - Expand the search window (suggest next week) - Identify the smallest conflict (one 30-min meeting blocking the only slot) - Ask if that meeting can be moved or if the new meeting can be shortened
Timezone complexity When participants span timezones: - Present times in each participant's local timezone - Respect working hour boundaries (don't propose 7am for someone who starts at 9) - Flag when overlap is only possible outside normal hours
Recurring meetings Handle "same time next week" and "every Tuesday" patterns: - Check recurring availability before creating - Flag future conflicts (vacation, holidays) - Offer alternatives for weeks with conflicts
Buffer time Smart scheduling respects context switching: - Don't book back-to-back meetings unless explicitly requested - Default 15-minute buffers between meetings - Longer buffers after long meetings (post-60-min meetings get 30-min buffers)
Rescheduling "Can we move tomorrow's meeting?" triggers: - Identify which meeting (resolve ambiguity via LLM) - Check alternative availability for all original participants - Propose new slots - On confirmation, update the event and notify all attendees
Each edge case is a conditional branch in your CodeWords workflow. The templates library provides starter patterns for calendar integration that you can extend.
What platform should the chatbot live on?
Where your team already communicates. The channel choice determines UX:
Slack - Best for team-internal scheduling - Rich message formatting (buttons, dropdowns) - Thread-based conversations keep scheduling contained - CodeWords has native Slack integration
WhatsApp - Best for external scheduling (clients, vendors) - Universal reach (2B+ users) - Simpler message formatting but wider audience - Works through CodeWords' WhatsApp integration
Web chat (embedded) - Best for public-facing booking (consultations, sales calls) - Deploy a Next.js interface via CodeWords to *.codewords.run - Full control over UI and flow
Email (auto-reply) - Best for people who refuse to use another tool - Monitor inbox for scheduling requests, parse intent, reply with proposals - Works through Gmail integration
You can run the same scheduling logic across multiple channels simultaneously. The core workflow (parse → check → propose → book) stays identical; only the input/output adapters change.
How do you connect Google Calendar programmatically?
The technical integration:
Authentication: OAuth 2.0 with Google Calendar API scopes:
- calendar.readonly for checking availability
- calendar.events for creating/modifying events
Key API operations:
- freebusy.query — Check availability across multiple calendars in one call
- events.insert — Create events with attendees (sends invites automatically)
- events.patch — Modify existing events (rescheduling)
- events.list — Query upcoming events for context
CodeWords handles OAuth token management through its Google integration — no manual refresh token logic needed. The workflow accesses calendar data the same way any authenticated app would.
For Microsoft 365 calendars, the equivalent Graph API endpoints work identically. Support both to cover enterprises using either ecosystem. The pricing tier for API-connected workflows covers typical team usage.
Frequently asked questions
Can the chatbot handle external participants without calendar access? Yes. For external participants, the bot proposes slots based on the internal team's availability and sends options to the external person for selection. No calendar access needed on their side — they just pick from offered times.
How do you prevent double-booking? The workflow checks availability immediately before creating the event (not just during proposal). If a slot was taken between proposal and confirmation, it apologizes and offers the next best option. This race condition handling is critical for busy calendars.
Does it work with recurring meetings? The LLM can parse recurring intent ("every Monday at 2pm for the next 4 weeks"). The workflow checks availability for all instances before creating the series and flags any individual date conflicts.
What conversational scheduling changes about your workflow
The deeper implication isn't time saved on individual meetings — it's removing scheduling as a barrier to collaboration entirely. When booking a meeting costs zero effort, the threshold for "should we meet about this?" drops to where it should be: based on value, not logistics.
Build a basic calendar chatbot in CodeWords starting with single-party scheduling, then extend to multi-party and rescheduling once the core flow works reliably. The conversation-first interface means adoption is immediate — no one needs to learn a new tool.
