VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Странное поведение SIPPEER(${endtrunk}:curcalls)

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Ответить
Sanek
Сообщения: 81
Зарегистрирован: 17 май 2012, 14:55

Странное поведение SIPPEER(${endtrunk}:curcalls)

Сообщение Sanek »

Всем привет!
Столкнулся с таким-вот поведением функции SIPPEER:

Код: Выделить всё

...
exten => h,n,Set(cur_calls=${SIPPEER(${endtrunk}:curcalls)})
...
Т.е. в экстене hungup запрашиваю количество активных каналов в транке после завершения звонка, но что самое интересное, если вызов состоялся и был завершен вызываемым абонентом, то функция SIPPEER показывает, что якобы вызов еще идет... если вызов завершен вызывающим абонентом - всё нормально: в переменную cur_calls заносится правильное значение.

Вопрос: кто-нить с этим сталкивался и как с этим бороться?
andrew55555
Сообщения: 7
Зарегистрирован: 14 фев 2014, 17:55

Re: Странное поведение SIPPEER(${endtrunk}:curcalls)

Сообщение andrew55555 »

Судя по всему, так происходит из-за разной очередности завершения каналов. В одном случае канал, связанный с транком еще не завершился и поэтому когда проходит h вашего канала, тот еще не завершился, в другом наоборот.
Не зная, что вы делаете с этим счетчиком и как, сложно сказать, как бороться. Есть такие идеи.
Например, можно попробовать использовать функции GROUP и GROUP_COUNT для подсчета, но в этом случае опять же счетчик связывается не с каналом транка, поэтому в случае трансферов возможен неправильный подсчет, но в вашем случае возможно поможет правильнее считать.
А вообще любой счетчик надо связывать с тем каналом, который в считаете. Если вы считаете транк, то и вызывать функцию надо на канале транка. В астериске 11 это можно делать с помощью predial handlers и hangup handlers. Диалплан будет выполняется на порожденном командой Dial канале, т.е. на вашем транке, и вы гарантированно получите ожидаемый результат.
Есть еще переменная OUTBOUND_GROUP, которая в группу добавляет порожденный канал, но это по сути аналог вашего способа. Но рекомендуется подсчет делать как раз через группы, а не через счетчик пиры.
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH