Escenas

En combinación con los intents, las escenas son el otro componente fundamental de tu modelo de conversación. Las escenas representan estados individuales de la conversación y su objetivo principal es organizarla en bloques lógicos, ejecutar tareas y mostrar mensajes a los usuarios.

Estas son algunas características de las escenas:

  • Ejecución en bucle: Las escenas se ejecutan dentro de un bucle hasta que cumplen con los criterios de transición que definas. Esto te permite crear flujos de lógica de control de manera mucho más eficiente dentro de una sola escena.
  • Separación de diálogos: En combinación con los intents, las escenas te permiten agrupar diálogos en fragmentos lógicos, lo que te brinda maneras fáciles de crear pares de solicitud de usuario y respuesta de acción.
  • Alcance de coincidencias de intents: Debido a que solo puede estar activa una escena a la vez, puedes definir el alcance de la coincidencia de intents con las escenas que elijas y hacer que coincidan solo cuando esas escenas estén activas.
  • Relleno de espacios: Puedes usar el relleno de espacios en una escena para recopilar varias entradas escritas del usuario, sin tener que crear varios intents.
  • Condiciones de escena: Puedes verificar el almacenamiento de ranuras, sesiones, usuarios y hogares para llevar a cabo una lógica condicional simple sin activar un webhook.

Puedes definir escenas como parte de tu modelo de conversación como una escena personalizada. La lógica de conversación de Asistente también incluye escenas del sistema que proporcionan una funcionalidad estándar para la conversación.

Escenas personalizadas

Una escena personalizada es un componente básico de la lógica conversacional que forma parte del modelo de conversación de tu Acción. Las escenas personalizadas tienen etapas que definen cómo y cuándo se inicia, lo que se denomina Activación, el procesamiento de conversación que realiza (llamado Ciclo de vida de la ejecución) y cómo termina la escena, denominado Transición:

  • Activación: Antes de que se pueda ejecutar una escena, debes activarla mediante una coincidencia de intent global o una transición de escena.
  • Ejecución: Cuando una escena está activa, se ejecuta en un ciclo de vida bien definido que te permite realizar una variedad de tareas, como el relleno de ranuras, la verificación condicional, la generación de mensajes y la activación de eventos de webhook.
  • Transition: Cuando una escena cumple con los criterios que definiste, como hacer coincidir un intent o completar el relleno de ranuras, puedes hacer la transición a otra escena para implementar aún más lógica. Como alternativa, puedes hacer la transición a la escena del sistema End conversation, que finaliza la conversación con el usuario.
Figura 1: Una transición de escena común Un intent global activa una escena durante la invocación, la escena consume la entrada del usuario y hace coincidir un intent, que genera una transición y activa otra escena.

Activación

Antes de que se pueda ejecutar una escena, debe estar activa. Solo puede estar activa una escena a la vez. Puedes activar las escenas de las siguientes maneras:

  • Invocación: Cuando la entrada del usuario coincide con el modelo de idioma de un intent global, puedes activar una escena para procesar la invocación.
  • Transición de escena estática: Cuando una escena cumple con los criterios de transición, puedes definir una transición a otra escena.
  • Transición dinámica de escena: dentro de un controlador de webhook, puedes realizar la transición de manera programática a otra escena.

Ciclo de vida de la ejecución

Cuando una escena está activa, se ejecuta dentro de un ciclo de vida bien definido que se repite en bucle hasta que la escena cumpla con los criterios de transición que establezcas. El ciclo de vida de ejecución de una escena se divide en etapas opcionales que se ejecutan en el siguiente orden:

  1. En entrada: Esta etapa se ejecuta solo una vez cuando se activa una escena. Puedes activar un webhook o pedirle al usuario que realice una configuración única de la escena.

  2. Condiciones: Las condiciones te permiten evaluar ciertos criterios antes de avanzar etapas del ciclo de vida, activar un webhook o enviar mensajes. En esta etapa, se pueden definir criterios de transición para salir del bucle de ejecución.

  3. Relleno de ranuras: Una escena puede solicitar automáticamente a los usuarios hasta que recopile todas las ranuras necesarias (datos escritos). Una escena solicita una sola ranura cada vez a través de su bucle de ejecución. Si faltan ranuras, el ciclo de vida de la escena finalmente se repite en la etapa de relleno de ranuras y solicita la siguiente ranura obligatoria. En esta etapa, se pueden definir criterios de transición para salir del bucle de ejecución.

  4. Mensajes: Asistente entrega la cola de mensajes al usuario y borra la cola. La cola de mensajes es la colección combinada de mensajes que se agregaron desde la última vez que esta etapa borró la cola.

  5. Entrada: Asistente consume y muestra la entrada del usuario a la escena, por lo que puedes procesarla, lo que puede incluir la coincidencia de intents (intents globales o de usuario dentro de una escena), la continuación del relleno de espacios (si no está completo) o el manejo de falta de coincidencias o errores de entrada. En esta etapa, se pueden definir criterios de transición para salir del bucle de ejecución. Si no se realiza la transición, el bucle de ejecución vuelve a la etapa de condiciones.

Figura 2: Ciclo de vida de ejecución de escenas

En las siguientes secciones, se describe cada etapa del ciclo de vida con más detalle.

Al entrar

En Intro es la única etapa que no se ejecuta en el bucle de ejecución de una escena. Realiza una inicialización única de tu escena en el siguiente orden:

  • Si el tiempo de ejecución de Asistente puede llenar cualquier ranura de un intent coincidente anterior, lo hace ahora a fin de preparar la escena para la etapa de relleno de ranuras. Por ejemplo, algunas entradas del usuario pueden coincidir con un intent y proporcionar una ranura. Esa coincidencia de intent activa una escena y puede llenar un espacio en una escena si los nombres de ranuras coinciden.
  • Si un webhook está habilitado, activa un evento de forma síncrona y espera a que tu servicio web muestre una respuesta.
  • Cuando el entorno de ejecución recibe una respuesta de webhook, resuelve cualquier referencia de parámetro en los mensajes y selecciona una opción de mensaje según la plataforma del usuario. Luego, selecciona una variante para que el candidato envíe al usuario más tarde.
  • Si la respuesta del webhook contiene un mensaje, lo agrega a la cola de mensajes. Si también existe un mensaje estático, el mensaje del webhook se combina en la cola de mensajes primero, seguido del mensaje estático.
  • Si la respuesta de webhook contiene una transición, lo hará ahora. De lo contrario, la escena continúa con la etapa de relleno de ranuras.

Condiciones

Las condiciones te permiten verificar los datos de la sesión, el usuario o el espacio para que una condición sea verdadera. Por ejemplo, puedes verificar si todas las ranuras están llenas y establecerlas como un criterio para la transición a otra escena y procesar las ranuras.

  • El tiempo de ejecución de Asistente evalúa cada condición en el orden en que se especifican. La primera condición que se evalúa como true ejecuta el controlador asociado y detiene la evaluación de las condiciones.
  • Si realizas el relleno de espacios, se agrega automáticamente una condición else if scene.slots.status = "FINAL" a la lista de condiciones. Esta condición opcional verifica que se complete el llenado de ranuras y puede activar un webhook o agregar mensajes a la cola de mensajes.

Después de la evaluación de la condición, si la escena no define una transición, continúa con el relleno de ranuras.

Llenado de ranuras

En esta etapa, se agrega un mensaje de ranura para un solo espacio obligatorio y vacío. Si no defines ninguna ranura en la escena, esta etapa no hace nada.

  • El entorno de ejecución de Asistente selecciona el primer espacio sin completar y agrega el mensaje correspondiente a la cola de mensajes. Debido a que los bucles de ejecución de la escena, las ranuras adicionales sin completar se controlan más adelante cuando el bucle de ejecución regresa a esta etapa.
  • La ranura activa actual puede tener mensajes de manejo de errores que anulen los definidos en la etapa de entrada de la escena.
  • Cuando el usuario llena un espacio, puedes validarlo en un servicio web mediante la activación de un webhook.

Mensajes

El entorno de ejecución de Asistente entrega la cola de mensajes al usuario, borra la cola y consume la entrada del usuario.

Entrada

El tiempo de ejecución de Asistente intenta hacer coincidir la entrada con un intent o una ranura:

  • En el caso de una coincidencia de intent del usuario, la escena ejecuta el controlador de intents asociado (intent del usuario o del sistema). El controlador de intents de una escena tiene prioridad sobre cualquier intent global. Si no definiste una transición, la ejecución de la escena repite la etapa de condiciones.
  • En el caso de una coincidencia de ranura, la escena vuelve a la etapa de relleno de espacios.
  • En el caso de una coincidencia de intent del sistema (por ejemplo, si no hay entrada o no hay coincidencia), puedes agregar mensajes a la cola de mensajes, activar un webhook o realizar una transición. Si se definen varios mensajes de falta de coincidencia, el tiempo de ejecución de Asistente elige el más relevante en el siguiente orden: relleno de ranuras, escena y, luego, mensajes sin coincidencia globales. Las coincidencias consecutivas no generan el evento correspondiente:

    • no_match_1
    • no_match_2
    • no_match_final

    Cada nivel sin coincidencia (relleno de ranuras, escena y global) puede activar eventos de webhook. De forma predeterminada, la tercera y última falta de coincidencia finaliza la conversación.

Transición

Las transiciones pueden ocurrir en las siguientes etapas:

  • Condiciones: Puedes realizar la transición a otra escena según las condiciones que definas. Una condición común que se debe verificar es que se complete el llenado de ranuras.
  • Entrada (coincidencia con el intent del usuario): Si un intent coincide, puede activar una transición a otra escena.
  • Entrada (coincidencia del intent del sistema): Puedes activar webhooks durante cualquier evento de coincidencia de intent del sistema. Para los eventos sin coincidencias ni de entrada, la escena, de forma predeterminada, pasa a la escena End conversation después de tres casos.

Escenas del sistema

Las escenas del sistema te permiten usar la lógica de conversación integrada que proporciona Asistente, lo que te permite agregar flujos conversacionales estándar a la experiencia del usuario. Por ejemplo, la escena del sistema de vinculación de cuentas permite que Asistente tome el control momentáneamente para llevar a cabo el flujo de vinculación de cuentas y muestra la información que necesitas para vincular las cuentas del usuario. Las escenas del sistema no siguen el ciclo de vida de la escena estándar.

En la siguiente lista, se describen las escenas del sistema compatibles y cómo usarlas:

  • Finalizar conversación: Cierra el micrófono y finaliza la conversación con el usuario. Asistente vuelve a tomar el control de la experiencia del usuario después de que se ejecuta esta escena.
  • Vinculación de cuentas: Guía al usuario a través de un flujo de vinculación de cuentas y proporciona a tus acciones la información necesaria para vincular la cuenta del usuario en tus servidores de backend con la Cuenta de Google del usuario. Consulta la documentación de vinculación de cuentas para obtener más información sobre cómo usar esta escena.
  • Actualizaciones diarias: guía al usuario a través de un flujo de confirmación para agregar tus acciones a las actualizaciones diarias de un usuario. Consulta la documentación sobre las actualizaciones diarias para obtener más información sobre cómo usar esta escena.
  • Notificaciones: Guía al usuario a través de un flujo de confirmación para recibir notificaciones de tus acciones. Consulta la documentación de notificaciones push para obtener más información sobre cómo usar esta escena.