Blogs
/
The Voice AI Load Test Most Teams Forget: Call Closure

The Voice AI Load Test Most Teams Forget: Call Closure

8
 MIN READ
October 14, 2026
The Voice AI Load Test Most Teams Forget: Call Closure
BACK TO BLOGS
Add Retell AI as a preferred source on Google
ON THIS PAGE
Back to top

Most voice AI load tests answer one question: at peak volume, do calls connect? A second question matters just as much: when a call is over, does it actually end?

A call that never closes keeps holding a concurrency slot on the voice AI platform, a channel on your SIP trunk, and often a port or seat on your contact center platform. Nobody is talking on it. At peak, a few dozen of these can push you into your limits while call volume looks normal.

This guide covers the closure side of load testing. For latency, accuracy, and throughput under load, see our guide to voice agent load testing.

What does "call closure" mean for a voice AI call?

A call is closed when every leg of it has been released by every system it passed through: the caller's leg, any transfer leg, and the AI agent's session.

On a SIP call, closure is a signaling event. One side sends a BYE message, the other side answers 200 OK, and each system frees the channel. A leg that rang but was never answered is cleared with a CANCEL.

For a voice AI deployment, three things have to be true:

  • Both legs hang up. When the caller or the far end drops, the other leg is torn down too, not left open to silence.
  • Transfers finish. A transfer either connects or fails cleanly, and the AI leg drops off in both cases.
  • Every system agrees. The carrier, your session border controller (SBC) or contact center platform, and the voice AI platform all show the call as ended.

In Retell, a finished call has a status of ended and a disconnection reason such as user_hangup, agent_hangup, or call_transfer. A call still in progress has a status of ongoing, and ongoing calls are what count toward your current concurrency.

Why do transfers leave calls open?

A transfer turns one call into two or more legs, often across two platforms, and a hang-up on one leg has to reach the others. When that signal is lost or ignored, a leg stays up with nobody on it.

Patterns to check in your setup:

  • Blind transfer into the AI. Many contact centers keep call control on their existing platform and blind-transfer callers to the AI agent's number. If the caller hangs up and the hang-up does not travel across the transfer, the AI leg keeps running. If the AI ends the call and your platform does not release its side, that port stays busy.
  • Cold transfer out of the AI. The AI agent drops off as soon as it hands the call over. Retell supports two SIP methods: SIP INVITE bridges the transfer, while SIP REFER asks the other end of the call, usually your carrier or trunk, to start a separate call to the destination. REFER only works if your provider allows it.
  • Warm and agentic warm transfer. The agent dials the destination while the caller waits on hold, so two live legs exist at the same time. If the destination never answers, the attempt has to time out and clean up both sides.
  • Your own transfer logic. When the voice AI platform does not control the number (Retell's dial-to-SIP method, for example), transfer and end call run through your own custom functions, so closure is your code's job.

For the caller experience of each type, see how call transfers work between AI voice agents and human teams and our warm transfer guide.

What does an open call cost you at peak?

One concurrency slot for as long as it stays open. Concurrency counts simultaneous active calls, and an empty call counts the same as a real one.

The math is simple: extra open calls at any moment = calls per hour that fail to close × hours each one stays open.

Scenario (illustration, not a measurement)Failed closures per hourHow long each stays openExtra open calls at any moment
Occasional glitch, short silence timeout610 minutes1
Occasional glitch, only the 1 hour duration cap660 minutes6
One misconfigured transfer route carrying 60 transfers per hour6060 minutes60

The third row is how teams end up with dozens of phantom calls at peak: one configuration problem, such as hang-ups not forwarded across a transfer, applied to every transferred call.

That capacity is not free. On Retell, the first 20 concurrent calls are included and additional capacity is $8 per concurrent call per month (see pricing). When a workspace reaches its limit, new inbound calls wait about 40 seconds for a free slot, then go to the phone number's fallback number if one is set, or end with concurrency_limit_reached. New outbound calls are rejected unless concurrency burst is turned on. At peak, stuck calls turn real callers away.

The same math applies to trunk channels and contact center licenses, which the voice AI platform cannot see.

How do you test call closure during a load test?

End every call on purpose, through every ending path, at your peak rate, then prove that every system's active call count returns to zero.

Run a closure matrix

Ending pathHow to trigger it in the testExpected result on the AI sideAlso confirm
Caller hangs up mid-conversationTest caller drops at a random pointended, user_hangupCarrier and contact center channel released
Agent ends the callScript a goodbye that meets the End Call tool's conditionended, agent_hangupYour platform receives the BYE and frees the port
Cold transfer, then caller hangs upTransfer, then drop the callerended, call_transferDestination leg also released
Cold transfer, then destination hangs upTransfer, then drop the destinationended, call_transferCaller leg also released
Warm transfer connects, then either side hangs upAnswer at the destination, then drop one sidetransfer_bridged, then transfer_ended webhooksNo leg left on hold
Transfer never answeredLet the destination ring past the transfer ring durationtransfer_cancelled webhookCANCEL sent; no ringing leg left behind
Caller hangs up while on holdDrop the caller during a warm transferCall endsConsultation leg to the destination torn down
Silent lineTest caller stays silentended, inactivityTime to close matches your silence setting

Transfer webhooks are off by default. Add transfer_started, transfer_bridged, transfer_cancelled, and transfer_ended to the agent's webhook events for the test.

Run a drain test

After the peak ramp, stop placing new calls and watch the counters fall. Poll Retell's Get Concurrency API, which returns current_concurrency (the number of ongoing calls), every few seconds. It should reach zero within the length of your longest scripted call. Check your SBC, contact center, and trunk counts at the same moments. Any counter that stays high is the leak, and the system holding it tells you which side is not releasing.

Reconcile and inspect

  • Every call_started webhook should have a matching call_ended. Every transfer_started should have a transfer_ended or transfer_cancelled.
  • After the drain, use the List Calls API with a call_status filter of ongoing to find stragglers.
  • Open a straggler in Call History and check its Packet Capture tab where available. In the SIP ladder, look for which party sent BYE or CANCEL and whether the other side answered.

What should you monitor after go-live?

Watch for concurrency that stays high when volume drops, more calls closed by timeouts, and transfer failures.

  • Concurrency against volume. Retell alert rules can watch concurrency_used (peak concurrent calls in a window) alongside call_count (calls that ended in the window). If concurrency climbs while ended calls stay flat, calls are not ending.
  • Transfer failures. Alert on transfer_call_failure_count.
  • Timeout endings. In Call History, filter by disconnection reason. A growing share of inactivity or max_duration_reached after transfers means the backstops, not the hang-ups, are closing your calls.
  • Long-running calls. Live Monitoring lists every call in progress with a live-ticking duration. A call far older than your longest real conversation is a candidate. You can end it from Live Monitoring or with the Stop Call API.
  • Cross-system counts. The AI platform, trunk, and contact center active counts should move together.

Which settings limit the damage when a call does not close?

Timeouts. They do not fix broken signaling, but they cap how long a stuck call can hold a slot.

SettingRetell defaultRangeWhy it matters for closure
End Call toolOff: the agent does not end calls on its ownConditions you defineWithout it, calls end only when the caller hangs up or a timeout fires
End call on silence10 minutes10 seconds minimumA dead, silent leg is closed after this long
Max call duration1 hour1 minute to 2 hoursThe last-resort cap on any call
Transfer ring durationAgent ring duration, 30 seconds5 to 90 seconds per transferUnanswered transfer attempts give up
Warm transfer wait for agent answer30 secondsConfigurableLimits time spent waiting for a human at a queue

Set the silence and duration limits close to your real call lengths. With the defaults, a dead leg that stays silent can hold a slot for 10 minutes, and one the silence timer does not catch can hold it for up to an hour.

What should you ask your vendor and telephony team?

Get written answers before launch:

  1. When the caller hangs up on a blind-transferred call, which system sends the BYE to the AI leg, and has that been tested at peak?
  2. When the AI ends a call, does your contact center platform release the port immediately?
  3. After a transfer connects and the AI agent drops off, does the call still count toward the voice AI platform's concurrency until both parties hang up?
  4. Does your SIP trunk allow SIP REFER, and if not, which transfer method should you use?
  5. Can you get packet captures for test calls from every hop: carrier, SBC, contact center, and voice AI platform?

Build closure into the release gate

Treat "concurrency returns to zero after the test" as a pass or fail criterion. Run the closure matrix and drain test before launch and again after any change to transfer settings, numbers, or call routing.

Retell gives you the pieces: cold, warm, and agentic warm call transfer with ring and wait timeouts, transfer webhooks, per-call disconnection reasons, packet captures, a live concurrency API, and alerts on concurrency and transfer failures. If you are planning a contact center rollout with high peak concurrency, the Retell Enterprise plan adds a high cap on concurrent calls and dedicated support.

Related reading: Why load tests must follow the real call path, the outbound phone number checklist, and more guides in the Retell Learn hub.

ROI Calculator
Estimate Your ROI from Automating Calls

See how much your business could save by switching to AI-powered voice agents.

All done! 
Your submission has been sent to your email
Oops! Something went wrong while submitting the form.
   1
   8
20
Oops! Something went wrong while submitting the form.

ROI Result

2,000

Total Human Agent Cost

$5,000
/month

AI Agent Cost

$3,000
/month

Estimated Savings

$2,000
/month
Live Demo
Try Our Live Demo

A Demo Phone Number From Retell Clinic Office

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Read Other Blogs

Revolutionize your call operation with Retell