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})

sábado, 19 de abril de 2014

ARCHIVOS DE CONFIGURACIÓN Y APLICACIONES UTILIZADAS EN EL CALL CENTER


A diferencia de las redes telefónicas tradicionales, Asterisk no transmite la voz en tiempo real, lo que sucede es una transmisión de paquetes entre dos direcciones IP a través de un canal de comunicación. Cuando se habla a través de un teléfono IP, por ejemplo, es necesario un protocolo que convierta la voz en paquetes de datos que puedan ser transportadas por la red de datos.

Es por esto que se utiliza el protocolo de señalización SIP, el cual permite establecer sesiones multimedia entre cliente y servidor para transmitir voz o vídeo, intercambiando peticiones o respuestas entre agentes a través de un servidor proxy por ejemplo.

Configuración extensiones archivo sip.conf

En Asterisk, el archivo sip.conf es donde se definen las extensiones SIP, los proveedores SIP y, en general, todo lo relacionado con el protocolo SIP. Con las extensiones configuradas se podrán llamar una con otra, se podrán enrutar las llamadas a teléfonos fijos y/o celulares, utilizar proveedores SIP, Gateway PSTN, y aprovechar los típicos servicios de una PBX como llamada en espera, desvío de llamadas, llamada a tres, contestador automático, buzón de voz, etc.

[supervisor](!)

type=friend
context=supervisor
language=es
host=dynamic
nat=yes
secret=1a2b3c
dtmfmode=auto
disallow=all
allow=alaw

[4001](supervisor)

[agentes](!)

type=friend
context=agentes
language=es
host=dynamic
nat=yes
secret=a1b2c3
dtmfmode=auto
disallow=all
allow=alaw

[4002](agentes)
mailbox=4002@agentes
callerid= Dexter Morgan 

[4003](agentes)
mailbox=4003@agentes
callerid= Walter White 


Configuración Dial Plan archivo extensions.conf

El archivo de configuración de Asterisk extensions.conf es donde se define el dialplan de Asterisk. Todas las llamadas entrantes y salientes se procesan en este archivo. Cabe señalar que las extensiónes en Asterisk son una serie de números o letras que definen bloques en el dialplan dentro del cual se ejecutan aplicaciones o funciones como ya se había mencionado.

; Numero para simular una llamada desde el exterior

exten => 01800123,1,Goto(entrante,s,1)

[agentes]

exten => _40XX,1,Macro(llamadas,SIP/${EXTEN},agentes)

exten => 150,1,VoiceMailMain(${CALLERID(num)@agentes})

[supervisor]

include => agentes

[entrante]

exten => s,1,Answer()
same => n,Playback(welcome)
same => n,Background(main-menu)
same => n,WaitExten(5)

exten => i,1,Playback(pbx-invalid)
same => n,Goto(entrante,s,1)

exten => t,1,Playback(thank-you-for-calling)
same => n,Dial(SIP/4003)
same => n,Voicemail(4003@agentes)

#include macros.conf


macros.conf

[macro-llamadas]

exten => s,1,Dial(${ARG1},7)
same => n,Voicemail(${MACRO_EXTEN}@${ARG2})


Inclusión de archivos y contextos

Hacen referencia a la acción de incluir algo dentro de un contexto o apartado del Dial Plan, sin tener que reescribirlo todo para evitar la redundancia. Son muy parecidos a los Include de la mayoría de los lenguajes de programación existentes.
Existen dos opciones:

Incluir un contexto: Mecanismo principal para establecer una jerarquía, o un mecanismo de "herencia" para distintos contextos a los que están asociados varios dispositivos.

Incluir un archivo: Sirven principalmente, para poder "modularizar" el Dial Plan evitando miles de líneas que hacen difícil la interpretación.
La sintaxis es, "#include archivo.conf".

Por ejemplo, al hacer un IVR se creara un contexto dentro de un archivo llamando por ejemplo ivr-extensions.conf y dentro de este exclusivamente el contexto [ivr] con todo el proceso que deseemos aportar. Es una buena práctica trabajar siguiendo este concepto.


Aplicaciones

Acciones aplicables al manejo de las llamadas dentro del Dial Plan. Por ejemplo, la más popular sería la aplicación Dial, la cual simplemente tiene como propósito hacer que los teléfonos  se llamen entre ellos. Existen otras aplicaciones comunes, como:

Dial
Voicemail
Answer
Playback
Backgraund
WaitExten
Goto
Macro

Background() y Playback(), reproducen archivos de audio, ubicados en /var/lib/asterisk/sounds/es, la diferencia radica en que al momento de presionar una tecla, Background() hace que se interrumpa la grabación inmediatamente se presione una tecla del teléfono.

WaitExten() Esta aplicación espera un tiempo para que sea oprimida una tecla por y es usada directamente con la aplicación Background().

Cuando un contexto recibe una solicitud de una extensión no valida, la llamada es enviada a la extensión i. 

Cuando al estar llamando no se oprime la tecla dentro del tiempo valido (10 segundos por defecto) la llamada será enviada a la extensión t.

Cuando en el DialPlan algunas acciones son repetitivas, los Macros permiten simplificar este tipo de operaciones.

Macro(nombre macro, argumento1,argumento2,argumentoN)

ArgumentoN es un valor o una variable que se pasa a la macro al momento de llamarla desde el plan de marcado.
La aplicación macro crea las siguientes variables de canal:
• ${MACRO_EXTEN} contendrá el numero marcado
• ${MACRO_CONTEXT} contendrá el contexto de donde se ha llamado la Macro
• ${MACRO_PRIORITY} contendrá la prioridad de la línea de donde se ha llamado la Macro
• ${ARG1}, ${ARG2}, ${ARGN) son las variables que contienen los argumentos que se han enviado a la Macro.

                                       Configuración Buzón de Voz archivo voicemail.conf


En el archivo voicemail.conf es donde se configura todo lo relacionado con el buzón de voz. Si se recibe una llamada y no se contesta o la línea está ocupada, entrará en función el buzón de voz, y se podrá grabar un mensaje. Es posible crear distintos grupos de buzones de voz, en el caso del proyecto se creara uno para los agentes.

En el archivo sip.conf, Se configura el parámetro mailbox, cuando las extensiones se conecten al servidor Asterisk, éste controlará si hay mensajes de voz pendientes y en caso positivo se lo comunicará usando MWI = Message Waiting Indicator,  que puede ser recibida por la mayoría de los teléfonos IP o Softphone.


La opción callerid es el nombre y el número que identifica la extensión cuando llama.

[agentes]

; Numero extensión => contraseña, nombre apellido,

4002=> 4321, Dexter Morgan

4003=> 4321, Walter White 

sábado, 12 de abril de 2014

IMPLEMENTACION DE UN CALL CENTER CON ASTERISK

Call Center Video_1

El siguiente es el  primero de una serie de vídeos donde se implementara una central telefónica IP con el software de código abierto Asterisk, esta central telefónica manejara dos troncales 1 analógica y 1 digital las cuales permitirán la entrada y salida de llamadas a través de la red telefónica pública (PSTN), ademas se contratara una cuenta para llamadas internacionales a través de una conexión a Internet por medio de un proveedor SIP. Se configuraran contextos para el manejo de llamadas internas, entrantes y salientes para poder brindar capacidades de call center. Entre las capacidades para el Call Center se encuentran la administración de colas y agentes, el desarrollo de un IVR que se integre con las bases de datos MySQL y de Asterisk, ademas de contar con capacidades de transformación de texto a voz mediante el uso de TTS.

La Configuración realizada en el Servidor Asterisk, busca lo siguiente.

1. Comunicar todas las extensiones internas (dispositivos SIP) entre sí y brindarles servicios básicos

2. Recibir y enrutar llamadas entrantes desde las troncales analógicas y digitales, mediante el uso de una contestadora automática.

3. Permitir la salida de llamadas externas a través de las troncales adecuadas dependiendo del tipo de llamada (local, nacional o celular).

4. Autorizar y denegar la salida de llamadas de acuerdo a los permisos de cada usuario.