[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