First time here? Check out the FAQ!

Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Повисает BUSY

0

Собстевнно для контроля количества одновременных входящих забацан такой макрос:

[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 не берет :(

спросил Mar 26 '12

um2010 Gravatar um2010
2056 70 13 55

обновил Mar 26 '12

Comments

Родите сюда дамп SIP, тогда будет понятнее, где затык.

mistral (Mar 26 '12)edit

ну попробую его собрать, хотя там стока в дамп посыпится, как бы вообще айяйяй не вышел :)

um2010 (Mar 26 '12)edit

4 Ответа

2

Я бы вместо

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-телефону - тем более бы крышу свернуло от таких запросов.

ссылка удалить спам редактировать

ответил Mar 26 '12

mistral Gravatar mistral flag of Ukraine
370 2 5 19

обновил Mar 26 '12

Comments

в принципе понятно, спасибо

um2010 (Mar 26 '12)edit
0


А Busy здесь вообще нужен?
[macro-limit]
exten
=> s,1,Set(GROUP()=tg${ARG1})
exten
=> s,2,NooP(${GROUPCOUNT(tg${ARG1})})
exten
=> s,3,GotoIf($[${GROUP
COUNT(tg${ARG1})} < ${ARG2}]?7)
exten
=> s,4,Answer()
exten
=> s,5,Playback(vseushlina_front)
exten
=> s,6,Hangup
exten
=> s,7,Macroexit

ссылка удалить спам редактировать

ответил Mar 26 '12

bolshoy_plohish Gravatar bolshoy_plohish
1388 25 20 38

Comments

да собственно вопрос то не в этом, само собой сейчас там и стоит хенгап, дело в принципе не понятно, почему виснет

um2010 (Mar 26 '12)edit

А в чем выражается зависание?

Уходит в бесконечность?

После вызова Busy() его еще потом обработать нужно!

bolshoy_plohish (Mar 26 '12)edit

после стоит hangup

um2010 (Mar 26 '12)edit
0

А Hangup(17) даёт такой же результат?

ссылка удалить спам редактировать

ответил Mar 26 '12

ro Gravatar ro flag of Russian Federation
404 1 1 11
http://rootblog.ru/

Comments

нужно понять почему busy виснет , потом уж лечить. метод тыка в данном случае не приемлим

um2010 (Mar 26 '12)edit

Ну хз, я такую конструкцию не использовал (Busy -> Hangup). Но у Busy тоже можно задать таймаут, после которого она должна закрыть канал, если он сам ещё не закрылся. Возможно тупо не доходит Cancel, попробуйте сделать Busy(10)

ro (Mar 26 '12)edit
0

Макросы в команде 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

bolshoy_plohish Gravatar bolshoy_plohish
1388 25 20 38

Comments

Ну у человека-то вроде всё в порядке? Макрос либо переходит к приоритету 7, не возвращая MACRO_RESULT, что приводит к соединению, либо возващает её, и должен происходить hangup. Проблема-то не в макросе, а в том, что hangup не происходит.

ro (Mar 26 '12)edit

А из чего он макрос вызывает из Dial() иои из Macro?

bolshoy_plohish (Mar 26 '12)edit

Ну если я всё правильно понимаю о вызове макросов из Dial, то в его случае разницы нет.

ro (Mar 26 '12)edit

это здесь при чем?

um2010 (Mar 26 '12)edit

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: Mar 26 '12

Просмотрен: 1,286 раз

Обновлен: Mar 26 '12

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.