Skip to main content
A variable is a placeholder you write in your instructions, like {{current_date}}, that the engine swaps for a real value at the start of every call. It lets one set of instructions say something different on every call - today’s date, the number that dialled, the customer’s name from your campaign.
Most agents never need them. The engine already tells the agent the date, time, day of the week, timezone and who is calling, before the first word. Use a placeholder only when you want the exact wording under your control.

Do I need variables at all?

Probably not for the basics. At the start of every call the engine adds a short block of live facts to your instructions - the date, tomorrow’s date, the next seven days, the time, the timezone, the caller’s number, your number and the call direction. The agent reads it automatically. Nothing to set up, nothing to write. Write a placeholder when the phrasing matters:
Both work. The block is enough for “what day is it on Thursday?”; the placeholder is better when you want the agent to say a specific sentence.

Every variable

Write the name in double curly braces, exactly as shown. Names are case-sensitive - {{Current_date}} will not match. Date and time All of these follow the agent’s timezone setting, and daylight saving is handled for you. This call The caller

How does the agent know who is calling?

When a number that has called before dials again, the engine looks up the most recent call that captured a name and passes a short note to the agent:
That is the whole thing - a name and what they wanted. Never what happened: no bookings, outcomes, dates or summaries are ever put into a live call. That is deliberate. When booking details were injected, agents confirmed bookings they had never made. The name is picked up automatically from the conversation; there is nothing to configure. A first-time caller adds nothing to the prompt. Turning off Greet by name stops the agent opening with the name, but the note itself is still available to the agent. See Caller context.

Can I pass my own data into a call?

Yes, on outbound calls. One call - send dynamic_vars with the call:
Then write {{first_name}} and {{appointment_time}} in your instructions. A campaign - every column in your recipient list becomes a variable with the column’s name, automatically. You do not have to write placeholders at all: the agent is handed each recipient’s details as context for that call. Write naturally (“remind them about their appointment”) and the agent has the values. See Outbound calls.
Reserved names. The variable names in the tables above belong to the engine. If your campaign file has a column called current_date or caller_phone, the engine’s value wins and yours is ignored. Give your columns their own names - appointment_date, customer_phone.
Inbound calls do not take your own values yet - an inbound caller is a stranger until they say who they are, and the engine already supplies everything known about the call.

Why is being said out loud on my calls?

Because that name does not exist. When the engine does not recognise a placeholder it leaves the text exactly as written, so it ends up in what the agent reads - and the agent may say it. This is deliberate: a visible mistake is easier to find than a silently deleted one. Check the spelling against the tables above, and remember names are case-sensitive and need both pairs of braces: {{current_date}}, not {current_date} or {{Current_Date}}.

Which braces go where

Everything uses double braces except one: the message a caller gets after the call. The post-call template is the odd one out because it came first and changing it would break every template already saved. If a placeholder is not being replaced, check the brace count before anything else.

When are variables filled in?

Values are read once, so there is no added delay on the call. If something changes minute by minute, do not put it in a variable - put it in your instructions, or fetch it during the call with a custom function.

What we do not have, and why

We are deliberate about this. Every variable is a promise - once it exists, agents depend on it.

Good to know

  • On inbound calls an unknown name is left in place, so you can see the mistake. On outbound calls and in SMS it is replaced with nothing, so a wrong name leaves a gap in the sentence instead.
  • Values are turned into text. true and false appear as the words “true” and “false”.
  • Names must be letters, numbers or underscores - {{first_name}} works, {{first name}} does not.
  • Both directions get the live-facts block. Only outbound gets your own values.