WARP guide
Voice Routing and Call Troubleshooting
How to route numbers to trunks and troubleshoot failed calls, one-way audio, capacity limits, DTMF, and call statistics.
When calls fail, start with the simple path: the number must be assigned to your account, routed to a trunk, the trunk must accept the call, and your equipment must be reachable in both directions. Most issues fall into one of those checkpoints.
Confirm the Number Is Routed
Assigned numbers do not automatically ring anywhere. A number must have voice routing configured before inbound calls can reach your equipment.
Open Numbers, select the number, and check its Voice settings. Route the number to the correct SIP trunk. If you are configuring many newly assigned or ported numbers, use the bulk-route workflow on the Held or unrouted numbers view.
If a number should stop receiving calls temporarily, remove or change its voice route instead of releasing the number. Releasing a number returns it to inventory and may make it impossible to reclaim.
Confirm the Trunk Is Ready
Open the trunk detail page and check:
- The trunk exists under the active customer.
- The trunk authentication mode matches your equipment.
- IP allowlist entries include the public source IPs your equipment uses.
- Digest credentials are active if your devices register with username and password.
- Trunk endpoints are configured if WARP should deliver inbound calls to fixed IP addresses on your side.
- Capacity limits are high enough for expected traffic.
For digest trunks, check active registrations. If a device is not registered, confirm it uses warp.ringer.tel as server, registrar, and domain, and that it uses the full server-prefixed username WARP issued.
One-Way Audio
One-way audio usually means SIP signaling succeeded but the media path or firewall rules are incomplete. First confirm the network allowlist from the SIP trunk guide:
- You send UDP SIP to
34.44.183.87on port 5060. - You send TCP SIP to
34.55.182.145on port 5060, or TLS to port 5061. - WARP sends signaling to you from
34.58.165.135.
If your firewall accepts only traffic you initiated, inbound signaling from WARP may fail. Allow traffic from 34.58.165.135 to your SBC or PBX. Also confirm your equipment advertises reachable media addresses when it is behind NAT.
SIP 503 and Retry-After
If WARP returns SIP 503 Service Unavailable with a Retry-After header, that usually means your traffic exceeded a calls-per-second limit. Treat this as back-pressure, not as a permanent route failure.
Your equipment should honor the Retry-After value and slow down. If 503s happen during normal traffic, review trunk and account capacity and contact support before retrying aggressively. Repeated immediate retries can make the problem worse.
DTMF Problems
DTMF problems show up when IVRs do not recognize digits or conference bridges miss PINs. WARP supports RFC2833 telephone-events and inband tones. RFC2833 is recommended because it survives codec changes better.
Match the DTMF mode configured on your equipment with the mode expected on the trunk. Test digits in both directions after changing codecs or DTMF settings.
Use Call Statistics
Call Statistics helps confirm whether calls reached WARP and how they behaved. Use it to check call volume, recent call records, trends, and failure patterns.
For a failed call, gather:
- Called number and calling number.
- Approximate timestamp with timezone.
- Direction: inbound or outbound.
- Trunk name.
- SIP response code if your equipment shows one.
- Whether audio, ringing, DTMF, or call setup failed.
Buzz can help interpret call statistics if your role has cdrs:read.
Scopes and API Reference
Number voice routing uses numbers:read to inspect numbers and numbers:write to update routing:
PATCH /v1/numbers/:tn/voiceDELETE /v1/numbers/:tn/voicePOST /v1/numbers/bulk-route
Trunk diagnostics use trunks:read and, for changes, trunks:write:
GET /v1/trunks/:trunk_idGET /v1/trunks/:trunk_id/throttle-stateGET /v1/trunks/:trunk_id/credentials/:cred_id/registrationsGET /v1/trunks/:trunk_id/credentials/:cred_id/calls
Call records use cdrs:read:
GET /v1/cdr/statisticsGET /v1/cdr/detailsGET /v1/cdr/trendsGET /v1/cdr/export