Cal.com and Twilio integrate through Cal.com's Webhook feature and the Twilio Messages API to send SMS booking confirmations, pre-meeting reminders, and cancellation or rescheduling notifications to attendees, extending Cal.com's open-source scheduling platform with reliable carrier-grade SMS delivery. This integration is particularly well-suited to self-hosted Cal.com deployments where developers want full control over the notification stack and prefer Twilio's global SMS reach over email notifications alone. Cal.com's webhook system delivers structured JSON event payloads to your middleware when bookings are created, cancelled, or rescheduled, and the payload includes the attendee's phone number if they provided it during the booking flow.
What You Need Before You Start
Configure a Cal.com webhook by navigating to Settings, then Developer, then Webhooks in your Cal.com account or admin panel, clicking New Webhook, entering your middleware endpoint URL, selecting the triggers BOOKING_CREATED, BOOKING_CANCELLED, BOOKING_RESCHEDULED, and MEETING_ENDED, and optionally enabling the Secret field with a shared secret value that Cal.com will include in the X-Cal-Signature-256 header for payload verification. Generate a Cal.com API key from Settings, then Developer, then API Keys for making secondary calls to the Cal.com REST API at https://api.cal.com/v1/ when you need to fetch additional event or attendee details not present in the webhook payload. Add a phone number field to your Cal.com event type booking form by navigating to the event type settings, then Advanced, then Custom Inputs, and adding an input of type Phone Number so that the attendee's phone is collected during booking and included in the webhook payload under attendees[0].phoneNumber. From Twilio, collect your Account SID, Auth Token, and an SMS-capable phone number registered for A2P 10DLC.
Step-by-Step Integration Guide
In your middleware webhook handler, verify the Cal.com webhook signature by computing HMAC-SHA256 of the raw request body using your webhook secret as the key and comparing the hex digest against the X-Cal-Signature-256 header value, returning HTTP 400 for mismatched signatures to reject spoofed requests. Parse the BOOKING_CREATED payload to extract the attendees array, read attendees[0].phoneNumber for the primary attendee's phone, normalize it to E.164, and dispatch a Twilio SMS confirmation by calling POST https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Messages.json with Basic authentication, To set to the normalized phone, From set to your Twilio number, and Body set to a message containing the attendee name, event title from the title field, and start time from the startTime ISO 8601 field formatted as a readable date and time. Handle BOOKING_RESCHEDULED events by extracting the new startTime from the payload and dispatching a Twilio SMS informing the attendee of the updated meeting time, and handle BOOKING_CANCELLED events by extracting the cancellationReason if present and sending a cancellation notification SMS. Store booking details including the eventUid, attendee phone, and startTime in your database at BOOKING_CREATED time, then run a scheduled job every 15 minutes that checks for events starting in 24 hours and 1 hour, dispatching reminder SMS to each qualifying booking using the stored phone.
Common Issues and How to Fix Them
Cal.com webhook payloads for the attendee phone field may be null or missing when the attendee did not fill in the optional phone custom input field during booking, which is common when booking forms have many optional fields and attendees skip non-required inputs. Make the phone custom input required on your event type booking form in Cal.com settings, and add a null check in your middleware before dispatching SMS, returning HTTP 200 but logging the missing phone to a database table for follow-up via email. Cal.com sends BOOKING_RESCHEDULED webhooks that contain both the old booking data and the new booking data, and your middleware must update the stored booking record with the new startTime and cancel any pending reminder jobs for the old time before scheduling new reminders for the rescheduled time. Store a reference to each pending reminder job in your database keyed by the Cal.com booking uid field, and when a BOOKING_RESCHEDULED event arrives, cancel the old reminder jobs by their stored IDs and create new reminder jobs for the updated start time. For self-hosted Cal.com deployments behind a corporate firewall, outbound webhook delivery from Cal.com to an internal middleware endpoint will fail if the middleware is not publicly accessible. Expose your middleware via a reverse proxy or ngrok-style tunnel for development, and use a public cloud deployment for production to ensure Cal.com's servers can reach your webhook endpoint from the public internet.
How to Get More from This Integration
Build a host notification SMS by extracting the organizer field from the Cal.com webhook payload and looking up the host's phone from your user database using the organizer email, then dispatching a separate Twilio SMS to the host informing them of the new booking with the attendee name, company if collected as a custom form field, and the event start time, giving hosts instant mobile notification of new meetings without checking email. Add a post-meeting feedback request SMS by listening to the MEETING_ENDED Cal.com webhook event, waiting 10 minutes after the event end time, and dispatching a Twilio SMS to the attendee with a short link to a feedback form, capturing meeting quality ratings at the peak moment of attendee satisfaction. Integrate Cal.com round-robin assignment with Twilio by reading the organizer.email from the BOOKING_CREATED webhook, looking up the assigned host's phone from your team database, and sending the host a Twilio SMS with meeting details and the attendee's phone number so the host can reach out if needed. Create a no-show follow-up by storing the meeting start time and attendee phone at booking creation, then running a job 15 minutes after the start time that checks Cal.com's booking status via GET https://api.cal.com/v1/bookings/{bookingId} with your API key and dispatches a Twilio follow-up SMS to attendees whose booking shows no recorded attendance or check-in.
Conclusion
Cal.com and Twilio together give scheduling-heavy teams a fully open and customizable SMS notification layer for their meeting lifecycle, with complete control over message content, timing, and delivery logic. Reach out to Telphi Consulting to build and configure a Cal.com Twilio SMS integration for your scheduling workflow.
Ready to Transform Your Business Communications?
Get a free consultation with our VoIP experts and discover how we can help you save costs, improve efficiency, and scale your business.
Comments (0)
Join the discussion and share your thoughts (AI-moderated for quality)
Be the first to comment
No comments yet. Share your thoughts below.