How to Build an AI Booking Workflow with n8n, Twilio, and Google Calendar
This is a tactical build guide, not a theory piece. It walks through the exact structure of an AI booking workflow that takes a lead from first text to a confirmed slot on your calendar, using n8n, Twilio, and Google Calendar. You do not need a CRM for version one. Sheets and Gmail are enough to start.
What this workflow actually does
A prospect texts your business number. Within seconds, the system replies, asks one or two qualifying questions, checks your calendar for the next open slot, offers it, confirms the booking, and logs everything. No human touches the first exchange unless the request needs one.
<inline-opt-in-component />This is the same booking layer referenced in the 10-day AI lead response build and the missed-call text-back system. Those two posts cover the intake side. This one covers the scheduling side specifically.
The stack
- Twilio handles SMS in and out. It is the cheapest, most reliable way to send and receive texts programmatically, and it plugs into almost any automation platform.
- n8n runs the workflow logic: receiving the webhook, calling an AI model for qualification, checking the calendar, and sending replies. n8n's native AI nodes make this simpler than stitching together separate services, which is covered in more depth in n8n vs Make vs Zapier for AI automation.
- Google Calendar holds your actual bookable slots. It has a solid free API, which makes it the easiest starting point before you invest in a trade-specific tool like Housecall Pro or Jobber.
Step-by-step build
1. Trigger. Set up a Twilio phone number and configure its incoming-message webhook to point at an n8n webhook node. Every inbound text now lands in your workflow the moment it arrives.
2. SMS handling. The webhook node receives the message body and the sender's phone number. Pass both into the next step. At this point you also check: is this a new conversation, or a reply in an existing thread? A simple lookup against a Sheet or lightweight database (keyed on phone number) tells you which.
3. Qualification logic. For a new conversation, send an AI node (Claude or GPT-4o both work well here) a short, strict system prompt: identify what the issue is, whether it sounds urgent, and whether you have enough information to offer a booking slot. Keep this to one or two exchanges. If the message already contains enough detail ("my AC stopped cooling yesterday, not an emergency, just need someone out this week"), skip straight to scheduling.
4. Scheduling logic. Call the Google Calendar API to check the next three to five open slots that fit your business hours and any buffer rules you set (for example, no bookings inside two hours of now, so a tech has time to get there). Format these as plain text options: "I've got Tuesday 10am, Wednesday 2pm, or Thursday 9am. Which works?"
5. Calendar checks. When the prospect replies with a choice, re-check that slot is still open (someone else may have booked it in the meantime) before confirming. This second check is easy to skip and is the most common source of double-bookings in a first version of this workflow.
6. Confirmation messages. Once the slot is locked, send a confirmation text with the date, time, and what to expect ("A tech will call 30 minutes before arrival"). Create the calendar event with the customer's phone number and issue description in the event notes, so whoever shows up has context without needing to ask again.
7. Logging. Write every conversation, outcome, and booked slot to a Sheet or your CRM. This is your data for measuring response time, booking rate, and no-shows later.
8. Exception handling. Build explicit fallbacks for what happens when things do not go as planned: the prospect does not pick a slot, the calendar has no open slots in the next few days, or the message reads as an emergency instead of a routine booking. Each of these should route somewhere specific, not just fail silently.
9. Human handoff. Anything that reads as urgent, anything with a pricing question the system cannot answer, or any conversation that goes more than three or four messages without resolving should escalate to a real person by SMS or Slack alert. This is not a failure of the workflow. It is the workflow working correctly, the same principle covered in why most AI automations fail: AI should support judgment calls, not make them.
Keep version one simple
Do not start with a full CRM integration, multi-technician routing, or dynamic pricing logic. Start with one calendar, one set of business hours, and one confirmation message format. Overengineering is the most common reason automations stall before they ship. Get the simplest version running for a week, watch it handle real leads, and only then add complexity.
A Sheet for logging and Gmail for any manual follow-ups is genuinely enough to launch. CRM integration (Housecall Pro, Jobber, or a general CRM) is worth adding once you have proven the flow works and you know exactly what data you want synced.
What to test before you trust it
Run at least 15 to 20 real or simulated conversations through the workflow before pointing your live business number at it. Specifically test: a routine booking request, an emergency request, someone who goes silent mid-conversation, someone who asks a pricing question, and someone who tries to book a slot that just got taken by someone else. If all five behave the way you expect, you are ready to go live.
Want this built for your business instead of building it yourself? Book a free lead-response audit and I'll scope the exact build for your calendar and phone setup.
Get the AI Automation Playbook, free
The exact frameworks, response templates, and system architecture I use to set up lead response and booking for service businesses. Delivered to your inbox.