Duda con la identificación de agentes en call center implementado bajo Asterisk

988 views
Skip to first unread message

Miguel Alberto Sanz Pardo

unread,
Aug 10, 2015, 8:13:53 AM8/10/15
to asterisk-es
Hola buenos días,


Estoy realizando una implementación de un mini call center para llamadas entrantes de 10 agentes y me surge una gran duda:

¿Cómo identifico a los agentes para saber lo que ha hecho cada uno en cada momento?


Tengo claro que existen dos "tipos" de agentes(más bien que existen 2 tipos de configuraciones para los agentes):

- Conf. estandar (Agente "Estático") --> El agente espera con el teléfono descolgado (escuchando MOH o algo por el estilo) esperando a que le lleguen las llamadas
- Conf. callback (Agente "Dinámico") --> El agente espera con el teléfono colgado a que le lleguen las llamadas

En principio tengo que darles opción a que puedan usar cualquiera de las dos configuraciones

En el caso de que se usara la configuración estática podría hacer que cada agente de mi Asterisk estuviera relacionado con un usuario en concreto de manera que solucionaría este problema de la identificación.

Sin embargo, en el caso de la conf.dinámica el agente se loguea mediante una extensión en vez de loguearse mediante un agente en concreto, de manera que si miro el CDR no sé quién es el agente que ha atendido a las llamadas,sino que veo la extensión que las atendió.

¿Alguna idea de como poder solucionar este problema? Por más vueltas que le estoy dando no se me ocurre nada en estos momentos.



un saludo

Miguel Sanz

Miguel Alberto Sanz Pardo

unread,
Aug 12, 2015, 3:38:25 AM8/12/15
to asterisk-es
¿Nadie se ha enfrentado antes este problema?

Voy a tratar de exponer un ejemplo de lo que me sucede y de lo que estoy tratando de obtener:


Dispongo por ejemplo de 4 "agentes dinámicos"
Nº agente: 1001,1002,1004,1004
Agente: A1Callback,A2Callback,A3Callback,A4Callback

En los reportes del módulo que uso para ver las estadísticas puedo ver las llamadas asociadas a los agentes de manera que el número de agente es el 1001 y el nombre del agente es A1Callback.

Lo interesante sería que en vez de ver A1Callback se pudiese ver de alguna manera el usuario real con el que ingresó mi agente al módulo de estadísticas. Por ejemplo, usando una gui estilo Elastix solicitas a tu agente que entre con unas credenciales de manera que se tenga que loguear inicialmente usando un nombre de usuario, por ejemplo "agente01" (El cual está asociado a una persona, por ejemplo Pepe Diaz). De esta manera, una vez logueado en el sistema, el agente accede al módulo de call center y se loguea contra la extensión 1001 mediante callback. Cuando le llegan llamadas al agente si vamos al report del módulo de call center vemos algo del estilo:
Nº agente: 1001
Agente: A1Callback

Cuando lo realmente interesante sería ver:
Agente: agente01 o Pepe Diaz

¿Alguna idea de cómo poderle pasar al campo membername de la queue el nombre de usuario con el que se ha logueado inicialmente en el sistema el agente? No sé si con modificar algo en la DB sería suficiente o si es algo más complejo, si alguien tiene una ligera idea de lo que estoy tratando de hacer y puede echarme una mano se lo agradeceré.


un saludo

Miguel Sanz

Elio Rojano

unread,
Aug 12, 2015, 3:55:00 AM8/12/15
to aster...@googlegroups.com
No he conseguido adivinar cómo funciona lo del "nombre del agente"... a lo más que he llegado ha sido a ver en el queuelog, que el agente N se había logueado en el usuario SIP/XXX.


--
Este email pertenece a la lista de Asterisk-ES (http://www.asterisk-es.org)
Normas de la lista Asterisk-ES: http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asterisk-es
---
Has recibido este mensaje porque estás suscrito al grupo "asterisk-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a asterisk-es...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a aster...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/asterisk-es.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--

jorge montero

unread,
Aug 12, 2015, 4:05:18 AM8/12/15
to aster...@googlegroups.com
= Seguro que lo sacamos

:-)
Un saludo.

Jorge Montero

Miguel Alberto Sanz Pardo

unread,
Aug 12, 2015, 4:14:53 AM8/12/15
to asterisk-es
Gracias por tu respuesta Elio,

Lo único que se me ocurre para solucionar esto es algo de este estilo, aunque tiene que haber alguna manera más sencilla seguro

Básicamente la idea que se me ha ocurrido es que:
1º) El agente se registra via web contra la GUI que estemos usando para acceder al call center y almacenamos su user en algún registro de manera temporal
2) Tras esto el agente llega a la consola de agente donde se registra contra una extensión de manera dinámica. Entonces al tratar de loguearse contra dicha extensión, al pulsar el botón de logueo, de manera previa se modifica el campo asociado al nombre de agente y tras esto acaba por loguearse contra dicha extensión.
3) Al salir del sistema se vuelve a acceder al campo asociado al nombre del agente y se vuelve a dejar de manera predefinida.

Ahora habrá que ver con qué lenguaje programar esto y si es relativamente sencillo de programar o si por el contrario no lo es.

Elio Rojano

unread,
Aug 12, 2015, 4:23:22 AM8/12/15
to aster...@googlegroups.com
El nombre del agente se define en el agents.conf y por lo tanto accesible en chan_agent.c (http://doxygen.asterisk.org/asterisk1.8/chan__agent_8c-source.html) no obstante, creo que el campo fullname no se 'exporta' al app_queue.c, por lo que, salvo que en chan_agent.c edite el queuelog (cosa que dudo porque no lo he visto), el nombre no estaría accesible.

jorge montero

unread,
Aug 12, 2015, 4:23:58 AM8/12/15
to aster...@googlegroups.com
¿dejar un interface web abierto a los agentes? lo siento no lo veo.

Te complica la escalabilidad, la disponibilidad, seguridad, riesgo de bloqueos, carga la CPU, uff, hay que hilar fino para hacer eso.
Un saludo.

Jorge Montero

Miguel Alberto Sanz Pardo

unread,
Aug 12, 2015, 4:24:27 AM8/12/15
to asterisk-es
Umh, modificar el app_queue.c y volver a recompilar, suena peligroso pero bastante interesante si se puede hacer de una manera relativamente limpia de esa manera, no estaría del todo mal poder forzar a que usara el campo de user con el que te registras de forma inicial a través del interfaz web y sobreescribir el campo que se define como nombre de agente (los que tengo definidos como A1callback,A2callback, etc) con el valor de este otro campo. No sé si modificando el .c se podrá lograr esto la verdad, ¿Tú lo ves factible, Jorge?

jorge montero

unread,
Aug 12, 2015, 4:24:46 AM8/12/15
to aster...@googlegroups.com
Cierto Elio

Elio Rojano

unread,
Aug 12, 2015, 4:30:33 AM8/12/15
to aster...@googlegroups.com
Hola Miguel,

El objetivo primero de ver el código no es modificarlo para ponerlo en producción (aunque podrías), si no entender qué hace y ver si hay algo que debería hacer y no hace, o si lo hemos entendido mal y se hace de otra forma.

Por ejemplo, hace poco descubrí que un parámetro configurado no funcionaba.. mirando el código descubrí que sí que funcionaba, pero lo hacía al revés de como imaginaba. Mi forma de pensar era al revés de la persona que programó el módulo. Hay otros casos en los que una variable está condicionada a valores de otras variables...



Miguel Alberto Sanz Pardo

unread,
Aug 12, 2015, 4:31:27 AM8/12/15
to asterisk-es
No obstante para los "agentes estáticos" se usa esa info. (la de agents.conf) pero para los "agentes dinámicos" no se usa dicha info. ¿No?
Corrígeme si me equivoco Elio.


un saludo

Miguel Sanz 

Elio Rojano

unread,
Aug 12, 2015, 4:39:12 AM8/12/15
to aster...@googlegroups.com
Correcto... 

Hace tiempo publiqué este artículo que utiliza Agentes Dinámicos y cuentas de Voicemail (que sí incluyen nombres) y estoy seguro que no debe ser complicado obtener el nombre de la persona y añadirlo al QueueLog.

--
Este email pertenece a la lista de Asterisk-ES (http://www.asterisk-es.org)
Normas de la lista Asterisk-ES: http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asterisk-es
---
Has recibido este mensaje porque estás suscrito al grupo "asterisk-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a asterisk-es...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a aster...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/asterisk-es.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Miguel Alberto Sanz Pardo

unread,
Aug 12, 2015, 5:22:45 AM8/12/15
to asterisk-es
Muchas gracias Elio, le voy a echar un vistazo, estaría muy bien poder solucionar este aspecto, estoy seguro de que a mucha gente le vendría de perlas el hecho de que en el report apareciera la info. del nombre de la persona o similar


un saludo y muchas gracias por vuestra ayuda a los dos ;)

Miguel Sanz

Miguel Alberto Sanz Pardo

unread,
Aug 19, 2015, 2:27:17 PM8/19/15
to asterisk-es
Bueno, ya conseguí hacer algo con respecto a que aparezcan los nombres de los agentes en vez de los identificadores de los dispositivos, pero todo programando el código a mano desde el extensions.conf

Ahora viene el siguiente problema - ya sé que esto es una lista de Asterisk y que lo que voy a preguntar a continuación va enfocado al módulo de call center de Elastix y si algun@ se enfada por preguntar acerca de esto lo entenderé y asumiré - , actualmente estoy usando un Asterisk bajo Elastix, ya que el propio Elastix dispone de un módulo de Call Center el cuál parece funcionar bastante bien y necesito proporcionar a los agentes un interfaz web para que se logueen mediante una consola(el cliente quiere que los agentes se logueen mediante una interfaz web o algo similar y no descolgando el teléfono y marcando un número).

He estado investigando qué archivos usa el módulo de call center de Elastix para entre otras cosas loguear/desloguear agentes ( /opt/elastix/ /var/www/html/modules/), para tratar de "adaptar" el módulo con el código que programé en el extensions.conf pero no consigo entender el código de dichos archivos. Quiero ver en qué archivos del módulo se indica que se ejecute la app de Asterisk AddQueueMember(), ya que entre otras cosas al hacer un login de un agente dinámico desde el módulo, por la consola no aparece nada reflejado, no aparece en ningún momento por la el CLI de Asterisk una línea con un comando del estilo AddQueueMember, pero sin embargo sí que se loguea un agente de manera dinámica, ya que si ejecutas: "queue show" aparece dicho agente dinámico. Si alguien pudiera ayudarme se lo agradecería.

Si se os ocurre alguna otra alternativa que creáis que pueda ser mejor y/o más sencilla os rogaría que me dierais alguna idea.


un saludo y gracias de antemano

Miguel Sanz

Miguel Alberto Sanz Pardo

unread,
Aug 21, 2015, 8:56:59 AM8/21/15
to asterisk-es
Después de mucho investigar, tiene toda la pinta que la función que se acaba ejecutando cuando se trata de añadir un agente es:

function loginagent  ==> ECCP.class.php

   public function loginagent($extension, $password = NULL, $timeout = NULL)
    {
        $xml_request = new SimpleXMLElement("<request />");
        $xml_cmdRequest = $xml_request->addChild('loginagent');
        $xml_cmdRequest->addChild('agent_number', $this->_agentNumber);
        $xml_cmdRequest->addChild('agent_hash', $this->agentHash($this->_agentNumber, $this->_agentPass));
        $xml_cmdRequest->addChild('extension', str_replace('&', '&amp;', $extension));
        
if (!is_null($password))
            $xml_cmdRequest->addChild('password', str_replace('&', '&amp;', $password));
        if (!is_null($timeout))
            $xml_cmdRequest->addChild('timeout', str_replace('&', '&amp;', $timeout));
        $xml_response = $this->send_request($xml_request);
        return $xml_response->loginagent_response;
    }


Estoy tratando de entender cómo debe de ser enviado el .XML mediante ECCP (el formato) para poder añadir la info. asociada al identificador del usuario que aparece en 

$user = isset($_SESSION['elastix_user'])?$_SESSION['elastix_user']:"unknown";

a la hora de loguear el agente en la consola (a la hora de hacer el AddQueueMember o similar)


He ido reportando todo esto a http://bugs.elastix.org/view.php?id=2320 además de enviar un mail a la gente de Elastix.

Si obtengo alguna solución ya os comentaré por si a alguno os interesa.
Reply all
Reply to author
Forward
0 new messages