Tutorial de IVR Asterisk con Evolution DBR

Cómo integrar aplicaciones IVR Asterisk con el módulo DBR de EVOLUTION para la transferencia de llamadas y datos a las colas de llamadas de las campañas.

1. Introducción
2. Tutorial
2.1 Requisitos previos
2.2 Aplicación IVR simple en dialplan asterisk
2.3 Comprobando el funcionamiento
2.4 Argumentario de recogida de los datos informados desde la IVR
3. Funcionalidades de integración avanzadas
3.1 Prioridad de entrega de llamadas
3.2 Enrutado basado en skill de agentes
4. Conclusiones


1. Introducción

Algunos servicios de atención de llamadas requieren herramientas que permitan automatizar, al menos parcialmente, la recepción de las llamadas mediante IVR. En el caso de plataformas de telefonía basadas en Asterisk, normalmente es posible diseñar y desarrollar este tipo de aplicaciones IVR con las herramientas y posibilidades de la propia plataforma, aunque en una solución completa se requiere complementar dicho tratamiento automático con la posibilidad de transferir las llamadas a agentes humanos.

Por otra parte, el módulo DBR de EVOLUTION, proporciona unas funcionalidades avanzadas para el encaminamiento y distribución de llamadas a los agentes, incluyendo múltiples colas de llamadas de campaña, tratamientos de prioridades y skill-based-routing, encaminamiento basado en SLA y otros beneficios.

En este tutorial tratamos de mostrar cómo se pueden integrar aplicaciones IVR Asterisk con el módulo DBR de EVOLUTION para posibilitar la transferencia de llamadas y datos a las colas de llamadas de las campañas EVOLUTION.

Como ejemplo práctico integraremos una IVR para que inicialmente el cliente sea atendido de forma automática y posteriormente, sea atendido por un agente EVOLUTION.

La IVR atenderá la llamada y realizará varias preguntas al cliente. Usaremos, a modo de ejemplo, las siguientes preguntas: idioma en el que desea ser atendido, PIN o código secreto personal y tipo de incidencia que desea resolver. A continuación, la llamada se transferirá a la cola de la campaña correspondiente. Cuando un agente quede disponible, éste recibirá la llamada, y en su aplicación se mostrará el script de la campaña con los datos que el cliente habrá introducido previamente en la IVR, pudiendo hacer uso o no de la información.

 


2. Tutorial


2.1 Requisitos previos

Para este tutorial necesitaremos disponer de:

  • Instalación operativa de Evolution Enterprise Edition x.
  • ActivaTSP 8.2 o superior.
  • Asterisk 4, 1.6 o 1.8.
  • Acceso para realizar tareas administrativas en Asterisk.


2.2 Aplicación IVR simple en Dialplan Asterisk

1. En primera instancia, definiremos una extensión en el Dialplan para que actúe como ‘route-point’ para encolar la llamada mediante la API del conector DBR para Asterisk. En nuestro ejemplo, definiremos una nueva extensión “110” en el Dialplan Asterisk para que encamine las llamadas al módulo EvoRouter y le pase algunas variables que recogerá la IVR. 

La integración con EVOLUTION se realiza mediante la interface Fast Agi de Asterisk que permite encolar la llamada y asociarle parámetros de negocio. Al ejecutar esta llamada, Evolution toma el control y decide qué momento es el adecuado para entregar la llamada al agente. Supongamos que la IP del servidor donde está instalado EVOLUTION es 192.168.0.10…

[from-internal-custom]
exten => 110,1,AGI(agi://192.168.0.10/EvoRouter? dr.idioma=${idioma}&dr.pin=${pin}&dr.tipoIncidencia=${tipoIncidencia})
exten => 110,n,Hangup()

2. A continuación, programamos la parte del Dialplan correspondiente a la IVR. Cuando la IVR lo requiera, podrá saltar a la extensión 110 para pasar la llamada a una cola de campaña En nuestro ejemplo, usaremos algunas locuciones que deberán ser creadas a tal fin:

“locucion_pedirIdioma”, “locucion_pedirPIN”, “locucion_pedirTipoIncidencia”, “locucion_unMomentoPorfavor”.

[IVR]

exten => s,1,Answer()

exten => s,n,BackGround(locucion_pedirIdioma) exten => s,n,Read(idioma,,1);

exten => s,n,BackGround(locucion_pedirPIN) exten => s,n,Read(pin,,8);

exten => s,n,BackGround(locucion_pedirTipoIncidencia) exten => s,n,Read(tipoIncidencia,,1);

exten => s,n,BackGround(locucion_unMomentoPorFavor) exten => s,n,Goto(from-internal-custom,110,1)


3. Editemos la extensión del dialplan que recibirá las llamadas inbound, para que las dirija a la aplicación IVR que acabamos de crear. Por ejemplo, si las llamadas entrantes se reciben en la extensión correspondiente al DNIS = 901000000, en el contexto [from-pstn]…

[from-pstn-custom]

exten => 901000000,1,Goto(IVR,s,1)

 

4. Finalizaremos este proceso administrando en EVOLUTION Manager una estrategia para que se encole la llamada según nuestras necesidades (campaña, agente, prioridad, hándicap, skill…). En nuestro ejemplo, crearemos una estrategia EVOLUTION, con DN = 110, vinculada a la campaña “Servicio Técnico DBR Telefonía” que tendrá asignado el argumentario “Basico.NET”. El agente (AGENTE) debe participar en el servicio “Servicio Técnico”.

El dialplan resultante debe corresponder al siguiente fragmento:

 
[from-pstn-custom]

exten => 901000000,1,Goto(IVR,s,1)

[IVR]

exten => s,1,Answer()

exten => s,n,BackGround(locucion_pedirIdioma) exten => s,n,Read(idioma,,1);

exten => s,n,BackGround(locucion_pedirPIN) exten => s,n,Read(pin,,8);

exten => s,n,BackGround(locucion_pedirTipoIncidencia) exten => s,n,Read(tipoIncidencia,,1);

exten => s,n,BackGround(locucion_unMomentoPorFavor) exten => s,n,Goto(from-internal-custom,110,1)

[from-internal-custom]

exten => 110,1,AGI(agi://192.168.0.10/EvoRouter? dr.idioma=${idioma}&dr.pin=${pin}&dr.tipoIncidencia=${tipoIncidencia})

 exten => 110,n,Hangup()

 


2.3 Comprobando el funcionamiento

Para comprobar que el sistema funcione correctamente, conectaremos uno o más agentes EVOLUTION al servicio “Servicio técnico” y los cambiaremos a estado “disponible”.

Seguidamente, llamaremos al número telefónico vinculado al DN (ej: 901000000) comprobando que:

  • La IVR pregunta y recoge el idioma en que desea ser atendido el (1.- Español, 2.-Inglés)
  • La IVR pregunta y recoge el PIN.
  • La IVR pregunta y recoge el tipo de (1.- “Normal” 2.- “Urgente”)
  • La IVR pasa la llamada a la extensión 110, lo que inicia la ejecución de la correspondiente estrategia Evolution DBR. La llamada al API del Connector DBR pasa los parametros idioma, PIN y tipo de incidencia. 
  • Finalmente, la llamada se entrega al agente que recibe un screen-popup con el argumentario NET , mostrándole los datos recogidos por la IVR en la página de “Cliente”(apartado de “Datos asociados a la transacción”).

 


2.4 Argumentario de recogida de los datos informados desde la IVR

Usando la herramienta Developer.net podremos comprobar como el argumentario Basico.NET recupera los datos que pasó la IVR.

1. Abrimos el argumentario NET con Developer.net.

2. Editamos la página Cliente.aspx, donde podemos ver como se muestran los datos recogidos por la IVR. 

En este argumentario de ejemplo, se recogen los datos de la IVR y se asignan a los controles “TextBox” que están añadidos en el script.

3. Pasamos a la vista de código y ubicamos la etiqueta <script runat=”server”>. Dentro de esta etiqueta vemos el código utilizado en el método Page_Load y en un par de funciones auxiliares:

 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
Dim ValueIdioma As String
If Not Gestion.Transaccion.KeyValueCollection.GetValue("idioma", ValueIdioma) Then DivIVR_KVP.Visible = False
End If
TextBoxIdioma.Text = getTextoIdioma(ValueIdioma)

Dim ValuePIN As String
Gestion.Transaccion.KeyValueCollection.GetValue("pin", ValuePIN)
TextBoxPIN.Text = ValuePIN

Dim ValueTipoIncidencia As String
Gestion.Transaccion.KeyValueCollection.GetValue("tipoIncidencia", ValueTipoIncidencia)
TextBoxTipoIncidencia.Text = getTextoTipoIncidencia(ValueTipoIncidencia)
End Sub

Protected Function getTextoIdioma(ByVal Idioma As String) As String
Select Case Idioma

Case "1"
getTextoIdioma = "Español (1)"
Case "2"
getTextoIdioma = "Inglés (2)"
Case Else
getTextoIdioma = "Desconocido ()"
End Select

End Function

Protected Function getTextoTipoIncidencia(ByVal TipoIncidencia As String) As String

Select Case TipoIncidencia
Case "1"
getTextoTipoIncidencia = "Normal (1)"
Case "2"
getTextoTipoIncidencia = "Urgente (2)"
Case Else
getTextoTipoIncidencia = "Desconocido ()" 
End Select

End Function

4. En las propiedades del proyecto, vemos que está establecida la dirección del servidor EVOLUTION. 







5. Desde Developer.net, podríamos publicar el argumentario mediante la opción “generar” del proyecto.





3. Funcionalidades de integración avanzadas

En este tutorial se ha mostrado como integrar una IVR con el motor DBR de EVOLUTION, permitiendo comunicar una serie de parámetros entre la IVR y EVOLUTION. Esta integración permite una serie de funcionalidades avanzadas adicionales a destacar.

 


3.1 Prioridad de entrega de llamadas

En función de algún parámetro conocido por la IVR se podría encolar con diferentes “dn” correspondientes a diferentes estrategias con diferentes prioridades, permitiendo que algunas llamadas sean entregadas a los agentes con prioridad sobre otras.

Por ejemplo; en la IVR que hemos construido se podría hacer que las incidencia “1.- Normal” tuvieran menor prioridad que las “2.- Urgente”, así los agentes atenderían primero las incidencias urgentes.

 


3.2 Enrutado basado en Skill de agentes

En función de algún parámetro conocido por la IVR se podría encolar con diferentes “dn” correspondientes a diferentes estrategias con diferentes skill requeridos, permitiendo que las llamadas solo puedan ser atendidas por agentes con habilidades (skills) suficientes.

Por ejemplo; en la IVR que hemos construido se podría hacer que si el idioma es “1.- Español” se requiriera un agente con skill suficiente para atender clientes en español y si el idioma es “2.- Inglés” se requiriera un agente con skill suficiente para atender clientes en inglés.

 


4. Conclusiones

A través de un ejemplo sencillo, hemos mostrado cómo integrar una IVR con el motor DBR de EVOLUTION, permitiendo comunicar una serie de parámetros entre la IVR y EVOLUTION.

Así pues, podemos automatizar la recepción de la llamada mediante IVR realizando preguntas al cliente para posteriormente transferir la llamada a la cola de campaña correspondiente. De este modo, podemos clasificar llamadas y obtener información del cliente. Además, podemos clasificar la llamada para que agentes con la habilidad (skill) requerida atiendan la llamada y optimizar y ofrecer el mejor servicio a los clientes.

¿Aún tienes dudas?

Habla con una persona de nuestro equipo técnico para entender cómo nuestro software para contact center EVOLUTION puede ayudarte

Llámanos al

+34 932 289 310

UTC+2 hs