Usuarios como membros dinámicos de Asterisk

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:

Colas sin nombre de usuario
Os membros da cola identificados só por números ou etiquetas estáticas

*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:

Colas con nombre de usuario
Membros con nome de usuario

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

Usuario respondiendo
O membro da cola respondendo a unha chamada

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

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

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.


Sobre Anxo Calvo

Apaixonado sobre ciencia e tecnoloxía. Profesor, autor de manuais e sistemas e director de comunicacións.

Deixe unha resposta

Enderezo de correo electrónico non será publicado. Os campos obrigatorios están marcados *