
ViciDial Carrier Configuration Walkthrough: Every Field Explained
Most ViciDial operators copy a carrier config from a forum post and move on. When something breaks — a 403, a one-way audio call, a caller ID that does not match — they have no systematic place to start. This walkthrough covers every meaningful carrier field in ViciDial Admin and explains what each one actually controls on the wire.
The Three Layers of a ViciDial Carrier
A ViciDial "carrier" is a composite object that spans three system layers:
- The ViciDial Admin carrier record — high-level routing and campaign linkage
- The Asterisk SIP/PJSIP peer or endpoint — the actual SIP signaling configuration
- The dial-plan context — which Asterisk dialplan extension routes calls to this carrier
All three must agree or calls fail silently or with cryptic SIP errors. Most configuration mistakes are mismatches across these layers.
Layer 1: ViciDial Admin Carrier Fields
Navigate to Admin → Carriers → Add/Modify Carrier.
Carrier Name: Internal label only — choose something descriptive (e.g., unlimcall-us-flat-rate). This name appears in campaign drop-downs and CDRs.
Protocol: Set to SIP. ViciDial also supports Zap/Dahdi for PRI hardware; ignore those for IP trunks.
Carrier Description: Free text. Document the account ID, provisioning date, and any special routing notes here. ViciDial does not version-control carrier records.
Carrier Server IP: The SIP host your calls egress to. This is the SIP proxy or registrar address from your carrier's portal — for UnlimCall this is in your account dashboard. Do not hard-code an IP here if you are using a hostname; DNS resolution happens at the Asterisk layer.
Active: Y/N toggle. Setting to N stops new calls from routing over this carrier but does not drop calls already in progress.
Account / Password: Used only for registration-based authentication. For IP-authenticated trunks (recommended for static server environments), leave both blank and whitelist your server's egress IP through the carrier portal. IP auth eliminates SIP REGISTER traffic and the associated re-registration timeout failures.
Outbound CallerID: A trunk-level default. In practice, override this at the campaign level. The trunk-level value is a fallback and should be a real, provisioned number — not a fake or unverified CID — because some carriers inspect the From header at ingress.
Layer 2: Asterisk Peer/Endpoint Configuration
ViciDial generates portions of sip.conf or pjsip.conf dynamically, but direct edits are often necessary for trunks. Relevant fields:
host / remote_hosts: The SIP proxy address. Match exactly what is in your carrier dashboard.
insecure: For IP-auth trunks, set insecure=port,invite. This tells Asterisk to accept SIP from the carrier without requiring a matching registered peer. Without this, inbound carrier signaling (like 200 OK responses to your INVITEs) gets rejected.
dtmfmode: Use rfc2833. Most modern SIP carriers support RFC 2833 in-band DTMF; inband introduces quality issues and info is unreliable across NAT.
disallow / allow: Always start with disallow=all, then explicitly allow ulaw,alaw. Add opus only if your Asterisk build includes the codec_opus module and your carrier supports it. G.711 (ulaw = µ-law for North America, alaw = A-law for Europe) is universally supported and adds zero transcoding CPU overhead on ViciDial servers.
qualify: Set to yes or a millisecond threshold (e.g., qualify=5000). Asterisk sends periodic OPTIONS pings; if the peer does not respond within the threshold, it marks the peer unreachable. Necessary for detecting trunk outages before they affect campaigns.
nat: Set nat=force_rport,comedia if your ViciDial server is behind NAT. For bare-metal servers with a public IP, nat=no is cleaner.
Layer 3: Dial-Plan Context
ViciDial routes outbound calls through an Asterisk dial-plan context, typically [from-internal] or a custom context defined in extensions.conf. The relevant dial-plan variables:
DIAL_OUT: ViciDial sets this variable with the full E.164 number and dial prefix. Ensure your Dial() application uses the correct SIP peer name — it must match the peer or endpoint name defined in sip.conf/pjsip.conf.
Dial Prefix in ViciDial: If your trunk expects 11-digit dialing (1NXXNXXXXXX for North America), set the prefix to 1. If it expects 10-digit, leave blank. Mismatched prefixes produce 404 Not Found or 484 Address Incomplete from the carrier.
Codec Negotiation Failures: The Most Common Cause of One-Way Audio
If agents can hear the called party but the called party cannot hear agents (or vice versa), the cause is almost always a codec or RTP path mismatch. Checklist:
- Confirm
ulawis allowed on both the inbound and outbound peer/endpoint. - Check that your server's RTP port range (default
10000–20000in Asterisk) is open in your firewall for UDP traffic from the carrier's RTP relay. - If your ViciDial server is behind NAT, confirm
externiporexternhostis set insip.confso the SDP answer contains a routable IP, not a RFC1918 address.
Validating the Configuration End-to-End
After saving all layers, run a diagnostic sequence:
asterisk -rx "sip show peer <peername>"— should reportStatus: OKand the carrier IP. A reachability ofUNKNOWNmeans qualify OPTIONS are not getting responses; check the SIP host and firewall.- Place a manual test call:
asterisk -rx "channel originate SIP/<peername>/+12025550100 extension s@default" - Check
/var/log/asterisk/fullfor the SIP trace. A clean call shows INVITE → 100 Trying → 183/180 → 200 OK → ACK → audio → BYE → 200 OK.
For flat-rate network troubleshooting specific to the UnlimCall stack, the ViciDial integration page has carrier-specific notes. For understanding how caller ID verification flows through your config, see STIR/SHAKEN explained for outbound call centers.
Takeaways
- ViciDial carrier config spans three layers — Admin record, Asterisk peer, and dial-plan. All three must be consistent.
- Use IP authentication over registration for static servers; it is simpler and more reliable.
disallow=allthenallow=ulaw,alawis the safe codec baseline — do not skip the disallow step.- One-way audio almost always means RTP path or NAT misconfiguration, not a SIP signaling problem.
qualify=yesis non-optional; without it, Asterisk does not detect dead trunks.
See Exact Per-Seat Pricing for Your Floor
Every configuration detail above applies regardless of carrier size. What changes on a flat-rate network is the economics: unlimcall.com/pricing/ shows per-seat costs across all 33 live markets. Pair the pricing with the network coverage map to confirm your target countries before provisioning.