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

Alex Montoanelli alexm em unetvale.com.br
Quarta Fevereiro 8 00:36:33 BRST 2006


funciona perfeito mais ela tem uma pegadinha
suponhamos q vc tenha 5 ramais de 20 a 25
o 20 é a recepção

depois das 18h ficam 3 pessoas na empresa
a recepcionista foi embora
ficaram um suporte, 1 financeiro e um vendas.

o telefone toca
*o financeiro puxa a ligação ,
*o suporte em outra sala resolve falar com financeiro, e pimba,
nem firefly/eyebean escapam, fui obrigado a apelar pra uma macro mais 
drástica..em perl..procure no hitórico da lista pelo titlulo
"ligações simultaneas" e vc irá encontrar um script em perl q faz o 
nescessário..
o motivo para o macro não funcionar é q:
quando vc puxa uma ligação, a macro não é executada para set um group 
count onde irá limitar a chamada, assim qndo suporte resolve falar com o 
finaneiro irá passar pela macro, e la ira ser verificado q não existe 
chamada no grupo (financeiro) ativa, assim completando a chamada.

usando a agi em perl ela vai mais fundo, e antes de ligar ela da um 
comanndo show channesl *grepando* o canal desejado
se grepar tá em uso pula pra prioridade 50 se não grepar vai em frente.

abraços
Alex Montoanelli

Alex Robertson wrote:
> 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
>>
>>
>>
>>     
> _______________________________________________
> 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
>   

-------------- Próxima Parte ----------
Um anexo não texto foi limpo...
Nome  : alexm.vcf
Tipo  : text/x-vcard
Tam   : 261 bytes
Descr.: não disponível
Url   : http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20060208/ee7d1331/alexm.vcf


Mais detalhes sobre a lista de discussão AsteriskBrasil