[AsteriskBrasil] Discando pela WEB

Diogo Cosito diogocosito66 em hotmail.com
Terça Julho 11 22:43:55 BRT 2006


Bernardo, tudo bem?
Obrigado pela sua aula, hehehe eu estou iniciando agora e vejo que pessoas 
como você são bem atenciosas, muito obrigado.
Na realidade eu estou usando o asterisk-1.0.9 e gostaria de implementar isso 
no site de minha empresa, na intranet para hep-desk, mas acho que no meu 
caso seria interessante o php, né? O que acha?
Não entendi muito bem o código pearl que você fez, tipo posso utilizar ele 
no asterisk-1.0.9? Precisarei de pearl instalado no server, né?
Mas é que ainda não estou conseguindo visualizar o código funcionando... 
desculpe a ignorância, mas espero um dia poder colaborar com vocês no que 
puder.

Muito obrigado e um abraço

Att

Diogo.


>From: Bernardo Vieira <bernardo.vieira em terra.com.br>
>Reply-To: asteriskbrasil em listas.asteriskbrasil.org
>To: asteriskbrasil em listas.asteriskbrasil.org
>Subject: Re: [AsteriskBrasil] Discando pela WEB
>Date: Mon, 10 Jul 2006 11:14:13 -0300
>
>-----BEGIN PGP SIGNED MESSAGE-----
>Hash: SHA1
>
>Diogo,
>Acho que o que está acontecendo é que o script de php está tentando
>inicializar a ligação no contexto 'default' e se eu não me engano o AAH
>não permite muita coisa nesse contexto. Tente alterar o contexto para
>'from-internal'. Outra coisa que você pode fazer é, ao invés de
>acompanhar a ligação via CLI, conecte via telnet na porta do manager,
>ele é muito mais detalhado.
>
>Bom, de toda forma, depois que você mandou sua primeira pergunta, eu
>resolvi dar uma olhada no script perl que eu tinha te passado e gostei
>do negócio. Então resolvi brincar com o script e acabei fazendo as
>seguintes alterações:
>1) O script original desenhava o form com os campos para fazer a ligação
>e passava os parâmetros por POST, ou seja, você não poderia colocar a
>linha de discagem em um link <a href> por exemplo. O script que eu fiz
>funciona com o método GET para que você usar uma url simples para discar.
>
>2) O script original produzia html, ou seja, para alterar sua aparência
>você teria que modificar o script. A minha versão não produz html
>nenhum, você simplesmente coloca a url em um link e o script te
>redireciona de volta para a mesma página com o status da chamada, ou
>seja, você põe a cara que você quiser na página.
>
>Bom, é isso aí, o script ainda está meio toscão, mas dá para usar, se
>você, ou qualquer um quiser me ajudar no desenvolvimento dele, eu
>ficaria feliz.
>
>
>Diogo Cosito wrote:
> > Bernando, boa noite.
> > Eu baixei o código php, para discagem pela web, mas não entendi muito 
>bem o
> > que devo fazer, tipo instalei o código dentro de um servidor web, 
>externo ao
> > asterisk e liberei no manager.conf para acesso externo, mas não inicia a
> > discagem..
> > Fiz desta maneira:
> > specify the channel (extension) you want to receive the call requests 
>with
> > #e.g. SIP/XXX, IAX2/XXXX, ZAP/XXXX, etc
> > $strChannel = "sip/1000";
> >
> > #specify the context to make the outgoing call from.  By default, AAH 
>uses
> > from-internal
> > #Using from-internal will make you outgoing dialing rules apply
> > $strContext = "default";
> >
> > #specify the amount of time you want to try calling the specified 
>channel
> > before hangin up
> > $strWaitTime = "30";
> >
> > #specify the priority you wish to place on making this call
> > $strPriority = "1";
> >
> > #specify the maximum amount of retries
> > $strMaxRetry = "2"
> >
> > Mas na CLI do asterisk, não reporta nada.
> > Poderia me ajudar?
> >
> > Muito obrigado
> >
> > Att
> >
> > Diogo
> >> From: Bernardo Vieira <bernardo.vieira em terra.com.br>
> >> Reply-To: asteriskbrasil em listas.asteriskbrasil.org
> >> To: wellingtoncs em gmail.com,  asteriskbrasil em listas.asteriskbrasil.org
> >> Subject: Re: [AsteriskBrasil] Discando pela WEB
> >> Date: Fri, 07 Jul 2006 19:18:57 -0300
> >>
> > Solução em php (você vai ter que mexer no código para alocar
> > dinamicamente os dois lados da ligação):
> > 
>http://www.voipjots.com/2006/02/click-to-call-with-your-asteriskhome.html
> >
> > Solução em perl (não mexi com esse aí porque eu prefiro php que perl,
> > sim eu sou preguiçoso :P):
> > http://www.azxws.com/asterisk/
> >
> > Wellington Sampaio wrote:
> >>>>  Olá Pessoa,
> >>>>
> >>>>             Gostaria de saber se você sabem, já configuraram uma 
>regra
> >>>> como esta:
> >>>>
> >>>>             Eu acesso uma página, digamos que www.asterisk.com.br
> >>>> <http://www.asterisk.com.br/>, lá eu entro com o número destinatário 
>e
> >>>> número destino. O sistema faz uma ligação para o número destinatário 
>e
> >>>> em seguida liga para o destino. Ele gera uma chamada para os dois
> >>>> números, assim colocando eles ativos.
> >>>>
> >>>>             Se alguém tiver alguma idéia de como faço isso, por 
>favor,
> >>>> me ajudem.
> >>>>
> >>>>             Att
> >>>>
> >>>>
> >>>>
> >>>> Wellington Sampaio
> >>>>
> >>>> wellingtoncs em gmail.com
> >>>>
> >>>>
> >>>> 
>------------------------------------------------------------------------
> >>>>
> >>>> _______________________________________________
> >>>> LIsta de discussões AsteriskBrasil.org
> >>>> AsteriskBrasil em listas.asteriskbrasil.org
> >>>> http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
> >>>>
> >>>> _______________________________________________
> >>>> Acesse o  wiki AsteriskBrasil.org:
> >>>> http://www.asteriskbrasil.org
>_______________________________________________
>LIsta de discussões AsteriskBrasil.org
>AsteriskBrasil em listas.asteriskbrasil.org
>http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
> >>
>_______________________________________________
>Acesse o  wiki AsteriskBrasil.org:
>http://www.asteriskbrasil.org
>
> > _________________________________________________________________
> > DOWNLOAD: Emoticons animados 'Copa 2006' para usar no MSN
> > http://copa.br.msn.com/extra/emoticons/
>
> > _______________________________________________
> > LIsta de discussões AsteriskBrasil.org
> > AsteriskBrasil em listas.asteriskbrasil.org
> > http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
>
> > _______________________________________________
> > Acesse o  wiki AsteriskBrasil.org:
> > http://www.asteriskbrasil.org
>
>
>-----BEGIN PGP SIGNATURE-----
>Version: GnuPG v1.4.1 (MingW32)
>Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>
>iD8DBQFEsmC12QVs8jsa1mQRAgtRAJ0TCYzRFvTwAxjySM6NuMjktO9YjQCfTb6S
>cEdRDWGJx/3LqOoiDczUSUU=
>=80tG
>-----END PGP SIGNATURE-----


>#!/usr/bin/perl -w
># getdial.pl
># Copyright (C) 2006 Bernardo Vieira bernardo.vieira em terra.com.br
>#
># Script para iniciar uma chamda no Asterisk através de uma
># URL. Recebe parâmetros atraves do metodo get, permitindo
># que seja utilizado em uma tag <a href...>Discar</a>.
>#
># Baseado no script TACI - Trivial Asterisk Call Interface v.02
># de Tony Wasson wasson em azxws.com
>#
># Certifique-se que ha um handler para extensões inválidas no
># contexto [default] do extensions.conf:
>#       exten => s,1,Playback(invalid)
>use Net::Telnet ();
>use Net::Netmask();
>use CGI qw(:standard);
>use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
>
>#
># Configuracoes:
>#
>
>$managerHost='127.0.0.1';		# endereco do servidor rodando o Asterisk
>$managerPort=5038;			# porta da interface de gerenciamento do Asterisk
>
>$managerUser='ususario';		# nome do usuario manager do Asterisk
>
># TODO: proteger esta senha
>$managerSecret='senha';			# senha do manager
>
>$defaultContext='from-internal'; 	# contexto padrao para a ligacao, pode 
>ser especificado
>					# na query string, senao este valor e utilizado
>
>$defaultCID='callerid';			# Caller Id padrao pode ser especificado na query 
>string
>
>@allowedNetworks= ('192.168.1.0/24');	# lista de redes (clientes) que podem 
>usar este script
>
>@allwedReferers=('http://192.168.1.1/teste/teste.html'); # lista de paginas 
>que podem usar este script
>
>
>#
># Prototipos
>#
>sub isInNetwork;
>sub testIp;
>sub testReferer;
>
># verifica se o cliente esta na lista de clientes autorizados
>&testReferer($ENV{HTTP_REFERER}, em allwedReferers) or die "Pagina nao 
>autorizada a user este script: ", $ENV{HTTP_REFERER};
>&testIp($ENV{REMOTE_ADDR}, em allowedNetworks) or die "Cliente nao autorizado 
>a usar este script: ", $ENV{REMOTE_ADDR};
>
>#
># Parametros
>#
>my $phonetype = param('type') ||  "" ;
>my $account = param('account') || "";
>my $callerid = param('callerid') || $defaultCID;
>my $context = param('context') || $defaultContext;
>my $exten = param('exten') || "";
>my $callid = param('callid') || 0;
>
>
># Limpar parametros
>if ($exten)   {$exten =~   s/([^A-Z0-9a-z\/@\.])//g;}
>else {$exten="";}
>
>if ($context) {$context =~   s/([^A-Z0-9a-z\-])//g;}
>else {$context="";}
>
>if ($account) {$account =~  s/([^A-Z0-9a-z])//g;}
>else {$account="";}
>
># Testa se a extensao e valida (mais de dois digitos)
># TODO: melhorar o teste
>
>if (not $exten =~ /[0-9][0-9]/) { die "Destino invalido, deve conter pelo 
>menos 2 numeros!"; };
>
>#print header;
>
># Abre a conexao ao asterisk...
>$tn = new Net::Telnet (	Port => $managerPort,
>			Prompt => '/.*[\$%#>] $/',
>			Output_record_separator => '',
>			Errmode    => 'return'
>			);
>
>$tn->open("$managerHost");
>$tn->waitfor('/0\n$/');
>$tn->print("ACTION: LOGIN\nUSERNAME: $managerUser\nSECRET: 
>$managerSecret\n\n");
>$tn->waitfor('/Authentication accept*/')
>     or die "Nao foi possivel conectar ao asterisk: ", $tn->lastline;
>
># Abre a chamada
>$tn->print("ACTION: ORIGINATE\nExten: $exten\nContext: $context\nChannel: 
>$phonetype/$account\nPriority: 1\nCallerid: $callerid\n\n");
>$tn->waitfor('/Event: Newchannel.*/') or die "Nao foi possivel deteminar o 
>status da chamada: ", $tn>lastline;
>$tn->print("Action: LOGOFF\n\n");
>
># Chamada aceita
># TODO: monitorar melhor a ligacao, mesmo que o numero for invalido o 
>programa chega aqui.
>print "Location:  $ENV{HTTP_REFERER}?callid=$callid&status=0\n\n";
>exit 0;
>
>
>
>sub isInNetwork {
>	my ($cidr,$ipaddress) = @_;
>	local $network = new Net::Netmask($cidr);
>	return $network->match($ipaddress);
>}
>
>sub testIp {
>	my($ip, em allowedNetworks) = @_;
>	my($matchFound) = 0;
>	foreach my $network (@allowedNetworks) {
>	    $matchFound = isInNetwork($network,$ip);
>	    if ($matchFound) {
>		last;
>             }
>	}
>	return $matchFound;
>}
>
>sub testReferer{
>	my($referer, em allowedReferers) = @_;
>	return scalar(grep(/$referrer/, em allowedReferers));
>}


>
>
>
>
>		teste
>


>_______________________________________________
>LIsta de discussões AsteriskBrasil.org
>AsteriskBrasil em listas.asteriskbrasil.org
>http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
>
>_______________________________________________
>Acesse o  wiki AsteriskBrasil.org:
>http://www.asteriskbrasil.org

_________________________________________________________________
Descubra aqui como mandar Torpedos Messenger! 
http://www.msn.com.br/artigos/maguire/default.asp 
http://www.msn.com.br/artigos/maguire/default.asp



Mais detalhes sobre a lista de discussão AsteriskBrasil