[AsteriskBrasil] Round robin - canais SIP
Edson Barbosa Duarte
edson em artsoft.com.br
Quinta Dezembro 1 15:36:13 BRST 2011
Prezados,
Estou com uma demanda para fazer "round robin" em canais SIP.
Estou utilizando o Elastix. Isso é necessário devido ao fato
de haver um gateway FXO com oito portas ligado a interfaces celulares,
nas quais se não houver esta estratégia, a primeira linha é mais utilizada
(a segunda só é utilizada caso a primeira esteja ocupada etc).
Os troncos criados são como: vivo1, vivo2 ...
maxvivo é a quantidade de troncos alocados (para a Vivo, no caso).
A solução que encontrei foi a seguinte:
Criar um arquivo vivo.ael
----------------------------------------------
// Round Robin canais sip
// Arquivo extensions.ael
context rr-vivo {
_X. => {
Set(maxvivo=2);
Set(nvivo=0);
loopvivo:
Set(nvivo=${nvivo}+1);
Set(lastvivo=$[(${DB(rrvivo/lastvivo)}+1)%${maxvivo});
Set(DB(rrvivo/lastvivo)=${lastvivo});
Dial(${DB(rr/vivo${lastvivo})}/${EXTEN},30,g);
if (${DIALSTATUS}!="ANSWERED") {
if (${nvivo}<${maxvivo}) {
// Repetir ciclo
goto loopvivo;
};
};
Hangup;
};
};
------------------------------------------------------
Inicializa variável (na mão) no asterisk
-----------
database put rrvivo lastvivo 1
-----------
Em seguida criar um tronco "custom" on a discagem é
feita como a seguir.
-----------
Local/$OUTNUM$@rr-vivo/n
-----------
Alguém teria alguma outra idéia ou o caminho é esse mesmo?
Obrigado,
Edson
Mais detalhes sobre a lista de discussão AsteriskBrasil