Este mini tutorial aplica para FreePBX/Trixbox/Elastix.
La idea tras de esta guía es crear un balanceador de carga. Es decir, tener una sola troncal que automáticamente rote una serie de troncales posibles por las cuales pueden salir las llamadas. Dichas troncales pueden ser DAHDI, IAX2 o SIP, así que esto le agrega flexibilidad.
El código sería algo así (la sintaxis está en AEL para hacer la programación más simple)
[codesyntax lang=»c» tab_width=»3″ blockstate=»expanded»]
// Archivo extensions.ael context roundrobin { _X. => { Set(max=10); Set(n=0); repetir: Set(n=${n}+1); Set(last=$[(${DB(rr/last)}+1)%${max}); Set(DB(rr/last)=${last}); Dial(${DB(rr/trunk${last})}/${EXTEN},30,g); if (${DIALSTATUS}!="ANSWERED") { if (${n}<${max}) { // Repetir ciclo goto repetir; }; }; Hangup; }; }; [/codesyntax]
Nos faltan dos pasos:
- Inicializar el AstDB con el valor de la primer troncal. Esto es sencillo ejecutando el comando database put rr last 1 dentro del CLI de Asterisk
- El paso final es crear una troncal ‘Custom’ dentro de FreePBX/Elastix y agregarla como Local/{OUTNUM}@roundrobin/n. Esto hará uso del canal Local y nos permitirá balancear la carga entre nuestras troncales.
Todas las llamadas que vayan hacia esta troncal ‘Custom’ harán un balanceo de carga entre las lineas contratadas. Util si tienes varias lineas de diferentes proveedores y quieres que el consumo se haga equitativamente.
Suerte,