Asterisk provides basic call center functionality via its queueing system, but those who are using it in more mission-critical environments often report that their solutions required customization. You can do this customization in the queues.conf file.
The [general]
section of
queues.conf contains settings that will apply to
all queues. If the persistentmembers
parameter is set to yes
, a member
that is added to the system via the AddQueueMember()
application or through the
Asterisk Manager Interface will be stored in the AstDB, and therefore
retained across a restart.
The autofill
parameter allows
Asterisk to be more efficient in the way it distributes calls to queue
members, especially if there are multiple callers in the queue and
multiple queue members available to receive the call. It is recommended
you set autofill
to yes
.
Another general parameter of queues.conf is MonitorType
. If set to MixMonitor
, it will mix the inbound and
outbound audio streams. If set to Monitor
, it will revert to the older method of
recording the inbound and outbound audio in separate files.
Next you can define one or more queues by placing its name inside
of square brackets ([]
). Within each
queue, the following parameters are available:
musiconhold
This parameter allows you to configure which music-on-hold class (configured in musiconhold.conf) to use for the queue.
announce
When a call is presented to a member of the queue, the prompt specified by
announce
will be played to that agent before the caller is connected. This can be useful for agents who are logged in to more than one queue. You can specify either the full path to the file, or a path relative to /var/lib/asterisk/sounds/.strategy
Asterisk can use six strategies to distribute calls to agents:
ringall
The queue rings every available agent and connects the call to whichever agent answers first (this is the default).
roundrobin
(deprecated)The queue cycles through the agents until it finds one who is available to take the call.
roundrobin
does not take into account the workload of the agents. Also, becauseroundrobin
always starts with the first agent in the queue, this strategy is suitable only in an environment where you want your higher-ranked agents to handle all calls unless they are busy, in which case the lower-ranked agents may get a call.leastrecent
The call is presented to the agent who has not been presented a call for the longest period of time.
fewestcalls
The call is presented to the agent who has received the least amount of calls. This strategy does not take into account the actual agent workloads; it considers only the number of calls they have taken (for example, an agent who has had 3 calls that each lasted for 10 minutes will be preferred over an agent who has had 5 calls each lasting 2 minutes).
random
As its name suggests, the random strategy chooses an agent at random. In a small call center, this strategy may prove to be the most fair.
rrmemory
The queue cycles through the list of queue members, keeping track of which member last received a call. The next time a call needs to be distributed, Asterisk will continue from this point in the list of queue members. (This strategy is known as round-robin memory). This ensures that call presentation cycles through the agents as fairly as possible.
servicelevel
In a call center, the service level represents the maximum amount of time a caller should ideally have to wait before being presented to an agent. For example, if
servicelevel
is set to 60 and the service level percentage is 80 percent, that means 80 percent of the calls that came into the queue were presented to an agent in less than 60 seconds.context
If a context is assigned to a queue, the caller will be able to press a single digit to exit to the corresponding extension within the configured context, if it exists. This action takes the caller out of the queue, which means that she will lose her place in line—be aware of this when you use this feature.
timeout
The
timeout
value defines the maximum amount of time (in seconds) to let an agent’s phone ring before deeming the agent unavailable and placing the call back into the queue.retry
When a timeout occurs, the
retry
value specifies how many seconds to wait before presenting the call again to an available agent.weight
The
weight
parameter assigns a rank to the queue. If calls are waiting in multiple queues, those queues with the highestweight
values will be presented to agents first. When you are designing your queues, be aware that this strategy can prevent a call in a lower-weighted queue from ever being answered. Always ensure that calls in lower-weighted queues eventually get promoted to higher-weighted queues to ensure that they don’t have to hold forever.maxlen
maxlen
is the maximum number of calls that can be added to the queue before the call goes to the next priority of the current extension.announce-frequency
The
announce-frequency
value (defined in seconds) determines how often to announce to the caller his place in the queue and estimated hold time.announce-holdtime
There are three possible values for this parameter:
yes
,no
, andonce
. Theannounce-holdtime
parameter determines whether or not to include the estimated hold time within the position announcement. If set toonce
, it will be played to the caller only once.monitor-format
This parameter accepts three possible values:
wav
,gsm
, andwav49
. By enabling this option, you are telling Asterisk that you wish to record all completed calls in the queue in the format specified. If this option is not specified, no calls will be recorded.monitor-join
The
Monitor()
application in Asterisk normally records either end of the conversation in a separate file. Settingmonitor-join
toyes
instructs Asterisk to merge the files at the end of the call. This should be set only if theMonitorType
parameter is set toMonitor
.joinempty
This parameter accepts three values:
yes
,no
, andstrict
. It allows you to determine whether callers can be added to a queue based on the status of the members of the queue. Thestrict
option will not allow callers to join the queue if all members are unavailable.leavewhenempty
This parameter determines whether you want your holding callers to be removed from the queue when the conditions preventing a caller from joining exist (i.e., when all of your agents log out and go home).
eventwhencalled
Set
eventwhencalled
toyes
if you wish to have queue events presented on the Manager Interface.eventmemberstatusoff
Setting this parameter to
no
will generate extra information pertaining to each queue member.reportholdtime
If you set this parameter to
yes
, the amount of time the caller held before being connected will be announced to the queue member answering the call.memberdelay
This parameter defines whether a delay will be inserted between the time when the queue identifies a free agent and the time when the call is connected to that agent.
member => member_name
Members of a queue can be either channel types or agents. Any agents you list here must be defined in the agents.conf file.
Get Asterisk: The Future of Telephony, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.