Voice call data flow
Outbound call: GHL → Sympana → Voice Provider → GHL
GHL workflow reaches Place Call action
extras.locationId— which GHL locationextras.contactId— which contact to calldata.connection_id— which Sympana connection to usedata.contact_phone— the phone number to calldata.contact_name— the contact’s full namedata.contact_first_name,data.contact_last_name,data.contact_email
Sympana resolves everything
- Finds the GHL installation for that location
- Loads the selected voice connection
- Verifies the connection is active
- Loads the Retell or Vapi API key
- Chooses the phone number (or uses Smart Selection rotation)
- Resolves dynamic variables (contact fields, custom fields, static values)
- Loads enabled functions for the connection
Sympana sends call to voice provider
- From number (your outbound number)
- To number (contact’s phone)
- Agent/assistant ID
- Dynamic variables (injected into the agent prompt)
- Function definitions (what tools the agent can use)
- Webhook URL (where the provider sends results)
AI agent has the conversation
Call ends, provider sends webhook
- Call ID, status, direction
- Full transcript
- Recording URL
- Call duration
- Disconnection reason
- Call summary and sentiment (AI-generated)
- Custom analysis data (if post-call analysis is configured)
Sympana fires Call Completed trigger
triggerData.Where to find voice data in GHL workflows
After the Call Completed trigger fires, all data is available undertriggerData. Here are the field paths you use in GHL workflow actions:
Most commonly used fields
Contact fields
Custom analysis fields
If your voice agent extracts structured data (configured in Retell post-call analysis), it appears in multiple formats:Agent and call metadata
Messaging data flow
Inbound message: Contact → GHL → Sympana → AI → GHL
Contact sends a message
GHL receives the message
Sympana fires Message Received trigger
GHL workflow processes
- Check channel filters (SMS only? WhatsApp only?)
- Check contact tags (has
ai_msg_enabled?) - If conditions pass → Send AI Message action
Sympana processes the AI message
- Loads the selected messaging connection
- Checks Contact Access rules (allowed/blocked/handoff tags)
- Checks if the conversation is paused or handed off
- Checks for opt-out keywords
- Calls Retell or Vapi chat with the message + dynamic variables
- Gets the AI response
AI response sent through GHL
Where to find messaging data in GHL workflows
Message Received trigger fields
Handoff Requested trigger fields
Function data flow
When the AI agent uses a function during a call or message conversation:Where data is stored
Common field path mistakes
Using 'transcript' instead of 'call_transcript'
Using 'transcript' instead of 'call_transcript'
triggerData.call_transcript, not triggerData.transcript. If your GHL action shows an empty value, check the exact field path.Using 'summary' instead of 'call_summary'
Using 'summary' instead of 'call_summary'
triggerData.call_summary, not triggerData.summary.Accessing recording_url at the wrong level
Accessing recording_url at the wrong level
triggerData.call_details.recording_url, NOT triggerData.recording_url.Custom analysis is empty
Custom analysis is empty
custom_analysis_* fields will be empty.user_spoke is false on completed calls
user_spoke is false on completed calls
user_spoke = false means the call went to voicemail. The call still “completed” — the voicemail just played. Use user_spoke to distinguish real conversations from voicemails.
