Skip to content
Expedify
6 min

Voice call agent

The same four-part shape as the WhatsApp agent, on a channel where nobody can wait two seconds and nothing can be edited before it is heard.

The WhatsApp build had a forgiving property you did not notice: time. A customer waiting for a message tolerates three seconds. A customer holding a phone to their ear does not — three seconds of silence is a dropped call as far as they are concerned.

Everything else is the same shape. A call arrives, an agent handles it, tools do the looking-up, and there is a way out to a human. What changes is that every decision you make is now audible.

No workflow on this page. Inbound voice needs a telephony provider and a claimed number, which the tutorial organisation does not have — the validator rejects the trigger outright. The build is described from the nodes, each of which has its own lesson where the behaviour was verified.

The shape

  • A call arrives. The inbound trigger fires while the phone is still ringing.
  • Optionally, you look something up first. This is the part people skip and it is the difference between “can I take your name” and “hello Priya”. A CRM lookup between the trigger and the call node runs during the ring.
  • The call node answers it, handing the conversation to a Voice Agent — and pausing the workflow for the length of the call.
  • The agent talks, using tools. A knowledge base for facts, a CRM write for what it learns, a transfer for when it is out of its depth.
  • The workflow resumes when the call ends, with the transcript and the agent's conclusion available as data.

The wiring rule catches everyone once. The Voice Agent is not wired into the flow. It is attached to the call step, and the flow continues from that call step — which fires when the call ends. Draw an edge from the agent into a Condition and the branch evaluates before anybody has spoken.

The settings that decide whether it is any good

enable_interruptions

What to do with it
Why

voice_mode

What to do with it
Why

max_tokens

What to do with it
Why

max_conversation_duration

What to do with it
Why

call_timeout_minutes

What to do with it
Why

The tools, and the one that matters most

A knowledge base search and a CRM write behave exactly as they did on WhatsApp — pin what the tool does, leave the content to the agent. The third tool is the one this build needs and the text build did not.

Transfer Call is the escape hatch, and its destination descriptions are the routing logic. The agent decides where to send someone based on the sentence you wrote describing each destination. “Billing questions, refunds and invoice queries” routes; “Support” does not. If calls land in the wrong queue, that sentence is the bug.

Nothing in the tool stops the agent transferring badly, and nothing stops it refusing to. Both are prompt problems. Say explicitly when to transfer — “if the caller asks for a person, or if you have failed to answer twice, transfer immediately” — and expect to tune that sentence after listening to real calls. This is the node where a policy in a prompt is genuinely the only option, and it is worth being deliberate about.

Writing a prompt for the ear

Everything from the prompting lesson still holds. Four rules are specific to voice:

  • Say it will be spoken. Put it in the constraints. No lists, no headings, no URLs, no reference numbers read digit by digit.
  • Cover the gaps. Tell the agent to say “let me check that for you” before using a tool. A two-second silence is invisible in chat and awkward on a call.
  • Give it an opening line. Silence after a connection reads as a fault. Whether the agent speaks first is a setting; what it says should be written, not improvised.
  • Tell it how to end. Calls do not finish cleanly on their own. An agent with no instruction about closing will keep a caller who has finished talking on the line.

What breaks

“Completed” includes calls nobody answered. A call that rang out, hit a busy tone or reached voicemail all resume the workflow as completed calls with an empty transcript. Branch on the sub-status inside the call record before you create a follow-up task — otherwise the “had a ten-minute conversation” path and the “nobody picked up” path do the same thing.

The agent's defaults disagree with themselves. That node has three sources of default — the documented schema, an internal table and inline fallbacks — and they differ on the opening delay, on whether silence ends the call, and even on which mode you are in. For anything you care about on this build, set it explicitly rather than trusting the panel.

There is no editing before it is heard. A wrong sentence in an email is embarrassing; a wrong sentence on a call is said, and the caller has already reacted to it. Test with a real phone, listen to the recording, and do it before anyone outside your team can reach the number.

Cost is per minute and per model call. A voice agent runs a model continuously while somebody talks. An agent that fails to end calls is a bill as well as a bad experience — which is what the conversation cap is really protecting you from.

Build it

  1. Connect a provider, claim a number, and build the smallest thing: trigger, call node set to transfer to your own mobile. Call it. Confirm the plumbing before any AI is involved.
  2. Switch the call to AI, attach a Voice Agent with a two-sentence prompt and no tools. Call again and just listen to the latency.
  3. Turn interruptions on and call again. Interrupt it. That comparison is the whole argument for the setting.
  4. Attach a knowledge base search and ask it something only your documents know. Time the silence while it looks — then add the “let me check” line and hear the difference.
  5. Attach Transfer Call with two well-described destinations and route yourself to each by describing a problem rather than naming a team.
  6. Finally, let it ring out without answering and read what the workflow does next. That branch is the one that will fire most often in production.

Next: the last lesson — a twenty-node workflow nobody will walk you through, and why that is the point.

Related lessons