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

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

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

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

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

Сообщение testvtigercrm123 » 11 ноя 2019, 11:23

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

Код: выделить все
#!/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, можете подсказать?
testvtigercrm123
 
Сообщений: 34
Зарегистрирован: 13 июн 2019, 15:18

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

Сообщение zzuz » 11 ноя 2019, 11:55

is - 5
") in new stack


Потому что переменная равна "5\r" и не "5" . Ваш скрипт возвращает значение с переводом строки. Если там echo , то используйте его с опцией -n . Либо используйте printf .
Линия24 - Системы Массового Телефонного Обслуживания
Аватар пользователя
zzuz
 
Сообщений: 1658
Зарегистрирован: 21 сен 2010, 13:33

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

Сообщение ded » 11 ноя 2019, 12:07

скорее всего не выполняется
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 +++!
ded
 
Сообщений: 15803
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение testvtigercrm123 » 11 ноя 2019, 13:58

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

Нет, мне именно нужно SHELL чтобы вернуть значение в астериск. System насколько я помню просто исполняет без возврата значения.
Аппликации SHELL не существуетт в природе,

Причет тут application, если я использую функцию? https://wiki.asterisk.org/wiki/display/AST/Function_SHELL;jsessionid=D7E221860D77AB0FF09EF9FBCDEE0788

С правами все в порядке, скрипт исполняется и возвращает значение. Просто Gotoif постоянно 0 возвращал.
Скрипты на выполнение хранятся не в /etc/asterisk/scripts а в /var/lib/asterisk/bin или /var/lib/asterisk/agi-bin

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

А обработка значения переменной ${Voicename} могла быть выполнена в диал-плане без использования shell / bash

да можно, но товарищ zzuz советовал не городить в диалплане, то что можно выполнить в скрипте. https://forum.asterisk.ru/viewtopic.php?f=5&t=14556#p87953
testvtigercrm123
 
Сообщений: 34
Зарегистрирован: 13 июн 2019, 15:18

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

Сообщение Zavr2008 » 11 ноя 2019, 14:08

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

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

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

Сообщение testvtigercrm123 » 11 ноя 2019, 15:14

Задачу можно решить гораздо проще

Вы про реализацию через бд или imap сервер?
testvtigercrm123
 
Сообщений: 34
Зарегистрирован: 13 июн 2019, 15:18

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

Сообщение Zavr2008 » 11 ноя 2019, 16:50

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

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

Сообщение testvtigercrm123 » 11 ноя 2019, 23:52

Вы хотите в телегу голосовые сообщения грузить

нет, мне они нужны для прослушки в ACDR

zuzz вы были правы, спасибо.
testvtigercrm123
 
Сообщений: 34
Зарегистрирован: 13 июн 2019, 15:18


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

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

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

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