I'm building a voice agent for a dental clinic on Retell using the native Cal.com integration and running into a wall.
The setup:
Inbound calls → Retell agent → collects name, service, preferred day/time → triggers book_appointment via the built-in Cal.com function.
The problem:
Cal.com requires at least one contact method (email or phone) to create a booking, otherwise it throws:
attendee email or phone property is wrong,
Attendee must have at least one contact method (email or phone number)
The agent is currently passing the phone number into the email field which obviously fails with email_validation_error.
What I want:
I do NOT want to ask the caller for their email or phone during the conversation. It kills the flow and feels unnatural. Retell already captures the caller's phone number (caller ID) on every inbound call — I just need a way to pass that into Cal.com as the phone attendee field automatically.
What I've tried:
Passing raw phone number into email field → rejected
Passing +359 formatted number into email field → rejected
Using a dummy fallback email → works but dirty solution
My questions:
Is there a way to access the Retell caller_id dynamic variable inside the Cal.com function parameters? Can it be mapped to the attendee phone field?
Does the native Retell Cal.com integration support a phone field at all, or is it email-only?
If the native integration can't do this — has anyone built a custom webhook/middleware that pulls the Retell caller ID and forwards it to Cal.com's /v2/bookings endpoint as the phone parameter?
Any other clean workarounds that don't require asking the user for contact info on the call?
Context:
Using Cal.com v2 API, Retell's built-in Cal.com tool, GPT-4.1 mini, inbound calls only. The caller ID is always available — I just can't figure out how to pipe it through to Cal.com cleanly.
Any help appreciated — this feels like it should be a simple mapping but I'm stuck.