Todos los que llevamos algún tiempo con Asterisk hemos tenido que pegarnos alguna vez con su sistema de colas. Las colas de Asterisk no son sencillas de manejar ya que disponen de decenas de opciones para variar su comportamiento.
Uno de los parámetros de configuración más importantes para las colas es la estrategia (strategy), que define la forma en la que las llamadas serán repartidas entre los agentes. En Asterisk 1.4 podemos elegir entre las siguientes estrategias:
- Leastrecent: Asigna la siguiente llamada al agente que más tiempo lleve sin atender una llamada.
- Fewestcalls: Asigna la siguiente llamada al agente que menos llamadas haya atendido.
- Random: Asigna la siguiente llamada aleatoriamente a cualquier agente disponible.
- Ringall: Llama a todos los agentes a la vez y el primero que descuelgue será quien atienda la llamada.
- RoundRobin: Distribuye las llamadas “por turnos” entre los agentes disponibles. (No disponible en Asterisk 1.6)
- RRMemory: Similar a RoundRobin, pero “recuerda” el último agente al que intentó llamar.
Además de la estraegia hay muchos parámetros que condicionan la distribución de las llamadas, como ringinuse, weight, etc, pero no es necesario adentrarnos en eso
La forma que tiene Asterisk de guardar en memoria los agentes de las colas es mediante una función hash. Esta función hash calcula un valor numérico en base a la interfaz del agente (por ejemplo Agent/1001 o SIP/1002). El valor devuelto por la función hash siempre va a ser el mismo, por lo que con ninguna de las estrategias arriba descritas podemos decidir un orden estricto de distribución de llamadas basado en el orden de login (sin hacer trampas
).
Para solucionar esto, Asterisk 1.6 implementa la estrategia “linear” que distribuye las llamadas de manera similar a RRMemory, pero siguiendo el orden en que los agentes se han unido a la cola.
Muchos encontramos esta estrategia particularmente interesante, pero desafortunadamente sólo está disponible para Asterisk 1.6. Tras buscar en el bugtracker de Digium, las listas de Asterisk-Developers y Asterisk-ES no he encontrado un backport de esta estrategia que funcione correctamente en Asterisk 1.4. Así, Manwe y yo hemos hemos hecho un backport de la estrategia “linear” para Asterisk 1.4.
El parche se aplica correctamente con Asterisk 1.4.23.1 y todas las pruebas realizadas han sido satisfactorias
Aqúi lo tenéis: app_queue-linear-strategy
Happy Asterisk hacking!

Probado en asterisk-1.4.25.1 y funciona perfectamente. No sé cómo he podido vivir sin este parche hasta ahora…