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

Ожидание выполнение скрипта на bash

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

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

Ожидание выполнение скрипта на bash

Сообщение djan » 14 июн 2019, 19:04

Помогите разобраться. Есть свой кусок диалплана в котором вызывается скрипт - ivr-main.sh, который проверяет пользователя на баланс и доступность его оборудования. Проблема в том, что после вызова asterisk не дожидается его завершения, скрипт в свою очередь должен вернуть значения на основании которых мы работаем дальше, это - response, ping, uid, deposit. Мы получаем проблему так как скрипт выполняется примерно 2-3сек а asterisk его не ждет соответственно просто идет дальше.
Как заставить asterisk ждать полного завершения скрипта?


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

[ivr-main]
exten => s,1,NoOp(-----Start IVR-----)
exten => s,n,Playback(/var/lib/asterisk/sounds/custom/Welcome_gsm)
exten => s,n,Answer
exten => s,n,NoOp(---Start check abon---)
exten => s,n,Verbose(Check DB if response 5)
exten => s,n,AGI(ivr-main.sh, ${CALLERID(num)})
exten => s,n,GotoIf($["${response}" = "5"]?connection:notconnection)
exten => s,n(notconnection),Goto(ext-queues,001,3)
exten => s,n(connection),GotoIf($["${uid}" = "1"]?exist:notexist)
exten => s,n,Verbose(Uid if notexist 1 ${uid})
exten => s,n,GoToIf($["${uid}" = "1"]?exist:notexist)
exten => s,n(exist),Goto(ext-queues,001,3)

exten => s,n,Verbose(Deposit if exist deb 1 ${deposit})
exten => s,n(notexist),GotoIf($["${deposit}" = "2"]?debtor:notdebtor)
exten => s,n(debtor),Playback(/var/lib/asterisk/sounds/custom/thanks_opinion_gsm)
exten => s,n,Wait(1)
exten => s,n(debtor),Goto(ivr-digit-money,s,1)

exten => s,n,Verbose(Deposit if exist ping 3 ${ping})
exten => s,n(notdebtor),GotoIf($["${ping}" = "4"]?allok:notok)
exten => s,n(allok),Playback(/var/lib/asterisk/sounds/custom/thanks_opinion_gsm)
exten => s,n(allok),Goto(ivr-digit-sw,s,1)
exten => s,n(notok),Goto(ext-queues,001,3)

[ivr-digit-money]
exten => s,1,NoOp(Start IVR money)
exten => s,n,Background(/var/lib/asterisk/sounds/custom/thanks_opinion_gsm)
exten => s,n,Background(silence/10,m)
exten => s,n,Background(/var/lib/asterisk/sounds/custom/thanks_opinion_gsm)
exten => s,n,Background(silence/10,m)
exten => s,n,Macro(hangupcall,)

exten => 1,1,NoOp(Press one money)
exten => 1,n,Background(/var/lib/asterisk/sounds/custom/thanks_opinion_gsm)
exten => 1,n,Macro(hangupcall,)

exten => 2,1,Goto(ext-queues,001,3)

[ivr-digit-sw]
exten => s,1,NoOp(Start IVR sw)
exten => s,n,Background(/var/lib/asterisk/sounds/custom/thanks_opinion_gsm)
exten => s,n,Background(silence/10,m)
exten => s,n,Background(/var/lib/asterisk/sounds/custom/thanks_opinion_gsm)
exten => s,n,Background(silence/10,m)
exten => s,n,Macro(hangupcall,)

exten => 1,1,NoOp(Press one sw)
exten => 1,n,AGI(create_tt.sh, ${CALLERID(num)})
exten => 1,n,NoOp(---Start check DB ivr-sw---)
exten => 1,n,Verbose(Check DB if response ${ttexist} 2 )
exten => 1,n,GotoIf($["${ttexist}" = "2"]?connection:notconnection)
exten => 1,n(connection),GotoIf($["${ttexist}" = "2"]?ticketswexist:ticketswnoexist)
exten => 1,n(notconnection),Goto(ext-queues,001,3)

Vladyslav Makogon, [14.06.19 17:56]
exten => 1,n,Verbose(Chek tt if exist tt 2 ${ttexist})
;exten => 1,n,GotoIf($["${ttexist}" = "2"]?ticketswexist:ticketswnoexist)
exten => 1,n(ticketswexist),Playback(/var/lib/asterisk/sounds/custom/queue_2018_gsm)
exten => 1,n,Macro(hangupcall,)
exten => 1,n(ticketswnoexist),Goto(ivr-create-tt,s,1)

exten => 2,1,Goto(ext-queues,001,3)

[ivr-create-tt]
exten => s,1,NoOp(Start IVR create ttt)
exten => s,n,Playback(/var/lib/asterisk/sounds/custom/thanks_opinion_gsm)
exten => s,n,Macro(hangupcall,)
djan
 
Сообщений: 3
Зарегистрирован: 23 май 2019, 23:19

Re: Ожидание выполнение скрипта на bash

Сообщение virus_net » 15 июн 2019, 09:43

Все как раз наоборот.
Когда вызывается AGI, то Asterisk всегда ждет завершения выполнения скрипта и dialplan не двигается далее.
Из-за чего как раз и приходится выдумывать костыли, чтобы изменить это поведение.

Если у вас скрипт завершается, то смотрите с каким кодом, включите agi debug и смотрите в CLI *. Дополнительно напихайте строчки с дебагом в своем скрипте. Поймете где он выпадает и на чем он завершается.
Так же не помешает запустить скрипт руками, но с правами пользователя и группы от которых запущен Asterisk.
мой 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: Ожидание выполнение скрипта на bash

Сообщение yvatfwp » 15 июн 2019, 14:39

Из-за чего как раз и приходится выдумывать костыли, чтобы изменить это поведение.

Угу, можно еще запускать скрипты с timeout на выполнение, если не выполнился в указаное время, возвращать какой нибудь код вида 504 timeout, ну и как нибудь отдельно складывать такие варианты и уже по факту разбираться.
yvatfwp
 
Сообщений: 73
Зарегистрирован: 27 окт 2015, 12:50

Re: Ожидание выполнение скрипта на bash

Сообщение ValentO » 15 июн 2019, 14:51

Да, скрипт завершается. Но не с тем результатом которым нужно, к сожалению. agi debug - включали,по этому и видим не тот результат.
Все Ваши слова подтвердились,когда вызывается AGI, то Asterisk ждет завершения скрипта и dialplan вместе с ним. Проблему нашли,при выполнении скрипта от юзера asterisk не отрабатывала команда,которая и приводила к краху скрипта, потому что, отдавал не то значение аргумента. Соответственно из-за этого рушилась вся логика. Сейчас все заработало! Спасибо за помощь! :)
ValentO
 
Сообщений: 5
Зарегистрирован: 27 май 2019, 18:46

Re: Ожидание выполнение скрипта на bash

Сообщение Zavr2008 » 17 июн 2019, 15:02

Digium активно рекомендует избавляться от подобного и свои приложения соединять по ARI.
Российские шлюзы E1 Alvis-GW. Модернизация УПАТС с E1, ИС "Антифрод" : E1 PRI/SS#7 УВР Телестор, Грифин и др..
Аватар пользователя
Zavr2008
 
Сообщений: 2167
Зарегистрирован: 27 янв 2011, 01:35


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

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

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

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