ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

После Hangup у звонящего не происходит завершение вызова

Проблемы и их решения Asterisk как такового

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

После Hangup у звонящего не происходит завершение вызова

Сообщение r@diO » 10 мар 2017, 04:12

В общем есть такой контекст:
Код: выделить все
exten => _X.,1,Ringing
exten => _X.,n,AGI(order.php,${CALLERID(num)},${EXTEN})
exten => _X.,n,GotoIf($["${LEN(${RESPONSE})}" != "1"]?end)
exten => _X.,n,Answer
exten => _X.,n,Set(K=0)
exten => _X.,n(first),Playback(${RESPONSE})
exten => _X.,n,GotoIf($["${RESPONSE}" = "0"]?asr:end) ;УСЛОВИЕ 1
exten => _X.,n(asr),Set(RECORD_FILE=${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)}-${CALLERID(num)}-${UNIQUEID})
exten => _X.,n,MixMonitor(/var/spool/asterisk/monitor/${RECORD_FILE}.wav)
exten => _X.,n,Wait(2)
exten => _X.,n,WaitForSilence(100,10,6)
exten => _X.,n,StopMixMonitor()
exten => _X.,n,AGI(vad.php,/var/spool/asterisk/monitor/${RECORD_FILE})
exten => _X.,n,GotoIf($[${FILESIZE} > 44]?say)
exten => _X.,n,Set(K=$[${K}+1])
exten => _X.,n,GotoIf($[${K} < 3]?first)
exten => _X.,n(say),Playback(/var/spool/asterisk/clips/success)
exten => _X.,n(end),Hangup()

exten => h,1,GotoIf($["${RESPONSE}" != "0"]?last) ;УСЛОВИЕ 2
exten => h,n,ДЛИТЕЛЬНАЯ ОПЕРАЦИЯ
exten => h,n(last),NoOp(---)

Если RESPONSE равен 0, т.е. выполняются условия 1 и 2 (помечены в комментариях), то у звонящего вызов не завершается после hangup, пока не выполнятся h-экстеншены. А там долгие операции и напр. если они выполняются 5 секунд, то и звонящий всё время остается висеть на линии. Пробовал возвращать коды 16 и 17 в Hangup, звонить с разных операторов на разные операторы - ситуация повторяется ВСЕГДА.
Что-то нифига не пойму - подскажите, что посмотреть.
r@diO
 
Сообщений: 49
Зарегистрирован: 07 сен 2012, 10:06

Re: После Hangup у звонящего не происходит завершение вызова

Сообщение virus_net » 10 мар 2017, 09:20

мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
virus_net
 
Сообщений: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: После Hangup у звонящего не происходит завершение вызова

Сообщение r@diO » 10 мар 2017, 11:26

Спасибо. Понял.
r@diO
 
Сообщений: 49
Зарегистрирован: 07 сен 2012, 10:06

Re: После Hangup у звонящего не происходит завершение вызова

Сообщение r@diO » 10 мар 2017, 14:26

virus_net писал(а):https://forum.asterisk.ru/viewtopic.php?p=66544#p66544

Код: выделить все
#!/usr/bin/php -q
<?php
   $filesize = $argv[1]; //размер файла
   $filename = $argv[2]; //название файла
   $ordertime = $argv[3]; //время заказа
   
   $cmd = "/usr/bin/php /var/lib/asterisk/agi-bin/complex.php ".$filesize." ".$filename." '".$ordertime."' > /dev/null 2>/dev/null &";
      
   @exec($cmd , $execOut, $execRes);
?>

Скрипт complex.php отрабатывает в фоне, нужную задачу выполняет.
Но <SIP/out7933XXXXX01-00000085>AGI Tx >> 510 Invalid or unknown command:
[Показать] Спойлер:
Код: выделить все
    -- Executing [h@orders:3] AGI("SIP/out7933XXXXX01-00000085", "start.php,13758,/var/spool/asterisk/monitor/20170310171234-7965XXXXX15-1489140752.133,"10.03.2017 17:14:30"") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/start.php
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_request: start.php
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_channel: SIP/out7933XXXXX01-00000085
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_language: ru
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_type: SIP
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_uniqueid: 1489140752.133
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_version: 11.25.1
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_callerid: 7965XXXXX15
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_calleridname: unknown
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_callingpres: 0
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_callingani2: 0
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_callington: 0
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_callingtns: 0
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_dnid: 7933XXXXX00
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_rdnis: unknown
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_context: orders
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_extension: h
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_priority: 3
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_enhanced: 0.0
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_accountcode:
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_threadid: 139674761967360
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_arg_1: 13758
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_arg_2: /var/spool/asterisk/monitor/20170310171234-7965XXXXX15-1489140752.133
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_arg_3: 10.03.2017 17:14:30
<SIP/out7933XXXXX01-00000085>AGI Tx >>
<SIP/out7933XXXXX01-00000085>AGI Rx <<
<SIP/out7933XXXXX01-00000085>AGI Tx >> 510 Invalid or unknown command
    -- <SIP/out7933XXXXX01-00000085>AGI Script start.php completed, returning 0

Если запустить его напрямую, то отрабатывает без ошибок.
Код: выделить все
exten => h,n,AGI(complex.php,${FILESIZE},/var/spool/asterisk/monitor/${RECORD_FILE},"${ORDERTIME}")

В чем может быть проблема?
r@diO
 
Сообщений: 49
Зарегистрирован: 07 сен 2012, 10:06

Re: После Hangup у звонящего не происходит завершение вызова

Сообщение ded » 10 мар 2017, 14:32

CLI> agi set debug on говорит о том, что Tx - куча параметров пересылается, а в ответ - тишина
Код: выделить все
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_arg_2: /var/spool/asterisk/monitor/20170310171234-7965XXXXX15-1489140752.133
<SIP/out7933XXXXX01-00000085>AGI Tx >> agi_arg_3: 10.03.2017 17:14:30
<SIP/out7933XXXXX01-00000085>AGI Tx >>
<SIP/out7933XXXXX01-00000085>AGI Rx <<

Check permissions?

Проверить состояние переменных:
exten => h,n,NoOp(--- ${FILESIZE} - -- - ${RECORD_FILE} - -- - ${ORDERTIME} ) ; кавычки там вижу лишние были... и строку /var/spool/asterisk/monitor/ не надо указыввать. Скрипт сам должен понимать, передать ему нужно только параметры.
exten => h,n,AGI(complex.php,${FILESIZE},/var/spool/asterisk/monitor/${RECORD_FILE},"${ORDERTIME}")
ded
 
Сообщений: 15803
Зарегистрирован: 26 авг 2010, 19:00

Re: После Hangup у звонящего не происходит завершение вызова

Сообщение virus_net » 11 мар 2017, 09:28

Читаем хотя бы http://asterisk.ru/knowledgebase/Asterisk+agi
интерфейс взаимодействия

Затем читаем как минимум http://asterisk.ru/knowledgebase/Asterisk+AGI+php, чтобы понять что такое AGI + PHP и как это работает, и что для этого нужно.
Затем заостряем свое внимание на:
Это важно, потому что любые ошибки (и некоторые предупреждения), которые создал ваш скрипт, будут посланы к STDOUT, тому же самому буферу, к которому посылаются все AGI команды.

Что у вас и происходит:
<SIP/out7933XXXXX01-00000085>AGI Rx <<

Судя по всему все же что-то принтится или в конце скрипта есть перенос строки.
Поэтому я писал:
virus_net писал(а):Если вызывать скрипт, НО в нем не исполняемый по задаче код, а только вызов другого скрипта (в котором и будет выполняться все что надо)

А вы сделали не так. Вы по-прежнему вызываете сразу скрипт с логикой. В скрипте, который вызывается с помощью AGI, нужно соблюсти все правила работы с AGI, т.к. asterisk ждем в ответ КОМАНДУ, вы посылаете пустоту и почему-то удивляетесь ответу от asterisk. Мне это абсолютно не понятно, т.е. я не понимаю чему тут можно удивляться, когда все написано на экране и скопировано вами сюда.
Либо вызывайте свой скрипт через System(), а не через AGI().
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
virus_net
 
Сообщений: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва


Вернуться в Конфигурация и настройка Asterisk

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH