TURN stops allocating
Expired TLS certificate on turns:, exhausted quota or a blocked UDP port. Users behind corporate NAT cannot connect; everyone else is fine, so the dashboard looks green. How to monitor a TURN server.
RTCanary places real test calls into your voice and video stack on a schedule, scores the media and the conversation, and alerts you when something drops, before users do. WebRTC rooms, TURN servers, SIP trunks, voice-AI agents and realtime APIs.
Signalling servers answer 200 while media silently fails. The failure modes below are invisible to uptime monitors and to server-side dashboards, because nothing on the server side is broken.
Expired TLS certificate on turns:, exhausted quota or a blocked UDP port. Users behind corporate NAT cannot connect; everyone else is fine, so the dashboard looks green. How to monitor a TURN server.
Peer connection reaches connected, RTP never arrives in one direction. SIP-side: an ALG rewrote the SDP. Only an endpoint that listens for audio can see it.
A route change or an overloaded SFU raises jitter from 8 to 40 ms. No errors, no alerts, MOS drops from 4.2 to 3.3 and support tickets follow a day later.
Time-to-first-audio doubles after a model or prompt change, or the agent stops following the flow it passed in CI. Transcripts look fine; callers hang up during the silence. Monitoring for voice agents.
Media works from your office and breaks from São Paulo. Probes in several regions make the difference visible instead of anecdotal.
A client build ships with a changed ICE config or a renamed token claim. A canary that joins the room every minute flags it within the first minute.
Each check is a scripted call from a probe you choose, repeated on a schedule. The probe measures what a real participant would experience and compares it with your thresholds.
A headless browser, SIP endpoint or phone leg joins through your real join flow: URL plus token, an INVITE to your trunk, or a dialled number. Nothing is installed in your client.
The probe publishes a reference audio and video stream and listens for yours. It records ICE candidate pairs, the selected transport and the time to first decoded frame.
Round-trip time, jitter, packet loss, bitrate and frame rate from getStats() or RTCP, an E-model MOS estimate for the audio leg, and the scenario result for an agent.
Thresholds per metric and per region, with a minimum number of consecutive failures before an alert. Slack, webhook or PagerDuty, with the full trace and the root-cause attribution attached.
Each targets one layer of a real-time stack. Combine them to localise a failure: if the TURN probe passes and the room join fails, the problem is not the relay.
Works with any platform that exposes a join URL or token: LiveKit, Daily, Twilio Video, Jitsi, Janus, mediasoup, or your own SFU.
STUN binding, TURN allocation over UDP, TCP and TLS, relay round-trip and certificate expiry, from several regions.
Registration, OPTIONS ping, a short INVITE with reference audio, RTCP-derived loss, jitter and MOS. Post-dial delay as a metric.
Calls the agent over the phone, WebRTC or your realtime endpoint, runs a multi-turn script, checks each reply, measures time-to-first-audio, turn latency and whether the agent stops when interrupted.
Opens a WebRTC or WebSocket session to an OpenAI Realtime-style endpoint or your own gateway, streams audio in, and times session setup, first audio delta and turn completion.
A container you run in your VPC or office network, for SFUs, PBXs and TURN servers that are not reachable from the internet. Same checks, same alerts, your egress.
A voice agent fails in ways a ping never sees: it answers a second late, talks over the caller, or quietly stops following its flow. RTCanary treats the conversation as the thing under test, and the on-call engineer reading the result may be an agent too.
A scenario is a scripted dialogue. The canary speaks each turn, records the reply and checks it: a keyword, a DTMF tone, a transfer, an intent judged against a rubric you write. Scenarios run on a schedule against the live agent, so a prompt or model change that breaks a flow is caught between releases, not only before them.
Every alert carries an attribution: the network leg (RTT, loss, jitter on the media path), the transport (ICE and TURN, SIP, carrier), or the agent pipeline (end of utterance, time to first token, synthesis). Structured JSON that a person can read at 3 a.m. and an agent can act on.
Connect RTCanary to Claude Code, Cursor or your own on-call agent through the Model Context Protocol: list checks, fetch the failing run with its trace, ask why it failed, mute a check during a deploy. The same data is a REST API and exports to Prometheus and OpenTelemetry. API and MCP reference.
Estimate the R-factor and MOS of a call from one-way delay, packet loss and codec with the ITU-T G.107 E-model. The same model the product uses for its audio score.
WebRTC testing, MOS, TURN monitoring, VoIP metrics and voice-agent latency, with every number linked to the RFC, ITU-T recommendation or vendor document it comes from.
Start on the free tier: three checks, one region, no card. Send the join URL, TURN URI, trunk or phone number you want watched and an engineer sets up the first canaries with you.
Which platform you run (LiveKit, Twilio, Jitsi, a SIP trunk, a voice agent on Pipecat or the OpenAI Realtime API), where your users are, and what failed last time.
Start free