KnowledgebaseCall Centers & Predictive Dialing (ViciBox® / Vicidial®) › Local-presence dialing on Vicidial® — DID strategies for outbound area-code matching

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:

  1. A pool of DIDs in many area codes — typically dozens to hundreds.
  2. A dialing logic that picks the right DID for each call based on the recipient's area code.
  3. 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:

  1. Import a DID pool into the vicidial_did_list table with mapping from area code to specific DID.
  2. In your campaign settings: Caller ID Override = AGENT_CIDNAME + lookup logic in the dialplan.
  3. 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

« « Back

Powered by WHMCompleteSolution