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

João Marcelo Queiroz jmbq em bol.com.br
Quinta Junho 7 14:24:03 BRT 2012


Mike,

havia esquecido completamente da possibilidade de puxar via variável de sistema ($#). Agora, depois de visto, ficou fácil.

É a história do parafuso. A máquina quebra ninguém consegue consertar, fábrica parada, vem alguém de fora aperta um parafuso e resolve o problema, ou seja, o problema parece pequeno depois de vista a solução mas o mérito é de quem sabia que poderia apertar aquele parafuso.


Obrigadão cara!!

Sucesso!


João Marcelo Queiroz


Em 06/06/2012, às 18:57, Mike Tesliuk escreveu:

> 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
> 
> _______________________________________________
> 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