Multiple ACD Queues: Deliver calls FIFO regardless of queue

I’m running FreePBX 5.211.65-14 and Asterisk 11.12.

I have an ACD environment with 7 different queues. All queues, for the most part, have the same dynamic extensions assigned, except for 2 that have 1 or 2 additional extensions. The issue I’m experiencing is that calls waiting for a shorter amount of time in one queue are being delivered to agents before calls that have been waiting longer in another queue. I suppose this is somewhat logical because each queue is configured independently and can have their own settings (autofill, weight, ring strategy, etc.). However all of these queues are configured exactly the same in freepbx:

  • rrmemory as the strategy
  • Queue weight = 0
  • Skip Busy Agents = Yes
  • Wrap: 1 minute

I’ve tried and do use autofill, but from what I’ve read that just helps deliver more than one waiting call simultaneously if there is are multiple agents available to receive a call.

I guess in layman’s terms what I’m looking for is a way for all of these queues to recognize each other and work together in delivering calls to available agents, first in, first out. Basically so that Queue 1 has a waiting call for 2 minutes, and Queue B, C, and D all have calls waiting for 1 minute, Queue 1’s call should have priority and be delivered and answered first because it’s been waiting the longest.

I feel like this is basic functionality in a contact center environment, yet I can’t find a setting or any documentation in freepbx or asterisk to make it work this way. Maybe I’m missing something very basic, if so I apologize in advance, but any help would be greatly appreciated.

Thanks

@ryan82
Did you find solution for this.

use virtual queues with one queue instead of multiple queues.

Having all the queues with the same weight means they are treated equally and their configuration will be executed as needed. So if Queue A is supposed to have priority for the agent over Queue B, C and D then Queue A should have a higher weight than all the other queues the agents are in.

A queue with a weight of 1 will be prioritized over queues with a weight of 0 when an available channel (agent) exists in multiple queues.

All the queues having same weight but they are not treating equally.
The calls waiting for a shorter amount of time in one queue are being delivered to agents before calls that have been waiting longer in another queue.

My requirement is all my 7 queues should have same weight and agents are common on all 7 queues. longest waiting call from any of the queue should land first(First in first out) to the agent. This is the basic call center functionality if i am not wrong.

Virtual Queues - PBX GUI - Sangoma Documentation (atlassian.net)

This doesn’t solve the problem. All it does is set a bunch of variables for the actual queue the call gets sent to. It does not stop the queue weight problem and any type of race conditions.

I must be missing something, because to me, the virtual queue seems like the correct answer.

They would all go to one queue. With the Autofill turned off, this will essentially be first in and first out. Virtual queue will also allow for unique announcement and reporting of the call, so you can still keep your queue numbers separate.

Adjusting the penalty will allow the 1-2 special extensions to be reserved for just the right calls even though it is all one queue.

There’s actually a somewhat recent (1.5 year old or so) option in Asterisk[1] which I believe changes the behavior to this.

[1] asterisk/configs/samples/queues.conf.sample at 20 · asterisk/asterisk · GitHub

2 Likes

Oh nice. I’ve over looked that when checking out the sample recently. I think that would do the trick here too.

Is this option available on freepbx?. where we can set force_longest_waiting_caller option on freepbx.

I don’t work on FreePBX so I can’t comment on that.

Okay Thanks, Is this something configured on asterisk if so, how can we add that in configuration.

You can add in queues_post_custom.conf the following, replace the queue number with your queue(s)

[1000](+)
force_longest_waiting_caller=yes

[1001](+)
force_longest_waiting_caller=yes

What version of Asterisk is in use?

As well, the option goes in the general category. It can’t be set per-queue.

Oops my mistake.

[general](+)
force_longest_waiting_caller=yes

We are using asterisk 18

I should add below config inside queues_post_custom.conf right thats it?

[general] (+)
force_longest_waiting_caller=yes

Looks like it needs to be Asterisk 18.19.0 or newer.

Hooo below that it will not work?