← maurobernal.com.ar

Etiqueta: elastic

  • 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.

Tags

tsql (27)mssql (26)sql (20)devops (20)dotnet (18)docker (15)performance (14)contenedores (11)dotnet10 (10)linux (9)csharp (8)microservicios (7)angular (7)angular21 (7)sql server (6)issabel (6)docker-compose (6)typescript (6)mysql (5).NET (5)