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

AGI как избежать hangup [закрыт]

0

Добрый день. Просьба помочь в следующем вопросе есть custom_context

[toRussiaWithLimit_rulematch-custom]
exten => _048XXXXXXX,1,Noop(TRUNK_OPTIONS=${TRUNK_OPTIONS})
exten => _048XXXXXXX,n,Agi(agi://localhost/getTimeout.agi?number=123)
....some logic

agi set debug on

AGI Tx >> agi_network: yes
AGI Tx >> agi_network_script: getTimeout.agi?number=487940663
<SIP/2001-00000014>AGI Tx >> agi_request: agi://localhost/getTimeout.agi?number=123
.................

<SIP/2001-00000014>AGI Rx << SET VARIABLE "dialTimeout" "1481"
<SIP/2001-00000014>AGI Tx >> 200 result=1
<SIP/2001-00000014>AGI Rx << SET VARIABLE "AJ_AGISTATUS" "SUCCESS"
<SIP/2001-00000014>AGI Tx >> 200 result=1
    -- <SIP/2001-00000014>AGI Script agi://localhost/getTimeout.agi?number=123 completed, returning 0
<SIP/2001-00000014>AGI Tx >> HANGUP

Мне нужно продолжить звонок, а происходит HANGUP и соответственно получаю No such context 'macro-outisbusy' for macro 'outisbusy'

Мешает, что <sip 2001-00000014="">AGI Tx >> HANGUP. С AGI раньше не работал, подскажите, hangup вызывается по умолчанию или этот как-то в скрипте можно отменить?

FreePBX был создан custom context

toOdessaWithLimit_rulematch' created by 'pbx_config' ]
  'h' =>            1. Macro(hangupcall,)                         [pbx_config]
  's' =>            1. Macro(hangupcall,)                         [pbx_config]
  Include =>        'toOdessaWithLimit_rulematch-custom'          [pbx_config]
....

В кастом я добавляю нужную логику - там просто нужно из agi вытащить нужно значение и установить в качестве таймаута для dial
    [toOdessaWithLimit_rulematch-custom]
    exten => _048XXXXXXX,1,Noop(Initial TRUNK_OPTIONS=${TRUNK_OPTIONS})
    exten => _048XXXXXXX,n,AGI(agi://localhost/getTimeout.agi)
    ;exten => _048XXXXXXX,n,Set(dialTimeout=${SHELL(/var/lib/asterisk/agi-bin/getTimeout.sh)})
    exten => _048XXXXXXX,n,NoOp(check timeout set up: ${dialTimeout})
    exten => _048XXXXXXX,n,Set(TRUNK_OPTIONS=L(920000:30000:10000))
    exten => _048XXXXXXX,n,Noop(Changed TRUNK_OPTIONS=${TRUNK_OPTIONS})

Не могу понять, почему вызов agi exten => _048XXXXXXX,n,AGI(agi://localhost/getTimeout.agi) или exten => _048XXXXXXX,n,Set(dialTimeout=${SHELL(/var/lib/asterisk/agi-bin/getTimeout.sh)})

Без вызова agi или shell скрипта звонок нормально проходит.

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

спросил 2016-03-13 15:11:58 +0400

ipvinner Gravatar ipvinner
54 42 5 28

обновил 2016-03-14 16:25:49 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

Comments

hangup вызывается при завершении вызова.

zzuz ( 2016-03-13 18:30:43 +0400 )редактировать

в самом скрипте, нет явной команды hangup. и он вроде завершает работу без hangup: returning 0. Если убрать строку с agi - все работает. Вот я не могу понять откуда появляется последний HANGUP

ipvinner ( 2016-03-13 22:31:41 +0400 )редактировать

ну потому что в скрипте не нужно посылать вызов на несуществующий экстеншен . отдайте свой сприпт какому-нибудь фрилансеру, пусть исправляет.

zzuz ( 2016-03-13 23:13:12 +0400 )редактировать

непонятно что куда отменить. установка переменны не вызывает выключение обычно. смотрите, что ДО этого делает. может таймаут какой.

meral ( 2016-03-14 01:52:55 +0400 )редактировать

zzuz, а как Вы определили что вызов идет на несуществующий екстеншен? там только устанавливаются значения переменных для канала

ipvinner ( 2016-03-14 12:04:23 +0400 )редактировать

Видимо оттуда откуда "No such context 'macro-outisbusy' for macro 'outisbusy'" .

zzuz ( 2016-03-14 12:29:42 +0400 )редактировать

А как тему закрыть? оказалось банальная невнимательность

ipvinner ( 2016-03-14 15:29:10 +0400 )редактировать

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

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

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

Статистика

Задан: 2016-03-13 15:11:58 +0400

Просмотрен: 683 раз

Обновлен: Mar 14 '16

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