Crea un agente de RBM con la tecnología de Dialogflow (avanzado)

En este codelab, aprenderás a usar Dialogflow para crear una interfaz de conversación a fin de potenciar un agente de RBM.

¿Qué compilarás en este codelab?

  • Un agente de Dialogflow que potencia la conversación de un agente de RBM
  • Una interfaz de conversación para una tienda de bicicletas ficticia que permite a los usuarios conocer información sobre la tienda de bicicletas y programar citas para repararla o repararla

Qué información obtendrá

  • Cómo usar las tres construcciones principales de Dialogflow (intents, entidades y contextos) para crear una interfaz de conversación
  • Cómo conectar tu interfaz de conversación a tus propios servicios y API mediante la entrega y el editor directo de Dialogflow (con la tecnología de Cloud Functions para Firebase)
  • Cómo crear tipos de respuesta de RBM desde Dialogflow a fin de crear una experiencia de RBM enriquecida para los usuarios

Requisitos

  • Una Cuenta de Google

Crea y consulta tu primer agente

Duración: 10:00

Cree su primer agente de Dialogflow

Para crear un agente de Dialogflow, haz lo siguiente:

  1. Abre una pestaña nueva y accede a Dialogflow.
  2. Haz clic en Crear agente en la barra de navegación izquierda.

  3. Ingresa “CodelabRBMBikeShop” para el nombre de tu agente, “English” (idioma) y establece la zona horaria predeterminada en tu zona horaria. Luego, haz clic en Crear.

La consola de Dialogflow

Ahora, debería ver la consola de Dialogflow. Si trabajas en una pantalla más pequeña y la navegación izquierda está oculta, haz clic en el botón de navegación en la esquina superior izquierda. El botón de configuración te lleva a la configuración del agente actual.

En la mitad de la página, se muestra una lista de intents para el agente. De forma predeterminada, los agentes de Dialogflow comienzan con dos intents. Tu agente coincide con el Intent alternativo predeterminado cuando no comprende lo que dicen los usuarios. El Intent de bienvenida predeterminado (Default Welcome Intent) saluda a tus usuarios. Puedes modificar estos intents para personalizar la experiencia.

A la derecha, se encuentra el simulador de Dialogflow. Esto te permite probar el agente mediante mensajes escritos o de voz.

Realice consultas a su agente

Los agentes de Dialogflow se describen mejor como módulos de CLN (comprensión del lenguaje natural). Se pueden incluir en tu app, producto o servicio para transformar las solicitudes naturales de los usuarios en datos procesables.

Es momento de probar tu agente. En el simulador de la derecha, haz clic en el campo de texto que dice Pruébalo ahora, escribe "Hi" y presiona Intro.

Dialogflow identifica la consulta, hace coincidir el Intent de bienvenida predeterminado (Default Welcome Intent) y responde con un saludo genérico. Esto funciona porque Dialogflow entrena automáticamente el Intent de bienvenida predeterminado con algunos saludos de muestra.

Crea un agente de RBM

Accede a Business Communications Developer Console y haz clic en Crear agente.

En el campo Name, ingresa"Your Name's Bike Shop" (como"Agente de bicicletas de Sean"), selecciona una región y haz clic en Crear agente.

Conecta tu agente de RBM a Dialogflow

Después de crear tu agente de RBM, haz clic en él para ver la página Descripción general. Haz clic en el vínculo Integraciones en el panel de navegación izquierdo.

De forma predeterminada, el agente de RBM usa Google Cloud Pub/Sub para administrar los mensajes de los usuarios. Para conectar tu agente de RBM al agente de Dialogflow que creaste antes, haz clic en la integración de Dialogflow.

En el cuadro de diálogo, haz clic en Conectar modelo existente. Sigue las instrucciones a fin de darle permiso a tu agente de RBM para llamar a tu agente de Dialogflow y, luego, haz clic en Siguiente.

Por último, debes proporcionar el ID del proyecto de Dialogflow. En una pestaña del navegador diferente a Business Communications Developer Console, ve a Dialogflow y abre el agente CodelabRBMBikeShop que creaste antes. Haz clic en el ícono de ajustes junto al nombre del proyecto en la barra de navegación izquierda.

Si haces clic aquí, accederás a la configuración del modelo. En PROYECTO DE GOOGLE, busca y copia el ID del proyecto.

Regresa a la pestaña con la Consola para desarrolladores de Business Communications abierta, pega el ID del proyecto en el diálogo y, luego, haz clic en Start integration.

Este proceso tarda alrededor de dos minutos en completarse. Una vez completado, deberías ver la opción de integración de Dialogflow destacada y un vínculo View agent disponible.

El agente de Dialogflow de CodelabRBMBikeShop ahora está manejando todos los mensajes hacia y desde tu agente.

Invita a tu dispositivo de prueba y envía un mensaje

Antes de comenzar a usar Dialogflow, configuremos su dispositivo de prueba. Si aún no tienes un dispositivo capaz de recibir mensajes de RBM, sigue esta guía para prepararlo.

En la consola para desarrolladores de Business Communications, haz clic en Devices en el panel de navegación izquierdo. En el formulario, ingresa el número de teléfono completo del dispositivo en formato E.164 (por ejemplo, +12223334444) y haz clic en Agregar.

En tu dispositivo, recibirás la invitación de prueba. Presiona Convertirme en verificador.

En el navegador, busca tu dispositivo en la lista de dispositivos y envíale un mensaje de prueba. Si recibiste un mensaje de tu agente de RBM en tu dispositivo, ya puedes continuar con este codelab.

Cómo crear tu intent de bienvenida

Por lo general, con un agente de RBM con tecnología de Dialogflow, para iniciar una conversación, debes realizar una llamada a la API que especifique el número de teléfono del usuario y el intent de Dialogflow que inicia la conversación (por lo general, el intent de bienvenida de tu agente). Para este codelab, omitiremos este paso y, en su lugar, usaremos el subproceso de conversación que ya creamos en el paso anterior con el dispositivo de prueba de Business Communications Developer Console. Sin embargo, si deseas obtener más información sobre esta función de la API, consulta esta guía.

Comencemos por agregar respuestas de RBM al Intent de bienvenida predeterminado (Default Welcome Intent) para que Dialogflow pueda usarlo con tu agente de RBM. Primero, navega a la pestaña del navegador que tiene Dialogflow abierto. Haz clic en Intent de bienvenida predeterminado, desplázate hacia abajo hasta la sección Respuestas, haz clic en + en la lista de tipos de respuesta y selecciona RCS Business Messaging (RBM).

Haga clic en Agregar respuestas y seleccione Respuesta simple. En el campo de texto para la Respuesta simple, ingresa “Bienvenida a la tienda de bicicletas de Hogarth”. ¿Cómo puedo ayudar? (reemplace Hogarth con su nombre) y, luego, haga clic en Guardar.

Cómo iniciar una conversación

Ahora que configuraste un intent de bienvenida, vuelve al dispositivo de prueba y envía el mensaje "Hola". Este mensaje activa el Intent de bienvenida predeterminado, y deberías ver algo similar a lo que se muestra en la siguiente imagen.

Actualiza tu intent de bienvenida

Ahora que Dialogflow envía un mensaje simple, actualicemos el mensaje para que sea un poco más útil. Queremos no solo saludar al usuario, sino también guiar nuestras acciones.

El agente que estamos creando debe admitir dos funciones principales: verificar el horario de atención y programar una cita. Reemplacemos nuestro mensaje de bienvenida de respuesta simple por una tarjeta que proporcione respuestas sugeridas para llevar a cabo estas interacciones.

En la sección Intentos de bienvenida predeterminados, Respuestas, selecciona la pestaña RCS Business Messaging (RBM). Haz clic en el ícono de la papelera para quitar la Respuesta simple existente. A continuación, haz clic en Agregar respuestas y selecciona Tarjeta enriquecida independiente.

En el formulario de Tarjeta enriquecida independiente, ingrese lo siguiente:

  • Título de la tarjeta: Hola. Bienvenido a la tienda de bicicletas de Hogarth.
  • Descripción de la tarjeta: ¿Cómo puedo ayudarte? Selecciona una de las siguientes opciones:
  • Seleccionar la orientación de la tarjeta: Vertical
  • URL de imagen/video: https://storage.googleapis.com/df-rbm-codelab/bike-shop.jpg
  • Seleccionar altura de medios: Mediana

Haz clic en Agregar sugerencia y, luego, ingresa lo siguiente:

  • Texto de sugerencia: ¿Cuál es tu horario de atención?
  • Postback de sugerencia: response_hours

Para agregar otra sugerencia, haz clic en Agregar sugerencia y, luego, ingresa lo siguiente:

  • Texto de sugerencia: Programa una cita
  • Postback de sugerencia: response_appointment

Haz clic en Guardar.

Pruébelo.

Una vez que el modelo diga "Entrenamiento de agente completo", vuelve al dispositivo y envía el mensaje "Hola" al agente. Ahora deberías ver la tarjeta enriquecida independiente que acabas de diseñar.

Presiona ¿Cuál es tu horario de atención? Ten en cuenta que se activa el Intent alternativo predeterminado. Esto se debe a que tu agente de Dialogflow no sabe cómo manejar los datos de notificación de conversión que configuraste para esta sugerencia, "reply_hours".

Solucionemos este problema.

Crea tu intent de horario

Dialogflow utiliza intents para categorizar las intenciones del usuario. Los intents tienen frases de entrenamiento, que son ejemplos de lo que un usuario podría decirle a tu agente. Por ejemplo, alguien que quiera saber el horario de atención de nuestra tienda de bicicletas podría preguntar: "¿Cuándo abren?". "¿Cuál es el horario de atención?\" o "¿Hasta dónde puedo llegar?".

Todas estas consultas son únicas, pero tienen la misma intención: obtener información sobre cuándo está abierta nuestra tienda de bicicletas.

Para cubrir esta consulta, crea un intent "Horas":

  1. En el panel de navegación izquierdo, haga clic en el signo + junto a Intents.
  2. En Nombre del intent, ingresa "Horas".
  3. En Training Phrases, haz clic en Add user expression y, luego, ingresa lo siguiente después de ingresar cada frase:

    • When do you open?
    • What are your hours?
    • How late can I come in?
    • reply_hours.

    Esta última frase de entrenamiento se usa para asignar los datos de notificación de conversión que configuraste en la sección anterior con este intent.

  4. En Respuestas, haz clic en + y selecciona RCS Business Messaging (RBM).

  5. Haz clic en Agregar respuestas y selecciona Respuesta simple.

  6. En el campo de texto para la Respuesta simple, ingresa "Estamos abiertos todos los días de semana de 9:00 a.m. a 5:30 p.m.".

  7. Haz clic en Guardar.

Pruébelo.

Ahora intenta consultar con tu agente su horario de atención. En tu dispositivo, en la conversación de tu agente de RBM, ingresa "When are you open?&quot" y envía el mensaje a tu agente.

Ahora, su agente responde correctamente a la consulta. Ten en cuenta que, aunque tu consulta fue un poco diferente de la frase de entrenamiento (¿cuándo abres? en comparación con cuándo abres), Dialogflow aún hace coincidir la consulta con el intent correcto. También puedes intentar presionar ¿Cuál es tu horario de atención? en la tarjeta enriquecida.

Dialogflow usa frases de entrenamiento como ejemplos para un modelo de aprendizaje automático a fin de hacer coincidir las consultas de los usuarios con el intent correcto. El modelo de aprendizaje automático compara la consulta con cada intent incluido en el agente, le asigna una puntuación a cada intent y establece la coincidencia con el intent que recibe la puntuación más alta. Si el intent con la puntuación más alta tiene una puntuación muy baja, se establece la coincidencia con el intent de resguardo.

Agrega entregas

Mientras funciona, el agente que creamos se comporta un poco poco natural. Cuando el usuario pregunta algo como "¿Estás abierto?", el agente responderá con "Estamos abiertos todos los días de la semana de 9 a.m. a 5:30 p.m.". Sería mucho más natural y útil si el agente nos dijera directamente si la tienda está abierta.

Para ello, nuestro agente debe verificar si el taller está abierto y generar una respuesta diferente en ambos casos. En Dialogflow, este tipo de lógica compleja debe implementarse en el webhook de entrega.

Un webhook de entrega es un servidor HTTP al que Dialogflow llama con información sobre el estado actual de la conversación. El código de entrega realiza las acciones necesarias y genera una respuesta que Dialogflow le muestra al usuario.

Ahora, pasaremos por el proceso de implementación de un webhook de entrega que hace que nuestro agente responda de manera más útil.

Configuración: Implementa y habilita las entregas

Dialogflow tiene un editor de Cloud Functions para Firebase integrado que te permite implementar y escribir código JavaScript que controlará tu entrega.

En el panel de navegación izquierdo de Dialogflow, haz clic en Entrega (Fulfillment) para abrir la página de entrega. Haz clic en el botón de activación junto a Editor intercalado a fin de habilitar el editor de Cloud Functions para Firebase.

Notarás que el editor contiene dos archivos: &indext.index.js, que contiene el código principal para la entrega, y &package;json.json, que detalla las dependencias requeridas.

Ahora, importaremos código de muestra que potenciará su entrega.

Copia y pega el texto de este archivo en "index.js" y reemplaza todo su contenido actual:

https://storage.googleapis.com/df-rbm-codelab/index.js

Ahora, desplácese hasta la parte inferior de la página y haga clic en IMPLEMENTAR. Después de un minuto aproximadamente, tu código se implementará en Cloud Functions para Firebase.

Una vez implementada la función, verás la fecha y la hora de implementación en la parte inferior de la página:

Observa el código de entrega. La función hoursHandler llama a currentlyOpen para determinar si la tienda está abierta y agrega una respuesta de RBM diferente según la condición.

function hoursHandler(agent) {
    let responseText = 'We\'re currently closed, but we open every weekday at 9am!';
    if (currentlyOpen()) {
      responseText = 'We\'re open now!! We close at 5pm today.';
    }

    let payload = {
    "fulfillmentMessages": [
        {
          "platform": "GOOGLE_RBM",
          "rbmText": {
              "text": responseText
          }
        }
      ]
    };

    return response.status(200).json(payload);
}

La línea intentMap.set('Hours', hoursHandler); le indica a la biblioteca de entregas que la función hoursHandler debe ejecutarse cuando se detecta una coincidencia con el intent "Horas". Sin embargo, también necesitamos indicarle a Dialogflow que habilite la entrega para nuestro intent "Horas".

En la barra de navegación izquierda, haz clic en Intents y abre el intent "Horas". Abre la sección Entregas en la parte inferior y selecciona Habilitar llamadas de webhook para este intent a fin de activarla.

Una vez que guardes el intent, puedes probarlo. En el simulador de la derecha, ingresa "Are you open?". Si haces clic en Información de diagnóstico y, luego, inspeccionas la respuesta de la API, deberías ver la respuesta de entrega. Ten en cuenta que la zona horaria que usa el servidor de Cloud Functions para Firebase será UTC, por lo que es posible que la respuesta no sea correcta para la hora local actual.

Si hay un error en tu entrega, Dialogflow usa cualquier respuesta definida en la sección Respuestas de la página Intent, lo que permite que tu agente se recupere correctamente.

A continuación, usaremos entidades para extraer las partes relevantes de la consulta del usuario. Esto permite que los usuarios programen una cita con nuestra tienda de bicicletas para repararla o repararla.

Extraiga datos con entidades

Duración: 12:00

En esta sección, veremos cómo extraer datos de la consulta de un usuario para que este programe una cita con nuestra tienda de bicicletas para reparar su bicicleta.

Agregue parámetros a sus intents

Los parámetros son palabras o frases relevantes en la consulta de un usuario que Dialogflow extrae para que tu agente pueda proporcionar una respuesta adecuada. Crearás un intent nuevo con parámetros y aprenderás a incluir sus valores en las respuestas.

  1. Haz clic en + junto a Intents en la barra de navegación izquierda para crear un intent nuevo.
  2. Para el nombre del intent, ingresa "Make Appointment" en la parte superior de la página.
  3. Agrega lo siguiente como frases de entrenamiento:
    • reply_appointment
    • I'd like to schedule an appointment for next Thursday
    • I'd like to get my bike fixed, I have a mountain bike that needs servicing
    • My bike is broken
    • Can I schedule service for 4pm tomorrow?
    • Can you fix my road bike?
    • Can I set up an appointment for noon on Friday?

Dialogflow detecta de forma automática los parámetros conocidos en tus frases de entrenamiento y los crea para ti.

Debajo de Frases de entrenamiento, Dialogflow completa automáticamente la tabla de parámetros con la información que recopila:

  • el parámetro es opcional (no obligatorio)
  • llamadas date y time
  • corresponde al tipo de entidad del sistema @sys.date y @sys.time**
  • tiene el valor de $date y $time.
  • no es una lista

Utilice datos de parámetros

Puedes usar el valor de un parámetro en tus respuestas. En este caso, puedes usar $date y $time en tus respuestas y se reemplazan por la fecha y hora especificadas en la consulta a tu agente.

En Respuestas, agrega la pestaña RCS Business Messaging, agrega lo siguiente a una Respuesta simple y haz clic en Guardar:

Great! I've set up your appointment for $date at $time.  See you then!

Pruébelo.

Ahora, consulta a tu agente con el mensaje "¿Puedo obtener una cita para mañana a las 2 p.m.?" en el simulador en el panel derecho.

En la parte inferior del resultado del simulador, puedes ver que Dialogflow extrajo los parámetros de la consulta correctamente y los analizó de forma correcta como la fecha y hora. Ahora prueba lo mismo desde tu dispositivo de prueba y observa cómo la respuesta incluye correctamente la fecha y hora analizadas.

Parámetros obligatorios

En el caso de nuestra tienda de bicicletas, necesitamos conocer los valores de la fecha y la hora para poder programar una cita. De forma predeterminada, todos los parámetros de Dialogflow son opcionales. Para que sean obligatorios, marca la casilla junto a cada parámetro que desees. Marca la casilla junto a cada parámetro en el intent "Acordar una cita":

Ahora que cada parámetro es obligatorio, debemos crear un mensaje para cada parámetro. Los mensajes le solicitan al usuario que proporcione un valor para cualquier parámetro que no se haya proporcionado cuando el usuario indicó inicialmente su intención (en este caso, programar una cita). Haz clic en Definir mensajes a fin de crear un mensaje para un parámetro y, luego, ingresa los siguientes mensajes para cada parámetro:

Parámetro Mensaje
fecha ¿Qué día quieres venir?
tiempo ¿A qué hora le conviene?

Después de ingresar los mensajes, haga clic en Guardar.

Pruébelo.

En tu dispositivo, presiona la sugerencia Crear una cita o escribe "Quiero reparar mi bicicleta". Obtienes la respuesta "What day do you want to come in?". Indica una fecha (&mañana) para obtener una respuesta con la hora. Responde a esta pregunta y verás que la cita se ha programado.

Las consultas que contienen información en la solicitud inicial (p. ej., "Quiero programar una cita para mañana"). Completa el parámetro correcto (la fecha), omite el mensaje de fecha (¿Qué día quieres ingresar?) y pasa al mensaje de tiempo (¿Qué hora te resulta más conveniente?).

Acabamos de usar las entidades y los parámetros de Dialogflow para crear una conversación completamente única, sin código y con muy poca configuración. A continuación, veremos cómo usar la entrega para guiar las respuestas del usuario a mensajes como "¿En qué fecha quieres programar una cita?".

Configuración: Habilita las entregas

En la barra de navegación izquierda, haz clic en Intents y abre el intent "Programar una cita". Abre Entrega, selecciona Habilitar llamadas de webhook para este intent y Habilitar llamadas de webhook para el llenado de ranuras a fin de que estén activadas, y haz clic en Guardar.

Con ambos habilitados, cuando se activa este intent, Dialogflow usa la entrega a fin de producir respuestas para los parámetros necesarios, si es necesario, así como para la respuesta de RBM del intent.

Cómo implementar la entrega

En el panel de navegación izquierdo de Dialogflow, haz clic en Entrega (Fulfillment) para abrir la página de entrega. Desplázate hacia abajo hasta la línea

intentMap.set('Hours', hoursHandler);

Agregue lo siguiente como línea siguiente:

intentMap.set('Make Appointment', makeAppointment);

Esto le indica a la biblioteca de entregas que la función makeAppointment debe ejecutarse cuando se detecta una coincidencia con el intent"Acordar una cita".

Luego, copia el código que aparece a continuación y pégalo debajo de la función currentlyOpen. Las dos funciones, getSuggestedTimes y getSuggestedDates, crean listas de chips útiles para facilitar las respuestas de los usuarios.

function getSuggestedTimes() {
  return [
        {
          "reply": {
            "text": "9 am",
            "postbackData": "9:00am"
            }
        },
        {
          "reply": {
            "text": "10 am",
            "postbackData": "10:00am"
          }
        },
        {
          "reply": {
            "text": "1 pm",
            "postbackData": "1:00pm"
          }
        },
        {
          "reply": {
            "text": "2 pm",
            "postbackData": "2:00pm"
          }
        }
      ];
}

function getSuggestedDates() {
  return [
        {
          "reply": {
            "text": "Tomorrow",
            "postbackData": "Tomorrow"
          }
        },
        {
          "reply": {
            "text": "A week from now",
            "postbackData": "A week from now"
          }
        },
        {
          "reply": {
            "text": "Two weeks from now",
            "postbackData": "Two weeks from now"
          }
        }
      ];
}

Luego, debajo de hoursHandler, copia y pega el siguiente código y, luego, haz clic en Implementar.

function makeAppointment(agent) {
    // extract required parameters
    const appointmentDate = agent.parameters.date;
    const appointmentTime = agent.parameters.time;

    const gotAppointmentDate = appointmentDate.length > 0;
    const gotAppointmentTime = appointmentTime.length > 0;

    let responseText = '';
    let suggestions = [];

    if(gotAppointmentDate && gotAppointmentTime) {
      // We have all required parameters, return success message
      responseText = 'Great! I\'ve set up your appointment for ' +
          appointmentDate + ' at ' + appointmentTime + '.  See you then!';
    }
    else if(gotAppointmentDate) {
      responseText = 'What time works for you?';
      suggestions = getSuggestedTimes();
    }
    else if(gotAppointmentTime) {
      responseText = 'What day do you want to come in?';
      suggestions = getSuggestedDates();
    }
    else {
      responseText = 'What day do you want to come in?';
      suggestions = getSuggestedDates();
    }

    let payload = {
      "fulfillmentMessages": [
      {
        "platform": "GOOGLE_RBM",
        "rbmText": {
          "text": responseText,
          "rbmSuggestion": suggestions
        }
      }
    ]
    };

    return response.status(200).json(payload);
  }

Tómese unos minutos para inspeccionar el código. Ten en cuenta que se verifican los parámetros obligatorios en busca de valores y, si no se configuran, se solicita al usuario el mensaje y el conjunto de sugerencias adecuados.

Pruébelo.

En tu dispositivo, presiona la sugerencia Crear una cita o escribe "Quiero reparar mi bicicleta". Obtienes la respuesta "¿Qué día quieres venir?" junto con algunas sugerencias útiles: "Mañana" o "Una semana a partir de ahora" o "Dos semanas a partir de ahora". Indica una fecha (mañana) y recibirás una respuesta en la que se te pedirá una hora. Responde a esta pregunta y verás que se ha programado tu cita.

Administra el estado con contextos

Duración: 7:00

Agrega contextos a estados de conversación

Una vez que el usuario haya configurado una cita con éxito, es posible que queramos recopilar información adicional sobre ella. Imagina que nuestra tienda de bicicletas ofrece dos tipos de cita: reparación o ajuste. Queremos saber cuál necesita el usuario.

Para comenzar, actualicemos la respuesta del intent "Programar cita" a fin de preguntarle al usuario qué tipo de cita necesita. Reemplaza la respuesta de éxito en tu función de entrega makeAppointment con el siguiente texto y, luego, haz clic en Implementar.

responseText = 'Great! I\'ve set up your appointment for ' +
    appointmentDate + ' at ' + appointmentTime + '.  Do you need a repair for just a tune-up?';

Para recopilar la respuesta a esta pregunta, debemos crear otro intent. Sin embargo, es importante que este intent nuevo coincida solo después de que se haya respondido esta pregunta. Para aplicar esto, podemos definirlo como un intent de seguimiento.

Los intents de seguimiento son intents que solo pueden coincidir después de que su intent "parent" (en este caso, nuestro intent "Make Appointment") Haz clic en Intents, en el menú de navegación izquierdo (si el menú está oculto, haz clic en el botón de menú ☰, en la esquina superior izquierda). Luego, desplaza el mouse sobre el intent "Programar una cita" y haz clic en Agregar intent de seguimiento, que se muestra a la derecha del nombre del intent:

Luego, haga clic en Personalizado en el menú desplegable.

Dialogflow nombra automáticamente al intent de seguimiento como "Hacer una cita personalizada" y la flecha indica la relación entre los intents.

Los intents de seguimiento solo pueden coincidir después de que el intent superior haya coincidido. Dado que este intent solo coincidirá después del intent "Acordar una cita", podemos suponer que al usuario se le hizo la pregunta "¿Necesitas una reparación o solo un ajuste?".

Para capturar la respuesta a esta pregunta, primero debemos definir algunas entidades.

Crea tu primera entidad

Dialogflow te permite definir entidades del desarrollador que funcionan de manera similar a las entidades del sistema de Dialogflow. Comencemos por crear un tipo de entidad. Como queremos que los usuarios puedan elegir qué tipo de cita desean hacer con nuestra tienda, llamemos al tipo de entidad AppointmentType. Agregaremos dos entidades en el tipo de entidad AppointmentType para los dos tipos diferentes de citas: service y fix.

Para crear un tipo de entidad, haz lo siguiente:

  1. Haz clic en + junto a Entities en la barra de navegación izquierda.
  2. Para el nombre del tipo de entidad, ingresa "AppointmentType".
  3. Haz clic en el campo de texto y agrega las siguientes entradas:
    • servicio
    • Corregir
  4. Cuando ingresas una entrada, cuando presionas el tabulador, el cursor se mueve al campo del sinónimo. Agrega los siguientes sinónimos para cada entrada. Asegúrate de agregar cada palabra de forma individual en lugar de copiar y pegar toda la string:
Entrada Sinónimo
servicio
  • servicio
  • revisión
  • mantenimiento
  • afinar
  • Sintonizar
Corregir
  • Corregir
  • repair
  • reparar
  • roto
  • neumático pinchado
  • corregidas
  1. Haz clic en Guardar.

Cada tipo de entidad debe tener lo siguiente:

  • un nombre para definir la categoría ("AppointmentType")
  • una o más entradas ("service" "fix")
  • uno o más sinónimos ("maintenance" "tune up", etc.)

Dialogflow maneja situaciones simples, como las relativas a plurales y mayúsculas, pero asegúrate de agregar todos los sinónimos posibles. Cuanto más agregues, mejor será el agente que pueda determinar tus entidades.

Agregando tu nueva entidad

Ahora que definimos nuestro tipo de entidad para la cita, podemos usarlo en las Frases de entrenamiento de nuestro intent "Make Appointment - custom":

  1. Haz clic en Intents (Intents) en el panel de navegación izquierdo y, luego, en la flecha junto al intent "Acordar una cita" (Make Appointment) para mostrar los intents de seguimiento. Haz clic en el intent "Make Appointment - custom".
  2. Agrega las siguientes expresiones como frases de entrenamiento:

    • ¿Puedes reparar mi bicicleta?
    • Necesito una reparación.

  3. Deberías ver que el tipo de entidad de cita se anota automáticamente en las Frases de entrenamiento que ingresaste. Esto agrega el parámetro AppointmentType a la tabla, que se encuentra debajo de la sección Frases de entrenamiento. Haz clic en la casilla de verificación para marcar este parámetro como REQUIRED.

  4. Haz clic en Definir mensajes y, luego, ingresa "Puedes reparar o reparar tu bicicleta". ¿Cuál quieres?

  5. En Responses, cambia la respuesta a "OK, programaremos un $AppointmentType." luego haz clic en Save.

Pruébelo.

En tu dispositivo, presiona la sugerencia Crear una cita o escribe "Quiero reparar mi bicicleta". Obtienes la respuesta "¿Qué día quieres venir?" junto con algunas sugerencias útiles: "Mañana" o "Una semana a partir de ahora" o "Dos semanas a partir de ahora". Indica una fecha (mañana) y recibirás una respuesta en la que se te solicitará una hora.

Selecciona una hora y verás la nueva respuesta que creaste para preguntar si es de servicio o un ajuste.

A continuación, ingresa "Necesito una reparación". Deberías ver la respuesta "OK, we're schedule fix.", que indica que Dialogflow extrajo el AppointmentType correcto como una entidad.

En este momento, la respuesta para este intent (y programaremos una corrección) es bastante poco útil. Sería genial que la respuesta confirmara la fecha y hora en que se programó la cita. Para ello, necesitamos la fecha y la hora, pero los parámetros de fecha y hora solo están presentes en el intent "Make Appointment" (Programar una cita) y no en el intent "Make Appointment - custom".

Intents y contextos

Para responder con un parámetro recopilado del intent "Programar una cita", debes saber cómo funcionan los intents de seguimiento. Los intents de seguimiento usan contextos para hacer un seguimiento de si se activó un intent superior. Si inspeccionas el intent "Acordar una cita", verás "MakeAppointment-followup" en una lista como contexto de salida, precedido por el número 2:

Después de que se detecta la coincidencia con el intent "Acordar una cita", Dialogflow adjunta el contexto "Hacer una cita (seguimiento)" a la conversación durante dos turnos. Por lo tanto, cuando el usuario responde a la pregunta (¿Necesitas una reparación o solo un ajuste?), el contexto está activo. Todos los intents que tengan el mismo contexto de entrada tienen una gran preferencia cuando Dialogflow establece coincidencias con intents.

Haz clic en Intents, en la barra de navegación izquierda, y luego haz clic en el intent "MakeAppointment - custom&quot.

Puedes ver que el intent tiene el mismo contexto de entrada ("MakeAppointment-followup&quot) que el contexto de salida de "Make Appointment". Por este motivo, "MakeAppointment - custom" solo coincide después de que coincide el intent "Make Appointment".

Contextos y parámetros

Los contextos almacenan los valores de los parámetros, lo que significa que puedes acceder a los valores de los parámetros definidos en el intent "Acordar una cita" en otros intents, como "Appointment - custom".

Agrega la siguiente respuesta al intent "MakeAppointment - custom" y haz clic en Save: "OK, we will schedule a $AppointmentType, #MakeAppointment- followup.date, at #MakeAppointment-followup.time. Nos vemos."

Ahora puedes consultar nuevamente a tu agente y obtener la respuesta adecuada. Primero, ingresa "Puedo programar una cita para reparar mi bicicleta mañana a las 11 a.m." y, luego, responder la pregunta con "Necesito una reparación".

En la respuesta que confirma la cita, deberías ver que los valores de los parámetros de fecha y hora se recuperaron del contexto.

Mejora el formato de las respuestas

Duración: 5:00

Usa entregas para dar formato a la fecha y hora

Como habrás notado, la fecha y la hora del mensaje de éxito no son muy fáciles de usar. A fin de solucionar este problema, necesitamos usar entregas nuevamente a fin de poder usar JavaScript para dar formato a los parámetros de fecha y hora de modo que un usuario pueda leerlos con facilidad.

Para navegar hasta tu intent"Hacer una cita personalizada" (Make Appointment - custom), haz clic en Intents (Intents) en la barra de navegación izquierda y, luego, haz clic en el intent"Hacer una cita personalizada" (MakeAppointment - custom). Desplázate hasta la parte inferior de la página y activa Enable webhook call for this intent (Habilitar llamada de webhook para este intent) y, luego, haz clic en Save (Guardar).

Para navegar a la entrega, haz clic en el vínculo Entrega en la barra de navegación izquierda. Copia el siguiente código y pégalo debajo de la función makeAppointment.

function makeAppointmentFollowUp(agent) {
    let context = agent.getContext('makeappointment-followup');

    // extract required parameters
    const appointmentDate = new Date(context.parameters.date);
    const appointmentTime = new Date(context.parameters.time);
    const appointmentType = agent.parameters.AppointmentType;

    // format date and time to be human-readable
    const dateAsString = appointmentDate.toLocaleDateString('en-US',
        { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' });
    const timeAsString = appointmentTime.toLocaleString('en-US',
        { hour: 'numeric', minute: 'numeric', hour12: true });

    // compose response for user
    let responseText = 'Okay, we'll schedule a ' + appointmentType + ', ' + dateAsString +
        ', at ' + timeAsString + '.  We'll see you then.';

    let payload = {
      "fulfillmentMessages": [
      {
        "platform": "GOOGLE_RBM",
        "rbmText": {
          "text": responseText
        }
      }
    ]
    };

    return response.status(200).json(payload);
  }

Debajo de esta función, busca la línea intentMap.set('Make appointment', makeAppointment); y agrega intentMap.set('Make appointment - custom', makeAppointmentFollowUp); para que, cuando se invoque el intent de seguimiento, se llame a la función que pegaste antes.

Observa el código makeAppointmentFollowUp y observa cómo se extraen los parámetros del contexto entrante y este intent. Antes de generar el responseText, el código ahora da formato a la fecha y hora para que sea más legible.

Pruébelo.

En tu dispositivo, presiona la sugerencia Crear una cita o escribe "Quiero reparar mi bicicleta". Obtienes la respuesta "¿Qué día quieres venir?" junto con algunas sugerencias útiles: "Mañana" o "Una semana a partir de ahora" o "Dos semanas a partir de ahora". Indica una fecha (mañana) y recibirás una respuesta en la que se te solicitará una hora.

Selecciona una hora y verás la nueva respuesta que creaste para preguntar si es de servicio o un ajuste.

A continuación, ingresa "Necesito una reparación". Deberías ver la respuesta que confirma la cita con el tipo de cita, la fecha y la hora en un formato legible.

¡Listo!

Duración: 1:00

¡Buen trabajo!

Ya atravesaste todas las etapas de compilación de un agente de RBM con la tecnología de Dialogflow.

Diviértete desarrollando aplicaciones para esta emocionante plataforma nueva.