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

AGI variables in Bash

СообщениеДобавлено: 09 окт 2013, 15:36
Bansher
Второй день бьюсь не доходит до меня никак.

Строчка в диалплане:
Код: выделить все
exten => 4444,n,AGI(touch.sh,1000,2000)


При звонке я вижу в Agi debug передаваемые аргументы:
Код: выделить все
<SIP/650-000031af>AGI Tx >> agi_arg_1: 1000
<SIP/650-000031af>AGI Tx >> agi_arg_2: 2000


В каком виде они приходят в bash скрипт??? Ни $agi_arg_1, ни ${agi_arg_1}, ни ${agi_arg_1[0]} там нет. В каких переменных они хранятся?

Re: AGI variables in Bash

СообщениеДобавлено: 09 окт 2013, 15:56
menzoberronzan
Не сталкивался с agi, но в bash аргументы записываются в $1,$2,$3...
Проверьте
Код: выделить все
echo $1
echo $2

Re: AGI variables in Bash

СообщениеДобавлено: 09 окт 2013, 16:02
zzuz

Re: AGI variables in Bash

СообщениеДобавлено: 09 окт 2013, 21:24
Samael28
Код: выделить все
#!/bin/bash
declare -a array
while read -e ARG && [ "$ARG" ] ; do
        array=(` echo $ARG | sed -e 's/://'`)
        export ${array[0]}=${array[1]}
done

# following variables are available from asterisk
echo $agi_request >&2
echo $agi_channel >&2
echo $agi_language >&2
echo $agi_type >&2
echo $agi_uniqueid >&2
echo $agi_callerid >&2
echo $agi_dnid >&2
echo $agi_rdnis >&2
echo $agi_context >&2
echo $agi_extension >&2
echo $agi_priority >&2
echo $agi_enhanced >&2

checkresults() {
        while read line
        do
        case ${line:0:4} in
        "200 " ) echo $line >&2
                 return;;
        "510 " ) echo $line >&2
                 return;;
        "520 " ) echo $line >&2
                 return;;
        *      ) echo $line >&2;;       #keep on reading those Invlid command
                                        #command syntax until "520 End ..."
        esac
        done
}

Re: AGI variables in Bash

СообщениеДобавлено: 10 окт 2013, 10:04
Bansher
Всем спасибо. Аргументы действительно передаются в $1,$2 ...
Правда обращаться к скрипту пришлось не через AGI, а через конструкцию
Код: выделить все
exten => 4444,n,Set(RESULT=${SHELL(/var/lib/asterisk/agi-bin/touch.sh ${arg})})
чтобы получить необходимые аргументы обратно.

Re: AGI variables in Bash

СообщениеДобавлено: 10 окт 2013, 10:31
ded
Могучие семимильные костыли.
Что же Вы хотели делать? Какова была конечная цель?

Re: AGI variables in Bash

СообщениеДобавлено: 15 окт 2013, 13:37
Bansher
Цель простая: произвести вычисления в скрипте и передать результат дальше в диалплан.

Re: AGI variables in Bash

СообщениеДобавлено: 15 окт 2013, 13:44
Bansher
Мда, похоже использовать bash в качестве AGI жуткий гемор.

Re: AGI variables in Bash

СообщениеДобавлено: 15 окт 2013, 17:10
shumiloff
Вполне себе использую давно bash в качестве AGI. Чего только на нём не делал - всё работает как часы.

Для того, чтобы получить в диалплан обратно параметры из bash, нужно сделать следующее:

Код: выделить все
#!/bash

# тут получили параметры, переданные скрипту как $1, $2 и т.п..
# произвели какие-то вычисления и нам нужно вернуть в диалплан
# переменную $res и использовать её в диалплане как bashres:

echo "SET VARIABLE bashres $res"


В диалплане после этого на время жизни канала будет доступно значение локальной переменной bashres:

Код: выделить все
....
exten => s,n,AGI(myscript,${ARG1}, ${ARG2})
exten => s,n,NoOp(Result: ${bashres})
.....


Ничего сложного

Re: AGI variables in Bash

СообщениеДобавлено: 16 окт 2013, 08:46
virus_net
Bansher писал(а):похоже использовать bash в качестве AGI жуткий гемор

ну так есть же и другие варианты: perl и php - пользуй
я пользуюсь AGI на PHP

shumiloff писал(а):чтобы получить в диалплан обратно параметры из bash

наверно все же стоит уточнить, что не только из bash, из любого AGI скрипта (AGI commands)