AgentsInstructions

Variable extraction

Define the structured fields your agent captures during a call and stores afterwards.

Under Instructions → Variable extraction you define the structured fields your agent should capture from callers. They are stored with every call and are available afterwards in follow-up — in emails, webhooks and exports.

VideoanleitungVariable extraction
The Variable extraction page with the enable switch and the list of variables
The Variable extraction page with the enable switch and the list of variables

It is one of the most underrated features on the platform. Take it seriously and you get not just better call logs but noticeably better conversations.

What a configured variable does

A variable does three jobs at once:

  1. Conversation memory. The moment the caller says the value, the agent files it — and never asks a second time.
  2. Clean capture. Through the description you tell the agent what structure to capture the value in. A registration plate, a case number or an email address then lands in the right format instead of as phonetic mush.
  3. Structured field. After the call the value stands on its own and other systems can read it — in emails, webhooks, exports and filters.

The first two are what most people miss. The longer a call runs, the harder it gets for a fast language model to keep everything in view — and voice agents need fast models. Configured variables are the anchor against that. And without a format instruction the agent guesses how to write down "H for Heinrich, D for Dora, P for Paula, 3051".

When the agent forgets things or asks twice

It almost always comes back to this page. Do not hesitate to configure plenty of variables — it is the most direct lever against an agent that re-asks what has already been said.

Three tiers of memory

Not everything said in a call carries the same weight:

TierWhat it isWhere it goes
CapturedThe caller said it, it passed the check, and there is a matching configured fieldThe database, exports, webhooks
NotedSaid and checked, but no field exists for itFor the duration of the call only
ObservedInferred, or the audio was too poor to trustFor the duration of the call only

All three are available to the agent during the call. Only the first tier is stored. If you need a value later, it needs a field.

When to add a variable

Whenever the agent needs to remember something reliably during the call, whenever you need it downstream as a structured field (a customer name in a CRM row, an appointment in a confirmation email) — or both. You don't have to list every detail. Configuring one turns "probably remembered" into "reliably captured and exported".

Enabling it

The Enable variable extraction switch controls the whole feature. Off, the agent ignores the list below entirely. On, it actively captures the listed values and keeps them in view for the whole call.

The fields on each variable

FieldMeaning
Variable nameThe key the value is stored under — e.g. CustomerName, PolicyNumber, AppointmentDate
DescriptionWhat the value means and when it should be captured
RequiredWhether the agent must ask for it before it may hang up
Allowed valuesAn optional list of fixed answers

The name drives the behaviour

This is the most important thing on the page and the least visible: the variable name is not just a label. ScaleTalk reads the name to work out what kind of field it is, and switches on the matching checks and repairs.

If the field holds…Name it…And you get
The caller's own callback numberCallbackNumber, callback_numberAuto-fill from the caller ID when they just say "yes"
Some other party's numberEmergencyNumber, Doctor_PhoneNo auto-fill — the qualifier vetoes it
An email addressAnything containing mailReconstruction from spelling, plus verbatim read-back
A person's nameAnything containing nameProtection against vocatives and misheard spellings
A date of birthDateOfBirth, birth_dateChecks for impossible dates and dates never stated for this field
A requested appointmentPreferredAppointmentnot …DateOrdinary date handling, no identity check
A contract or customer numberContractNo, CustomerNumberRequires real numeric content, plus digit reconciliation
A reachability windowReachabilityNumber reconciliation, but "mornings" stays a valid value
Free text about the requestRequestFull free-text checking, including German compound derivation

An example of how strongly the name acts

Name a field DateOfBirth and the identity check applies: if the caller mentions a date in passing about some unrelated incident, it is not stored as their date of birth. Name the same field PreferredAppointment and that check is gone — which is exactly right for a requested slot.

Writing the description

The description is not decoration. It is injected into the agent's instructions on every single turn, and several field-type detectors read it.

Say what the value IS — not what the agent should do

The agent already knows how to ask. What it needs from you is how to recognise the answer.

✅ The customer's contract number, 6–8 digits, printed top right
   on the invoice.

❌ Politely ask the caller for their contract number and confirm it.

Keep other field types out of the prose

✅ Callback number in case we have to call back.

❌ Callback number. If the caller gives no phone, ask for their
   date of birth for identification.

The second turns the phone field into a date field as well — and the spoken-date normaliser starts rewriting values.

Name the caller's words, not just yours

The agent also uses the description to recognise its own outgoing question. If the field is ContractNo but callers say "policy number", that word belongs in the description.

✅ Contract number. Callers often call it a policy number or
   insurance number.

Spell out the format

This is where the description earns its keep. For licence plates, case numbers or customer numbers, describe the shape — and the agent captures it cleanly instead of guessing letter by letter:

The vehicle's official registration. German plates are one to
three letters for the registration district, one to two
identifying letters and one to four digits. Capture it in
exactly that structure.

Offer the caller's own number explicitly

✅ Callback number. If the calling number is usable:
   {{fromNumber}}.

That placeholder does real work: when the caller confirms the displayed number with a bare "yes", the platform substitutes the actual number instead of storing the string "yes".

Do not write {{toNumber}} there — that is the number the caller dialled, not theirs.

Keep it short

The description is re-sent on every turn of the call. Long descriptions cost time on every single turn and push the genuinely important context further away. Two sentences is plenty.

Required or optional

If a variable is marked required, the agent will not end the call before it has the value. It asks again — within limits — and then lets the caller go if they refuse.

Leave a field optional when the agent should capture it if it comes up, but must never force it. Callback numbers and extra notes are typical optional fields; the caller's name is a typical required one.

Don't make everything required

Required is not a hint, it is a commitment: the agent fights for the value before the call may end. With five required fields the conversation feels like a form. Two or three is the practical maximum.

Allowed values

Open Allowed values under a variable to list the answers this field may take — insurance type, department, request category. The agent may then store one of those values even if the caller phrases it differently.

This matters more than it sounds: without the list, the agent may only store words the caller actually said. A correct but differently worded answer gets discarded.

Without allowed valuesWith allowed values
Caller says"I'm on public health insurance""I'm on public health insurance"
Stored valuenothing — the value is discardedStatutory

Description and list belong together

Keep naming the possible values in the description as well. That is where the agent learns which ones exist — the allowed values list is what additionally makes them storable.

The three rules

1. Every classifying field needs a list. If a human would answer it from a dropdown, it needs allowed values.

2. No free-text field gets a list. On Request as a free summary, or a damage description, the list would silently gate real caller data.

3. Two values means yes/no. A pair like Existing customer / Not an existing customer, or plain Yes / No, is treated as a truth value and checked more strictly — otherwise a "no" would have stored the positive value simply because it was on the list. If you want three outcomes, add a third value, even if it is just Unclear.

'e.g.' destroys the list

Do not write allowed values as examples in the description. Text containing "e.g.", "for example", "such as" or "etc." is read as illustrative — no value list is created.

✅ Allowed values: Statutory · Private · Self-pay
   Description: "The patient's insurance type."

❌ Description: "Insurance type, e.g. statutory or private."

For free-text fields such as name, email or phone number the list stays empty. Values can be reordered with the arrows and removed individually; duplicates and entries without a letter or digit are discarded on save, and the interface flags them beforehand.

Example configuration

Variable nameDescriptionRequiredAllowed values
FullNameFirst and last name of the person calledyes
EmailEmail address for the appointment confirmationno
CallbackNumberAlternative number. If the calling number is usable: {{fromNumber}}no
RequestWhat the call was about, in one or two sentencesno
CategoryHow the request is classifiedyesSales, Support, Accounting, Other
UrgencyHow pressing the matter isnoLow, Medium, High

Why a value does not get stored

ScaleTalk checks every value before storing it. The governing rule: the transcript is the truth. Anything with no trace in the conversation is not stored, however confident the model is. That heads off the classics: phone = "unknown", the agent's own question filed as the answer, or a date of birth the caller mentioned about something else entirely.

SymptomLikely causeFix
A classifying value is never storedNo allowed values configuredAdd the list under Allowed values
A yes/no field stores the oppositeTwo values that are not a recognisable opposite pairUse X / Not X, or add a third value
Callback field stores "yes" instead of a numberThe name matches no callback keyword and the description has no {{fromNumber}}Rename it or add the placeholder
The agent re-asks something already answeredThe value was rejected on checkSharpen the description, check the field name
Digits come out transposedRecognition error while the caller spelled itUsually self-corrects by the end of the call

A value can still be corrected after capture

The transcript keeps improving during the call. ScaleTalk therefore reconciles numbers and email addresses again at the turn boundary, and one final time at the end of the call. A value that looked wrong mid-call can end up correct in the database.

Where the values end up

Captured variables show up again in four places:

  • In the call overview — as captured variables on the call and as filters
  • In the email subject and body of follow-up, e.g. {{Request}}
  • In the webhook payload sent to a CRM, ticketing system or n8n
  • In CSV exports of your calls

Related pages

Speaking rate, temperature, time limits, pronunciation, recording and background audio live under Tuning & fine-tuning. Caller details known before the greeting are set up in caller context.

On this page