An agent’s 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 secrets on 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: true refuses the session when the variable has no default and 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.vars changes the declarations for one call; top-level vars supplies 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 video agent, which only takes web calls, is a warning. A WhatsApp user who hides their number has no human_phone_number.
  • channel lets one agent serve several channels and adapt: answer shorter on whatsapp_message, or skip spelling out a link on phone_call. It is absent on a standalone task run.
  • The clock keys need config.timezone, an IANA name such as Asia/Kolkata. Using one without it is a save error.
  • now is for APIs. Using it in the greeting or voicemail message is a warning — use time or date in 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.