[AsteriskBrasil] Discagem aletórias em Troncos
Claudio Polegato Junior
cpolegatojr.asterisk em gmail.com
Domingo Outubro 15 17:32:45 BRT 2006
2006/10/13, Claudio Polegato Junior <cpolegatojr.asterisk em gmail.com>:
>
> Rafael Augusto escreveu:
> > Claudio, obrigado pelo retorno, mas estou precisando fazer em canais
> > SIP, tipo, tenho 3 contas SIP, a chamada sainte pegar as contas
> > aleatórias, nunca sair pela mesma conta sequencialmente. Obrigado
> Interessante...
>
> E se usar probabilidade com o comando Random, exemplo:
>
> exten => _X.,n,Random(67:outros) ; 67% de chance de pular para "outros" e
> 33% de passar
> exten => _X.,n,Dial(SIP/provedor1)
> exten => _X.,n,Goto(terminado)
> exten => _X.,n(outros),Random(50:ultimo) ; 50% (33,5% do total) de chance
> de pular para "ultimo" e 50% de passar
> exten => _X.,n,Dial(SIP/provedor2)
> exten => _X.,n,Goto(terminado)
> exten => _X.,n(ultimo),Dial(SIP/provedor3)
> exten => _X.,n,Goto(terminado)
> ...
> exten => _X.,n(terminado),...
> ...
>
> Não tenho como testar agora, mas vou testar...
>
Olá,
Fiz alguns aperfeiçoamentos e criei um contexto contento uma forma de
pegar canais aleatórios. Ela está pronta para 3 canais Zap, mas para 3
canais SIP muda-se pouquíssimas coisas, basicamente trocar Zap por SIP com
as opções dos canais. A partir dele é possível expandir a idéia para se usar
com vários outros canais.
Segue o contexto:
[aleatorio]
;------------------ ALEATORIO -----------------------------------------
; Rotina para obter: 33,0% de chance de discar pelo primeiro canal
; 33,5% de chance de discar pelo segundo canal
; 33,5% de chance de discar pelo terceiro canal
; Caso o canal escolhido esteja ocupado,
fazer com que se tenha 50% de escolhar um dos outros dois.
; Se este segundo canal escolhido estiver ocupado, utilizar o terceriro.
; Se todos estiverem ocupados, termina com "Hangup".
;------------------ INICIO ---------------------------------
; 67% de chance de ir para a prioridade "outros"
exten=>_X.,1,Random(67:outros)
; 33% de chance de discar via canal 1
exten=>_X.,n,Dial(Zap/1/${EXTEN})
; Se o canal 1 estiver ocupado, passa para a prioridade abaixo
; 50% de chance de ir para a prioridade "primeiro_ocupado"
exten=>_X.,n,Random(50:primeiro_ocupado)
; 50% de chance de discar via canal 2
exten=>_X.,n,Dial(Zap/2/${EXTEN})
; Se o canal 2 estiver ocupado, passa a discar via canal 3
exten=>_X.,n,Dial(Zap/3/${EXTEN})
; Se todos estiverem ocupados, sai com "Hangup"
exten=>_X.,n,Hangup
; 50% de chance de discar via canal 3
exten=>_X.,n(primeiro_ocupado),Dial(Zap/3/${EXTEN})
; Se o canal 3 estiver ocupado, passa a discar via canal 2
exten=>_X.,n,Dial(Zap/2/${EXTEN})
; Se todos estiverem ocupados, sai com "Hangup"
exten=>_X.,n,Hangup
;------------------ OUTROS ---------------------------------
; 67% de chance de vir para cá ("outros")
; 50% de chance de ir para a prioriodade "ultimo"
; Corresponde a 33,5% (50% de 67%) do plano total
exten=>_X.,n(outros),Random(50:ultimo)
; 33,5% de chance do plano total de discar via canal 2
exten=>_X.,n,Dial(Zap/2/${EXTEN})
; Se o canal 2 estiver ocupado, passa para a prioridade abaixo
; 50% de chance de ir para a prioridade "outros_ocupado"
exten=>_X.,n,Random(50:outros_ocupado)
; 50% de chance de discar via canal 1
exten=>_X.,n,Dial(Zap/1/${EXTEN})
; Se o canal 1 estiver ocupado, passa a discar via canal 3
exten=>_X.,n,Dial(Zap/3/${EXTEN})
; Se todos estiverem ocupados, sai com "Hangup"
exten=>_X.,n,Hangup
; 50% de chance de discar via canal 3
exten=>_X.,n(outros_ocupado),Dial(Zap/3/${EXTEN})
; Se o canal 3 estiver ocupado, passa a discar via canal 3
exten=>_X.,n,Dial(Zap/1/${EXTEN})
; Se todos estiverem ocupados, sai com "Hangup"
exten=>_X.,n,Hangup
;------------------ ULTIMO ---------------------------------
; 33,5% de chance do plano total de vir aqui ("ultimo")
; 33,5% de chance de discar via canal 3
exten=>_X.,n(ultimo),Dial(Zap/3/${EXTEN})
; Se o canal 3 estiver ocupado, passa para a prioridade abaixo
; 50% de chance de ir para a prioridade "ultimo_ocupado"
exten=>_X.,n,Random(50:ultimo_ocupado)
; 50% de chance de discar via canal 1
exten=>_X.,n,Dial(Zap/1/${EXTEN})
; Se o canal 1 estiver ocupado, passa a discar via canal 2
exten=>_X.,n,Dial(Zap/2/${EXTEN})
; Se todos estiverem ocupados, sai com "Hangup"
exten=>_X.,n,Hangup
; 50% de chance de discar via canal 2
exten=>_X.,n(ultimo_ocupado),Dial(Zap/2/${EXTEN})
; Se o canal 2 estiver ocupado, passa a discar via canal 1
exten=>_X.,n,Dial(Zap/1/${EXTEN})
; Se todos estiverem ocupados, sai com "Hangup"
exten=>_X.,n,Hangup
;------------------ FINAL ----------------------------------
--
Atenciosamente
Claudio Polegato Junior
Engenheiro Autônomo - Ribeirão Preto e Região
Mestre em Física Aplicada à Medicina e Biologia - USP
Engenheiro Computacional - USP
Engenheiro Eletrônico - USP
Um peregrino de problemas; Um pergaminho de soluções!
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20061015/d8b6ece6/attachment.html
Mais detalhes sobre a lista de discussão AsteriskBrasil