Un xeito de usar membros dinámicos mediante nome de usuario.
Neste artigo veremos un xeito de asignar membros (tamén chamados axentes)* as colas do asterisco, un nome de usuario, para facilitar o seu uso e seguimento.
Para ver mellor a configuración do asterisco, Instalei FOP2 que nos amosa un panel de chamadas á cola, e cama para mostrar un exemplo de estatísticas que se poden recoller.
Un asterisco, o uso de membros dinámicos faise normalmente mediante números, xeralmente representando unha extensión SIP. Isto faino incómodo para o usuario. Tamén, empregando o nome de usuario pódese rastrexar mellor nas estatísticas.
Cando non empregamos nome de usuario, a aparición dunha cola de chamadas no panel FOP2 podería semellar á seguinte, só se verían os números de extensión:

*Nota: A expresión “Axentes” usado en antigas configuracións de asterisco, considérase obsoleto, porque se usou un ficheiro chamado agents.cfg, que xa non é necesario. Hoxe, é posible empregar a expresión “Membros” para evitar confusións.
Para lograr o noso propósito imos usar un ficheiro de texto adxunto, no meu caso chameino usuarios.txt, gardámolo no directorio do asterisco ou onde queiramos, entón indicaremos a súa ruta.
Só tes que facer unha configuración no ficheiro /etc / asterisco / extensions.conf (ten en conta que xa temos as colas correctamente configuradas /etc / asterisco / queues.cfg, con membros dinámicos non é necesario indicalos nese ficheiro)
A configuración do exemplo é a seguinte:
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, o usuario só ten que escribir desde o terminal de teléfono, un asterisco seguido do seu nome de usuario para ser rexistrado, e xa podes recibir chamadas desa cola.
Algo así quedaría:

Deste xeito, pode identificar facilmente cando estás de chamada:

Por último, coa ferramenta Asternic podemos comprobar como as estatísticas poden obter o usuario:

Ademais de como vos presentei, poderíase facer doutras formas, por exemplo, cunha base de datos de nomes de usuario, Puxoo cun ficheiro de texto por sinxeleza.
Anímase a compartir as súas propias solucións ou posibles melloras que se lle ocorreron.