Una manera d'usar membres dinàmics utilitzant noms d'usuari.
En aquest article veurem una manera d'assignar als membres (també anomenats agents)* de les cues d'Asterisk, un nom d'usuari, per fer més senzill el seu ús i el seu seguiment.
Per visualitzar millor la configuració d'Asterisk, he instal·lat FOP2 que ens mostra un panell de trucades de les cues, i roba de llit per mostrar un exemple d'estadístiques que es poden recollir.
Un asterisco, l'ús de membres dinàmics sol fer-se per mitjà de nombres, que representen generalment una extensió SIP. Això ho fa poc còmode per a l'usuari. A més, a l'usar noms d'usuari es pot fer un seguiment millor en les estadístiques.
Quan no fem servir noms d'usuari, l'aspecte d'una cua de trucades al tauler de FOP2 podria ser similar a el següent, només es veurien els números d'extensió:

*Nota: l'expressió “agents” s'emprava en les configuracions antigues d'Asterisk, es considera obsolet, doncs s'usava un arxiu anomenat agents.cfg que ja no cal. Avui en dia, és peferible utilitzar l'expressió “membres” per evitar confusions.
Per aconseguir el nostre propòsit anem a uilizar un arxiu de text adjunt, en el meu cas ho he denominat usuaris.txt, el guardem en el directori d'Asterisk o on vulguem, després indicarem la seva ruta.
Només cal fer una configuració a l'arxiu /etc / asterisk / extensions.conf (tenim present que ja tenim correctament configurades les cues a /etc / asterisk / queues.cfg, amb membres dinàmics no cal indicar aquests en aquest arxiu)
La configuració d'exemple és aquesta:
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
Amb aquesta configuració, l'usuari només ha de teclejar des del terminal telefònic, un asterisc seguit del seu nom d'usuari per quedar registrat, i ja pot rebre trucades d'aquesta cua.
Quedaria una cosa així:

D'aquesta manera es pot identificar bé quan un està en crida:

Finalment, amb l'eina Asternic podem comprovar com es poden obtenir estadístiques per usuari:

A més de com us ho he presentat, podria fer-se d'altres maneres, per exemple amb una base de dades per als noms d'usuaris, el vaig posar amb un arxiu de text per simplicitat.
Animeu-vos a compartir les vostres pròpies solucions o possibles millores que se us hagin ocorregut.