Overview
An inbound voice agent answers incoming phone calls. To test one, Coval calls your agent, plays the role of the user, and runs the conversation against your test set and persona.
Choose how to connect
Most inbound voice agents just use a phone number. Use a SIP address or SIP trunk if your agent needs to receive extra context with each call — see Passing context to your agent.| Phone number (PSTN) | SIP address / SIP trunk | |
|---|---|---|
| What you enter | An E.164 number, e.g. +12345678901 | A SIP URI, e.g. sip:agent@example.com |
| Identifying simulation calls | By caller number or timestamp (the SIP header is stripped) | Read the X-Coval-Simulation-Id SIP header |
| Pass extra context to your agent | Not available | Yes — e.g. a pre-configured user_id or attributes, via SIP headers |
| Firewall / IP allowlist | Not needed — your carrier handles routing | May be required for your SBC/trunk |
Configure
Enter your phone number or SIP address
Set the
phone_number field to either an E.164 number (+12345678901) or a SIP URI (sip:agent@example.com). It must be a valid phone number or SIP URI.Passing context to your agent (SIP)
The main reason to use a SIP connection is that Coval can include custom SIP headers on each call, carrying values your agent needs to set up the right context — for example a pre-configureduser_id, account ID, or agent and test-case attributes. Your agent reads these headers when the call arrives and resolves the correct account, customer, or configuration for that simulated call. This isn’t possible over a plain PSTN phone number, where carriers strip custom headers.
SIP connections also expose a Wideband Audio (16kHz) toggle that switches from the default narrowband codec (G.711 at 8kHz) to L16 PCM at 16kHz. In practice it rarely makes a noticeable difference — the PSTN leg is narrowband regardless and many carriers transcode audio — so you can leave it off unless you have a specific reason to enable it.
How simulations work
When you launch an evaluation with an inbound voice agent (with your agent’s phone number or SIP address set in a Coval template):- Coval’s simulated user calls your agent’s phone number or SIP address.
- The conversation follows the test set scenarios you’ve defined.
- The simulated user behaves according to the persona you’ve configured.
- Metrics are automatically evaluated after the call completes.
Identifying simulation calls
Coval includes a custom SIP header in every outgoing call so you can correlate incoming calls with their simulation runs:SIP trunk — read the header
If your agent receives calls via a SIP trunk (e.g., Twilio SIP Trunking, Telnyx SIP Trunking, or your own SBC), the header is preserved end-to-end and your provider surfaces it on the inbound call event. How you access it depends on the provider:- Twilio — exposes custom SIP headers as parameters prefixed with
SipHeader_on incoming call webhooks, so the value arrives asSipHeader_X-Coval-Simulation-Id. See Twilio’s SIP documentation. - Telnyx — includes custom SIP headers in the
sip_headersarray on thecall.initiatedwebhook; look forX-Coval-Simulation-Id. See Telnyx’s SIP documentation.
Phone number (PSTN) — the header is stripped
If your agent receives calls on a standard phone number, the call routes through the public telephone network, which strips non-standard SIP headers —X-Coval-Simulation-Id will not reach your application. Identify simulation calls instead by the calling phone number or by matching timestamps in the Coval dashboard.
Using Twilio Programmable Voice over a regular phone number (PSTN)? Use the
pre_call_webhook_url approach instead: Coval notifies your agent of the simulation ID before each call. See the Twilio ConversationRelay guide for setup instructions.Firewall & IP allowlist (SIP infrastructure only)
This applies only if you receive calls on your own SIP infrastructure (SBC, IP-PBX, or SIP trunk endpoint) and restrict inbound traffic by IP. If your agent receives calls on a regular phone number through a cloud provider like Twilio or Telnyx, calls arrive through your provider’s normal flow and no allowlisting is needed.
Signaling IPs (SIP)
SIP signaling initiates calls (the SIP INVITE plus responses). Allow these IPs on ports UDP/TCP 5060 and TLS 5061.| Region | Primary | Secondary |
|---|---|---|
| US | 192.76.120.10 | 64.16.250.10 |
| Europe | 185.246.41.140 | 185.246.41.141 |
| Australia | 103.115.244.145 | 103.115.244.146 |
| Canada | 192.76.120.31 | 64.16.250.13 |
| Asia (Beta) | 103.115.244.158 | 103.115.244.159 |
Media IP subnets (RTP)
RTP carries the audio once the call connects. Allow these subnets on UDP ports 16384–32768.Troubleshooting
| Symptom | Likely cause |
|---|---|
| Invalid phone number | Use E.164 format with a country code, or a valid sip: URI |
| Call connection failures | Verify the number/SIP address is active and reachable |
| Poor audio quality | Check your telephony provider settings |
| Calls dropped with no audio / immediate hangup | Missing firewall allowlist entry (SIP infrastructure) — see above |
| Timeout issues | Adjust agent response-timing configuration |