Usuarios como miembros dinámicos de Asterisk

Una manera de usar miembros dinámicos utilizando nombres de usuario.

En este artículo veremos una manera de asignar a los miembros (también llamados agentes)* de las colas de Asterisk, un nombre de usuario, para hacer más sencillo su uso y su seguimiento.

Para visualizar mejor la configuración de Asterisk, he instalado FOP2 que nos muestra un panel de llamadas de las colas, y Asternic para mostrar un ejemplo de estadísticas que se pueden recoger.

En Asterisk, el uso de miembros dinámicos suele hacerse por medio de números, que representan generalmente una extensión SIP. Esto lo hace poco cómodo para el usuario. Además, al usar nombres de usuario se puede hacer un seguimiento mejor en las estadísticas.

Cuando no usamos nombres de usuario, el aspecto de una cola de llamadas en el panel de FOP2 podría ser similar al siguiente, solo se verían los números de extensión:

Colas sin nombre de usuario
Los miembros de la cola identificados solo por números o etiquetas estáticas

*Nota: la expresión «Agentes» se empleaba en las configuraciones antiguas de Asterisk, se considera obsoleto, pues se usaba un archivo llamado agents.cfg que ya no es necesario. Hoy en día, es peferible utilizar la expresión «Miembros» para evitar confusiones.

Para conseguir nuestro propósito vamos a uilizar un archivo de texto adjunto, en mi caso lo he denominado usuarios.txt, lo guardamos en el directorio de Asterisk o donde queramos, luego indicaremos su ruta.
Solo hay que hacer una configuración en el archivo /etc/asterisk/extensions.conf (tenemos presente que ya tenemos correctamente configuradas las colas en /etc/asterisk/queues.cfg, con miembros dinámicos no es necesario indicar éstos en ese archivo)

La configuración de ejemplo es esta:

exten => _*[a-z].,1,NoOp(-- Petición de login de miembros --)
same => n,Set(VAR=${SHELL(grep ${EXTEN:1} /etc/asterisk/archivos/usuarios.txt -w)}) ; en un archivo guardamos los nombres válidos.
same => n,GotoIf($["${VAR}" = ""]?cuelga) ; si en el archivo no aparece el nombre tecleado por el operario, lo expulsa.
same => n,AddQueueMember(clientes,Local/${EXTEN:1}@atencion_clientes)
same => n,Set(DB(atencion_clientes/${EXTEN:1})=${CALLERID(num)}) ; almacenamos esa correlación en la base de datos interna de Asterisk.
same => n,Playback(agent-loginok)
same => n(cuelga),Hangup()
; para desregistrarse usamos el carácter 0 en vez de * con el mismo código.
exten => _0[a-z].,1,NoOp(-- Petición de deslogueo de miembros--)
same => n,RemoveQueueMember(clientes,Local/${EXTEN:1}@atencion_clientes)
same => n,Set(borrar=${DB_DELETE(atencion_clientes/${EXTEN:1})}) ; aquí se elimina la correlación, usamos una variable (borrar en este caso)
same => n,Playback(agent-loggedoff)
same => n,Playback(goodbye)
same => n,Hangup()
[atencion_clientes] ; este es el contexto que determina la llamada al miembro desde la cola, si está ocupado no hace nada, manda un mensaje por consola.
exten => _[a-z].,1,NoOp(-Llamada al miembro -)
same => n,Set(MIEMBRO=${DB(atencion_clientes/${EXTEN})})
same => n,GotoIf($[${SIPPEER(${MIEMBRO},curcalls)} = 1]?ocupado)
same => n,Dial(SIP/${MIEMBRO})
same => n(ocupado),NoOp(Miembro ocupado, llamada en cola

Con esta configuración, el usuario solo tiene que teclear desde el terminal telefónico, un asterisco seguido de su nombre de usuario para quedar registrado, y ya puede recibir llamadas de esa cola.
Quedaría algo así:

Colas con nombre de usuario
Miembros con nombre de usuario

De esta manera se puede identificar bien cuando uno está en llamada:

Usuario respondiendo
Respondiendo una llamada el miembro de la cola

Por último, con la herramienta Asternic podemos comprobar cómo se pueden obtener estadísticas por usuario:

Nomres de usuario para los miembros dinámicos
Estadísticas de usuarios

Además de como os lo he presentado, podría hacerse de otras maneras, por ejemplo con una base de datos para los nombres de usuarios, lo puse con un archivo de texto por simplicidad.
Animaos a compartir vuestras propias soluciones o posibles mejoras que se os hayan ocurrido.

Script para mover grabaciones de llamadas de Asterisk desde la RAM

Cómo mover las grabaciones de llamadas de Asterisk guardadas en RAM Este artículo recoge un script mejorado para poder mover archivos (en este caso llamadas telefónicas realizadas a través de Asterisk) sin mover los archivos abiertos (las llamadas en curso). Es muy típico tener que realizar grabaciones de llamadas de Asterisk en un Call Center […]

Grsecurity

Hace algún tiempo Dabo me hablo de grsecurity un kernel en el cual vienen implementadas muchas medidas de seguridad. ¿Qué es grsecurity? Grsecurity® es una amplia mejora de seguridad para el núcleo de Linux, defiende contra una amplia gama de amenazas a la seguridad a través del control de acceso inteligente, previene desbordamientos en la memoria […]

Postinstalación de Ubuntu mate

  ¿Qué hacer después de instalar Ubuntu mate? Una vez mas os traigo un script de postinstalación, en este caso para ubuntu mate 14.04 aunque lo podéis probar en otras versiones y contarme si funciona. Mate es un entorno gráfico fork  de gnome 2 uno de los entornos gráficos que a mi personalmente mas me ha gustado dentro […]

¿Qué es Oauth? Conoce este protocolo que utilizas tan a menudo.

El propósito de este articulo es dar a conocer OAuth de manera que cualquier persona la pueda entender, lo explico desde el punto de vista de un usuario, conociendo de que manera puede afectarle esta tecnología. ¿Qué es OAuth? Es un protocolo abierto, que permite autorización segura de una API de modo estándar y simple […]