[AsteriskBrasil] RES: RES: RES: Agi com PHP

Danilo Almeida danilo.almeida em g1telecom.com.br
Segunda Agosto 20 14:06:13 BRT 2012


Mike

Minha ideia é fazer funcionar esse script simples para poder evoluir. Mas pretendo fazer scripts mais complexos com PHP (linguagem que já trabalho).
Pretendo aperfeiçoar uma ferramenta de relatório que já criei e creio que com o phpagi será mais viável(além de mais fácil) para produção.

Mais enfim, consegui fazer funcionar, não sei se era isso, mais La vai;

Eu não sabia que tinha que ser criado o arquivo phpagi-asmanager.php, ai peguei todos os arquivos que vem junto quando baixa o agiphp e jogeui dentro do mesmo diretório.

Ai mudei o arquivo portabilidade.php

#!/usr/bin/php -q
<?php
require_once("phpagi.php");
$agi = new AGI();
$numero=$argv[1];
$agi->set_variable("NUMERO",$numero);
exit();
?>

O retorno no CLI foi este:

-- Executing [99719420 em contexto-ramais-voip:3] AGI("SIP/1003-00000073", "portabilidade.php, 99719420") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/portabilidade.php
<SIP/1003-00000073>AGI Tx >> agi_request: portabilidade.php
<SIP/1003-00000073>AGI Tx >> agi_channel: SIP/1003-00000073
<SIP/1003-00000073>AGI Tx >> agi_language: en
<SIP/1003-00000073>AGI Tx >> agi_type: SIP
<SIP/1003-00000073>AGI Tx >> agi_uniqueid: 1345480934.158
<SIP/1003-00000073>AGI Tx >> agi_version: 1.6.2.20
<SIP/1003-00000073>AGI Tx >> agi_callerid: 1003
<SIP/1003-00000073>AGI Tx >> agi_calleridname: 1003
<SIP/1003-00000073>AGI Tx >> agi_callingpres: 0
<SIP/1003-00000073>AGI Tx >> agi_callingani2: 0
<SIP/1003-00000073>AGI Tx >> agi_callington: 0
<SIP/1003-00000073>AGI Tx >> agi_callingtns: 0
<SIP/1003-00000073>AGI Tx >> agi_dnid: 99719420
<SIP/1003-00000073>AGI Tx >> agi_rdnis: unknown
<SIP/1003-00000073>AGI Tx >> agi_context: contexto-ramais-voip
<SIP/1003-00000073>AGI Tx >> agi_extension: 99719420
<SIP/1003-00000073>AGI Tx >> agi_priority: 3
<SIP/1003-00000073>AGI Tx >> agi_enhanced: 0.0
<SIP/1003-00000073>AGI Tx >> agi_accountcode:
<SIP/1003-00000073>AGI Tx >> agi_threadid: 89213840
<SIP/1003-00000073>AGI Tx >> agi_arg_1:  99719420
<SIP/1003-00000073>AGI Tx >>
<SIP/1003-00000073>AGI Rx <<
<SIP/1003-00000073>AGI Tx >> 510 Invalid or unknown command
<SIP/1003-00000073>AGI Rx << SET VARIABLE NUMERO " 99719420"
<SIP/1003-00000073>AGI Tx >> 200 result=1
    -- <SIP/1003-00000073>AGI Script portabilidade.php completed, returning 0
    -- Executing [99719420 em contexto-ramais-voip:4] NoOp("SIP/1003-00000073", "---> O Numero discado foi  99719420 <---") in new stack

Desculpem pela minha burrice, mais realmente achava que só adicionando a classe phpagi.php já resolveria o problema, estou á algum tempo tentando fazer funcionar e nunca achei nenhum aviso disto.

Agora irei criar meu script de portabilidade onde, além de direcionar as ligações para a operadora desejada, também fará gravação no banco para relatórios futuros, como por exemplo, que operadora é mais utilizada, entre outras coisas.

Obrigado a todos pela imensa ajuda, e quando o script estiver pronto e funcionado, posto para quem quiser utilizar, apesar de a maioria já ter algum rodando...rsrs

att

Danilo Ricardo de Almeida
Engenharia e Desenvolvimento / Engineering and Development

GRUPO G1 TELECOMUNICAÇÕES LTDA.

Rua: Ponta Grossa, n°587 – Jardim Dom Bosco
CEP: 86060-450 - Londrina - PR
CFone/Fax: +55 43 3028-1120 / +55 43 3028-1170
/E-mail: danilo.almeida em g1telecom.com.br 
 MSN:    danilo.almeida em g1telecom.com.br
.Suporte:    suporte em g1telecom.com.br
.Site:     www.g1telecom.com.br

  “VOCÊ PRECISA MESMO IMPRIMIR?”


-----Mensagem original-----
De: asteriskbrasil-bounces em listas.asteriskbrasil.org [mailto:asteriskbrasil-bounces em listas.asteriskbrasil.org] Em nome de Mike Tesliuk
Enviada em: Monday, August 20, 2012 12:58 PM
Para: asteriskbrasil em listas.asteriskbrasil.org
Assunto: Re: [AsteriskBrasil] RES: RES: Agi com PHP


Você tentou setar o debug no phpagi.conf ?

Se a sua ideia é fazer algo tão simples como você demonstrou ai não seria mais pratico usar em bash então ? A vantagem de se usar php ou perl é o fato de se ter a biblioteca pronta para facilitar o trabalho além de usar os recursos da linguagem para tratar string e etc... , se você não vai usar estes recursos então a utilização do bash se torna viável.

http://www.mail-archive.com/asteriskbrasil@listas.asteriskbrasil.org/msg58933.html

Em 20-08-2012 12:15, Danilo Almeida escreveu:
> Pessoal, fiz uma alteração no script do Ronaldo e funcionou
>
> No lugar de aspas simples coloquei duplas;
>
> #!/usr/bin/php -q
> <?php
> $numero='123456789';
> echo "set variable NUMERO $numero \n"; exit(); ?>
>
>      -- Executing [91538563 em contexto-ramais-voip:4] AGI("SIP/5001-00000050", "portabilidade_teste.php") in new stack
>      -- Launched AGI Script /var/lib/asterisk/agi-bin/portabilidade_teste.php
>      -- <SIP/5001-00000050>AGI Script portabilidade_teste.php completed, returning 0
>      -- Executing [91538563 em contexto-ramais-voip:5] 
> NoOp("SIP/5001-00000050", "---> O Numero discado foi 123456789 <---") 
> in new stack
>
> Só que queria trabalhar com a classe Agi, pois esse script simples 
> ficará um pouco mais complexo
>
> Obrigado pela Ajuda pessoal
>
> att
>
> Danilo Ricardo de Almeida
> Engenharia e Desenvolvimento / Engineering and Development
>
> GRUPO G1 TELECOMUNICAÇÕES LTDA.
>
> Rua: Ponta Grossa, n°587 – Jardim Dom Bosco
> CEP: 86060-450 - Londrina - PR
> CFone/Fax: +55 43 3028-1120 / +55 43 3028-1170
> /E-mail: danilo.almeida em g1telecom.com.br
>   MSN:    danilo.almeida em g1telecom.com.br
> .Suporte:    suporte em g1telecom.com.br
> .Site:     www.g1telecom.com.br
>
> P  “VOCÊ PRECISA MESMO IMPRIMIR?”
>
>
> -----Mensagem original-----
> De: asteriskbrasil-bounces em listas.asteriskbrasil.org 
> [mailto:asteriskbrasil-bounces em listas.asteriskbrasil.org] Em nome de 
> Danilo Almeida Enviada em: Monday, August 20, 2012 12:01 PM
> Para: asteriskbrasil em listas.asteriskbrasil.org
> Assunto: [AsteriskBrasil] RES: Agi com PHP
>
> Também não estou conseguindo responder o antigo, segue respostas neste.
>
> Mike
>
> Obrigado pela respostas você como sempre ajudando o pessoal na lista.
> Mais o meu problema é que, não estou conseguindo capturar o valor da variável no asterisk, sendo que com o mesmo script, nosso amigo SkFogo conseguiu resultar e obteve êxito.
> E como pode ver nos posts anteriores, mesmo inserindo um valor a variável manualmente não consigo setar o valor com o método set_variable() para pegar no asterisk.
>
> ..................................................
>
> SkFogo
>
> Não utilizo o Gtalk, mais segue as infoirmações que me pediu
>
> Versaão do phpagi: 2.14 (já utlizei a versão 2.20 e também não 
> funcionou) Versão do php:  5.1.6
>
> Utilizo o skype no trablho, se tiver posso te add.
>
> Obrigado
>
> ...................................................
>
> Ronaldo
>
> Já testei também e nada de funfar a parada..rsrs
>
> Obrigado
>
> Att
>
> Danilo Ricardo de Almeida
>
> -----Mensagem original-----
> De: asteriskbrasil-bounces em listas.asteriskbrasil.org 
> [mailto:asteriskbrasil-bounces em listas.asteriskbrasil.org] Em nome de 
> Mike Tesliuk Enviada em: Monday, August 20, 2012 11:21 AM
> Para: asteriskbrasil em listas.asteriskbrasil.org
> Assunto: [AsteriskBrasil] Agi com PHP
>
> Olá Senhores,
>
> Não sei se os moderadores colocaram algum limite de resposta no topico ou algo assim mas a mensagem não quer chegar, então estou alterando o assunto para que vocês possam conferir.
>
>
> Deixem me dar uns pitacos.
>
> Não costumo trabalhar com agi em php mas sim com perl, mas vamos la.
>
> Olhando o phpagi.php , ao procurar sobre get_variable ele traz
>
>      /**
>       * Fetch the value of a variable.
>       *
>       * Does not work with global variables. Does not work with some variables that are generated by modules.
>       *
>       * @link http://www.voip-info.org/wiki-get+variable
>       * @link http://www.voip-info.org/wiki-Asterisk+variables
>       * @param string $variable name
>       * @return array, see evaluate for return information. ['result'] is 0 if variable hasn't been set, 1 if it has. ['data'] holds the value.
>       */
>       function get_variable($variable)
>       {
>         return $this->evaluate("GET VARIABLE $variable");
>
>
>
> isso significa, que se utilizar $meunumero = $AGI->get_variable("NUMERO"); ele deverá trazer a variavel.
>
> Ao iniciar a classe AGI, ele ja inicia os seguintes valores
>
>       *   agi_request - name of agi script
>       *   agi_channel - current channel
>       *   agi_language - current language
>       *   agi_type - channel type (SIP, ZAP, IAX, ...)
>       *   agi_uniqueid - unique id based on unix time
>       *   agi_callerid - callerID string
>       *   agi_dnid - dialed number id
>       *   agi_rdnis - referring DNIS number
>       *   agi_context - current context
>       *   agi_extension - extension dialed
>       *   agi_priority - current priority
>       *   agi_enhanced - value is 1.0 if started as an EAGI script
>       *   agi_accountcode - set by SetAccount in the dialplan
>       *   agi_network - value is yes if this is a fastagi
>       *   agi_network_script - name of the script to execute
>
>
> , ou seja, ali voce ja tem qual o extension que você ta rodando, qual o callerid e etc...
>
>
>
>
> , ou seja, pra testar realizei a criação de um pequeno script.
>
> No meu extension:
>
>
> exten => 441,1,Answer()
> exten => 441,n,Set(TESTEVAR="123456")
> exten => 441,n,AGI(teste.php)
> exten => 441,n,NoOp(${TESTEVAR2})
> exten => 441,n,Hangup()
>
>
>
>
> No meu script
> #!/usr/bin/php
> <?php
>           include_once("phpagi.php");
>
>           // Instanciando o AGI
>           $agi = new AGI();
>
>           $testevar = $agi->get_variable("TESTEVAR");
>
>           $agi->exec("NOOP", "VALOR\ DE\ TESTEVAR:\ $testevar[data]");
>
>           //Se quiser fazer debug da variavel utilize o parametro abaixo
>           // e defina o debug=true no arquivo /etc/asterisk/phpagi.conf
>           //foreach($testevar as $i => $value){
>                   //$agi->conlog("VALOR[$i] $testevar[$i]");
>           //}
>
>           $agi->set_variable("TESTEVAR2", "MIKE TESTOU");
>
> ?>
>
>
>
>
> Minha execução
>
>
>       -- Executing [441 em interno:1] Answer("SIP/114-00000680", "") in new stack
>       -- Executing [441 em interno:2] Set("SIP/114-00000680",
> "TESTEVAR="123456"") in new stack
>       -- Executing [441 em interno:3] AGI("SIP/114-00000680", "teste.php") in new stack
>       -- Launched AGI Script /var/lib/asterisk/agi-bin/teste.php
>       -- AGI Script Executing Application: (NOOP) Options: (VALOR DE
> TESTEVAR: 123456)
>       -- <SIP/114-00000680>AGI Script teste.php completed, returning 0
>       -- Executing [441 em interno:4] NoOp("SIP/114-00000680", "MIKE
> TESTOU") in new stack
>       -- Executing [441 em interno:5] Hangup("SIP/114-00000680", "") in 
> new stack
>
>
>
>
>
> Como podem ver, defini uma variavel no dialplan, recuperei no agi, 
> defini uma no agi, e recuperei no dialplan
>
>
>
> _______________________________________________
> 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