[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