By Sagar Shankaran, Founder of CallSphere
ICE restart is how an AI voice call survives Wi-Fi to cellular handoff without dropping the conversation. Here is the 2026 production pattern that keeps the agent alive.
Key takeaways
If your AI voice call drops every time the user walks from the cafe Wi-Fi to the sidewalk, you are not running ICE restart. The fix takes ten lines of code and saves single-digit-percent of every cohort.
A WebRTC session is bound to a candidate pair. When the user's network changes — Wi-Fi to cellular, NAT binding expiring after 30 s of silence, TURN allocation timing out — the candidate pair is dead but the SCTP and DTLS state is fine. ICE restart re-runs candidate gathering, validates a new pair, and resumes media on the same logical connection. The user hears a 1–3 second freeze; the AI agent's session, the DataChannel, and any in-flight tool calls survive.
RFC 8445 defines the mechanic. The browser exposes it as `pc.restartIce()` (modern API) or `pc.createOffer({ iceRestart: true })` (older). Mobile users especially need it: a 2025 LiveKit field study found ~12% of mobile sessions experience at least one ICE-impacting network change in a 5-minute call.
```mermaid flowchart LR PC[RTCPeerConnection] -- iceConnectionState --> S{state?} S -- disconnected --> T[wait 3s] T -- still disconnected --> R[restartIce] R --> Renego[trigger renegotiation] S -- failed --> R ```
Two trigger conditions: 3-second `disconnected` (early intervention; the user has not noticed yet) and `failed` (catastrophic; restart immediately). The disconnected timer is critical — `failed` only fires after the full 30-second consent timeout, by which point most users have hung up.
CallSphere wires ICE restart into every browser-side voice path:
Hear it before you finish reading
Talk to a live CallSphere AI voice agent in your browser — 60 seconds, no signup.
Across 37 agents, 90+ tools, 115+ database tables, ICE restart is treated as a recovery primitive, not an error. SOC 2 logs a clean event for every restart. Pricing remains $149/$499/$1499 with the 14-day trial across all six verticals (real estate, healthcare, behavioral health, legal, salon, insurance); affiliates 22% — see /affiliate.
```ts const pc = new RTCPeerConnection({ iceServers }); let disconnectTimer: any;
pc.oniceconnectionstatechange = () => { switch (pc.iceConnectionState) { case "disconnected": disconnectTimer = setTimeout(() => { if (pc.iceConnectionState === "disconnected") { pc.restartIce(); } }, 3000); break; case "connected": case "completed": clearTimeout(disconnectTimer); break; case "failed": pc.restartIce(); break; } };
pc.onnegotiationneeded = async () => { await pc.setLocalDescription(); signaler.send({ description: pc.localDescription }); }; ```
Does the user hear silence? Yes — typically 1–3 seconds. The DataChannel queues messages, so tool calls survive.
Does TURN need to support ICE restart? Yes. Coturn since 4.5 handles it; verify in your relay logs.
Will SFrame keys survive? Yes — keys are above the ICE layer.
What about server-side SFUs? Most SFUs (LiveKit, mediasoup, Janus) support restart since 2024.
Still reading? Stop comparing — try CallSphere live.
CallSphere ships complete AI voice agents per industry — 14 tools for healthcare, 10 agents for real estate, 4 specialists for salons. See how it actually handles a call before you book a demo.
Does Pion support it? Yes via `PeerConnection.RestartIce` since 3.x.
What if both sides are offline at once? A double-failure cannot recover; tear down and reconnect.
Does ICE restart work over a WebSocket signalling outage? Only if the signalling channel comes back; the restart needs to send a new offer.
Should I restart proactively? Some teams restart every 4 minutes preemptively to refresh NAT bindings. We have not seen the need with healthy TURN.
Three rules from a year of mobile-heavy production:
The hardest bug we shipped in 2025 was a perfect-negotiation interaction with restart that produced a 30 s deadlock on iOS Safari only on cellular. Caught only by physical-device QA. Worth the budget.
The single biggest 2026 lesson on ICE restart for AI voice: it is not enough to restart silently. Modern users notice a 1.5 s freeze, and if you do not give them a UI cue ("Reconnecting…") they conclude the agent froze and hang up. We instrument every restart with both a server-side audit event and a client-side overlay; the overlay disappears the instant `iceConnectionState` returns to `connected`. That single UX detail moved our restart-survival rate from 71% to 94%.
Written by
Sagar Shankaran· Founder, CallSphere
Sagar Shankaran is the founder of CallSphere, where he builds production AI voice and chat agents deployed across healthcare, hospitality, real estate, and home services. He writes about agentic AI, LLM engineering, and shipping voice agents that handle real calls in production.
See how AI voice agents work for your industry. Live demo available -- no signup required.
A founder's guide to texto a voz (text-to-speech in Spanish): LATAM vs Castilian voices, free options, and how CallSphere ships Spanish agents.
A founder's guide to the female voice generator landscape: AI female voices, Japanese voices, robot voices, and how CallSphere ships 57+ voices live.
A founder's guide to the Siri voice generator landscape: how AI voice cloning works, what is legal, and how CallSphere uses 57+ voices in production.
A founder's guide to AI voice assistants for ecommerce: customer service, order lookup, and how CallSphere fits in versus virtual receptionists.
Robot text to speech in 2026: how I pick TTS APIs, when robotic voices help, and how CallSphere ships 57+ language voice agents. Hands-on guide.
The customer support specialist role in 2026 is half human, half AI. Here is what the job looks like, the AI tools that pair with it, and how we ship it.
© 2026 CallSphere LLC. All rights reserved.