FreePBX Inbound Routes: DID Mapping, Time Conditions, and Destinations
Screenshots + clean steps to configure this FreePBX module in a production-safe way.
FreePBX Inbound Routes: DID Mapping, Time Conditions, and Destinations
Inbound Routes are the entry gate of FreePBX. When someone calls your business number (DID), FreePBX matches the called number (and optionally CallerID) and then sends the call to a destination like: IVR, Queue, Extension, Conference, Announcement, or a Time Condition.
- DID mapping = “When this number is called, go here.”
- Destination = the caller journey (IVR/Queue/etc.).
- Production best practice = Inbound Route → Time Condition → (Open: IVR/Queue) (Closed: voicemail/announcement).
Where Inbound Routes Fit in the Call Flow
SIP Provider / PRI / GSM Gateway
↓
Trunk (FreePBX)
↓
Inbound Route (DID/CID match)
↓
Destination (IVR / Queue / Extension / Conference / Announcement / Time Condition)
↓
Agent / Bot / Voicemail / Callback
If inbound calls are failing, most of the time it’s one of these: trunk isn’t delivering DID the way you expect, your inbound route doesn’t match the DID format, or destination/fallback is incorrect.
Open Inbound Routes
Go to: Connectivity → Inbound Routes
How matching works (simple): FreePBX tries to match the incoming DID/CID to a route. If you create very specific routes (DID + CID), only those calls will match. If you keep CID = “Any”, the route matches all callers for that DID.
Step 1: General Tab (The Core Fields That Matter)
When you click edit on a route, the General tab contains the fields that decide what number you are matching and where you send the call.
Field-by-field (based on what is visible in the screenshot)
-
Description:
a human-friendly label. Use the DID itself or purpose, e.g.
+911144930004 - Main. -
DID Number:
the called number you want to match (e.g.
+911144930004). This must match the format your trunk delivers. - CallerID Number: set to ANY (or blank) for normal use. Only lock it down if you intentionally want CallerID-based routing.
- CID Priority Route (Yes/No): controls whether CallerID-based matching should take priority when it exists. If you don’t use CID-specific routes, keep your setup simple (DID + ANY).
- Alert Info: rarely needed. Used in special SIP interop cases.
- Ringer Volume Override: optional. Useful if you need louder/softer ring behavior on some endpoints.
-
CID name prefix:
adds a prefix to the CallerID name shown on phones. Example:
[MAIN]so agents instantly know which DID was called. -
Music On Hold:
used if the chosen destination causes waiting/hold behavior. Keep
Defaultunless you have a reason. - Set Destination: the actual target (IVR/Queue/Conference/Announcement/Extension/etc.). In the screenshot it is set to Conferences → 1234 Main Conference.
Production tip: name + prefix strategy
- Description: store DID + purpose (easy to search later).
- CID name prefix: show DID type to agents, e.g.
[SALES],[SUPPORT],[MAIN].
Step 2: Advanced Tab (Call Signaling Behavior)
The Advanced tab is about low-level behavior like ringing signaling and answering rules. Most people leave these defaults unless they have a very specific trunk/provider behavior to satisfy.
What these options generally mean
- Indication Zone Country: controls tones (ring/busy/congestion) country style. Keep
Defaultunless needed. - Signal RINGING (Yes/No): whether Asterisk sends a ringing indication early. Usually keep Yes.
- Reject Reverse Charges: rarely used; depends on carrier features. Most setups keep defaults.
- Force Answer: forces the call to be answered by the PBX before sending to destination (careful: impacts billing/answer supervision).
- Pause Before Answer: inserts a short delay before answering (used for some carrier/recording interop cases).
Safe approach: change Advanced settings only if you have a measured issue (carrier requires it, recording needs it, or answer supervision problems).
Step 3: Privacy Tab (Caller Privacy / Screening)
The Privacy tab controls whether you run a privacy manager flow. This is used when you want to screen/handle callers with blocked/anonymous CallerID.
What noted fields typically do
- Privacy Manager: if enabled, FreePBX may prompt callers for information or apply rules for blocked CallerID (depends on module behavior).
- Max attempts: how many retries before sending to a fallback behavior.
- Min Length: minimum digits expected in caller-provided data (for screening flows).
If you don’t explicitly need screening, keep Privacy Manager No to avoid unexpected caller experience.
Step 4: Fax Tab (Detect Faxes)
If your DID might receive fax calls (legacy businesses), FreePBX can attempt to detect fax tones. If you do not use fax at all, keep it off to reduce complexity.
- Detect Faxes = Yes: only if you truly route faxes somewhere.
- Detect Faxes = No: recommended for modern voice-only setups.
Step 5: Other Tab (Recording, Lookup, Language)
The Other tab is where you control features like allowlist screening, call recording policy, caller name lookup, and language behavior.
How to think about these fields
- Enable Allowlist Screening: if enabled, only trusted callers (allowlist) are treated differently. Use only if you maintain allowlists.
- Call Recording (Force / Yes / Don’t Care / No / Never): set policy per DID. Example: Force for support lines, Never for sensitive lines.
- CID Lookup Source: choose a lookup source if you want caller names to be resolved (CRM/phonebook sources if configured).
-
Language:
set to
Defaultunless you run multi-language announcements/IVRs and want this DID to default to a language. - Enable Superfecta Lookup + Superfecta Scheme: controls caller ID name resolution using the Superfecta module (if installed/configured).
Recommended Production Pattern: Inbound Route → Time Condition
Even though the screenshots show direct destinations (like Conference), the most stable production design is:
Inbound Route (DID)
→ Time Condition (Business Hours)
→ Open: IVR or Queue
→ Closed: Announcement + Voicemail / Callback
- Open hours: customers reach the right team fast.
- Closed hours: customers hear a clear message + can leave voicemail or request callback.
- No silent drops: every path ends somewhere intentional.
Troubleshooting (Most Common Real-World Issues)
1) Calls hit the wrong route (or don’t match)
- DID format mismatch (provider sends
+91...vs0...vs last digits only) - You accidentally used CID filtering (CallerID not matching)
- You forgot Apply Config
2) Call reaches destination but user experience is bad
- IVR timeout/invalid not configured (loops or drops)
- Queue failover not configured
- Ring group “no-answer destination” missing
3) Recording / lookup behaves unexpectedly
- Recording set to “Don’t Care” while extension has different policy
- Superfecta enabled but no scheme/source configured
CLI quick checks when needed:
asterisk -rvvvvv
pjsip set logger on
; make an inbound test call
pjsip set logger off
Production Checklist
- DID Number matches trunk-delivered format exactly
- CallerID Number left as ANY unless intentionally required
- Destination is intentional (IVR/Queue/Time Condition)
- Recording policy decided per DID (Other tab)
- Language set only when you use multi-language routing
- Test externally with real mobile numbers
Next recommended articles after this: FreePBX IVR, FreePBX Queues, and FreePBX SIP Settings (NAT/RTP) to make the entire inbound journey stable end-to-end.
Want to see API-driven CRM + Telecom workflows in action? Try the WhatsApp bot or explore the demos.
Comments (0)
Be the first to comment.