You are currently viewing Dialogflow 13 – Cuestionario de múltiples preguntas

Dialogflow 13 – Cuestionario de múltiples preguntas

Hola,

Esta semana me han pedido realizar un cuestionario de varias preguntas, que el usuario pueda ir respondiendo y luego se tomen acciones en función de las respuestas proporcionadas. En mi caso ha sido para preguntar temas médicos, pero se puede aplicar a cualquier cosa.

Hay 3 intents en el agente, uno que lanza el cuestionario, y 2 que capturan los “si” o “no”. Estos dos últimos tienen un contexto de entrada llamado “evaldata” para evitar que se disparen fuera del cuestionario.

Primero tenemos que hacer los correspondientes mapeos:

La función que inicia el cuestionario es la siguiente. 

Como podéis ver la pregunta actual se guarda como un parámetro dentro del contexto, y las respuestas van a guardarse en un array que inicializamos aquí.

Cuando se dispare alguno de los intents de Si o No, se llamará a estas funciones:

Que como podéis ver utilizan la misma función pero pasando como parámetro el texto correspondiente. La función en cuestión es la siguiente:

Lo primero que hacemos es leer el contexto y sus parámetros, guardamos el Si o No que acabamos de recibir, y luego, o bien pasamos a la siguiente pregunta, o bien vamos a evaluar los resultados. Para evaluar los resultados utilizamos esta función:

Esta función tendrás que reprogramarla con las condiciones que apliquen a tus respuestas. En este caso hay 3 tipos de resultados, y lo que hacemos es lanzar un intent de continuación utilizando eventos. Más info sobre cómo utilizar eventos en este post.

También sería sencillo almacenar los resultados obtenidos en una bbdd externa, tal y como vimos en este post sobre el uso BigQuery.

Por último, las constantes que definen el número de las preguntas, y el contenido de las mismas se definen al principio del código:

Espero que os sea útil.

Saludos,

Jamarmu

============================================================

Trabajo para Google Cloud, pero este artículo son ideas y opiniones personales

Esta públicación tiene 10 comentarios

  1. Eugenia Castilla

    Hola Jamarmu!!!!! Me llamo Eugenia y estoy haciendo mi TFG usando Dialogflow y Telegram y me preguntaba si podrias echarme una mano con algunos temas que no acabo de entender sobre los webhooks y las diferentes formas de visualización de respuestas…me harías un gran favor si me echaras una mano, si no es mucha molestia.

    Fdo: Eugenia Castilla(desesperada alumna en pleno TFG)

    1. jamarmu

      Hola Eugenia,

      Con qué parte necesitas ayuda?

  2. Andrew

    Hola, debo hacer algo similar a lo que nos compartes aquí, pero estoy algo confundido con el tema. Necesito trabajar con las respuestas que los usuarios dan a estas, por lo que debo almacenarlas claramente. El webhook se debe usar en todos los casos? Ya que tengo las preguntas y las opciones en una base de datos.

    1. jamarmu

      Hola,

      No sé si te entiendo … las respuestas se capturan como un parámetro en el Intent, y luego para procesar esa información, por ejemplo guardarlas en una base de datos externa, tienes que usar un fulfillment (webhook).

      Si no usas un fulfillment lo único que puedes hacer es utilizar esos parámetros para las respuestas que das al usuario, pero si quieres hacer algo con esa información, más allá de que queden en el log, tendrás que usar un fulfillment.

      Saludos

      Jamarmu

      1. Andrew

        Hola. Mi idea es tener tres tipos de cuestionarios; yo tengo unas preguntas y unas opciones para estas, definidas en mi base de datos y de acuerdo al tipo de cuestionario que haya elegido el usuario, se le mostrará eso.
        Luego, de acuerdo a lo que el usuario responda en el cuestionario, viene la lógica de evaluar las respuestas, para luego finalizar, donde se le devolverá una respuesta o resultado. Básicamente es eso.

        1. jamarmu

          Hola,

          Igual te merece la pena echarle un vistazo a Dialogflow CX, que permite jugar mucho mejor con parámetros y toma de decisiones/opciones de dialogo en función del valor de estos.

          Saludos,

          Javier

          1. Andrew

            Hola de nuevo,

            He tenido problemas conectando el webhook con mi backend en Django/Django Rest Framework y no sé como manejarlo, también ando corto de tiempo para pasarme a Dialogflow CX y es que todo esto debo conectarlo a una aplicación móvil con Flutter.

            Mira, básicamente quiero que el usuario al hablar con el bot (será una conversación con la voz) pueda iniciar un cuestionario en especifico y pues dicho cuestionario que ya está almacenado en la base de datos, estoy manejando la información con API REST.

          2. jamarmu

            Hola,

            Pues leer el contenido de las preguntas de una BBDD externa es sencillo, lo tienes en uno de los posts.

            En función del tipo de respuestas la cosa se puede complicar:

            1-Si las respuestas son siempre de tipo si/no programar el intent que captura las respuestas es sencillo
            2-Si las respuestas son de una lista o abiertas, tienes dos opciones

            2A- Trabajar con la API para crear intents de forma programática una vez que se le el contenido del cuestionario … un jaleo curioso
            2B- Capturar la respuesta como sys.any, que va aceptar cualquier cosa como respuesta, y luego procesarla en el fulfillment.

            Suerte

            Javier

  3. Martin

    Hola,

    Estoy intentando hacer un cuestionario con multiples preguntas, pero las opciones pueden ser variadas Ejem:

    Tu rostro presenta: Piel con manchas e hiperpigmentación
    Piel con textura irregular
    ¿Qué productos estás buscando? Hidratante
    Limpiador
    Tónico

    ¿Como puedo capturar la respuesta y redirigir a la siguiente pregunta?

    1. jamarmu

      Hola,

      Pues puedes utilizar esta estrategia y poner condiciones en el código para lanzar una u otra pregunta, o utilizar contextos en la conversación para redirigir hacia la siguiente pregunta.

      Si te pasas a Dialogflow CX toda la programación de este tipo de casos es mucho más sencilla.

      Saludos

      Javier

Deja una respuesta