What you need
- Provider keys for Deepgram and OpenAI (the models below).
- A provisioned carrier account and an imported phone number.
- A CRM endpoint that accepts a qualification write, with its token stored as the workspace secret
CRM_TOKEN. - Credit on the workspace, and the EDITOR role.
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
interestedis sent as a boolean. silent: truehides the CRM response from the model. With nothing returned to the model, the tool is silent: thesayline 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’stimezone.
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 Publishing pins
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
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 Each recipient’s
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.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.session_id. After hanging up, check:GET /v1/calls/{session_id}— the greeting was substituted, the email offer came within three sentences, andrecord_qualificationran once.- Your CRM — the row itself. The
httpoperation is silent, so a 200 with the wrong body looks the same as a correct write from the call. session.analysison the same call. If a field is vague, rewrite itsdescriptionand try it against this transcript withPOST /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
userdatavaries 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_windowdoes 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.