miércoles, 30 de abril de 2014

IMPLEMENTACION DEL CALL CENTER CON MACROS, COLAS Y AGENTES DIRECTORIO, Y CHAN_SPY

Call Center Vídeo_3

En este entrada se comienza a dar solución de forma total al primer objetivo del proyecto, en la entrada anterior, se vio como configurar las llamadas y el servicio de correo de voz mediante un macro, para lograr solucionar completamente el objetivo uno "comunicar todas las extensiones internas (dispositivos SIP) entre sí y brindarles servicios de correo, directorio telefónico entre otros".

El contexto entrante, como su nombre lo indica, recibe las llamadas que ingresen por las troncales analógicas o digitales según sea el caso. Cuando se llame utilizando el número 01800123, una contestadora automática da una bienvenida para seleccionar la opción de un menú. El menú dirige al cliente a una de las siguientes opciones, según el número marcado:

[entrante]
exten => 1,1,Macro(llamadas,SIP/4001)
exten => 2,1,Macro(colas,${COLA1})
exten => 3,1,Macro(colas,${COLA2})
exten => 4,1,Playback(conference-call)
exten => 4,2,Goto(conferencia,s,1)
exten => 5,1,Goto(ivr,s,1)

Es por esto que se crearan una serie de contextos los cuales van a permitir manejar de cierta forma  las llamadas internas, brindando a los usuarios servicios como por ejemplo, correo de voz, Directorio, Control de llamadas y además, dentro del proyecto se permitirá acceder directamente a las opciones del IVR

[entrante]

#include llamadas_internas.conf

archivo llamadas_internas.conf

[agentes]
include => llamadas_internas

[supervisor]
include => llamadas_internas
include => Directorio

[llamadas_internas]
exten => 01800123,1,Goto(entrante,s,1)
exten => _40XX,1,Macro(llamadas,SIP/${EXTEN},agentes)
exten => 150,1,VoiceMailMain(${CALLERID(num)}@agentes)

El contexto Directorio se crea para buscar un usuario asignado a un número telefónico, como se vio al crear el contexto llamadas_internas, el numero para ejecutar el directorio será el 150, esta aplicación relaciona dos contextos en este orden, el creado en el archivo voicemail.conf ya que en este están registrados los usuarios asociados a los números telefónicos y el contexto llamadas internas ya que si encuentra la persona asociada al número de extensión esta extensión timbrara.

[Directorio]
exten => 155,1,Directory(agentes,llamadas_internas)

[agentes]
include => Directorio

[supervisor]
include => Directorio

Para empezar a recibir llamadas, el agente debe identificarse en el sistema mediante su número de agente y contraseña. A partir de ese momento, el agente permanecerá conectado, escuchando una música hasta que haya alguna llamada para atender, este tipo de agentes es utilizado en call centers donde se puede utilizar una extensión exclusivamente para atender llamadas, pero si el call center cuenta con pocas extensiones, no será posible estar todo el tiempo conectado como agente, es necesario realizar las actividades cotidianas con los teléfonos y al mismo tiempo atender las llamadas.

Para configurar los agentes que atenderán las llamadas entrantes a las distintas colas hay que modificar el archivo agents.conf.

[general]
persistentagents=yes

[agents]
autologoff=15

agent => 1151,4321,Dexter Morgan
agent => 1152,4321,Walter White

exten => _115X,1,Agentlogin(${EXTEN})
same => n,Hangup

Para que los agentes puedan autenticarse y atender las colas de que son miembros, se utiliza en el dialplan la aplicación Agentlogin

exten => 115,1,Addqueuemember(Telecontacto,SIP/${CALLERID(num)})
same => n,Playback(agent-loginok)
same => n,Hangup

exten => 116,1,Removequeuemember(Telecontacto,SIP/${CALLERID(num)})
same => n,Playback(agent-loggedoff)
same => n,Hangup

Como es poco productivo tener un agente conectado permanentemente a una cola ya que utiliza parte del ancho de banda disponible, es por esto que se podrían conectar de forma dinámica y que mientras esperan las llamadas en cola puedan utilizar el teléfono para otro tipo de actividad, para añadir y eliminar de forma dinámica a la cola en el dial plan, se utilizan aplicaciones como AddQueueMember y RemoveQueueMember

CLI> module reload chan_agent.so
CLI> agent show

Las Colas permiten administrar de manera más eficiente las llamadas entrantes, estas llamadas que entran a una cola serán distribuidas por orden de llegada y serán atendidas por los agentes.

En el archivo queues.conf se configuran las distintas colas de espera, cuando se envía una llamada a una cola a través del dialplan, esta llamada se queda en espera hasta el momento en el que pueda ser atendida por un agente.  

Las llamadas que entran en una cola serán distribuidas por orden de llegada entre los miembros de esta cola. Para decidir a qué usuario se envía cada llamada, el sistema usará una serie de estrategias de distribución de que dispone

[general]
persistentmembers=yes
autofill=yes

[Telecontacto]

joinempty=paused,unavailable,invalid,unknown
leavewhenempty=paused,unavailable,invalid,unknown

member => Agent/1151
member => Agent/1152

exten => 110,1,Answer
same => n,Set(SPYGROUP=Telecontacto)
same => n,Queue(Telecontacto)
same => n,Voicemail(4002@agentes)
same => n,Hangup

CLI> module reload app_queue.so
CLI> queue show Telecontacto


En Asterisk el archivo del dialplan extensions.conf se divide en tres bloques:

La etiqueta que da inicio a la parte general, 
La etiqueta donde empieza la definición de las variables globales, 
Terminada la configuración [general] y [globals] se empieza a construir el dialplan, creando los contextos que ya se han visto.

#include variables_globales.conf

[globals]

COLA1 = Telecontacto
Supervisor = SIP/4001

[macro-colas]

exten => s,1,Queue(${ARG1})
same => n,Voicemail(4002@agentes)
same => n,Hangup

exten => 1,1,Macro(llamadas,${Supervisor})

Este contexto [control_llamadas] se crea para escuchar las conversaciones telefónicas por parte del supervisor sin que los teléfonos involucrados o espiados se den cuenta, este contexto permitirá controlar la calidad de las llamadas y al mismo tiempo ir capacitando a los agentes en sus actividades dentro del call center.

La aplicación chan_spy permite escuchar las conversaciones entre extensiones, tiene la opción de que las extensiones no de den cuenta de que están siendo vigiladas, se puede también hablar con la extensión que se monitorea sin que el interlocutor pueda escuchar la conversación, hablar con las dos extensiones simultáneamente etc. 
.
La variable ${SPYGROUP} permite escuchar solo los canales que pertenecen a un grupo, que por ejemplo, podrían ser los de la cola de espera Telecontacto

[control_llamadas]
exten => 160,1,ChanSpy(SIP,qbg(Telecontacto))
same => n,Hangup

[supervisor]
include => control_llamadas

exten => 110,1,Answer
same => n,Set(SPYGROUP=Telecontacto)
same => n,Queue(Telecontacto)

[macro-colas]
exten => s,1,Answer
same => n,Set(SPYGROUP=${ARG1})
same => n,Queue(${ARG1})

No hay comentarios:

Publicar un comentario