Asterisk call queues

Queues consist of
  • Incoming calls being placed in the queue
  • Members that answer the queue (extensions or users that login as agents)
  • A strategy for how to handle the queue and divide calls between members
  • Music played while waiting in the queue
  • Announcements for members and callers

Queues are defined in queues.conf or in dynamic realtime. The latter allow storing queue configuration in a database so that changes are immediately available for new callers without the need for an explicit reload.

  • Agents are the people (or person) that answer call(s) that have been placed into a specific Queue. An agent logs in indicating that s/he is now ready to take calls. Asterisk transfers an inbound call to a queue, which is then in turn transfered to an available agent.
  • Members are those channels that are active answering the Queue. It can be agents or normal channels, like "sip/snom23"

New in Asterisk v1.2

A queue is now considered empty not only if there are no members but also if none of the members are available (e.g. agents not logged on). To restore the original behavior, use "leavewhenempty=strict" or "joinwhenempty=strict" instead of "=yes" for those options.

It is now possible to use multi-digit extensions in the exit context for a queue (although you should not have overlapping extensions, as there is no digit timeout). This means that the EXITWITHKEY event in queue_log can now contain a key field with more than a single character in it.


Members can be direct channels, i.e. phones connected to Asterisk. You can also define members as individuals that login from any connection to receive calls.
Agents are defined in agents.conf. Agents login from other phones on special extensions that use the agentlogin application.


Calls are distributed among the members handling a queue with one of several strategies, defined in queues.conf
  • ringall: ring all available channels until one answers (default)
  • roundrobin: take turns ringing each available interface (deprecated in 1.4, use rrmemory)
  • leastrecent: ring interface which was least recently called by this queue
  • fewestcalls: ring the one with fewest completed calls from this queue
  • random: ring random interface
  • rrmemory: round robin with memory, remember where we left off last ring pass

Menu for the user

You can define a menu for the user, while waiting. For this menu, you can only use one-digit extensions (Please, read this : a couple lines above, it is mentioned that, starting from 1.2, multi-digit exit are allowed. Can someone correct this ?). Define the context for the menu in the configuration for the queue to enable this option.


Queue members can be defined as having a penalty - e.g.
member => SIP/200,1
member => SIP/201,2
member => SIP/202,3
member => SIP/203,2
If the strategy is defined as 'ringall', then only those available members with the lowest priorities will ring. In the example above, if 200 is not busy, then only 200 will ring. If 200 is busy, then only 201 and 203 will ring. If 200, 201 and 203 are busy, then 202 will ring.

Note: If extension 200 does not pick up it will not automatically go to extension 201. It will keep ringing 200 until they pick up. It will only go to the next extension if the current extension is either busy or unavailable.

Cascading Queues

You can set up a series of queues that cascade to each other. You can get a similar effect by using the penalty feature but this can be a better way to do things for some situations (e.g. if you want to overflow calls to your receptionist into your office for when your receptionist is busy).

The first thing you must do is have a timeout on our queue. This is done as a parameter of the Queue command used in extensions.conf (example: Queue(dave|t|||45)).

You can then set up a number of queues and simply have your dialplan call each queue in succession.

exten => 1589,1,Answer
exten => 1589,2,Ringing
exten => 1589,3,Wait(2)
exten => 1589,4,Queue(testq|t|||45)
exten => 1589,5,Queue(testq2|t|||45)
exten => 1589,6,Hangup

New features

Queue() has options for penalty, wrapuptime and priority have been added to the Asterisk queue system. Priority works like this, according to the contributor:

The new addition provides the ability to operate queues as priority queues in addition to the current FIFO mode. This gives the ability to queue a call not at the end of the queue but anywhere in the queue, according to the call's priority.

Now you can have just one queue servicing all the calls (more important and less important) with the right order. The priority of a call entering a queue is determined by a special channel variable, QUEUE_PRIO. Higher values of this variable mean higher priority. By not setting this variable, all calls have the same priority, 0, by default (FIFO). E.g.

; Important clients
exten => 111,1,Playback(welcome)
exten => 111,2,SetVar(QUEUE_PRIO=10)
exten => 111,3,Queue(support)

; Less important clients
exten => 112,1,Playback(welcome)
exten => 112,2,SetVar(QUEUE_PRIO=5)
exten => 112,3,Queue(support)


CLI commands

  • asterisk cli command show agents: Show agents
  • show queues: List all queues
  • show queue : Show data on a specific queue



657412 views strong.

See also

  • LesulaCC The first professional mobile Contact Center manager for Asterisk.
  • ASTELCENTER PHP Web solution which allows you to manage and supervise your ASTERISK PBX; generating reports and information in real time so clear and concrete; allows you to generate statistics and graphs: incoming calls, queue, session, outgoing calls, billing, ISP cost, and more; in order to improve the quality of services to their customers.
  • Asterisk agents: More information on call agents
  • Asterisk call parking
  • Asterisk Queue Callback - Let your callers hangup while waiting for an agent without losing their place in line
  • Asterisk Queue Information
  • Asterisk RealTime Queue
  • Asternic Call Center Stats - Queue monitoring and reporting, GPL and commercial versions available. New version 2.0 released!
  • DialApplet Agents desktop Windows, Linux & Mac
  • EasyQueue - Easy deploy and easy to use call_queue analyzer
  • IPSwitchBoard BETA - Queue Log analyzer.
  • OrderlyQ - Extension to Asterisk Queues that lets callers hang up, then call back without losing their place. OrderlyQ web site.
  • OrderlyStats - FREE Dedicated Real Time Call Centre Management and Statistics Package. OrderlyStats web site.
  • Parse the queue log files and push them to a PostgreSQL database
  • QueueMetrics is a software package to analyze the queue_log file and extract a wealth of aggregate statistics on queue activities. The software is available for download and public trial.
  • Queue-Tip - Opensource (GPL) Asterisk Queue Monitoring and Reporting suite using Adhearsion and Ruby on Rails.
  • Statistics that would be useful to add to this application:
  • SAM Reports by Token - Queue Reports and CDR Reports made Simple. Drag / Drop BI Pivot Reports. Windows desktop application. Does not req. web server or db.
  • Silicium - contains build in FastAGI server for queue handling, queue_log and CDR analizer, Lost calls tracking. Live dashboard with instant call back.
  • Metrics4Asterisk an open source, java 5 API for parsing queue log files and generating call metrics.
  • Asterisk Queue Log Analyzer - AQLA - Queue Log Analyzer, Reporting Tool, Realtime monitoring for Asterisk call center. PHP & MySQL

Created by: oej, Last modification: Tue 14 of Mar, 2017 (06:10 UTC) by ceriumhq
Please update this page with new information, just login and click on the "Edit" or "Discussion" tab. Get a free login here: Register Thanks! - Find us on Google+