2006/10/13, Claudio Polegato Junior <[EMAIL PROTECTED]>:
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!
----------------------------------------
Estação VoIP 2006
5 e 6 Dezembro
Curitiba PR
http://www.estacaovoip.com.br

_______________________________________________
LIsta de discussões AsteriskBrasil.org
[email protected]
http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil

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

Responder a