Local-presence dialing on Vicidial® — DID strategies for outbound area-code matching
"Local presence" means the caller ID your prospect sees has the same area code as their number — a 415 area code recipient sees an inbound call from a 415 area code. Operators routinely report higher pickup rates with matched area codes than with random caller IDs (often substantially higher); the specific lift varies by industry, time of day, and recipient demographics. This article covers the implementation patterns for Vicidial® / ViciBox®.
The setup
You need:
- A pool of DIDs in many area codes — typically dozens to hundreds.
- A dialing logic that picks the right DID for each call based on the recipient's area code.
- Inbound routing for those DIDs so callbacks land somewhere reasonable.
DID sourcing
Carrier pricing changes — check the provider's current rate page before committing. As of this article's update:
- VoIP.ms: ordered by area code. Lots of area-code coverage. Among the cheapest per DID for large pools.
- Telnyx: programmatic search/order via API, useful for fully automated pool provisioning.
- Bandwidth.com: contracted pricing; their DID inventory is the largest among the US-focused carriers.
- Bulk DID resellers: dialer-targeted vendors who sell pre-rented pools — watch the STIR/SHAKEN attestation level (see below).
Plan size: for full US coverage by area code (~280 area codes), you typically want at least 1-2 DIDs per area code you call into. Bigger pools (5-10 per code) help if you're worried about per-DID call frequency triggering carrier flagging.
Vicidial implementation: per-lead callerID
Vicidial supports area-code-matched caller ID via the "alt_phone_field" or via list overrides. The simplest path:
- Import a DID pool into the
vicidial_did_listtable with mapping from area code to specific DID. - In your campaign settings: Caller ID Override =
AGENT_CIDNAME+ lookup logic in the dialplan. - Vicidial-side AGI or dialplan extension queries the DID pool for an area-code match on each outbound call, sets the outbound CallerID accordingly.
For a simpler approach (less DB heft, more dialplan):
; In extensions.conf, hook into the outbound campaign macro
exten => _NXXXXXXXXX,1,Set(LOCAL_PRESENCE=${SHELL(/usr/local/bin/lp-lookup.sh ${EXTEN:0:3})})
same => n,Set(CALLERID(num)=${LOCAL_PRESENCE})
same => n,Dial(SIP/trunk/${EXTEN})
Where lp-lookup.sh queries your DID pool table for an area-code match:
#!/bin/bash
# /usr/local/bin/lp-lookup.sh — return a DID matching the requested area code
AREACODE="$1"
mysql -uvicidial -ppass -e "SELECT did FROM did_pool WHERE areacode='$AREACODE' AND active=1 ORDER BY RAND() LIMIT 1" -N -B asterisk
Falls back to a default DID if no match (you'll want a sensible fallback for unrecognized area codes).
Inbound routing for the DID pool
When a recipient calls back the local-presence DID, you have to do something with that call. Options:
- Route to your main inbound queue. Simplest. Caller doesn't know they called a different number than the one they're returning; they just hit your customer-service queue.
- Route via DNIS lookup to the dialer agent who called. "Press 1 to be connected to the agent who called you." More complex, often perceived as suspicious.
- Route to the campaign's owning team. Each DID is associated with a campaign; inbound on that DID hits that campaign's inbound queue.
Pattern most operations use: simple route to the main inbound queue, since recipients calling back are typically calling about the outbound contact, not a specific agent.
Carrier flagging
Carriers detect suspicious outbound patterns. A single DID that places thousands of outbound calls per day is a flag. Local-presence dialing's whole purpose is to spread load across many DIDs — well-designed pools spread per-DID call volume to thousands or tens of thousands of calls per month per DID, not per day, reducing flagging risk.
Vicidial's "Maximum Calls" per CID feature can cap per-DID volume:
- Per campaign, set "Maximum Outbound Calls per CallerID Number per Day" to a reasonable number (say, 100 or 200 per DID per day).
- When a DID hits the cap, Vicidial rotates to the next DID in pool.
- Spreads risk across the pool; helps avoid carrier blocking.
STIR/SHAKEN considerations
STIR/SHAKEN attestation requires the caller to legitimately own (or be authorized to use) the calling number. Local-presence DIDs that you've purchased and assigned to your operation typically attest properly (Level A or B) IF your carrier supports it. Some local-presence resellers' DIDs attest at Level C (lowest) which leads to spam-likely tagging on recipient phones.
If you're seeing low pickup rates AFTER going to local presence, check the STIR/SHAKEN attestation level — your DIDs may be tagged "Spam Likely" because of low attestation.
TCPA / state regulation
Local-presence dialing doesn't change your TCPA obligations. You still need:
- DNC compliance — recipient on the federal DNC list or your own internal DNC = don't call.
- Time-of-day compliance per the recipient's local time (not yours).
- Disclosure rules per state (some states require disclosure that the caller ID is not the actual return number).
See the TCPA / recording compliance article for the regulatory baseline. Local-presence is a deliverability tool, not a compliance workaround.
Also Read
Powered by WHMCompleteSolution