Predictive dialer for call centers
In the call center world, a predictive dialer sometimes plays an important role in speeding up outbound calls automatically. These calls can adjust to the available agents, making them effective and efficient.
In this article the author will explain how to build a predictive dialer using the Call Flow Designer provided by 3CX.
With this software, calls are placed outbound automatically by the system and, once connected, are routed to the internal queue and adjusted to the number of available agents so that no agent sits idle.
Note that this dialing starts working after the queue service is activated.
Therefore a condition needs to be created to decide whether it is the right time to make calls, for example based on certain hours and days.
Steps to build a predictive dialer:
First open the Call Flow Designer application provided by 3CX, then choose new project. Choose the folder where you want to save it and enter a name for the project.

Open the new project. In this case we will name it “PredicitveDialerDemo”, then go to the project explorer, right-click the project node, and choose new Dialer. Rename it to “Main Dialer”. Select the new dialer object in the Project explorer window and the properties window to show the dialer properties.

The dialer can be configured in 2 modes:
Power Dialer: calls are made at a fixed speed
Predictive Dialer: Makes the calling speed adjust automatically by taking into account the number of agents available in the queue at a given time.
In this case we will use predictive dialer mode by configuring the 2 properties below under the “Predictive dialer” section
Optimization: here we define whether we want to optimize the dialer for agents or for customers.
Queue: this is the queue extension number to monitor.
As soon as the 3CX Queue starts, dialing will start and check how many agents the queue has and how many of them are available.
The system will start making calls up to the limit set by the optimization mode from the previous configuration. Depending on the optimization setting, more or fewer calls will be made. Here is how it works:
- Optimize for agents: the idea is to keep agents online, reducing the time when they are not handling any calls. The system (dialer) will make calls, trying to keep every agent on a call at all times.
- This causes some calls to wait in the queue, so some customers may have to wait a few seconds to be connected to an agent, but the system will try to reduce the number of calls waiting in the queue as much as possible.
- Optimize for Customers: here the customer is connected to an agent immediately and never waits in the queue.
- This will cause agents to have more idle time than the previous approach, but the system makes sure customers are helped by an agent right away.
Step two: Check whether it is time to make calls.
For this example the system will make calls only Monday to Friday between 9 am and 5 pm. To achieve this, we will use the new “Date & Time Condition”.
Take it from the toolbox and place it in the designer. Rename this new component to “checkTimeToCall”.
This component only needs one branch, “timeToCall”. This branch will be executed when it is time to make calls.

Step three: get the number to call from the database and place the call.
For this example we will get the number to call from a database. Assume that the query will return the next number to call, or an empty string if there is no number to call at that moment.
We need to use the database Access component to execute the query. The configuration is as follows:

The query will return a single value, so we use the “Scalar” statement type. Please note that you need to edit this query and database setting according to your actual environment.
Once we have the database access component, we need to check whether there is a number to call or not. This needs a “Create condition” component to verify this case.
We only need one branch in this condition to check whether there is a number available to dial. The condition property can be set as follows:
GREAT_THAN (LEN (TRIM (getNextNumber.ScalarResult)), 0)
When the condition is met, the system will have a number to call. In this case the system will make a call using the “Make call” component configured with the value returned from the original database and the queue extension number (in this case using the virtual queue extension “800”) as follows:

and an example of the dialer flow will look like this after the update:

Step four: build and upload to the 3CX system.
Once the project is ready, we only need to compile it and upload it to the 3CX system with the following steps:
- Open the build menu > Build all, and CFD will create the file: “PredictiveDialerDemo.tcxvoiceapp”
- Open the 3CX management console and choose Queue, create a queue with number 800 and check the “Voice apps” menu option and upload the file created earlier.
- Save the changes and the dialing is ready and will start making calls once the queue manager service starts.



