VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Не понимаю почему Gotoif не срабатывает

Проблемы Asterisk без вэб-оболочек и их решения

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

Ответить
testvtigercrm123
Сообщения: 34
Зарегистрирован: 13 июн 2019, 14:18

Не понимаю почему Gotoif не срабатывает

Сообщение testvtigercrm123 »

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

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

#!/bin/sh
rename="$1"
last_file="/etc/asterisk/scripts/result/lastvoice"
inbox="/var/spool/asterisk/voicemail/private/199/INBOX"
homedir="/var/www/asterisk-records_voice"
check_voice="$(ls -t "${inbox}"/ |grep "^msg0[0-9]\{3\}.WAV" |head -n1)"
check_last="$(cat "${last_file}")"

 if [[ "${check_voice}" == "${check_last}" ]]; then
    echo '5'; else
    cp "${inbox}"/${check_voice} "${homedir}"/${rename}.wav
    echo "${check_voice}"
 fi 
 echo "${check_voice}" > "${last_file}"
и вот такой диалплан на обработку

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

exten => h,1,Noop(Checked exist ${Voicename} ?)
 same => n,Set(Voice=${SHELL(/bin/bash /etc/asterisk/scripts/voicemail.sh ${Voicename})})
 same => n,GotoIf($[ "${Voice}" = "5" ]?end)
 same => n,NoOp( is - ${Voice})
 same => n,Set(CDR(recordingpath)=/var/www/asterisk-records_voice/${Voicename}.wav)
 same => n(end),Hangup()
вот такой verbose получается

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

Executing [h@call-in:1] NoOp("SIP/gsm_gateway-000036b3", "Checked exist 2019.11.09_18-29_From.+9922222222 ?") in new stack
Executing [h@call-in:2] Set("SIP/gsm_gateway-000036b3", "Voice=5
") in new stack
Executing [h@call-in:3] GotoIf("SIP/gsm_gateway-000036b3", "0?end") in new stack
Executing [h@call-in:4] NoOp("SIP/gsm_gateway-000036b3", " is - 5
") in new stack
Executing [h@call-in:5] Set("SIP/gsm_gateway-000036b3", "CDR(recordingpath)=/var/www/asterisk-records_voice/2019.11.09_18-29_From.+9922222222.wav") in new stack
Executing [h@call-in:6] Hangup("SIP/gsm_gateway-000036b3", "") in new stack
Spawn extension (call-in, h, 6) exited non-zero on 'SIP/gsm_gateway-000036b3'
MixMonitor close filestream (mixed)
End MixMonitor Recording SIP/gsm_gateway-000036b3

Не понимаю почему gotoif выдает 0, можете подсказать?
Аватара пользователя
zzuz
Сообщения: 1658
Зарегистрирован: 21 сен 2010, 13:33
Контактная информация:

Re: Не понимаю почему Gotoif не срабатывает

Сообщение zzuz »

is - 5
") in new stack
Потому что переменная равна "5\r" и не "5" . Ваш скрипт возвращает значение с переводом строки. Если там echo , то используйте его с опцией -n . Либо используйте printf .
Линия24 - Системы Массового Телефонного Обслуживания
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: Не понимаю почему Gotoif не срабатывает

Сообщение ded »

скорее всего не выполняется
SHELL(/bin/bash /etc/asterisk/scripts/voicemail.sh ${Voicename}). Откуда вы взяли такой синтаксис? Аппликации SHELL не существуетт в природе, Астериск воспринимает это как хитровыдуманную переменную. Наверное хотелось выполнить
System(/bin/bash /etc/asterisk/scripts/voicemail.sh ${Voicename}) ??

Возможно не хватает прав на выполнение voicemail.sh. Нормально запущенный Астериск работает от user - asterisk & group - asterisk.
Скрипты на выполнение хранятся не в /etc/asterisk/scripts а в /var/lib/asterisk/bin или /var/lib/asterisk/agi-bin
Писать команды на bash чтобы встраивать потом в лиал-план через System - моветон, ибо приводит к непредсказуемым результатам, что у вас и получилось. Нет обработчика ошибок, что там возвращает System(/bin/bash /etc/asterisk/scripts/voicemail.sh ${Voicename}) и возвращает ли вообще, а если нет, по какой причине? Это и есть проблема, которую вы пытаетесь теперь решать через форум. А обработка значения переменной ${Voicename} могла быть выполнена в диал-плане без использования shell / bash.

Перенос строки
") in new stack
в логе отчётливо виден, zzuz +++!
testvtigercrm123
Сообщения: 34
Зарегистрирован: 13 июн 2019, 14:18

Re: Не понимаю почему Gotoif не срабатывает

Сообщение testvtigercrm123 »

Спасибо за ответы, вечером проверю версию zzuz.

Нет, мне именно нужно SHELL чтобы вернуть значение в астериск. System насколько я помню просто исполняет без возврата значения.
Аппликации SHELL не существуетт в природе,
Причет тут application, если я использую функцию? https://wiki.asterisk.org/wiki/display/ ... FBCDEE0788

С правами все в порядке, скрипт исполняется и возвращает значение. Просто Gotoif постоянно 0 возвращал.
Скрипты на выполнение хранятся не в /etc/asterisk/scripts а в /var/lib/asterisk/bin или /var/lib/asterisk/agi-bin
где хочу, там и храню. Вы прям оправдываете свой никнейм, постоянно ворчите там, где это, казалось бы, не нужно.
А обработка значения переменной ${Voicename} могла быть выполнена в диал-плане без использования shell / bash
да можно, но товарищ zzuz советовал не городить в диалплане, то что можно выполнить в скрипте. https://forum.asterisk.ru/viewtopic.php ... 556#p87953
Аватара пользователя
Zavr2008
Сообщения: 2211
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: Не понимаю почему Gotoif не срабатывает

Сообщение Zavr2008 »

ТС, зачем делаете операцию на глазу через задний проход? поделитесь ?!!

Задачу можно решить гораздо проще, просто нужно перечитать одну хорошую книгу. Там же не только 3 главы..
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
testvtigercrm123
Сообщения: 34
Зарегистрирован: 13 июн 2019, 14:18

Re: Не понимаю почему Gotoif не срабатывает

Сообщение testvtigercrm123 »

Задачу можно решить гораздо проще
Вы про реализацию через бд или imap сервер?
Аватара пользователя
Zavr2008
Сообщения: 2211
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: Не понимаю почему Gotoif не срабатывает

Сообщение Zavr2008 »

Про то, что Вы хотите в телегу голосовые сообщения грузить таким кривым способом уже знают наверное все.
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
testvtigercrm123
Сообщения: 34
Зарегистрирован: 13 июн 2019, 14:18

Re: Не понимаю почему Gotoif не срабатывает

Сообщение testvtigercrm123 »

Вы хотите в телегу голосовые сообщения грузить
нет, мне они нужны для прослушки в ACDR

zuzz вы были правы, спасибо.
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH