Crear un intent con parámetros

Ahora necesitamos un intent que pueda programar una cita para la tienda de bicicletas. A diferencia del primer intent Horas, que solo muestra la respuesta estática “Abrimos todos los días, de 9 a.m. a 6 p.m. ¿Hay algo más que pueda hacer por ti?”, el intent nuevo debe ser capaz de realizar un conjunto de tareas más complejo.

Examinemos la siguiente interacción entre el usuario y el agente:

      Usuario: Hola (Hi).

      Agente: Bienvenido. Puedo decirte los horarios de la tienda o puedo programar una cita. ¿Qué prefieres? (Welcome. I can tell you the shop hours, or I can set up an appointment. Which would you like?).

      Usuario: Necesito programar una cita hoy a las 3 p.m. (I need to make an appointment at 3 PM today).

      Agente: Entendido. Programé tu cita para el miércoles 1 de agosto a las 3 p.m. Nos vemos pronto. Adiós (Got it. I have your appointment scheduled on Wednesday, August 1 at 3 PM. See you soon. Good-bye).

En el cuadro de diálogo anterior, el enunciado del usuario “Necesito programar una cita hoy a las 3 p.m.” (I need to make an appointment at 3 PM today) contiene información importante, “3 p.m.” y “hoy”, que indica la hora y fecha en que el usuario desea visitar la tienda de bicicletas. La respuesta del agente incluye la información sobre la hora y la fecha que se menciona en el enunciado del usuario: “Entendido. Programé tu cita para el miércoles 1 de agosto a las 3 p.m. Nos vemos pronto. Adiós” (Got it. I have your appointment scheduled on Wednesday, August 1 at 3 PM. See you soon. Good-bye).

Para nosotros, identificar la información importante de las declaraciones es fácil; para las máquinas, sin embargo, es una tarea compleja. Necesitamos dar a los intents la capacidad de extraer información importante, parámetros, de las declaraciones del usuario.

Extraer información mediante el uso de entidades y parámetros

Dialogflow usa conceptos que se conocen como entidades y parámetros para extraer información específica de los enunciados de usuarios y convertirla en un conjunto de parámetros, que otras funciones o sistemas pueden procesar a fin de realizar diversas tareas.

Para crear un intent nuevo con parámetros, sigue estos pasos:

  1. Crea un intent llamado Make Appointment.
  2. En la sección Training phrases (Frases de entrenamiento), agrega la siguiente frase de entrenamiento:

    I need to make an appointment at 3 PM today.

  3. En la tabla Action and parameters (Acción y parámetros), verifica que hayan aparecido las entidades del sistema @sys.date y @sys.time.

  4. En la tabla Text response (Respuesta de texto), agrega la siguiente frase de respuesta:

    Got it. I have your appointment scheduled on $date at $time. See you soon. Good-bye.

  5. Haz clic en GUARDAR.

    Figura 5. Diagrama de flujo en el que se muestra la adición del intent Make Appointment (Programar una cita)

Con esta configuración, el intent Make Appointment (Programar una cita) examina los enunciados del usuario, identifica las palabras mapeadas a las entidades del sistema integradas de Dialogflow @sys.date y @sys.time, y coloca los valores identificados en los parámetros $date y $time. Por lo tanto, en la respuesta, podemos usar $date y $time para referirnos a los valores de fecha y hora que se identificaron en los enunciados del usuario: “Entendido. Programé tu cita para el $date a las $time. Nos vemos pronto. Adiós” (Got it. I have your appointment scheduled on $date at $time. See you soon. Good-bye).

Dialogflow también te permite crear entidades personalizadas para extraer parámetros que no son comunes o que no están clasificados. Sin embargo, en nuestro caso, usar entidades de sistema es suficiente para capturar parámetros típicos, como la hora y la fecha. Si deseas obtener más información sobre las entidades, consulta Entidades.

Obtén los parámetros requeridos mediante el uso del relleno de espacios

De acuerdo a las prácticas recomendadas de la sección anterior, ahora debemos proporcionar más frases de entrenamiento además de la frase de entrenamiento actual, “Necesito programar una cita hoy a las 3 p.m.” (I need to make an appointment at 3 PM today).

Agrega las siguientes frases de entrenamiento:

  • Can I schedule service for 4 PM tomorrow?
  • Can I set up an appointment for noon on Friday?

Hasta ahora, todas las frases de entrenamiento contienen la información de fecha y hora (“hoy a las 3 p.m.,”, “mañana a las 4 p.m.,” y “el viernes al mediodía”. Sin embargo, en el mundo real, los enunciados de los usuarios no siempre incluyen todos los parámetros necesarios. Agrega las siguientes frases de entrenamiento:

  • Can you fix my road bike?
  • My bike is broken.
  • I'd like to get my bike fixed, I have a mountain bike that needs servicing.
  • I need to fix my bike today.
  • I'd like to schedule an appointment on this Thursday.

Todas las frases anteriores indican que el usuario desea programar una cita; por lo tanto, nuestro intent nuevo debe coincidir con esas frases para que se realice la tarea de programar una cita. Sin embargo, cada una de estas frases carece de la información de hora, de fecha, o ambas. Frases como estas son problemáticas porque el intent no puede programar una cita sin la información de fecha y hora.

Dialogflow proporciona una función llamada relleno de espacios, que garantiza que un intent obtenga toda la información necesaria de un usuario. Para activar esta función, necesitamos marcar los parámetros como obligatorios.

Cuando un intent tiene parámetros necesarios, pero coincide con una declaración de usuario que carece de alguno de los parámetros necesarios, el intent hace preguntas rápidas para recuperar todos los parámetros necesarios del usuario. Veamos el siguiente diálogo:

      Usuario: Hola (Hi).

      Agente: Bienvenido. Puedo decirte los horarios de la tienda o puedo programar una cita. ¿Qué prefieres? (Welcome. I can tell you the shop hours, or I can set up an appointment. Which would you like?).

      Usuario: Necesito arreglar mi bicicleta (I need to fix my bike).

      Agente: De acuerdo, puedo ayudarte con eso. ¿Qué día quieres venir? (Okay, I can help you with that. What day do you want to come in?).

      Usuario: Hoy (Today).

      Agente: ¿Y a qué hora te resulta más conveniente? (And what time works for you?).

      Usuario: A las 3 p.m.

      Agente: Entendido. Programé tu cita para el miércoles 1 de agosto a las 3 p.m. Nos vemos pronto. Adiós (Got it. I have your appointment scheduled on Wednesday, August 1 at 3 PM. See you soon. Good-bye).

Si quieres hacer que los parámetros $time y $date sean obligatorios y proporcionar preguntas rápidas para los parámetros, sigue estos pasos:

  1. Haz clic en el intent Make an appointment (Programar una cita).
  2. En la tabla Acción y parámetros (Action and parameters), marca las casillas REQUIRED para los parámetros $time y $date. Se creará una columna llamada PROMPTS.
  3. Si el parámetro $date se encuentra debajo del parámetro $time en la tabla, arrastra hacia arriba la fila del parámetro $date sobre el parámetro $time. (La ubicación en la tabla determina el orden en el que se harán las preguntas).
  4. Para el parámetro $date, haz clic en el vínculo Define prompts (Definir mensajes) debajo de la columna PROMPTS y agrega los siguientes mensajes:
    • Okay, I can help you with that. What day do you want to come in?
    • Sure, what day are you coming in?
    • Okay, what day will work for you?
  5. Para el parámetro $time, haz clic en el vínculo Define prompts (Definir mensajes) y agrega los siguientes mensajes:
    • And what time works for you?
    • What time?
    • Now, what time do you want the appointment?
  6. Haz clic en GUARDAR.
  7. Prueba la configuración del relleno de espacios mediante el uso del simulador en la consola de Dialogflow.

    Figura 6. Diagrama de flujo en el que se muestran los mensajes de llenado de ranuras para los parámetros obligatorios

Ahora tenemos un intent que garantiza la obtención de la información de fecha y hora una vez que un usuario indica la necesidad de programar una cita. Sin embargo, por el momento, el intent solo responde con una respuesta modelo; no se programa una cita real. Necesitamos crear un proceso de backend, entrega, que pueda realizar la tarea de programar una cita en el Calendario de Google.

Exploraremos cómo crear una entrega para el intent Programar una cita en la siguiente sección.