Re: [AsteriskBrasil] Ligações Simultaneas - Se alguem precisar

Alex Robertson agr.listas em gmail.com
Terça Fevereiro 7 12:28:28 BRST 2006


Pessoal,

Só li esta thread hoje.
Não precisa de AGI para  limitar um certo número de chamadas por canal.

Veja a macro e a sua chamada abaixo.
Peguei o original na internet (nao lembro onde) e modifiquei um pouco.

A estrutura resolve dois problemas:
1) Limita a quantidade (configurável) de chamadas para cada peer/ramal
2) Se todos os canais do mesmo peer estiverem ocupados, a vez passa
para o proximo canal disponível instantâneamente.


exten => _.,1,NoOp(Procurando canais...)
exten => _.,n,Macro(hunt-dial,SIP/meu_peer1,${EXTEN},2)  ; 2 lig. simult.
exten => _.,n,Macro(hunt-dial,SIP/meu_peer2,${EXTEN},5)  ; 5 lig. simult.
...
exten => _.,n,Macro(hunt-dial,SIP/meu_peerN,${EXTEN},1)  ; 1 lig. simult.
exten => _.,n,Hangup


[macro-hunt-dial]
; ${ARG1} Canal
; ${ARG2} Destino - Acho que pode ser substituido por ${MACRO_EXTEN}
; ${ARG3} Quantidade de chamadas simultaneas

exten => s,1,SetGroup(${ARG1}) ; increment GROUPCOUNT
exten => s,2,GetGroupCount()
exten => s,3,NoOp(GROUPCOUNT:${GROUPCOUNT})
exten => s,4,GotoIf($["${GROUPCOUNT}" <= "${ARG3}"]?5:6)
exten => s,5,Dial(${ARG1}/${ARG2}) ; use it to call out.
exten => s,6,NoOp(${ARG1} esta com ${GROUPCOUNT} ligacoes em curso)

[]s
Alex Robertson


Em 30/01/06, Alex Montoanelli<alexm em unetvale.com.br> escreveu:
> Olá a todos,
> tomei a liberdade fiz algumas modificação no script do Beethoven...
> nesse não há nescessidade de informar o canal, a ser verificando dentro
> do script
> e sim vc faz a refencia passando como paramentro na linha agi
> segue script, e referencias a ser colocada no dialplan
>
> abraços..
>
> exemplo básico no dialplan,,fica melhor dentro de uma macro...
>
> *exten => 300,1,agi(emuso.pl,${EXTEN});
> exten => 300,n,dial(SIP/30,30,tTr);
> exten => 300,50,playback(astcc-sbusy)
> exten => 300,n,busy(5)
> exten => 300,n,hangup
> *
>
> //////////SCRIPT
>
> *# Script Original
> # ================================
> # Comunidade Warchalking
> #www.warchalking.com.br
> #
> # SCRIPT BY Beethoven
> # beethoven em warchalking.com.br
> # ================================
> #
> # Modificado por Alex Montoanelli
> # Unetvale
> # www.unetvale.com.br
> # alexm em unetvale.com.br
> #
> *
>
> *
> *
>
> *#!/usr/bin/perl*
>
> *use Net::Telnet();
> use Asterisk::AGI();
>
>
> ############# CONFIGURACOES ##############
> $host_manager = "youhost";
> $user_manager = "youruser";
> $senha_manager = "yourpass";
> ############################################
>
> $AGI = new Asterisk::AGI();
> $t = new Net::Telnet (Port => 5038, Timeout => 2,
> Output_record_separator => '',Prompt => '/.*[\$%#>] $/');
>
>
> $telefone = $ARGV[0];
>
> $AGI->verbose("Verificando o stauts da ext $telefone");
>
> $t->open("$host_manager");
> $t->waitfor('/0\n$/');
> $login = "Action: Login\nUsername: $user_manager\nSecret:
> $senha_manager\n\n";
> $t->print($login);
> $t->waitfor('/Authentication.*/');
> @lines = $t->cmd(String => "Action: command\nCommand: show
> channels\n\n", Prompt => '/--END COMMAND--/', Errmode => "die");
>
>                 foreach $line (@lines){
>                 if ($line =~ "^SIP/$telefone") { $em_uso = 1};
>                 }
>
>         if($em_uso){
>         $res = $AGI->verbose("Linha Ocupada, parando");
>         $res = $AGI->set_priority('50');
>         }
>         unless($em_uso){
>         $res = $AGI->verbose("Linha ok, prosseguindo");
>         };*
>
>
>
> Beethoven wrote:
> > Seguinte: é meio um bolo mas funciona.
> > dentro do /etc/asterisk/manager.conf
> > deixe mais ou menos assim:
> > ali em permit coloque o seu host pra loga
> > ------------------------------------------------------------------------
> > ;
> > ; Asterisk Call Management support
> > ;
> > [general]
> > enabled = yes
> > port = 5038
> > bindaddr = 0.0.0.0
> >
> > [user_manager]
> > secret = senha_manager
> > deny=0.0.0.0/0.0.0.0
> > permit=127.0.0.1/255.255.255.0
> > permit=200.200.200.123
> > permit=localhost
> > read = system,call,log,verbose,command,agent,user
> > write = system,call,log,verbose,command,agent,user
> > --------------------------------------------------------------------------
> > --
> > -
> > vc precise destes dois modulos do perl instalados:
> > Net::Telnet
> > Asterisk::AGI
> >
> > basta entra no site www.cpan.org e lah em modulos search baixar e
> > instalar..
> > conforme a distribuicao do linux
> > precisa do modulo perl-devel instalado para compilar os modulos
> > --------------------------------------------------------------------------
> > --
> > -
> > quando instalar o Net::Telnet, precisa alterar um troço do modulo pra naum
> > dar pau, aqui instalou em:
> > /usr/lib/perl5/site_perl/5.8.6/Net/Telnet.pm
> >
> > edite o arquivo e comente a linha que tem:
> > return $self->error("pattern match read eof") if $s->{eofile};
> >
> > ficando assim:
> > # return $self->error("pattern match read eof") if $s->{eofile};
> > --------------------------------------------------------------------------
> > --
> > -
> > agora copie este escript para dentro do diretorio AGI
> > que conforme a instalacao fica em:
> >
>
> > /var/lib/asterisk/agi-bin
> >
> > grave como fifo.444 e altere na parte das configuracoes para os teus dados
> > -------------------------------------------------------------------------
> > #!/usr/bin/perl
> > # Comunidade Warchalking Brazil
> > # www.warchalking.com.br
> > #
> > # SCRIPT BY Beethoven
> > # beethoven em warchalking.com.br
> > #
> > use Net::Telnet ();
> > use Asterisk::AGI;
> > ############# CONFIGURACOES ##############
> > $host_manager = "200.200.200.1";
> > $user_manager = "user_manager";
> > $senha_manager = "senha_manager";
> > $telefone = "SIP/900900";
> > ############################################
> > $t = new Net::Telnet (Timeout => 10,
> >                           Port=> 5038);
> > $t->input_log(log_manager);
> > $t->open("$host_manager");
> >
> > $t->cmd("Action: login\nUsername: $user_manager\nSecret:
> > $senha_manager\nEvents: off\n\nAction: Status\nLink:$telefone\n\nAction:
> > logoff\n\n");
> > open(ARQUIVO,"< log_manager");
> > @arquivo = <ARQUIVO>;
> > close(ARQUIVO);
> > foreach $linha(@arquivo){
> >     if($linha =~ /State: Up/){$em_uso = 1}
> >                              }
> >
> > $AGI = new Asterisk::AGI;
> > print STDERR "------------------------------------------";
> > if($em_uso){$res = $AGI->exec('Hangup')};
> > unless($em_uso){$res = $AGI->exec('Dial', '$telefone')};
> >
> > -------------------------------------------------------------------------
> >
> > salve e de o comando:
> > chmod 755 fifo.444
> >
> > --------------------------------------------------------------------------
> > blz... agora é soh configura no extensions.conf que fica:
> > exten => _900900,1,AGI(fifo.444)
> > --------------------------------------------------------------------------
> >
> > blz.. eh isso.. qualquer coisa da um toque
> >
> >
> > abraço
> >
> > Beethoven
> > beethoven em warchalking.com.br
> >
> > _______________________________________________
> > 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
>
>
>


Mais detalhes sobre a lista de discussão AsteriskBrasil