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 seperate 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:
musiconholdThis parameter allows you to configure which Music on Hold class (configured in musiconhold.conf) to use for the queue.
announceWhen 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 into more than one queue. You can
specify either the full path to the file, or a path relative to
/var/lib/asterisk/sounds/.
strategyAsterisk can use six strategies to distribute calls to agents:
ringallThe queue rings every available agent and connects the call to whichever agent answers first (this is the default).
roundrobinThe 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, because roundrobin 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.
leastrecentThe call is presented to the agent who has not been presented a call for the longest period of time.
fewestcallsThe 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 only considers 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).
randomAs 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.
rrmemoryThe 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.
servicelevelIn 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%, that means 80% of the calls that came into
the queue were presented to an agent in less than 60 seconds.
contextIf 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 the queue—be aware of this when you use this feature.
timeoutThe 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.
retryWhen a timeout occurs, the retry value specifies how many seconds to
wait before presenting the call again to an available agent.
weightThe weight parameter
assigns a rank to the queue. If calls are waiting in multiple
queues, those queues with the highest weight 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.
maxlenmaxlen 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-frequencyThe announce-frequency
value (defined in seconds) determines how often to announce to the
caller his place in the queue and estimated hold time.
announce-holdtimeThere are three possible values for this parameter: yes, no, and once. The announce-holdtime parameter determines
whether or not to include the estimated hold time within the
position announcement. If set to once, it will be played to the caller only
once.
monitor-formatThis parameter accepts three possible values: wav, gsm, and wav49. 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-joinThe Monitor() application
in Asterisk normally records either end of the conversation in a
separate file. Setting monitor-join to yes instructs Asterisk to merge the files
at the end of the call. This should only be set if the MonitorType
parameter is set to Monitor.
joinemptyThis parameter accepts three values: yes, no, and strict. It allows you to determine whether
callers can be added to a queue based on the status of the members
of the queue. The strict option
will not allow callers to join the queue if all members are
unavailable.
leavewhenemptyThis 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).
eventwhencalledSet eventwhencalled to
yes if you wish to have queue
events presented on the Manager interface.
eventmemberstatusoffSetting this parameter to no will generate extra information
pertaining to each queue member.
reportholdtimeIf 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.
memberdelayThis 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_nameMembers of a queue can be either channel types or agents. Any agents you list here must be defined in the agents.conf file.