prompt and greeting are templates: {{userdata.name}}, {{vars.brand_name}}
and {{system_vars.date}} are substituted when the agent starts. This page covers the
template roots, the agent’s own vars declarations, and the six system_vars Talqing
fills in. Facts about the person live in userdata.
Template roots
{{recording.notice}} is legal in the greeting only — see recording.
The tool side (tooldata, publish_fields, set_variable) is on
templating and data.
The same rules apply to a handoff destination’s description, summary_prompt and
message, and to voicemail_detection.message.
Tokens that are refused at save
Anything shaped like{{…}} is checked, not only the known roots:
There is no escape syntax: prose containing
{{anything}} cannot be saved. A code
operation’s TypeScript source is exempt.
vars
config.vars declares the variables the agent reads as {{vars.name}}. Values arrive
per session on POST /v1/calls/token, POST /v1/calls/outbound, POST /v1/calls/batches
and POST /v1/chats, and override the declared default.
vars is a list, so a PATCH replaces it whole — send every variable you mean to keep.
Supplying values for one call:
Rules
- Values are strings. Any other JSON type is refused.
- One bag per session. It reaches every agent the session runs — team members and
handoff targets included. Each agent merges it over its own defaults. Nothing inside
the session (tool, hook, model) can write
vars. - The model sees the values. A per-session credential goes in
secretson the same request (session secrets), a shared one in a workspace secret; a tool reads either as{{secrets.NAME}}. - An empty string is a value.
{"api_domain": ""}overrides the default. required: truerefuses the session when the variable has nodefaultand no value was supplied, before anything is compiled:this session needs values it was not given/'api_domain' is required and has no default. Nothing is enforced mid-session: a handoff target missing a value reads it as empty.- Inbound phone calls supply no values, so only defaults resolve. A voice agent requiring a variable with no default cannot be assigned to a phone number; assigning, publishing while assigned, and rolling back to such a version are all refused.
agent_override.varschanges the declarations for one call; top-levelvarssupplies values. See per-call configuration.
system_vars
Seven keys, filled in by Talqing; any other key is refused at save.GET /v1/catalog
returns them as system_vars, each with the channels it has a value on (empty: every one).
- The three phone keys are absent on web calls, API chats and Telegram (they resolve to
nothing). Using one on a
videoagent, which only takes web calls, is a warning. A WhatsApp user who hides their number has nohuman_phone_number. channellets one agent serve several channels and adapt: answer shorter onwhatsapp_message, or skip spelling out a link onphone_call. It is absent on a standalone task run.- The clock keys need
config.timezone, an IANA name such asAsia/Kolkata. Using one without it is a save error. nowis for APIs. Using it in the greeting or voicemail message is a warning — usetimeordatein spoken lines.- In a prompt or greeting the clock is frozen at the moment the agent started (call
answer, handoff, or chat start/resume). In a tool operation it is the moment the
operation ran. For time elapsed on every turn, set
elapsed_time: true(cascade pipelines only).
userdata, vars, system_vars or secrets
If a value would be wrong to replay into the person’s next conversation, it is a
var.
Next
Userdata
Seeding, writing and keeping facts about the person.
Templating and data
args, tooldata, publish_fields, set_variable.