Skip to content
Dialer & Setup

FreePBX Caller ID Configuration Per Outbound Campaign

Presenting the right number to the right market is one of the highest-leverage dials in outbound — here is how to wire it correctly in FreePBX.

1. The Problem with a Single CallerID

Most FreePBX deployments start with one caller ID set at the trunk level and never revisit it. That works for a single-market, single-campaign operation. It breaks the moment you run parallel campaigns targeting different states, provinces, or countries: a single national number depresses answer rates in local markets, and when that number gets flagged it takes every active campaign down with it.

UnlimCall provisions caller ID numbers on demand across 33 live markets — not from a static pool. Each campaign should present a number that looks local to the dialed geography. The provisioning happens at account setup; configuration is entirely on the FreePBX side.

2. Where FreePBX Sets CallerID (Pick One Per Deployment)

FreePBX has five places where CallerID can be overridden, evaluated in this order:

  1. Channel-level SIP header — injected by your dialer software via SIP(callerid) or PJSIP_HEADER
  2. Extension / device — set per extension in the GUI
  3. Outbound route — set in the Route CID field
  4. Trunk — set in the trunk's CallerID field
  5. Asterisk default — whatever is in asterisk.conf

For outbound call centers using a dialer (VICIdial, GoAutoDial, custom AMI/ARI), the dialer software injects the caller ID per call at the channel level. For manual-dial or smaller teams using FreePBX's built-in extensions, set CallerID at the outbound route level with one route per campaign or market.

3. Configuring CallerID at the Outbound Route Level

Navigate to Connectivity > Outbound Routes and open or create a route for each campaign segment.

In the Route CID field, enter the E.164 formatted number provisioned for that market — for example, a US number in the format +1NXXNXXXXXX or just 1NXXNXXXXXX depending on your trunk's expected format.

Check Override Extension if you want this route to stamp its CallerID even when the originating extension has its own CallerID set. For call center deployments where agents should never present their extension number externally, always check this box.

Important: UnlimCall only passes caller IDs that are provisioned on your account. Attempting to present an arbitrary number not associated with your trunk results in the carrier stripping the CallerID or rejecting the call. This is not a restriction UnlimCall imposes — it is a STIR/SHAKEN and carrier policy requirement across the US and Canadian networks.

4. Configuring CallerID via Dialplan (Custom Context)

For finer control — say, selecting a caller ID based on the dialed area code — use a custom dialplan context in /etc/asterisk/extensions_custom.conf:

`` [outbound-callerid-select] exten => _1NXXNXXXXXX,1,NoOp(Selecting CallerID by area code) same => n,Set(CALLERID(num)=${IF($[${EXTEN:1:3} = 212]?12125550100:12025550100)}) same => n,Goto(from-internal-custom,${EXTEN},1) ``

This selects a New York caller ID for 212 area code dials and a DC caller ID for everything else. For 33 markets, extend the conditional chain or load the mapping from a database using func_odbc.

Wire this context into your outbound route by setting the route context to outbound-callerid-select instead of from-internal.

5. STIR/SHAKEN Implications for Caller ID Choice

In the US and Canada, the originating carrier (UnlimCall) signs calls with STIR/SHAKEN attestation. Full A-level attestation requires that your trunk account is the authorized user of the presented CallerID. Numbers provisioned through UnlimCall for your account receive A-level attestation automatically. Numbers you attempt to pass that are not provisioned on your account will receive C-level attestation or none — which downstream carriers flag.

STIR/SHAKEN signing applies to US and CA termination only. For the other 31 markets in the UnlimCall network, caller ID pass-through is carrier-dependent but does not involve STIR/SHAKEN signing. See STIR/SHAKEN for outbound teams for the full picture.

6. Monitoring CallerID Integrity

After configuring per-campaign caller IDs, verify that what leaves your FreePBX is what appears on the called party's screen:

`` asterisk -rx "sip show channels" | grep CallerID ``

Or for PJSIP:

`` asterisk -rx "pjsip show channels" ``

Cross-check by calling a mobile number with a visible screen. If you see your extension number instead of your campaign DID, the route-level CallerID is being overridden by the extension — enable Override Extension on the route.

If the called party sees "Unknown" or "No Caller ID," the SIP From header is not populating correctly. Check your trunk's from_user and from_domain PJSIP settings.

Takeaways

Caller ID configuration in FreePBX has more layers than the GUI suggests. For outbound call centers, route-level CallerID with Override Extension enabled is the cleanest approach for most deployments. Dialplan-driven selection scales further when campaigns span multiple area codes. Either way, only present numbers provisioned on your account — A-level STIR/SHAKEN attestation depends on it, and so does your answer rate.

33 Markets, Caller IDs on Demand

UnlimCall provisions local numbers across 33 markets without requiring a pre-purchased inventory commitment. Seats are $99/month in the US and Canada. See the full network and market coverage and activate at /pricing/.