6. FreePBX Modules and Call Routing

FreePBX contains multiple modules and call routing options that allow for phone systems to be put together with practically any degree of complexity. Here follows a brief description of each:


An Announcement in FreePBX simply plays a prerecorded message to the caller and then routes the call to the specified destination. Within the configuration interface you’ll notice options to name the announcement, select which recording to use, set announcement repeating, and a few other lesser used settings. You can then use the Set Destination drop down to specify where the call should go after the announcement finishes. If the call should end after the announcement, then select Terminate Call and Hang Up.

Call Flow Control

This section allows you to set up feature codes (or star codes) to switch call routing between two arbitrary destinations. You set the Call Flow Control as the destination and depending upon the feature code status, it will route to one of two destinations. Basically it’s a glorified A/B switch. In practice this is extremely useful for setting up things like holiday and inclement weather overrides so that the customer can quickly and easily change call routing without having to open a support ticket. A password can be specified for security purposes.

Call Recording

A Call Recording module can be used to force recording behavior for all calls routed through it. For instance if you have an Inbound Route that routes directly to extension 100, you would set up a Call Recording module with extension 100 as its destination and then route the Inbound Route to the Call Recording module instead. This is useful if you want to record all calls that route to a particular ring group or queue and don’t want to bother setting up the recording options for every extension. That said, Call Recording modules are rarely used in practice here at Ringfree.


Conferences are a final call routing destination (meaning you can’t route elsewhere from one) that allow multiple parties to communicate simultaneously. Adding a new conference sets up a pseudo-extension that can be set as a routing destination, can be dialed directly from within the phone system, or that users can transfer call to. All calls that eventually end up routed to the conference will be able to communicate with each other. A PIN can be specified to restrict access to the conference. Additionally there are options for things such as defining a max user count and for recording the conference.


A Directory is an intermediary destination that assists callers with identifying an extension and then transferring them to that extension. The directory prompts callers to dial the first three letters of the desired extension’s Display Name and will identify any matching extensions based on the DTMF tones used. Extensions can easily be added or removed from directories and callers will only have access from a directory to those extensions specified. Alternate destinations can be specified for situations where the caller provides invalid or no input when prompted. Directories are most commonly used as IVR (or auto attendant) options.

Follow Me

Follow Me is a “per extension” set of options that allow for advanced call routing and forwarding options. It can be enabled or disabled for any given extension. Follow Me basically allows you to specify an Initial Ring Time where calls to the extension will ring normally. Following this, you can specify a list of any number of extensions or external phone numbers to ring for an arbitrary amount of time. Additionally you can specify a ring strategy which will define how the extensions and external phone numbers on the list will ring (such as all of them ringing at the same time or them ringing one by one until someone answers).

Additionally you can specify a recording to be played prior to the call being routed to the list, a Caller ID prefix, and a custom ring tone. There are also call confirmation options that allow the recipients to screen incoming calls. You can then define call routing for situations where there is no answer. For instance you can have it follow the normal extension behavior (which by default routes to the extension’s voicemail) or you could have it route to another destination such as an announcement or a ring group.

End users have access to some Follow Me settings through the user interface they can access with their extension and voicemail password. Because of this and the overall versatility of the module, it’s heavily used here at Ringfree and is frequently a part of normal troubleshooting.


An Interactive Voice Response (or IVR, often referred to as an “auto attendant”) allows you to set up a recording that prompts the caller for DTMF input and will route the call to any number of arbitrary destinations based on that DTMF input. Think of a “press 1 for sales, press 2 for support” sort of thing. Additionally alternate destinations can be specified for invalid or no caller input and the IVR can be set to allow callers to dial extensions directly.

Very often customers will have multiple IVRs for different circumstances (open hours, closed hours, holidays, etc) and IVRs can be set to have other IVRs as some of their destinations thus creating extremely complex call routing trees. IVR configuration is amongst the most straightforward of FreePBX’s options.

Misc Destinations

This module is primarily used in conjunction with custom development to create new destinations outside the scope of what FreePBX offers by default. This feature is practically never used within Ringfree.

Paging and Intercom

This module, often referred to as Off-Network Paging, allows you to specify a group of extensions to be the recipients of a call with one-way audio. It is referred to as Off-Network Paging because many models of phones support Multi-Cast Paging which allows paging functionality over the same network without having to communicate with the PBX. In almost all cases, Multi-Cast is preferred over Off-Network, however there are some cases where this needs to be implemented due to multiple customer locations, decentralized work environments, and/or remote employees. Off-Network Paging does have a Duplex option which enables two-way audio.


Queues are a means of distributing incoming calls to a list of agents or active extensions. Each queue has a ring strategy which defines the means and order of which incoming calls are routed to each agent. Agents can be either static meaning that they are always active in the queue or dynamic meaning that they can be logged in and out using a feature code. There are many advanced configuration options beyond the scope of this article including agent restrictions, volume adjustments, and caller position announcements. Queues are most useful in call centers and other high volume environments and in situations where you require more granular control over call routing than what is offered by a Ring Group (discussed below).

Ring Groups

Ring Groups are a way of directing an incoming call to multiple extensions. The specifics regarding how each extension rings can be specified by a ring strategy. While configuring a ring group you’ll notice options to prepend an announcement, set specific hold music, set up a Caller ID prefix and/or a custom ring tone, enable/disable call recording, and other various functions. Of note is the Skip Busy Agent option which will tell the ring group to skip extensions already on a call that have call waiting enabled. Finally you can specify a destination for situations where no one in the group answers the phone.

Set Caller ID

The Set Caller ID module is basically an inline filter that allows you to arbitrarily rewrite caller ID information for incoming calls. This is useful in situations where you could have a call routed to an extension in multiple different ways, but want to track how exactly the call was routed.

Time Conditions

Time Conditions are essentially an A/B switch that automatically switches based on date and time information. The date and time information is stored in a Time Group (discussed below). The Time Condition allows you to set two destinations, one for when the current time matches the rules in the Time Group, and a second for when the current time does not match the rules in the Time Group. You can also enable an override feature code for when the customer wants to manually override the current status of the Time Condition.

Time Groups

Time Groups are sets of rules used by Time Conditions. Within the configuration interface you can specify start and finish details for specific times, days of the week, days of the month, and entire months. Each Time Group also allows you to specify multiple rules for each so it would be possible to set a start time for 8:30 am, finish at 12:00 noon, start again at 1:00, and finish at 5:30 (or whatever else the customer is in need of). Time Groups and Time Conditions are exceptionally useful and are in place in the majority of customer PBXs here at Ringfree. Because they support specific months and days of the month, you can even use them certain holiday conditions (though there are usually better ways of handling holidays).


FreePBX has a variety of other modules available, some of which are occasionally in use in Ringfree customer PBXs. It’s beyond the scope of this article to cover every single one of them, but they are generally well documented online. Also, John Knight is a fantastic resource for information on various FreePBX modules.