Problem Summary (What’s Broken)
Building a GHL Voice AI demo using Retell, with this intended flow:
GHL Workflow
→ Make.com (pull calendar availability from GHL)
→ Retell outbound call
→ Lead confirms time
→ Send booking back to GHL
→ GHL sends calendar invite
What’s happening instead:
Retell does place the call
Make does fetch the correct availability
BUT Retell does not read the latest availability
Retell hallucinates dates (e.g. June)
Confirmed booking cannot reliably flow back to GHL
Root Cause (The Real Issue)
Architecture flaw
Your current flow is:
GHL → Make (availability)
GHL → Retell (call)
There is no data bridge between Make and Retell.
Retell cannot “see” Make’s output unless Make starts the call or injects the data at call creation.
Because the Retell call is triggered by GHL, it starts before availability exists in the call context, so:
availability_text is empty
Retell guesses dates (June)
Booking becomes unreliable
Required Architecture Correction (Critical)
Correct, production-safe flow
GHL → Make (webhook)Make:
1. Pull availability from GHL calendar
2. Aggregate + format availability_text
3. START Retell call (inject variables)Retell:
- Reads injected availability
- Confirms time with lead
- Sends booking_details → MakeMake:
- Create GHL appointmentGHL:
- Sends calendar invite + SMS
Key rule:
The system that fetches availability must start the Retell call.
Concrete Fixes You Must Apply
Remove Retell call trigger from GHL
Disable or delete the “Trigger Retell Outbound Call” step in GHL
GHL should only send data to Make
Start the Retell call from Make (REQUIRED)
In Make, after availability is aggregated:
HTTP Module
Method: POST
URL:
https://api.retellai.com/v1/calls
Headers
Authorization: Bearer YOUR_RETELL_API_KEY
Content-Type: application/json
Body
{
“agent_id”: “YOUR_RETELL_AGENT_ID”,
“to”: “{{phone}}”,
“from”: “+1XXXXXXXXXX”,
“variables”: {
“availability_text”: “{{availability_text}}”,
“today_date”: “{{formatDate(now; \“YYYY-MM-DD\”)}}”,
“first_name”: “{{first_name}}”,
“business_name”: “{{business_name}}”,
“persona_summary”: “{{persona_summary}}”,
“website”: “{{website}}”
}}
Important
Use /v1/calls (not v2/create-phone-call)
Variables must be under “variables”
Variable names must match your prompt exactly
Lock the Retell prompt (prevents hallucinations)
Add this rule near the top of the agent prompt:
CRITICAL RULE:
You must ONLY offer the time exactly as written in {{availability_text}}.
You are not allowed to guess, infer, or suggest other dates.
If availability_text is missing, politely end the call.
Capture booking confirmation from Retell
When the lead confirms a time, Retell should send:
{
“booking_confirmed”: true,
“booking_details”: {
“confirmed_date”: “2026-02-09”,
“confirmed_time”: “10:30 AM”,
“timezone”: “America/New_York”,
“lead_name”: “John Smith”,
“lead_phone”: “+19105551234”
}}
This hits a second Make webhook.
Create the appointment in GHL from Make
In Make:
Use GHL → Create Appointment
Map:
Date + time from booking_details
Contact phone
Calendar ID
GHL will automatically:
Send calendar invite
Send SMS/email reminders
Why This Fix Works
Retell call starts after availability exists
Availability is injected at call creation
No race condition between GHL and Make
No LLM guessing
Deterministic, repeatable demo behavior
Final Takeaway (for docs / support)
Retell will hallucinate dates unless availability is injected into the call context at call creation.
If GHL triggers the call before Make finishes, Retell will not read the latest availability.
The call must be started from Make using /v1/calls with variables injected.