[AsteriskBrasil] Ajuda AGI - Recuperar variável no script

Mike Tesliuk mike em tesliuk.com
Quarta Junho 6 18:57:43 BRT 2012


Vamos la:

Script1:
--------------
#!/bin/bash

TESTE=$1

echo "saida: ${TESTE}" > /tmp/teste.txt

------------
extension:

exten => 1111,1,Answer()
exten => 1111,n,Set(TESTE="CADE A VARIAVEL")
exten => 1111,n,Agi(teste.sh,${TESTE})
exten => 1111,n,Hangup()

--------------
ao executar:

root em pabx:/etc/asterisk# cat /tmp/teste.txt
saida: CADE A VARIAVEL


até aqui funcionou blz

----------------

Script 2:

#!/bin/bash


TESTE=$1


echo "NOOP \"TESTE DO MIKE\""

echo "saida: ${TESTE}" > /tmp/teste.txt




------------

Execução após ativar o debug do agi (agi set debug on)

<SIP/114-0000074a>AGI Tx >> agi_request: teste.sh
<SIP/114-0000074a>AGI Tx >> agi_channel: SIP/114-0000074a
<SIP/114-0000074a>AGI Tx >> agi_language: pt_BR
<SIP/114-0000074a>AGI Tx >> agi_type: SIP
<SIP/114-0000074a>AGI Tx >> agi_uniqueid: 1339018059.1904
<SIP/114-0000074a>AGI Tx >> agi_version: 1.8.8.1
<SIP/114-0000074a>AGI Tx >> agi_callerid: 114
<SIP/114-0000074a>AGI Tx >> agi_calleridname: Mike
<SIP/114-0000074a>AGI Tx >> agi_callingpres: 0
<SIP/114-0000074a>AGI Tx >> agi_callingani2: 0
<SIP/114-0000074a>AGI Tx >> agi_callington: 0
<SIP/114-0000074a>AGI Tx >> agi_callingtns: 0
<SIP/114-0000074a>AGI Tx >> agi_dnid: 1111
<SIP/114-0000074a>AGI Tx >> agi_rdnis: unknown
<SIP/114-0000074a>AGI Tx >> agi_context: interno
<SIP/114-0000074a>AGI Tx >> agi_extension: 1111
<SIP/114-0000074a>AGI Tx >> agi_priority: 3
<SIP/114-0000074a>AGI Tx >> agi_enhanced: 0.0
<SIP/114-0000074a>AGI Tx >> agi_accountcode:
<SIP/114-0000074a>AGI Tx >> agi_threadid: 139687365965568
<SIP/114-0000074a>AGI Tx >> agi_arg_1: CADE A VARIAVEL
<SIP/114-0000074a>AGI Tx >>
<SIP/114-0000074a>AGI Rx << NOOP "TESTE DO MIKE"
<SIP/114-0000074a>AGI Tx >> 200 result=0

---------------

Script 3

#!/bin/bash


TESTE=$1

echo "NOOP \"TESTE DO MIKE\""
echo "saida: ${TESTE}" > /tmp/teste.txt
echo " SET VARIABLE TESTE2 \"mike testou\""


------------------

Extension:

exten => 1111,1,Answer()
exten => 1111,n,Set(TESTE="CADE A VARIAVEL")
exten => 1111,n,Agi(teste.sh,${TESTE})
exten => 1111,n,NoOp(TESTE2: ${TESTE2})
exten => 1111,n,Hangup()



--------------
Execução: CLI

     -- Executing [1111 em interno:1] Answer("SIP/114-0000075b", "") in new 
stack
     -- Executing [1111 em interno:2] Set("SIP/114-0000075b", "TESTE="CADE 
A VARIAVEL"") in new stack
     -- Executing [1111 em interno:3] AGI("SIP/114-0000075b", 
"teste.sh,"CADE A VARIAVEL"") in new stack
     -- Launched AGI Script /var/lib/asterisk/agi-bin/teste.sh
     -- <SIP/114-0000075b>AGI Script teste.sh completed, returning 0
     -- Executing [1111 em interno:4] NoOp("SIP/114-0000075b", "TESTE2: 
mike testou") in new stack
     -- Executing [1111 em interno:5] Hangup("SIP/114-0000075b", "") in new 
stack


------------

Debug do agi
<SIP/114-0000075b>AGI Tx >> agi_request: teste.sh
<SIP/114-0000075b>AGI Tx >> agi_channel: SIP/114-0000075b
<SIP/114-0000075b>AGI Tx >> agi_language: pt_BR
<SIP/114-0000075b>AGI Tx >> agi_type: SIP
<SIP/114-0000075b>AGI Tx >> agi_uniqueid: 1339018657.1921
<SIP/114-0000075b>AGI Tx >> agi_version: 1.8.8.1
<SIP/114-0000075b>AGI Tx >> agi_callerid: 114
<SIP/114-0000075b>AGI Tx >> agi_calleridname: Mike
<SIP/114-0000075b>AGI Tx >> agi_callingpres: 0
<SIP/114-0000075b>AGI Tx >> agi_callingani2: 0
<SIP/114-0000075b>AGI Tx >> agi_callington: 0
<SIP/114-0000075b>AGI Tx >> agi_callingtns: 0
<SIP/114-0000075b>AGI Tx >> agi_dnid: 1111
<SIP/114-0000075b>AGI Tx >> agi_rdnis: unknown
<SIP/114-0000075b>AGI Tx >> agi_context: interno
<SIP/114-0000075b>AGI Tx >> agi_extension: 1111
<SIP/114-0000075b>AGI Tx >> agi_priority: 3
<SIP/114-0000075b>AGI Tx >> agi_enhanced: 0.0
<SIP/114-0000075b>AGI Tx >> agi_accountcode:
<SIP/114-0000075b>AGI Tx >> agi_threadid: 139687364441856
<SIP/114-0000075b>AGI Tx >> agi_arg_1: CADE A VARIAVEL
<SIP/114-0000075b>AGI Tx >>
<SIP/114-0000075b>AGI Rx << NOOP "TESTE DO MIKE"
<SIP/114-0000075b>AGI Tx >> 200 result=0
<SIP/114-0000075b>AGI Rx <<  SET VARIABLE TESTE2 "mike testou"
<SIP/114-0000075b>AGI Tx >> 200 result=1
     -- <SIP/114-0000075b>AGI Script teste.sh completed, returning 0



acho que isso deve dar base pra voce fazer tuas brincadeiras


Em 06-06-2012 18:35, Mike Tesliuk escreveu:
> vou testar e ja posto :)
>
> Em 06-06-2012 17:49, João Marcelo Queiroz escreveu:
>> Mike,
>>
>> obrigado pela ajuda. Já havia visto esse site, porém nesse caso ele utiliza uma variável já definida ($agi_callerid), no meu caso eu a defini (${teste}). Já havia tentado dessa forma, ainda sem sucesso.
>>
>> Sobre a linguagem, quero primeiro fazer alguns exemplos em shell, depois vou pra PHP. A documentação em shell é escassa.
>>
>>
>> Obrigado,
>>
>> João Marcelo
>>
>>
>> Em 06/06/2012, às 17:34, Mike Tesliuk escreveu:
>>
>>> da uma olhada aqui.
>>>
>>> http://yakko.cs.wmich.edu/~drclaw/asterisk/cidname/
>>>
>>> eu pessoalmente recomendaria a utilização de outra linguagem, no meu
>>> caso eu utilizo perl,
>>>
>>> em perl ficaria algo assim
>>>
>>>
>>> #!/bin/bash
>>>
>>> use Asterisk::AGI;
>>>
>>> $AGI = new Asterisk::AGI;
>>>
>>> %input = $AGI->ReadParse();
>>>
>>>
>>> $teste=$AGI->get_variable('TESTE');
>>>
>>> $AGI->exec('NoOp","$teste");
>>>
>>>
>>>
>>>
>>>
>>> Em 06-06-2012 17:27, João Marcelo Queiroz escreveu:
>>>> Estou ainda iniciando em AGI e resolvi fazer um pequeno script em Shell para testar.
>>>>
>>>> Ele é bem simples, faz uma consulta em um banco MySQL, retorna uma data, envia para o AGI que envia a data para o arquivo.
>>>> O problema é que, apesar de ler muita coisa, não encontrei como faço para recuperar o valor da variável dentro do script.
>>>> Posso estar errando na sintaxe, mas tou no escuro.
>>>>
>>>> Como recuperaria esse valor para trabalhar com ele no script? Enviar de volta para o * é simples, meu problema é recuperar.
>>>>
>>>>
>>>>
>>>> exten=>7713,1,Answer()
>>>> exten=>7713,n,MYSQL(Connect connid 127.0.0.1 root senha TesteCo)
>>>> exten=>7713,n,MYSQL(Query resultid ${connid} SELECT\ Marcado\ FROM\ Coluna\ WHERE\ Campo=\"12345\")
>>>> exten=>7713,n,MYSQL(Fetch fetchid ${resultid} teste)
>>>> exten=>7713,n,MYSQL(Clear ${resultid})
>>>> exten=>7713,n,AGI(echo_data.sh) ->    tentei também (echo_data.sh|${teste}) sem sucesso.
>>>> exten=>7713,n,MYSQL(Disconnect ${connid})
>>>> exten=>7713,n,Hangup()
>>>>
>>>>
>>>> #!/bin/bash
>>>>
>>>> # Consume all variables sent by Asterisk
>>>> while read VAR&&    [ -n ${VAR} ] ; do : ; done
>>>>
>>>> # Answer the call.
>>>> #echo "ANSWER"
>>>> #read RESPONSE
>>>>
>>>> # teste de fala
>>>> echo 'GET FULL VARIABLE ${teste}'
>>>> read RESPONSE
>>>>
>>>> #abaixo eu fiz várias tentativas de obter o valor da variável, sem sucesso.
>>>> Dia=`[${teste}] | cut -f1 -d:`
>>>> Mes=`${teste} | cut -f2 -d:`
>>>> Ano=`"${teste}" | cut -f3 -d:`
>>>>
>>>> echo " Dia= $Dia , Mes= $Mes , Ano= $Ano">    teste.ler
>>>>
>>>> exit 0
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Obrigado,
>>>>
>>>>
>>>> João Marcelo Queiroz
>>>> _______________________________________________
>>>> KHOMP Inovação: External Board Series
>>>> Módulos de 1/2 rack e 1U para todas as interfaces e soluções Asterisk e FreeSWITCH.
>>>> Tenha a External Series Experience na sua aplicação. Visite www.khomp.com
>>>> _______________________________________________
>>>> DIGIVOICE  Fabricante de Placas de Voz e Channel Bank
>>>> 20 anos de experiência com E1(R2/ISDN), FXS, FXO e GSM
>>>> Centro Treinamento - Curso de PABX IP -  Asterisk  - Site  www.digivoice.com.br
>>>> ________
>>>> YEALINK: Telefones IP e VídeoPhones IP com o melhor custo/benefício do mercado.
>>>> email: yealink em commlogik.com.br | www.commlogik.com.br | (11) 5503-1011
>>>> ______________________________________________
>>>> Para remover seu email desta lista, basta enviar um email em branco para asteriskbrasil-unsubscribe em listas.asteriskbrasil.org
>>> _______________________________________________
>>> KHOMP Inovação: External Board Series
>>> Módulos de 1/2 rack e 1U para todas as interfaces e soluções Asterisk e FreeSWITCH.
>>> Tenha a External Series Experience na sua aplicação. Visite www.khomp.com
>>> _______________________________________________
>>> DIGIVOICE  Fabricante de Placas de Voz e Channel Bank
>>> 20 anos de experiência com E1(R2/ISDN), FXS, FXO e GSM
>>> Centro Treinamento - Curso de PABX IP -  Asterisk  - Site  www.digivoice.com.br
>>> ________
>>> YEALINK: Telefones IP e VídeoPhones IP com o melhor custo/benefício do mercado.
>>> email: yealink em commlogik.com.br | www.commlogik.com.br | (11) 5503-1011
>>> ______________________________________________
>>> Para remover seu email desta lista, basta enviar um email em branco para asteriskbrasil-unsubscribe em listas.asteriskbrasil.org
>> _______________________________________________
>> KHOMP Inovação: External Board Series
>> Módulos de 1/2 rack e 1U para todas as interfaces e soluções Asterisk e FreeSWITCH.
>> Tenha a External Series Experience na sua aplicação. Visite www.khomp.com
>> _______________________________________________
>> DIGIVOICE  Fabricante de Placas de Voz e Channel Bank
>> 20 anos de experiência com E1(R2/ISDN), FXS, FXO e GSM
>> Centro Treinamento - Curso de PABX IP -  Asterisk  - Site  www.digivoice.com.br
>> ________
>> YEALINK: Telefones IP e VídeoPhones IP com o melhor custo/benefício do mercado.
>> email: yealink em commlogik.com.br | www.commlogik.com.br | (11) 5503-1011
>> ______________________________________________
>> Para remover seu email desta lista, basta enviar um email em branco para asteriskbrasil-unsubscribe em listas.asteriskbrasil.org
> _______________________________________________
> KHOMP Inovação: External Board Series
> Módulos de 1/2 rack e 1U para todas as interfaces e soluções Asterisk e FreeSWITCH.
> Tenha a External Series Experience na sua aplicação. Visite www.khomp.com
> _______________________________________________
> DIGIVOICE  Fabricante de Placas de Voz e Channel Bank
> 20 anos de experiência com E1(R2/ISDN), FXS, FXO e GSM
> Centro Treinamento - Curso de PABX IP -  Asterisk  - Site  www.digivoice.com.br
> ________
> YEALINK: Telefones IP e VídeoPhones IP com o melhor custo/benefício do mercado.
> email: yealink em commlogik.com.br | www.commlogik.com.br | (11) 5503-1011
> ______________________________________________
> Para remover seu email desta lista, basta enviar um email em branco para asteriskbrasil-unsubscribe em listas.asteriskbrasil.org



Mais detalhes sobre a lista de discussão AsteriskBrasil