Controladores de estado

Los gestores de estado, también llamados gestores, se usan para controlar la conversación creando respuestas para los usuarios finales o cambiando de página. En cada turno de conversación, se evalúan los controladores, que pueden afectar a la sesión. Los controladores tienen tres tipos generales de datos:

Término Definición
Requisitos del controlador Estos son los requisitos que se deben cumplir para que el controlador tenga algún efecto en la sesión. Se dice que se llama a un controlador cuando cumple sus requisitos y afecta a la sesión de alguna forma.
Procesamiento de controladores Si se llama a un controlador, se usa un cumplimiento opcional para crear respuestas para los usuarios finales. Estas respuestas se definen en datos de agente estáticos o se obtienen de forma dinámica de tu servicio de webhook.
Destino de transición del controlador Si se llama a un controlador, se usa un destino de transición opcional para cambiar la página actual. La página siguiente solo puede ser una página de inicio de flujo o una página del flujo activo.

Hay dos tipos de controladores de estado con requisitos diferentes:

Término Definición
Rutas Se llama a Routes cuando la entrada de un usuario final coincide con un intent o se cumple alguna condition en el estado de la sesión. Una ruta con un requisito de intención también se denomina ruta de intención. Una ruta que solo tiene un requisito de condición también se denomina ruta de condición.
Gestores de eventos Los gestores de eventos se llaman cuando se invoca un evento. Algunos eventos integrados se activan cuando se recibe una entrada inesperada del usuario final o cuando se produce un error de webhook. También puedes definir eventos personalizados que se activen cuando ocurra algo fuera de la conversación.

El procesamiento de un controlador de estado consta de tres pasos:

Término Definición
1. Ámbito Un controlador debe estar en el ámbito para que tenga algún efecto en la sesión. El ámbito se determina en función de si se aplica un controlador a un flujo, una página o un parámetro de formulario, y de si el flujo asociado está activo, la página asociada está activa o el agente está intentando rellenar el parámetro de formulario asociado.
2. Evaluación Cada controlador del ámbito se evalúa en orden. Si se cumplen los requisitos de un controlador, se supera la evaluación.
3. Llamada Si un controlador está en el ámbito y supera la evaluación, se llama. Se llama a cualquier fulfillment asociado y se aplica a la sesión cualquier destino de transición asociado.

Ámbito

Para que se evalúe un controlador, debe estar en el ámbito. El ámbito del controlador es una herramienta importante y potente que te ayuda a controlar la conversación. Al controlar el ámbito de un controlador, puedes controlar lo siguiente:

X Elemento
Cuándo se puede encontrar una coincidencia con una intención
Cuándo se debe comprobar una condición
Cuándo se puede gestionar un evento determinado
Cuándo se puede producir una transición de página
Cuando se proporciona una respuesta de cumplimiento estática
Cuando se llama a un webhook para obtener respuestas dinámicas

El ámbito se determina en función de si se aplica un controlador a un flujo, una página o un parámetro de formulario, así como de si el flujo o la página asociados están activos o si el agente está intentando rellenar el parámetro de formulario asociado.

Las reglas de alcance detalladas son las siguientes:

  • Rutas aplicadas al flujo activo:
    • Si la página actual es la página de inicio del flujo, se incluyen en el ámbito.
    • Si la página actual no es la página de inicio del flujo, solo se incluyen si tienen un requisito de intención.
  • Las rutas aplicadas a la página actual están en el ámbito.
  • Los controladores de eventos aplicados al flujo activo están en el ámbito.
  • Los controladores de eventos aplicados a la página actual están en el ámbito.
  • Los controladores de eventos aplicados a un parámetro de formulario que el agente está intentando rellenar están en el ámbito.

Rutas

Las rutas tienen dos requisitos, y se debe proporcionar uno o ambos. Si se proporcionan ambos requisitos, se deben cumplir los dos para poder llamar a la ruta:

Término Definición
Requisito de intención Un intent que debe coincidir con la entrada del usuario final en la conversación actual. Cuando una ruta tiene un requisito de intent, se denomina ruta de intent.
Requisito de condición Una condición que se debe cumplir. Cuando una ruta tiene un requisito de condición, se denomina ruta de condición.

Puedes aplicar rutas a flujos (rutas a nivel de flujo) y páginas (rutas a nivel de página). Por ejemplo, puedes usar rutas en las siguientes situaciones:

X Elemento
Cuando la entrada del usuario final coincida con una intención, la coincidencia debe activar una respuesta de cumplimiento estático.
Cuando la entrada del usuario final coincide con una intención, la coincidencia debe activar un cumplimiento habilitado para webhook para obtener una respuesta dinámica.
Cuando la entrada del usuario final ha proporcionado el parámetro de formulario final requerido, una comprobación de la condición activa una transición de sesión a otra página.
Cuando la entrada del usuario final ha proporcionado un parámetro de formulario específico, una comprobación de condición activa una respuesta de cumplimiento estático.
Una comprobación de condición definida en true que fuerza una transición de página.

Propagación de intents

Normalmente, cuando se llama a una ruta debido a una intención coincidente, la intención se consume. Una intención consumida no se puede volver a asociar, a menos que la entrada de un nuevo usuario final active una nueva asociación de intención. Sin embargo, es posible propagar una coincidencia de intención de un flujo a otro en el siguiente caso:

  • Una ruta de flow F1 tiene intent I1 como requisito y flow F2 como objetivo de transición.
  • Flow F2 tiene una ruta que también requiere intent I1.

En este caso, cuando se llama a la ruta de flow F1, intent I1 se corresponde dos veces con una sola entrada del usuario final y se llama a ambas rutas.

Propagar intenciones es útil para lo siguiente:

X Elemento
Cambiar la página actual por una página específica de otro flujo (la ruta del flujo de destino de la transición tiene una página de destino de transición específica).
Crea un mensaje de entrada para la página de inicio de un flujo (la ruta del flujo de destino de la transición tiene un fulfillment).

Grupos de rutas

Cuando crees un agente, puede que muchas páginas tengan un conjunto de rutas comunes. Para que las rutas se puedan reutilizar, puedes definir grupos de rutas. Puedes crear estos recursos de grupo reutilizables en el flujo o en todo el agente.

Por ejemplo, puede que quieras que tu flujo gestione la entrada del usuario final, como "Quiero añadir un ingrediente a mi pizza" y "Quiero cambiar el tamaño de mi bebida". Estas entradas se deben gestionar cuando esté activa cualquiera de las páginas del flujo. Podrías definir dos rutas con intents para gestionar estas entradas en todas las páginas relevantes, pero esto supondría mucho trabajo duplicado. En su lugar, puede definir el grupo de rutas una vez y añadir una referencia al grupo en todas las páginas pertinentes.

Grupos de rutas a nivel de flujo

Los grupos de rutas a nivel de flujo son recursos de grupos de rutas que se crean con un flujo como elemento superior. Se pueden reutilizar en el flujo.

Grupos de rutas a nivel de agente

Los grupos de rutas a nivel de agente son recursos de grupos de rutas que se crean con un agente como elemento superior. Se pueden reutilizar en todo el agente, pero no permiten rutas que pasen a una página no simbólica como destino.

Rutas con nivel de flujo

Las rutas a nivel de flujo son rutas que se aplican a un flujo añadiéndolas a la página de inicio del flujo. Estos tipos de controladores tienen los siguientes casos prácticos:

X Elemento
Gestores con un requisito de intención o condición en el ámbito de la página de inicio del flujo.
Gestores con un requisito de intención en el ámbito de todas las páginas del flujo.

Para crear rutas a nivel de flujo desde la consola, siga estos pasos:

  1. Abre la página de inicio del flujo.
  2. Haz clic en el botón de añadir , situado en el encabezado Rutas.
  3. Se abrirá el panel de edición de la ruta.
  4. Proporciona los campos de ruta.
  5. Haz clic en Guardar.

Para cambiar el orden de las rutas a nivel de flujo desde la consola, sigue estos pasos:

  1. Abre la página de inicio del flujo.
  2. Haz clic en el encabezado Rutas.
  3. Se abrirá el panel de lista de rutas.
  4. Arrastra las rutas en el orden que quieras. También puedes hacer clic en el menú de opciones y seleccionar Mover a.

Para eliminar rutas de nivel de flujo desde la consola, sigue estos pasos:

  1. Abre la página de inicio del flujo.
  2. Haz clic en el encabezado Rutas.
  3. Se abrirá el panel de lista de rutas.
  4. Haz clic en el menú de opciones .
  5. Selecciona Eliminar.

Rutas a nivel de página

Las rutas a nivel de página son rutas que se aplican a una página. Estos tipos de controladores tienen los siguientes casos prácticos:

X Elemento
Gestores con un requisito de intención o condición en el ámbito cuando hay páginas específicas activas.

Para crear rutas a nivel de página desde la consola, sigue estos pasos:

  1. Abre la página (no la página de inicio del flujo).
  2. Haz clic en el botón de añadir , situado en el encabezado Rutas.
  3. Se abrirá el panel de edición de la ruta.
  4. Proporciona los campos de ruta.
  5. Haz clic en Guardar.

Para reordenar las rutas a nivel de página desde la consola, sigue estos pasos:

  1. Abre la página (no la página de inicio del flujo).
  2. Haz clic en el encabezado Rutas.
  3. Se abrirá el panel de lista de rutas.
  4. Arrastra las rutas en el orden que quieras. También puedes hacer clic en el menú de opciones y seleccionar Mover a.

Para eliminar rutas a nivel de página desde la consola, sigue estos pasos:

  1. Abre la página (no la página de inicio del flujo).
  2. Haz clic en el encabezado Rutas.
  3. Se abrirá el panel de lista de rutas.
  4. Haz clic en el menú de opciones .
  5. Selecciona Eliminar.

Gestores de eventos

Los controladores de eventos deben cumplir un requisito para poder llamarse:

Término Definición
Requisito del evento Un evento que se debe invocar. Los eventos se identifican por su nombre. Algunos eventos integrados se invocan cuando se recibe una entrada inesperada del usuario final o cuando se produce un error de webhook. También puedes definir eventos personalizados que se activen cuando ocurra algo fuera de la conversación.

Puede aplicar controladores de eventos a flujos (controladores de eventos a nivel de flujo), páginas (controladores de eventos a nivel de página) y parámetros (controladores de eventos a nivel de parámetro). Por ejemplo, puedes usar controladores de eventos en las siguientes situaciones:

X Elemento
Cuando la entrada del usuario final no coincide con ninguna intención, un controlador de eventos no-match proporciona una respuesta static fulfillment específica.
Un temporizador caduca en tu sistema y quieres proporcionar información de recordatorio al usuario final con una respuesta de cumplimiento estático específica.

Gestores de eventos a nivel de flujo

Los gestores de eventos a nivel de flujo son gestores de eventos que se aplican a un flujo. Estos tipos de controladores tienen los siguientes casos prácticos:

X Elemento
Gestores con un requisito de evento en el ámbito de la página de inicio del flujo.
Gestores con un requisito de evento en el ámbito de todas las páginas del flujo.
Gestiona las entradas inesperadas de los usuarios finales, compartidas por todas las páginas de un flujo.
Gestiona los errores de webhook, compartidos por todas las páginas de un flujo.
Gestiona los eventos personalizados invocados por tu sistema, compartidos por todas las páginas de un flujo.

Todos los flujos tienen controladores de eventos para los eventos integrados no-match y no-input. Estos controladores de eventos se crean automáticamente cuando creas un flujo y no se pueden eliminar.

Para crear controladores de eventos a nivel de flujo desde la consola, sigue estos pasos:

  1. Abre la página de inicio del flujo.
  2. Haz clic en el botón de añadir situado en el encabezado Gestores de eventos.
  3. Se abrirá el panel de controladores de eventos.
  4. Proporciona los campos del controlador de eventos.
  5. Haz clic en Guardar.

Para eliminar gestores de eventos a nivel de flujo desde la consola, sigue estos pasos:

  1. Abre la página de inicio del flujo.
  2. Haga clic en el encabezado Controladores de eventos.
  3. Se abrirá el panel de la lista de controladores de eventos.
  4. Coloca el cursor sobre un controlador de eventos y, a continuación, haz clic en el botón de eliminar .

Gestores de eventos a nivel de página

Los gestores de eventos a nivel de página son gestores de eventos que se aplican a una página. Estos tipos de controladores tienen los siguientes casos prácticos:

X Elemento
Gestores con un requisito de evento en el ámbito cuando hay páginas específicas activas.
Gestionar las entradas inesperadas de los usuarios finales, específicas de una página.
Gestionar errores de webhook específicos de una página.
Gestionar eventos personalizados invocados por tu sistema, específicos de una página.

Para crear controladores de eventos a nivel de página desde la consola, sigue estos pasos:

  1. Abre una página (que no sea la página de inicio del flujo).
  2. Si no aparece el encabezado Gestores de eventos, haz clic en Añadir gestor de estado, selecciona Gestores de eventos y, a continuación, haz clic en Aplicar.
  3. Haz clic en el botón de añadir situado en el encabezado Gestores de eventos.
  4. Se abrirá el panel de controladores de eventos.
  5. Proporciona los campos del controlador de eventos.
  6. Haz clic en Guardar.

Para eliminar los controladores de eventos a nivel de página de la consola, sigue estos pasos:

  1. Abre una página (que no sea la página de inicio del flujo).
  2. Haga clic en el encabezado Controladores de eventos.
  3. Se abrirá el panel de la lista de controladores de eventos.
  4. Coloca el cursor sobre un controlador de eventos y, a continuación, haz clic en el botón de eliminar .

Gestores de eventos a nivel de parámetro

Los gestores de eventos a nivel de parámetro son gestores de eventos que se aplican a un parámetro de formulario. También se conocen como gestores de repetición de peticiones. Estos controladores de eventos no permiten eventos personalizados, ya que están diseñados específicamente para gestionar las entradas no válidas de los usuarios finales durante el proceso de rellenar formularios.

Estos tipos de controladores tienen los siguientes casos prácticos:

X Elemento
El usuario final no ha proporcionado una entrada válida cuando se le ha pedido que rellene un parámetro de formulario.

Para crear controladores de eventos a nivel de parámetro desde la consola, sigue estos pasos:

  1. Abre una página que contenga parámetros de formulario.
  2. Haz clic en un parámetro.
  3. Se abrirá el panel de parámetros.
  4. Desplázate hacia abajo hasta la sección Gestores de eventos de repetición de la petición y haz clic en Añadir gestor de eventos.
  5. Se abrirá el panel de controladores de eventos.
  6. Proporciona los campos del controlador de eventos.
  7. Haz clic en Guardar.

Para eliminar gestores de eventos a nivel de parámetro desde la consola, sigue estos pasos:

  1. Abre una página que contenga parámetros de formulario.
  2. Haz clic en un parámetro.
  3. Se abrirá el panel de parámetros.
  4. Desplázate hacia abajo hasta la sección Gestores de eventos de repetición de la petición.
  5. Coloca el cursor sobre un controlador de eventos y, a continuación, haz clic en el botón de eliminar .

Eventos integrados

Los siguientes eventos están integrados y los invocan los agentes conversacionales (Dialogflow CX). Algunos eventos están restringidos a determinados niveles.

Nombre del evento
Nivel de flujo Nivel de página Nivel de parámetro Se invoca cuando
sys.no-match-default
  • A nivel de flujo o página: la entrada del usuario final no coincide con ninguna intención de los controladores que están en el ámbito.
  • A nivel de parámetro: la entrada del usuario final no cumple el parámetro del formulario.
sys.no-match-[1-6] Si proporcionas controladores para cualquiera de estos eventos ordenados numéricamente, se invocarán en lugar de sys.no-match-default y en el siguiente orden: sys.no-match-1, sys.no-match-2, ...
sys.no-input-default No se ha recibido la entrada del usuario final. Se puede invocar en los siguientes casos:
  • Conversational Agents (Dialogflow CX) recibe una entrada de texto vacía del usuario final.
  • Conversational Agents (Dialogflow CX) recibe una entrada de audio vacía del usuario final o la entrada no contiene ningún discurso reconocido.
  • Se produce un tiempo de espera sin voz antes de que la entrada de audio del usuario final contenga alguna voz reconocida.
sys.no-input-[1-6] Si proporcionas controladores para cualquiera de estos eventos ordenados numéricamente, se invocarán en lugar de sys.no-input-default y en el siguiente orden: sys.no-input-1, sys.no-input-2, ...
sys.invalid-parameter Se invoca cuando una respuesta de webhook invalida el parámetro al definir WebhookResponse.pageInfo.formInfo.parameterInfo.state como INVALID.
sys.long-utterance La entrada del usuario final supera la longitud máxima permitida (256 caracteres) que coinciden con intenciones no generativas o parámetros. Si no se proporciona, Conversational Agents (Dialogflow CX) trata las peticiones largas de los usuarios como no-match. En el caso de las entradas de audio en streaming, este evento solo se activa después de que el cliente cierre el flujo de audio.
webhook.error La llamada al webhook ha devuelto un error. Este evento solo se invoca en los siguientes casos: 1) si no hay ningún controlador de eventos de webhook detallado (por ejemplo, webhook.error.timeout) que coincida con el código de error del webhook; 2) si no se ha definido ningún destino de transición en la ruta original que ha llamado al fulfillment con el webhook que ha fallado. Consulta la sección Orden de evaluación para obtener más información.
webhook.error.timeout Se ha agotado el tiempo de espera de la llamada de webhook. Un evento de webhook solo se invocará si no se ha definido ningún destino de transición en la ruta original que ha llamado al webhook fallido. Consulta la sección Orden de evaluación para obtener más información.
webhook.error.bad-request El webhook ha devuelto el error 400 Bad Request. Un evento de webhook solo se invocará si no se ha definido ningún destino de transición en la ruta original que ha llamado al webhook fallido. Consulta la sección Orden de evaluación para obtener más información.
webhook.error.rejected El webhook ha devuelto 401 Unauthorized o 403 Forbidden. Un evento de webhook solo se invocará si no se ha definido ningún destino de transición en la ruta original que ha llamado al webhook fallido. Consulta la sección Orden de evaluación para obtener más información.
webhook.error.unavailable El webhook ha devuelto el error 503 Service Unavailable. Un evento de webhook solo se invocará si no se ha definido ningún destino de transición en la ruta original que ha llamado al webhook fallido. Consulta la sección Orden de evaluación para obtener más información.
webhook.error.not-found La llamada de webhook ha fallado porque no se ha podido acceder a la URL del webhook. Un evento de webhook solo se invocará si no se ha definido ningún destino de transición en la ruta original que ha llamado al webhook fallido. Consulta la sección Orden de evaluación para obtener más información.
flow-cancelled El usuario final ha solicitado la cancelación del flujo. Este evento se activa en la página Finalizar flujo con cancelación. Consulta el END_FLOW_WITH_CANCELLATION destino de transición simbólico.
flow-failed Este flujo no ha podido completar la tarea indicada. Este evento se activa en la página Finalizar flujo con error. Consulta el END_FLOW_WITH_FAILURE destino de transición simbólico.
flow-failed-human-escalation El usuario final ha solicitado hablar con agentes humanos. Este evento se activa en la página Finalizar flujo con derivación a agente humano. Consulta el END_FLOW_WITH_HUMAN_ESCALATION destino de transición simbólico.

Eventos personalizados

Puede crear eventos y controladores de eventos personalizados. Los eventos personalizados se usan para gestionar lo que ocurre fuera de la conversación con el usuario final. Por ejemplo, el usuario final ha hecho clic en un botón, ha transcurrido un periodo determinado, el inventario disponible ha cambiado durante la conversación, etc.

Los eventos se identifican simplemente por su nombre. Debes evitar usar nombres de eventos que empiecen por sys. o webhook. para evitar conflictos con los eventos integrados.

Para invocar un evento con la API, consulta el campo queryInput.event del método detectIntent para el tipo Session.

Seleccione un protocolo y una versión para la referencia de la sesión:

Protocolo V3 V3beta1
REST Recurso de sesión Recurso de sesión
RPC Interfaz de sesión Interfaz de sesión
C++ SessionsClient No disponible
C# SessionsClient No disponible
Go SessionsClient No disponible
Java SessionsClient SessionsClient
Node.js SessionsClient SessionsClient
PHP No disponible No disponible
Python SessionsClient SessionsClient
Ruby No disponible No disponible

Orden de evaluación

Los controladores se evalúan en un orden específico. Para ello, se deben seguir las siguientes reglas generales:

  1. Solo se evalúan los controladores del ámbito.
  2. Solo se pueden llamar los controladores cuyos requisitos se cumplan.
  3. Si se llama a un controlador sin un destino de transición, se sigue evaluando la lista de controladores. Debido a esta regla, varios cumplimientos pueden añadir varios mensajes a la cola de respuestas.
  4. Si se llama a un controlador con un destino de transición, se detiene la evaluación de la lista de controladores.
  5. Si se llama a un controlador con una respuesta y se produce un error de webhook:
    • Si el controlador tiene un destino de transición definido, el webhook falla de forma silenciosa.
    • Si un controlador de eventos está en el ámbito del evento, lo gestiona y finaliza la evaluación de la lista de controladores.
    • Si no hay ningún controlador de eventos en el ámbito del evento, el webhook falla de forma silenciosa.
  6. Cuando se cumple un requisito de intención, la intención se consume, por lo que solo se puede llamar al primer controlador de ruta encontrado para la intención (consulta Propagación de intenciones para ver las excepciones).
  7. Cuando se cumple un requisito de una condición, esta no se consume, por lo que se pueden llamar varias rutas con la condición.
  8. Cuando se cumple un requisito de evento, el evento se consume, por lo que solo se puede llamar al primer controlador de eventos que se encuentre para el evento.
  9. La pila de llamadas del controlador puede afectar al orden de evaluación.

La evaluación consta de tres fases:

  1. Las rutas que tienen un requisito de intención se evalúan en este orden:
    1. A nivel de página: Rutas individuales aplicadas a la página actual, en el orden proporcionado.
    2. Grupos a nivel de página: Grupos de rutas aplicados a la página actual, en el orden proporcionado.
    3. Nivel de flujo: Rutas aplicadas al flujo activo, en el orden proporcionado.
    4. Grupos a nivel de flujo: Grupos de rutas aplicados al flujo activo, en el orden proporcionado.
  2. Las rutas que solo tienen un requisito de condición se evalúan en este orden:
    1. A nivel de página: Rutas individuales aplicadas a la página actual, en el orden proporcionado.
    2. Grupos a nivel de página: Grupos de rutas aplicados a la página actual, en el orden proporcionado.
    3. Nivel de flujo (solo si la página actual es la página de inicio del flujo): Rutas aplicadas al flujo activo, en el orden proporcionado.
    4. Grupos a nivel de flujo (solo si la página actual es la página de inicio del flujo): grupos de rutas aplicados al flujo activo, en el orden proporcionado.
  3. Los gestores de eventos se evalúan en este orden:
    1. A nivel de parámetro: gestores de eventos aplicados al parámetro de formulario de la página actual que el agente está intentando rellenar (gestores de repetición de la petición), en el orden proporcionado.
    2. Nivel de página: gestores de eventos aplicados a la página actual, en el orden proporcionado.
    3. Nivel de flujo: gestores de eventos aplicados al flujo activo, en el orden proporcionado.

Destinos de transición simbólicos

Cuando introduces un destino de transición para un controlador, puedes especificar flujos o páginas, pero también puedes introducir destinos de transición simbólicos:

Objetivo de transición simbólica
Descripción
START_PAGE Transición a la página de inicio del flujo activo con el mismo nombre.
END_FLOW Finaliza el flujo activo y vuelve a la página que ha provocado la transición al flujo actual. Consulta también Límite de la pila de llamadas de controladores y de la pila de flujo.
END_FLOW_WITH_CANCELLATION Finaliza el flujo activo y vuelve a la página que ha provocado la transición al flujo actual. La página que llama puede gestionar esta transición con el evento integrado flow-cancelled. Consulta también Límite de la pila de llamadas de controladores y de la pila de flujo.
END_FLOW_WITH_FAILURE Finaliza el flujo activo y vuelve a la página que ha provocado la transición al flujo actual. La página que llama puede gestionar esta transición con el evento integrado flow-failed. Consulta también Límite de la pila de llamadas de controladores y de la pila de flujo.
END_FLOW_WITH_HUMAN_ESCALATION Finaliza el flujo activo y vuelve a la página que ha provocado la transición al flujo actual. La página que llama puede gestionar esta transición con el evento integrado flow-failed-human-escalation. Consulta también Límite de la pila de llamadas de controladores y de la pila de flujo.
END_SESSION Borra la sesión actual y pasa a la página especial llamada END_SESSION. La siguiente entrada del usuario reiniciará la sesión en la página de inicio del flujo de inicio predeterminado.
PREVIOUS_PAGE Transición a la página anterior que ha provocado una transición a la página actual. El estado de la página anterior se restaurará después de la transición.
CURRENT_PAGE Vuelve a la página actual. Esto puede ser útil si quieres que el agente repita algo.

Límite de pila de llamadas de controlador y de pila de flujo

Cuando una sesión pasa de un flujo a otro con objetivos de transición específicos, cada flujo se inserta en la pila de flujos.

Pila de llamadas del controlador

Cuando una sesión pasa a END_FLOW, vuelve a la página de llamada que ha provocado la transición al flujo completado. En esta situación, se conserva la pila de llamadas del controlador. Se omitirán todos los controladores que se hayan evaluado previamente desde la página de llamada y los controladores restantes se evaluarán en orden.

Por ejemplo:

  1. La página P tiene tres controladores en este orden: H1, H2 y H3.
  2. Se evalúa H1, pero no provoca una transición.
  3. Se evalúa H2, lo que provoca una transición al flujo F.
  4. Una página del flujo F pasa a END_FLOW.
  5. La sesión vuelve a la página P, que vuelve a estar activa con el estado conservado.
  6. La evaluación del controlador en la página P continúa desde el estado que conservó, por lo que se evalúa H3.

Límite de pila de flujo

El límite máximo de la pila de flujo es 25. Si se supera el límite máximo de la pila, es posible que se eliminen flujos de la pila, lo que puede provocar un comportamiento inesperado al usar la transición END_FLOW. Para evitar estos posibles problemas, minimiza el número de transiciones de flujo a flujo que preceden a la transición END_FLOW.

Si la pila de flujo está vacía, la transición END_FLOW finaliza la sesión.

Definir condiciones

Para definir condiciones con la consola, debes proporcionar reglas de condición con una de estas tres opciones lógicas:

  • Coincide con AL MENOS UNA regla (O)
  • Debe coincidir con TODAS las reglas (Y)
  • Personalizar expresión

Para mayor comodidad, puede usar las opciones Y/O para crear condiciones simples o compuestas para los valores de los parámetros.

Puedes usar la opción de formulario libre Personalizar expresión para todos los tipos de condiciones, incluidas las funciones del sistema y las constantes booleanas.

Por ejemplo, para definir una condición que tenga un 10% de probabilidades de superar la evaluación, selecciona la opción Personalizar expresión e introduce $sys.func.rand() < 0.1 en el campo Condición:

Captura de pantalla de la configuración de una condición personalizada