Страница 1 из 1
Странное поведение SIPPEER(${endtrunk}:curcalls)
Добавлено: 18 фев 2014, 16:37
Sanek
Всем привет!
Столкнулся с таким-вот поведением функции SIPPEER:
Код: Выделить всё
...
exten => h,n,Set(cur_calls=${SIPPEER(${endtrunk}:curcalls)})
...
Т.е. в экстене hungup запрашиваю количество активных каналов в транке после завершения звонка, но что самое интересное, если вызов состоялся и был завершен вызываемым абонентом, то функция SIPPEER показывает, что якобы вызов еще идет... если вызов завершен вызывающим абонентом - всё нормально: в переменную cur_calls заносится правильное значение.
Вопрос: кто-нить с этим сталкивался и как с этим бороться?
Re: Странное поведение SIPPEER(${endtrunk}:curcalls)
Добавлено: 19 фев 2014, 12:00
andrew55555
Судя по всему, так происходит из-за разной очередности завершения каналов. В одном случае канал, связанный с транком еще не завершился и поэтому когда проходит h вашего канала, тот еще не завершился, в другом наоборот.
Не зная, что вы делаете с этим счетчиком и как, сложно сказать, как бороться. Есть такие идеи.
Например, можно попробовать использовать функции GROUP и GROUP_COUNT для подсчета, но в этом случае опять же счетчик связывается не с каналом транка, поэтому в случае трансферов возможен неправильный подсчет, но в вашем случае возможно поможет правильнее считать.
А вообще любой счетчик надо связывать с тем каналом, который в считаете. Если вы считаете транк, то и вызывать функцию надо на канале транка. В астериске 11 это можно делать с помощью predial handlers и hangup handlers. Диалплан будет выполняется на порожденном командой Dial канале, т.е. на вашем транке, и вы гарантированно получите ожидаемый результат.
Есть еще переменная OUTBOUND_GROUP, которая в группу добавляет порожденный канал, но это по сути аналог вашего способа. Но рекомендуется подсчет делать как раз через группы, а не через счетчик пиры.