Skip to main content
This page shows the complete data flow for every Sympana operation. If you’re unsure why a field is empty, which variable to use, or where data lives — start here.

Voice call data flow

Outbound call: GHL → Sympana → Voice Provider → GHL

GHL workflow reaches Place Call action

GHL sends Sympana the action data:
  • extras.locationId — which GHL location
  • extras.contactId — which contact to call
  • data.connection_id — which Sympana connection to use
  • data.contact_phone — the phone number to call
  • data.contact_name — the contact’s full name
  • data.contact_first_name, data.contact_last_name, data.contact_email

Sympana resolves everything

Sympana does the following:
  1. Finds the GHL installation for that location
  2. Loads the selected voice connection
  3. Verifies the connection is active
  4. Loads the Retell or Vapi API key
  5. Chooses the phone number (or uses Smart Selection rotation)
  6. Resolves dynamic variables (contact fields, custom fields, static values)
  7. Loads enabled functions for the connection

Sympana sends call to voice provider

Sympana sends a call request to Retell or Vapi with:
  • 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

The AI agent talks to the contact. During the call, it can use functions — each function call goes: Agent → Voice Provider → Sympana → GHL → Sympana → Voice Provider → Agent.

Call ends, provider sends webhook

When the call finishes, the voice provider sends Sympana a webhook containing:
  • 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

Sympana builds the trigger payload and sends it to all subscribed GHL workflows. Your workflow receives the full call data under triggerData.

Where to find voice data in GHL workflows

After the Call Completed trigger fires, all data is available under triggerData. 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

A contact sends a message through any channel (SMS, WhatsApp, Instagram, Facebook, Webchat, TikTok, Email) to your GHL number/account.

GHL receives the message

The message appears in GHL Conversations.

Sympana fires Message Received trigger

Sympana dispatches the trigger to GHL workflows with the message data.

GHL workflow processes

Your workflow decides what to do:
  • 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

Sympana:
  1. Loads the selected messaging connection
  2. Checks Contact Access rules (allowed/blocked/handoff tags)
  3. Checks if the conversation is paused or handed off
  4. Checks for opt-out keywords
  5. Calls Retell or Vapi chat with the message + dynamic variables
  6. Gets the AI response

AI response sent through GHL

Sympana sends the AI response back through GHL Conversations on the same channel the contact used.

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:
This happens in real time during the conversation — typically under 2 seconds per function call.

Where data is stored


Common field path mistakes

The field is triggerData.call_transcript, not triggerData.transcript. If your GHL action shows an empty value, check the exact field path.
The field is triggerData.call_summary, not triggerData.summary.
Recording URL is nested: triggerData.call_details.recording_url, NOT triggerData.recording_url.
Custom analysis only appears if you configured post-call analysis in your Retell agent settings. If you haven’t set it up, all custom_analysis_* fields will be empty.
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.

Next steps

Workflow Recipes

Copy-paste workflows using these data fields.

Setup Checklist

Step-by-step from install to go-live.