Обнаружилось очень неприятное поведение АТС. Ситуация такая. Исходные данные:
- 3 очереди, в них статичные агенты.
- 7 транков от Мультифона.
- 1 IVR меню
Вызов приходит, по правилам входящей маршрутизации, в зависимости от того, на какой транк пришел вызов, он отправляется на очередь или IVR. В настройках очереди указано, что "Если в очереди нет операторов, перевести вызов на " и указан номер сотовый. В настройках входящих указано "Время в секундах, после которого вызов будет направлен на следующее по приоритету правило" = 30.
Планировалась следующая логика работы. Что пока в очереди есть активные операторы, то звонки приходят на рабочие телефоны, если никого нет в очереди (ни чей телефон из очереди сейчас не зарегистрирован на атс), то вызов уходит на дежурный сотовый. Судя по вот этим строчкам
same => n,ExecIf($["${QUEUESTATUS}" == "JOINEMPTY" || "${QUEUESTATUS}" == "LEAVEEMPTY" ]?Goto(internal,79227511181,1))
то вроде так оно и задумывалось. Но это так не работает. Если сейчас никого в очереди нет, то вызов должен бы пройти на сотовый, но не проходит. Слышу music on hold и через 30 секунд с момента начала вызова, вызов сбрасывается. Я так понимаю, что "больше никаких правил входящей маршрутизации не подошло" и вызов сбросился. И вот строчка выше не выполнилась, это было хорошо видно в консоли и в логах verbose.
А проблема, как мне кажется вот в чем. Если в очереди есть статичные агенты, но никто из них на АТС не зарегистрирован, то у них в очереди статус unavailable. Соответственно, после вот этого
- same => n,Gosub(queue_start,${EXTEN},1)
- same => n,Queue(QUEUE-51C82D305C0B74DAD8524149BEDF1E1C,kT,,,300,,,queue_agent_answer)
- same => n,Gosub(queue_end,${EXTEN},1)
мы не получим статус "JOINEMPTY" или "LEAVEEMPTY", мы получим получим "JOINUNAVAIL". Просто другого объяснения такому поведению я не вижу.
Хотелось бы получить комментарий, как исправить данную проблему.