Если в компании существует отдельный колл-центр с операторами, задача которых принимать входящий поток звонков — имеет смысл отказаться от Dial() в пользу Queue(). Это позволит уравновесить количество принимаемых операторами звонков (за счёт стратегии обработки вызовов) и убрать из статистики лишние звонки, которые появляются при использовании Dial().
Сначала зададим настройки очереди в файле queues.conf:
[general] persistentmembers = yes [queue_callcenter] music=default strategy=rrmemory timeout=10 ringinuse=yes wrapuptime=10 servicelevel=60 member => SIP/101 member => SIP/102 member => SIP/103 member => SIP/104
Описание полей конфигурации:
persistentmembers = yes — набор операторов, принимающих вызовы, статичен
strategy — стратегия обработки вызова на стороне АТС. Возможные значения:
- ringall: входящий вызов поступает сразу всем операторам (значение по умолчанию).
- leastrecent: среди свободных операторов выбирается тот, который дольше всех не принимал вызовы.
- fewestcalls: среди свободных операторов выбирается тот, который принял наименьшее количество вызовов.
- random: оператор выбирается случайным образом.
- rrmemory: циклическое распределение с памятью, запоминается последний участник, ответивший на вызов, далее распределение идет со сдвигом на единицу. Например — 1-2-3-4, 2-3-4-1, 3-4-1-2 и т.д.
timeout — указывается промежуток времени (в секундах), как долго вызов ожидает ответа у оператора. По истечении периода вызов уходит на следующего оператора (в соответствии со стратегией обработки). Не применяется при стратегии ringall, для ringall продолжительность задаётся в диалплане.
ringinuse — указывается, посылать ли вызов оператору со статусом «in use»
wrapuptime — указывается промежуток времени (в секундах), требуемый оператору на пост-обработку вызова. В течение этого промежутка звонки данному оператору поступать не будут.
servicelevel — указывается промежуток времени (в секундах), на основании которого будет считаться уровень обслуживания. Вызовы, которые будут отвечены менее, чем за 60 секунд (в данном примере) — попадут в заявленный sl; вызовы, которые будут отвечены спустя 60 секунд — не попадут.
Теперь добавим в диалплан (в контекст обработки входящих вызовов) добавим созданную нами очередь:
exten => s,n,Queue(queue_callcenter,t)
Теперь откроем консоль астериска и перезагрузим настройки очередей и диалплан:
$ asterisk -rvv CLI> queue reload all CLI> dialplan reload
Все, очередь заработала. Посмотреть статус очереди можно командой:
CLI> queue show queue_callcenter queue_callcenter has 0 calls (max unlimited) in 'rrmemory' strategy (10s holdtime, 100s talktime), W:0, C:696, A:47, SL:90.7% within 60s Members: SIP/101 (ringinuse enabled) (Not in use) has taken no calls yet SIP/102 (ringinuse enabled) (Not in use) has taken 31 calls (last was 149669 secs ago) SIP/103 (ringinuse enabled) (Not in use) has taken no calls yet SIP/104 (ringinuse enabled) (Not in use) has taken 143 calls (last was 60268 secs ago)