[AsteriskBrasil] Discando pela WEB

Bernardo Vieira bernardo.vieira em terra.com.br
Quarta Julho 12 15:43:28 BRT 2006


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Não, ele não é um cliente SIP ele é só um proxy para a interface manager
do asterisk.


Pablo Weyne wrote:
> Não dá p/ usar esse script sem que necessite depender do Asterisk? Por
> exemplo, eu coloco os dados de uma conta SIP, e ele faz a discagem.
>  
> 
>     ----- Original Message -----
>     *From:* Diogo Cosito <mailto:diogocosito66 em hotmail.com>
>     *To:* asteriskbrasil em listas.asteriskbrasil.org
>     <mailto:asteriskbrasil em listas.asteriskbrasil.org>
>     *Sent:* Tuesday, July 11, 2006 10:43 PM
>     *Subject:* Re: [AsteriskBrasil] Discando pela WEB
> 
>     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
>     <mailto:bernardo.vieira em terra.com.br>>
>     >Reply-To: asteriskbrasil em listas.asteriskbrasil.org
>     <mailto:asteriskbrasil em listas.asteriskbrasil.org>
>     >To: asteriskbrasil em listas.asteriskbrasil.org
>     <mailto:asteriskbrasil em listas.asteriskbrasil.org>
>     >Subject: Re: [AsteriskBrasil] Discando pela WEB
>     >Date: Mon, 10 Jul 2006 11:14:13 -0300
>     >
> 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
>>     <mailto:bernardo.vieira em terra.com.br>>
>  >> Reply-To: asteriskbrasil em listas.asteriskbrasil.org
>>     <mailto:asteriskbrasil em listas.asteriskbrasil.org>
>  >> To: wellingtoncs em gmail.com <mailto:wellingtoncs em gmail.com>, 
>>     asteriskbrasil em listas.asteriskbrasil.org
>>     <mailto: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>
>  >>>> <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 <mailto:wellingtoncs em gmail.com>
>  >>>>
>  >>>>
>  >>>>
> ------------------------------------------------------------------------
>  >>>>
>  >>>> _______________________________________________
>  >>>> LIsta de discussões AsteriskBrasil.org
>  >>>> AsteriskBrasil em listas.asteriskbrasil.org
>>     <mailto: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
>>     <mailto:AsteriskBrasil em listas.asteriskbrasil.org>
>  > http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
> 
>  > _______________________________________________
>  > Acesse o  wiki AsteriskBrasil.org:
>  > http://www.asteriskbrasil.org
> 
> 

#!/usr/bin/perl -w
# getdial.pl
# Copyright (C) 2006 Bernardo Vieira bernardo.vieira em terra.com.br
>     <mailto: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 <mailto: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

>     _______________________________________________
>     LIsta de discussões AsteriskBrasil.org
>     AsteriskBrasil em listas.asteriskbrasil.org
>     <mailto:AsteriskBrasil em listas.asteriskbrasil.org>
>     http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil

>     _______________________________________________
>     Acesse o  wiki AsteriskBrasil.org:
>     http://www.asteriskbrasil.org


>     __________ NOD32 1.1655 (20060712) Information __________

>     This message was checked by NOD32 antivirus system.
>     http://www.eset.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
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFEtULQ2QVs8jsa1mQRAsmKAJwM+1lwXEwnqeXTqKBAVNS2QW/wNwCgmaLc
YbhA7NCAbKNIQh70ZOV1vnw=
=rCAu
-----END PGP SIGNATURE-----


Mais detalhes sobre a lista de discussão AsteriskBrasil