Carrier trunk sizing for predictive dialing — answer-rate math, port count, carrier shortlist
Picking a carrier and sizing your trunk is the part that determines whether predictive dialing on Vicidial® actually works for your operation, or whether you spend the campaign apologizing to agents about dropped calls. This article covers the math, the carrier shortlist, and the configuration patterns that survive contact with a real campaign.
The two numbers that matter
Forget "how many agents do I have." The numbers that drive trunk sizing are:
- Concurrent dial attempts — how many calls Vicidial fires at once to keep a given agent count busy. With a dial level of 2.5 and 10 agents, you're firing 25 calls at once. With dial level 3.0 and 20 agents, 60. This is what the trunk needs ports for.
- Answered concurrent calls — of those dial attempts, how many connect. Determined by your dial level times your answer rate. 25 attempts × 22% answer rate = ~5.5 connected calls at any moment. The carrier bills per connected minute, not per dial attempt.
Trunk port count is sized by the first number; carrier monthly cost is driven by the second.
Capacity math, worked example
Operation: 20 agents, predictive dialing B2C, expected answer rate 18%, target abandon rate <3%.
- Vicidial's auto-dial level lands around 3.2 for those parameters (it floats; this is steady-state).
- Concurrent dial attempts: 20 × 3.2 = 64 ports required from the carrier.
- Connected calls at any moment: 64 × 18% = ~12 simultaneous billable channels.
- Carrier billing: 12 channels × 60 min/hr × 8 hr × $0.0085/min × 21 days ≈ $1,028/month in usage.
Most carriers price per-minute regardless of port count and bill fractional minutes (usually 6-second increments after a 6-second initial). Some have a "channel commitment" for high-volume customers that drops the per-minute rate; ask about it once you're at >100,000 minutes/month.
Carrier shortlist
The carriers that handle predictive-dial traffic without grief (complaints, attestation downgrades, abrupt cancellation for "telemarketing"):
| Carrier | Notes |
|---|---|
| Telnyx | Single-channel pricing, capacity scales without ceremony. Requires KYC + traffic profile attestation at signup; be honest about predictive dialing — they'll provision you differently. STIR/SHAKEN attestation is automatic once you verify ownership. |
| Flowroute | Longstanding home for outbound call centers. More tolerant of high call volume than retail-focused carriers. Pricing sits slightly higher than Telnyx; the operational stability is the trade. |
| VoIP.ms | Cheap per-minute. Best for low-to-medium volume (under ~25 simultaneous channels) and tolerant of less-formal traffic profiles. Has tripped some operators on high-burst outbound; ask about your specific use case before committing. |
| Bandwidth.com | Wholesale carrier. Sign-up friction is higher and minimums are real; if you're at 500,000+ minutes/month and want sub-cent rates, worth the conversation. |
Avoid retail-focused carriers (Vonage, RingCentral, 8x8) for predictive — they're aimed at hosted-PBX traffic and your account will be flagged or canceled fast.
One trunk or many?
Single trunk to one carrier is the simplest configuration and fine for most operations under ~50 ports. Above that, the failure modes that matter are:
- Single carrier outage — your dialer is idle until they recover. Two-carrier active/standby with Vicidial's Server-to-server trunks rule gives you a fallback.
- STIR/SHAKEN attestation degradation — if one carrier downgrades your attestation due to complaint volume, having a second carrier with a different attestation profile preserves your answer rate.
- Per-state coverage — some carriers route certain NPA-NXX prefixes through less-favored upstreams. Splitting traffic by region (Telnyx for east, VoIP.ms for west, etc.) sometimes squeezes out an extra 2-3% answer rate. Track in Vicidial's per-carrier stats.
Vicidial trunk configuration sketch
Admin → Servers → Modify Server → Manager Send/Receive: enable
both. Then Admin → Trunks (or, more reliably, drop a custom
sip-telnyx.conf directly):
; /etc/asterisk/sip-telnyx.conf
[telnyx-out]
type=peer
host=sip.telnyx.com
context=trunkinbound
disallow=all
allow=ulaw
allow=alaw
fromuser=<your-tn-username>
fromdomain=sip.telnyx.com
username=<your-tn-username>
secret=<your-tn-secret>
insecure=invite,port
canreinvite=no
dtmfmode=rfc2833
sendrpid=pai
Wire that into Vicidial's Carriers as a server-side
carrier, dial prefix 9 or whatever your campaign uses, and
set the SIP/IAX field to SIP/telnyx-out.
Reload Asterisk: asterisk -rx "sip reload".
Verification before campaign goes live
asterisk -rx "sip show peers"— your carrier peer should showOK (Nms)with a sane latency (under 80ms US-coast to most US carriers).- Place a single manual call through the Vicidial agent interface to your own cellphone. Should ring within 5 seconds.
- Look at the CDR: Admin → Reports → Real-time main report. Verify caller ID and dial time match expectations.
- Place 5 simultaneous test calls (manual or with the dial-level Test mode). Verify all complete; no "circuits busy" rejections.
- Slow-ramp the actual campaign: dial level 1.5 for 30 minutes, watch abandon rate and carrier responses, then let Vicidial autoscale.
When the carrier rate-limits you mid-campaign
Symptom: agents go idle, "Carrier Channel Failure" rows show up
in the CDR, asterisk -rvvv shows 503 Service Unavailable
or 486 Busy Here from the carrier despite your trunk having plenty
of room. Cause: per-CPS (calls-per-second) cap or per-account
concurrent-call ceiling at the carrier.
Fix in Vicidial: Campaign → Drop Call Seconds and Dial Timeout nudged down forces faster turnover so you stay under the carrier's ceiling. Better fix: call the carrier and raise the limit, which usually requires sending them a few months of clean traffic first.
Also Read
Powered by WHMCompleteSolution