Skip to main content
Use variables to put a contact’s details, business information, or conversation context into an assistant prompt or a tool field. Copy the complete placeholder, including double braces: {{contact.first_name}}. This reference lists the built-in GHL and Direct variable sets, including keys that are absent from the picker. Your account can also have its own custom fields and custom values, so those names vary by account. Flow Builder has a separate flow variable reference.

Choose the right context

A listed key is not a guarantee that its value is populated. Test in the channel and account type where you intend to use it. Variable names are case-sensitive; dots are part of the exact key. {{contact.first_name}} and {{contact.firstName}} are different keys.

Session variables

Unless marked Both, these are built-in GHL-context keys. A calling integration can add more values, but do not assume that makes them available in Direct chat. For the business name, use {{location.name}}. Identifiers such as {{account}} are intended for integrations, not spoken introductions. Use the transfer guide to configure caller-ID behavior rather than changing a placeholder alone.

Contact variables

Both means the key is supplied in GHL and Direct contexts when the underlying contact data is available. Known missing fields normally become empty text. GHL first and last names equal to “Guest” are treated as missing. Direct uses the stored name as-is. If the contact has not been identified, a name or email may be empty even though the conversation is active. {{contact.company_name}} appears in the picker but is not populated by either built-in set. Use a verified custom field key if you need a company name; do not assume this placeholder will resolve.

Location variables

These describe the business/location, not the customer. In Direct, they come from the native client account’s business profile.

Business profile

For GHL, these read the nested business profile. A populated location.name does not guarantee location.business.name is populated. Direct maps the supported business keys to the native account profile.

Social profiles

All of these are GHL only and require the corresponding location profile value. Missing links stay empty; Assistable does not infer them.

Right now variables

These values are calculated when the context is built; they are not a continuously ticking clock. In the GHL resolver, the timezone priority is contact → location → supplied account timezone → America/New_York. In Direct it is contact → account → America/New_York. Confirm the timezone before interpreting “tomorrow.” GHL uses the right_now. prefix. Direct uses the unprefixed key. The top-level current_date, current_time, and timezone are also available in GHL as listed above. Flow Builder also uses right_now.* names, but some formats differ: its right_now.current_date includes the full date, time, and timezone. Use the flow variable reference when working inside a flow.

Dates for this week and the following two weeks

Weeks run Monday through Sunday. A “this week” value can be in the past. For example, on a Friday, mon_date is the Monday earlier that week, not the next upcoming Monday. These are date strings, not available booking slots; use the calendar tools to check availability.

User variables

These are GHL only. They describe the CRM user assigned to the contact, not necessarily the person signed into Assistable. They require an assigned user and a context that loads that user’s details. Some voice paths skip that lookup, so do not make a voice workflow depend on these fields without testing it.

Custom values and custom contact fields

Custom names are defined by your GHL account, so there is no universal list to copy. Use the exact field key, not the display label. A key such as custom_values.booking_link works only when your account defines it and supplies a value. In the assistant prompt editor, type / and choose Contact or Custom Values to see the account-specific entries loaded from your connected CRM. Contact entries include standard fields and custom fields whose keys begin with contact.. The picker inserts the full placeholder for you. To check the source list, open the connected GHL location’s Settings → Custom Values or Settings → Custom Fields, copy each exact key, and confirm its value on the intended location/contact. A display label such as “Booking Link” does not itself create {{booking_link}}. For contact custom fields, the field definition and the contact’s stored value must match. If the picker is empty, check the GHL connection and wait for the field list to load before treating a field as unavailable. Custom contact-field arrays become comma-separated text; object values become JSON text. Custom values that contain objects or arrays become JSON text. Numbers and booleans become text. The variable is still a string, not a typed object you can query with arbitrary dot paths. When the CRM cannot be reached, values can be empty, absent, or served from a cached record. Do not rely on an edit being visible immediately in an already-running conversation. Test a new conversation with the intended contact after changing a source value.

Call-specific custom slots

Calling integrations that expose these five slots can supply them for one call: These are supplied inputs, not automatically populated contact fields. The v3 calls API accepts a variables object. Direct calling also accepts this object and merges it after its built-in values, so a matching key can override them for that call. Use distinct names such as campaign_name to avoid accidentally replacing a contact or business value. Check the endpoint’s current API Reference before sending a request.

Picker differences to know

The picker helps insert names, but runtime support determines whether they resolve.

Examples and missing values

A prompt can use the values while telling the assistant how to handle blanks:
For a GHL scheduling prompt:
For Direct, use {{day_name}}, {{current_date}}, {{timezone}}, and {{tomorrow_date}} in that example. Variable replacement is text substitution. It does not evaluate expressions, add conditional logic, or automatically escape HTML, URLs, or JSON. Let the receiving integration encode values for its destination; keep credentials and secrets out of prompts and conversational variables.

Test a variable end to end

  1. Choose a test contact with a recognizable source value.
  2. Insert the exact placeholder into the prompt or tool field where it will be used.
  3. Save the configuration; publish before a live voice test.
  4. Start a conversation in the intended channel and account type.
  5. Verify the rendered answer or the actual request received by your test integration.
  6. Repeat with the source value missing and confirm the assistant asks for it or uses your intended fallback.
For a required tool field, check that the actual value is present before sending the request. A populated preview or picker entry alone does not prove the live integration received it.