O AGI pode ser bem mais complexo. Segue abaixo um exemplo de um AGI que consulta banco de dados e valida senhas. Este caso que coloquei abaixo é um sistema de regitro de ponto pelo asterisk. Veja que no extensions eu peço a matricula, logo após em submeto a matricula ao AGI que me retorna se a matricula existe e a senha. Logo abaixo eu peço a senha e confiro com o que o AGI me retornou, se tudo estiver correto eu chamo outro AGI que insere o registro no banco de dados. Ainda tem outros AGIs que alteram a senha por exemplo. O AGI então é um php como qualquer outro sem a parte html, com ele é possivel acessar banco de dados, fazer testes logicos bem mais complexos que no extensions e de forma mais facil. Se tiver duvidas é só falar. Conteudo do extensions: [teleponto] exten => 1000,1,NoOp();Answer exten => 1000,2,Wait(1) exten => 1000,3,NoOp() exten => 1000,4,Read(matricula|/mmq/sounds/matricula|4||1|5) exten => 1000,5,AGI(WhoIsMatricula.php|${matricula}) exten => 1000,6,Hangup exten => 1001,1,Read(senha|/mmq/sounds/senha|4||1|5) exten => 1001,2,GotoIf($[${senhadb} = ${senha}])?teleponto,1001,5:teleponto,1001,3) exten => 1001,3,Playback(/mmq/sounds/senha_nao_confere) exten => 1001,4,Hangup exten => 1001,5,AGI(RegistraPonto.php|${matricula}|${datahora}) exten => 1001,6,NoOp() exten => 1001,7,Hangup exten => 1002,1,Playback(/mmq/sounds/voce_acessou_o_teleponto_pela_primeira_vez) exten => 1002,2,Read(senha|/mmq/sounds/digite_sua_nova_senha|4||1|5) exten => 1002,3,Read(senha2|/mmq/sounds/redigite_sua_nova_senha|4||1|5) exten => 1002,4,GotoIf($[${senha} = ${senha2}]?teleponto,1002,7:teleponto,1002,5) exten => 1002,5,Playback(/mmq/sounds/senha_nao_confere) exten => 1002,6,Goto(teleponto,1002,2) exten => 1002,7,AGI(AlteraSenha.php|${matricula}|${senha}) exten => 1002,8,NoOp();Playback(error-number) exten => 1002,9,Hangup exten => 1002,10,Playback(/mmq/sounds/senha_alterada_com_sucesso) exten => 1002,11,Hangup
Conteudo do AGI PHP que valida a matricula #!/usr/bin/php5 -q <?php set_time_limit(25); ob_implicit_flush(false); error_reporting(0); $stdin = fopen( 'php://stdin', 'r' ); if (!defined('STDIN')){ define('STDIN',fopen('php://stdin','r'));} if (!defined('STDOUT')){ define('STDOUT',fopen('php://stdout','r'));} if (!defined('STDERR')){ define('STERR',fopen('php://stderr','r'));} while(!feof($stdin)){ $temp=trim(fgets(STDIN,4096)); if (($temp=="") || ($temp="\n")) { break; } $s=split(":",$temp); $nome=str_subst("agi_","",$s[0]); $agi[$nome]=trim($s[1]);} foreach($agi as $chave=>$valor){ fwrite(STDERR,"--$chave=$valor\n"); fflush(STDERR);} $matricula=$argv[1]; //Recebe argumentos do dialplan if (!$matricula == "") { $conn = mssql_connect('SERVIDORSQL', 'usuario', 'senha'); mssql_select_db("teleponto"); $query = mssql_query("select Senha,convert(varchar,getdate(),120) as Data from CadMatricula where classe = 1 and matricula = $matricula",$conn); $senha = mssql_result($query,0,0); $data = mssql_result($query,0,1); mssql_close($conn); fwrite(STDOUT," exec set matricula=$matricula \n"); //Seta $idCliente no dialplan fflush(STDOUT); fwrite(STDOUT," exec set senhadb=$senha \n"); fflush(STDOUT); fwrite(STDOUT," exec set datahora=\"$data\" \n"); fflush(STDOUT); switch($senha) { case "": fwrite(STDOUT," exec playback /mmq/sounds/matricula_inexistente \n"); fwrite(STDOUT," exec goto teleponto|1000|6 \n"); fflush(STDOUT); break; case "1": fwrite(STDOUT," exec goto teleponto|1002|1 \n"); fflush(STDOUT); break; default: fwrite(STDOUT," exec goto teleponto|1001|1 \n"); fflush(STDOUT); break; } }else { fwrite(STDOUT," exec goto teleponto|1000|6 \n"); fflush(STDOUT); } ?> _____ De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Em nome de Eric Anderson Enviada em: segunda-feira, 31 de dezembro de 2007 09:16 Para: asteriskbrasil@listas.asteriskbrasil.org Assunto: [Spam] Re: [AsteriskBrasil] RES: [Spam] Senha Ligacao Opa, ainda num fiz o meu primeiro AGI de "Hello World!" mas pelo que eu entendi, o AGI só retorna valores que vc pode usar no contexto? Certo ou falei bobagem? No contexto que vc criou ai embaixo, o ValidaSenha.php consulta o BD e o que ele faz se a senha validar ou não validar. Depois do AGI() tem um HangUp mesmo ou falta mais lógica nesse exemplo? Fica tipo "if AGI RETORNAR SIM Dial, else HangUP" ou é algo mais elegante? Um abraço! Eric Anderson Martins Miranda [EMAIL PROTECTED] Central de T.I. Tel. - (11) 6643-2814 CELULAR - (11) 9430-6025 PABX - (11) 6643-2800 MSN - [EMAIL PROTECTED] Home Page - http://www.vianet-express.com.br P Antes de imprimir pense em sua responsabilidade e compromisso com o MEIO AMBIENTE! ----- Original Message ----- From: Ricardo Aziz Barbosa <mailto:[EMAIL PROTECTED]> To: 'Jorge Miguel de Carvalho' <mailto:[EMAIL PROTECTED]> ; asteriskbrasil@listas.asteriskbrasil.org Sent: Thursday, December 27, 2007 4:20 PM Subject: [AsteriskBrasil] RES: [Spam] Senha Ligacao Não sei se o asterisk tem algum recurso para este fim. Imagino fazer isto usando um banco de dados com usuários e senha e um AGI que faria o acesso a este banco para validar os dados. ficaria algo mais ou menos assim: exten => 1000,1,Read(senha|Digite_sua_senha|6||3|3) exten => 1000,2,AGI(ValidaSenha.php|${senha}) exten => 1000,3,HangUp exten => 1000,4,Read(numero|digite_o_numero_do_telefone|10||10|3) exten => 1000,5,Dial(ZAP ou SIP ou IAX/numero,30,Ttr) exten => 1000,6,HangUp Ai basta você desenvolver o AGI para consultar o banco de dados e verificar se o usuário é valido ou não. Ainda é possível pedir o numero do telefone antes de executar o AGI, ai você pode mandar tudo para o AGI e através do banco de dados validar inclusive permissão de discagem. Se precisar de ajudar para desenvolver o AGI é só falar. <http://www.mastermaq.com.br/imagens/curva_assinatura.jpg> <http://www.mastermaq.com.br/imagens/logo_mmq.jpg> Ricardo Aziz Barbosa <http://www.mastermaq.com.br/imagens/ghost.gif> Gerente de TI [EMAIL PROTECTED] Tel.: (31) 3519-7202 / 8845-8269 Visite: www.mastermaq.com.br <http://www.mastermaq.com.br/> _____ De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Em nome de Jorge Miguel de Carvalho Enviada em: quinta-feira, 27 de dezembro de 2007 14:58 Para: asteriskbrasil@listas.asteriskbrasil.org Assunto: [Spam] [AsteriskBrasil] Senha Ligacao Pessoal, boa tarde. Gostaria de saber se alguem tem alguma dica sobre autenticação no asterisk. Eu gostaria que quando os meus usuários fossem fazer uma ligação externa eles tivessemm que digitar um codigo e uma senha. Se alguém tiver alguma dica poderia me ajudar muito. Att. _____ _______________________________________________ Compre uma camiseta da AsteriskBrasil.org! http://www.voipmania.com.br Acesse o canal IRC de discussão sobre Asterisk em Português Brasileiro na rede Freenode.net: #asterisk-br _______________________________________________ Lista de discussões AsteriskBrasil.org AsteriskBrasil@listas.asteriskbrasil.org http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
<<loguinho_vianet.jpg>>
<<curva_assinatura.jpg>>
<<logo_mmq.jpg>>
<<ghost.gif>>
_______________________________________________ Compre uma camiseta da AsteriskBrasil.org! http://www.voipmania.com.br == VoIPMania.com.br == _______________________________________________ LIsta de discussões AsteriskBrasil.org AsteriskBrasil@listas.asteriskbrasil.org http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil