You will build a campaign that calls a list of leads, says who is calling and why, asks four qualifying questions, writes the answers to your CRM, and leaves a call record you can filter into a shortlist. The result is one published agent, one published tool, an outbound-capable number, and a batch that dials inside a calling window and retries unanswered phones.
A call that reaches voicemail is billed like any other connected call. With voicemail detection on, the agent leaves a message, hangs up, and the call ends as voicemail. A list with many machines costs money while reaching nobody.Every call in a batch runs the agent’s current published version, read before each dial. Republishing mid-campaign changes every later call. To hold a campaign steady, pin a version.

What you need

1

Create the CRM write-back tool

The model fills the arguments while the person is on the line; the tree posts them with a token the model never sees.
record_qualification.json
  • A body value that is exactly one token keeps its type, so interested is sent as a boolean.
  • silent: true hides the CRM response from the model. With nothing returned to the model, the tool is silent: the say line plays and the agent does not add a reply of its own. See speech operations.
  • {{userdata.crm_id}} comes from each batch row (step 5), so validation warns that it is read before anything publishes it; that warning is expected here. {{system_vars.now}} uses the agent’s timezone.
2

Create the agent

An outbound prompt has to say who is calling, why, and how the person gets off the phone. The greeting and the voicemail message are personalized from the recipient’s userdata; a missing field resolves to nothing, so place tokens where an empty value still reads ("Hi {{userdata.first_name}}, this is Maya").
agent.json
Publishing pins record_qualification at its current published version; republish the agent to pick up a later tool version.Tool arguments versus analysis fields. budget_band on the CRM write is what the agent was told on the call — act on it. fit and next_step are what a model infers from the finished transcript afterwards, on the agent’s own LLM; they are never written into userdata. If a value has to be right, make it a tool argument. See call analysis.If the same agent also answers inbound calls, branch its opening on {{system_vars.direction}} in an on_enter hook.
3

Enable outbound on the number

A batch dials from from_phone_number_id, which must be active on a ready carrier account with can_outbound set. Otherwise the request is refused with this number is not enabled for outbound.
Each recipient’s to is normalized against the region of this number. See outbound calls.
4

Call yourself once

POST /v1/calls/outbound runs the published agent with the same userdata a batch row carries, exercising the greeting, the tool and the analysis. It rings a real phone and is billed; use your own number and a crm_id you can delete.
The response carries session_id. After hanging up, check:
  1. GET /v1/calls/{session_id} — the greeting was substituted, the email offer came within three sentences, and record_qualification ran once.
  2. Your CRM — the row itself. The http operation is silent, so a 200 with the wrong body looks the same as a correct write from the call.
  3. session.analysis on the same call. If a field is vague, rewrite its description and try it against this transcript with POST /v1/calls/{session_id}/analysis/preview (writes nothing, costs one LLM call).
5

Create the batch

One request carries the policy and up to 10,000 recipients. Each recipient is to plus a flat map of string userdata.
Run it first with two of your own numbers and max_concurrency: 1. In the dashboard this is Telephony → Outbound Calling → New batch.

Running the campaign

Pause, resume, cancel, appending recipients (duplicates are skipped and reported), the circuit breaker that stops a batch after ten consecutive setup failures, and the automatic pause when credit runs out are covered in batch calling. next_dial_at is when the batch next dials, with next_dial_reason saying why it is waiting (start, window or daily_cap).

Reading the results

A shortlist is the successful calls whose fit is strong or possible; next_step is what a salesperson reads first. To build it in your own system, subscribe to session.completed instead of fetching each call.

Limits

  • Voicemail detection is the model’s judgement of the greeting it hears. An unusual greeting can pass as a conversation, and each retry that reaches the same mailbox leaves the message again.
  • One batch is one agent, one number, one timezone. Only userdata varies per recipient; a different agent or caller ID is a second batch.
  • The batch runs as the user who created it. If they leave the workspace or lose the EDITOR role, dialling fails and the breaker trips.
  • Calling law is yours. Consent, do-not-call registers, permitted hours and recording disclosure are not enforced by Talqing; calling_window does not know public holidays.

Next

Batch calling

Statuses, retries, policy edits, daily caps and pinning a version.

Call analysis

Outcome, fields, preview and backfilling past calls.

Webhooks

Push each finished call, with its analysis, to your system.