Listado de la etiqueta: ivr

Encuesta con Asterisk

Polls Cuestionario por IVR para Asterisk

Existen diversas formas de obtener indicadores del servicio prestado. Sin embargo la mejor retroactividad es la que puede brindarte tu propio cliente. Para ello muchas veces es necesario implementar una encuesta de calidad que permite sondear diferentes aspectos del servicio brindado.

En esta oportunidad se trabajo bajo la siguiente plataforma:

  • Elastix 4
  • Asterisk 11.24

El proceso para armarla la misma consiste en:

  • Una BD MYSQL para guardar los resultados
  • Un ID de la instancia que vamos a guardar (normalmente el ID de tu CRM, o el número de llamada ,etc)
  • DialPlan para que Asterisk interprete los pasos que debe llevar el mismo.
  • Una extensión sobre la cúal recae la encuesta (IVR)
  • Tener audios grabados de las preguntas, los saludos y los mensajes de error ante ingresos erróneos.

Primero que nada vamos a entender como funciona:

  1. Primero éxito una comunicación teléfonica entre el cliente y el personal interno.
  2. Se deja al cliente en línea (hold) y el personal interno procede a llamar a la encuesta
  3. La encuesta es un IVR que atiende automáticamente y solicita el ID para almacenar las respuestas enlazadas a este último.
  4. Una vez que el IVR confirmó que recibió bien el parámetro empieza con la encuesta
  5. Segundos antes el personal interno transfiere el cliente que estaba en línea a la extensión de la encuesta que está a punto de comenzar
  6. Toda respuesta por parte del teclado del cliente es recibida y almacenada en la BD MYSQL por parte del IVR

Como es el archivo del DIALPLAN

En la primer parte se define las variables a usar y la conexión a la BD MYSQL:

;----------------------- INICIO DE PARAMETROS DE ENCUESTA
; 2099 IVR Encuesta
; Inicio
exten => 2099,1,Answer                          ; Atiendo
;exten => 2099,n,Wait(1)                                ; Espero 1 Segundo para darle tiempo al SIP
exten => 2099,n(begin),Set(TIMEOUT(digit)=3)    ; Defino parametros de tiempo
exten => 2099,n,Set(TIMEOUT(response)=3)        ; Defino Parametros de tiempo
;exten => 2099,n,Set(CHANNEL(hangup_handler_push)=hangup-sql,2099,1);  SubRutina de Guardar en Base :: cuando el cliente corta no se puede detectar, se descarta
exten => 2099,n,MYSQL(Connect connid 172.15.15.15 usuario clave base_datos) ; Me conecto a la Base de Datos

; Asignacion de Variables
exten => 2099,n,Set(MSGN=custom/ivr-n)  ; Cargo el Mensaje de Num de Expediente
exten => 2099,n,Set(MSG0=custom/ivr-0)  ; Cargo el Mensaje de Bienvenida
exten => 2099,n,Set(MSG1=custom/ivr-1)  ; Cargo la Pregunta 1
exten => 2099,n,Set(MSG2=custom/ivr-2)  ; Cargo la Pregunta 2
exten => 2099,n,Set(MSG3=custom/ivr-3)  ; Cargo la Pregunta 3
exten => 2099,n,Set(MSG4=custom/ivr-4)  ; Cargo la Pregunta 4
exten => 2099,n,Set(MSG5=custom/ivr-5)  ; Cargo la Pregunta 5
exten => 2099,n,Set(MSG6=custom/ivr-6)  ; Cargo la Pregunta 6
exten => 2099,n,Set(MSGError0=custom/ivr-error0)  ; Cargo el error 0
exten => 2099,n,Set(MSGError1=custom/ivr-error1)  ; Cargo el error 1
exten => 2099,n,Set(MSGError2=custom/ivr-error2)  ; Cargo el error 2
exten => 2099,n,Set(MSGEnd=custom/ivr-end)  ; Cargo el Fin de la Encuesta

Luego viene la parte en donde le pregunto al personal interno el ID inicial para almacenar

;-------------- PREGUNTA N de ID ---------------------------------
;Empiezo con la Pregunta del Numero de ID
exten => 2099,n(pregN),Playback(${MSGN})        ; Reproduzco la Pregunta Num de ID
exten => 2099,n,Goto(2099,pregNresp)    ; voy a esperar la respuesta

;Esperando Respuesta1
exten => 2099,n(pregNresp),Read(NUMBEREXP,,5,1)         ; Leo lo que marca el personal Interno: Num de ID
exten => 2099,n,GotoIf($["${NUMBEREXP}" = ""]?pregN); Si la respuesta es nula entonces Pregunto de Nuevo Num de Expediente
;exten => 2099,n,SayNumber(${NUMBEREXP},f)
exten => 2099,n(pregNconf),Read(NUMBER,,1,1)            ; Leo lo que marca el operador: 1 correcto, 0 correguir
exten => 2099,n,GotoIf($[${NUMBER} = 0]?pregN:intro); Si la respuesta es 0 voy a la pregunta 1

Seguido y validado lo anterior le reproduzco la bienvenida al cliente:

; -------------- INTRO -------------------------------------
; Mensaje explicando el funcionamiento de la encuesta
exten => 2099,n(intro),Playback(beep)   ; Reproduzco un Beep
exten => 2099,n,Set(PREFIJO="2019") ; Asigno un prefijo personalizado. Ej: El año
;exten => 2099,n,Set(NUMBEREXP=$[${PREFIJO}~~${NUMBEREXP}])
exten => 2099,n,Wait(3)  ; Espero 3 Segundos
exten => 2099,n,Playback(${MSG0})       ; Reproduzco la intro
exten => 2099,n,Wait(1)
exten => 2099,n,MYSQL(Query consulta0 ${connid} insert into encuestas(ID,IDCRM,Personal,Fecha1,Fecha2,Activo) values (1,${NUMBEREXP},"Mauro",NOW(),NOW(),1)) ; Inserto la$

Luego debería seguir con las «N» preguntas que pueda tener configurado. Y al final reproducir un mensaje de FIN.

Esto es una idea de cómo se puede implementar.