[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