Страница 1 из 1

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

Добавлено: 11 ноя 2019, 10:23
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, можете подсказать?

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

Добавлено: 11 ноя 2019, 10:55
zzuz
is - 5
") in new stack
Потому что переменная равна "5\r" и не "5" . Ваш скрипт возвращает значение с переводом строки. Если там echo , то используйте его с опцией -n . Либо используйте printf .

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

Добавлено: 11 ноя 2019, 11:07
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 +++!

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

Добавлено: 11 ноя 2019, 12:58
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

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

Добавлено: 11 ноя 2019, 13:08
Zavr2008
ТС, зачем делаете операцию на глазу через задний проход? поделитесь ?!!

Задачу можно решить гораздо проще, просто нужно перечитать одну хорошую книгу. Там же не только 3 главы..

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

Добавлено: 11 ноя 2019, 14:14
testvtigercrm123
Задачу можно решить гораздо проще
Вы про реализацию через бд или imap сервер?

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

Добавлено: 11 ноя 2019, 15:50
Zavr2008
Про то, что Вы хотите в телегу голосовые сообщения грузить таким кривым способом уже знают наверное все.

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

Добавлено: 11 ноя 2019, 22:52
testvtigercrm123
Вы хотите в телегу голосовые сообщения грузить
нет, мне они нужны для прослушки в ACDR

zuzz вы были правы, спасибо.