3CX CFD Solution: Check queue for logged in agents before sending call.

Status
Not open for further replies.

GI-YD

Forum User
Joined
Apr 23, 2018
Messages
25
Reaction score
2
As everyone knows, when you only use the queues in 3CX, and no agents are available or logged in to a queue (apparently considers agents available if they are logged in and currently all on calls), the default treatment happens: There are no available agents to take your call at this time (or a variant of this), and the call ends, which is a horrible consumer experience.

There is a solution to this, and it can be made more fancy with a business hours check but I leave that up to you.
1. I use the current 3CX CFD V: 16.6.53.0
2. create a new project
3. create a variable on the project called: LoggedIn
4.assign initial value of 0
5. create a Loop
6. in the Loop:
6.1 drop a GET QUEUE EXTENSIONS component into the Loop
6.2 modify it with your relevant queue extension number (use a String variable): "1234"
6.3 Query Type should be LoggedIn
7. drop an ASSIGN A VARIABLE component below
7.1 assign your LoggedIn variable you created on the project
7.2 your expression is: GET_LIST_ITEM_COUNT(GetQueueExtensions.ExtensionList)
7.3 this COUNTS how many extensions were returned in the list from the query of logged in agents and puts the result into your LoggedIn variable
8. drop a CREATE A CONDITION component below this
8.1 in the left branch, drop a TRANSFER component
8.2 the Transfer Call to value should be your relevant queue extension number (use a String variable): "1234"
8.3 in the right branch, I have a PROMPT PLAYBACK component which plays some hold music that is 2-3 minutes long (or whatever duration you want it to be), followed by: we are currently experiencing high call volume, please stay on the line for the next available rep.
9. depending on the outcome of the query, the call can either go through to the queue, or loop back up and do the queue query again.
10. save your project.
11. in the 3CX management console you want to load the CFD call flow, and then create an inbound rule for one of your available numbers to point to the CFD flow.

Now what should happen is this:
1. the consumer calls in to the number you have assigned to the call flow in your inbound rules
2. the call flow checks the queue
3. if there is 1 or more agent(s) logged in, the call will go to the queue.
4. if there are no agents logged in to the queue or in Available status, the high call volume treatment will play.
5. after the high call volume treatment is done, the query will loop again.

You can embellish this more by putting using a DATE & TIME CONDITION inside or outside of the loop, etc, etc.
PS: if you rename any of your components, make sure you adjust the name for any of the references to it in the expressions above.
PPS: I did just test my example again, and it still works as above:
1. test agent was in the Web App, available but not logged into the queue (the little Q was greyed out) - caller experienced high call volume treatment
2. test agent was in the Web App and on a call - caller went in to the queue and experienced the queue's hold music
3. test agent was in the Web App, available and logged into the queue (the little Q was blue) - caller got through to the test agent.
 
  • Like
Reactions: NickD_3CX
Status
Not open for further replies.

Forum statistics

Threads
111,972
Messages
590,065
Members
164,887
Latest member
KrishnaMR