Собстевнно для контроля количества одновременных входящих забацан такой макрос:
[macro-limit]
exten => s,1,Set(GROUP()=tg${ARG1})
exten => s,2,NooP(${GROUP_COUNT(tg${ARG1})})
exten => s,3,GotoIf($[${GROUP_COUNT(tg${ARG1})} < ${ARG2}]?7)
exten => s,4,Playback(vse_ushli_na_front)
exten => s,5,Busy
exten => s,6,Hangup
exten => s,7,Macroexit
Который на входе проверяет а не много ли абонов в транггруппе, если много, то говорит, что много и делает Busy.
Собственно вот как раз иногда данный busy повисает в виде канала
SIP/c_tgo_in-000000f s@macro-limit:5 Up Busy()
, который и Request hangup не берет :(
Я бы вместо
exten => s,4,Answer()
exten => s,5,Playback(vseushlina_front)
exten => s,5,Busy
exten => s,6,Hangup
вставил
exten => s,5,Playback(vseushlina_front,noanswer)
exten => s,6,Hangup(17)
что гарантированно бы отослало оригинатору response SIP 486 Busy Here. Ибо непонятно, как бы отреагировало железо оператора, если бы ему пришел ответ в виде SIP 200 OK, далее SIP 486 (гудки "занято") и следом BYE c normal call clearing. А юзерскому шлюзу или SIP-телефону - тем более бы крышу свернуло от таких запросов.
А Busy здесь вообще нужен?
[macro-limit]
exten => s,1,Set(GROUP()=tg${ARG1})
exten => s,2,NooP(${GROUPCOUNT(tg${ARG1})})
exten => s,3,GotoIf($[${GROUPCOUNT(tg${ARG1})} < ${ARG2}]?7)
exten => s,4,Answer()
exten => s,5,Playback(vseushlina_front)
exten => s,6,Hangup
exten => s,7,Macroexit
А в чем выражается зависание?
Уходит в бесконечность?
После вызова Busy() его еще потом обработать нужно!
bolshoy_plohish (Mar 26 '12)editА Hangup(17) даёт такой же результат?
Макросы в команде DialТеперь Вы можете использовать аргументы в макросах, используя символ '^'
Dial(Zap/1|60|M(mymacro^cat^dog^bark))
Также, макрос может установить переменную MACRO_RESULT в следующие значения:
ABORT - оба участника соединения прервали связь BUSY CONTINUE - Отключить вызываемую сторону и продолжить выполнение команд, следующих за командой Dial GOTO:<context>^<exten>^<priority> - перевод звонка.
Обратите внимание: Если Вы хотите, чтобы оба абонента были соединены по завершению выполнения макроса, вы НЕ ДОЛЖНЫ устанавливать значение переменной MACRORESULT. Если значение MACRORESULT не определено, то после выполнения всех команд макроса до конца, абоненты будут соединены и смогут разговаривать между собой. Установка этой переменной в значения CONTINUE приводит к тому, что абоненты НЕ соединяются между собой, и выполнение команд продолжиться с приоритета n+1, текущего контекста. Конечно же, установка значения в BUSY или GOTO приведет к соответствующему результату (и, естественно, абоненты не будут соединены). (Способ управления соединением абонентов немного противоречит здравому смыслу, при котором ожидается, что причиной "соединения обоих абонентов" должна быть установка переменной MACRO_RESULT в такое значение, как "BRIDGE" или "CONNECT", или во что-то подобное. Тут же в качестве такой причины используется ОТСУТСТВИЕ любого значения этой переменной.)
Задан: Mar 26 '12
Просмотрен: 1,286 раз
Обновлен: Mar 26 '12
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
Родите сюда дамп SIP, тогда будет понятнее, где затык.
mistral (Mar 26 '12)editну попробую его собрать, хотя там стока в дамп посыпится, как бы вообще айяйяй не вышел :)
um2010 (Mar 26 '12)edit