Flujos

Un flujo es una parte del flujo de diálogo de aptitud que define la interacción con el usuario para completar una tarea o una parte de una tarea que el usuario desea realizar.

Entre los ejemplos típicos de flujos se incluyen:

  • Flujos controlados por intención, donde cada intención definida en la aptitud tiene un flujo asociado, por ejemplo, 'Pizza de orden', 'Enviar dinero' o 'Crear gasto'.
  • Soporte o flujos de utilidades para tareas como autorización de usuarios, vinculación de nuevos usuarios, registro o asistencia al usuario. Estos flujos se pueden llamar desde varios flujos.

    Por ejemplo, podría tener un subflujo Crear cuenta al que llamar desde flujos como Order Pizza o Send Money.

Tipos de Flujo

En términos generales, los flujos se dividen en los siguientes tipos:

  • Flujo Principal.
  • Flujos de intención.
  • Flujos para eventos incorporados y transiciones del sistema.
  • Subflujos que pueden utilizar los flujos de nivel superior.

Flujo Principal

Con los flujos de diálogo creados en el diseñador de flujos visuales, cada flujo de diálogo tiene un único flujo principal que se utiliza para configurar:

  • Asignaciones entre eventos y flujos.
  • Variables de contexto globales que se pueden utilizar en todos los flujos de la aptitud.

    Al acceder a una variable de este tipo con una expresión de Freemarker, debe anteponer el nombre de la variable a skill. en la expresión.

    Estas variables de nivel de aptitud se borran una vez que caduca la sesión de usuario. La caducidad de la sesión se configura en el nivel de canal y suele ser de 24 horas por defecto.

El flujo principal no es realmente un flujo como tal. En su lugar, es el centro de control de la aptitud, desde donde los usuarios se dirigen a flujos especializados que se asignan a las intenciones resueltas. La configuración del flujo principal incluye la variable skill.system.nlpresult predefinida que se rellena con resultados de coincidencia de intención y entidad cada vez que se resuelve una intención, lo que permite que el control se transfiera a flujos individuales.

Flujos de intención

Al diseñar flujos de diálogo con el diseñador de flujos visuales, se crean flujos que se asignan a las intenciones. Todas las intenciones normales (es decir, las intenciones que no son intenciones de respuesta) deben estar enlazadas a un flujo.

Para las intenciones de respuesta, puede utilizar (o una combinación) de los siguientes enfoques:

  • Cree un único flujo y asígnelo al evento incorporado de intención de respuesta.
  • Cree flujos individuales para intenciones de respuesta específicas.

    Este enfoque le permite tener peticiones de datos o preguntas específicas para preceder y/o seguir cada respuesta.

Nota

También tiene la opción de no proporcionar ningún flujo para las intenciones de respuesta, en cuyo caso la respuesta se proporciona al usuario sin que el flujo de diálogo esté directamente implicado.

Flujos de utilidades para eventos incorporados y transiciones del sistema

Puede crear flujos que se disparan mediante los eventos incorporados de la aptitud (como la intención de respuesta y el error de cuadro de diálogo), los eventos personalizados y las transiciones del sistema (como Autorizar usuario y Error de cuadro de diálogo).

Subflujos personalizados

También puede crear flujos que no estén asignados a una intención específica o basados en eventos incorporados (o transiciones del sistema), pero que puedan ser invocados por otros flujos.

Por ejemplo, en una aptitud para un restaurante, puede que desee tener un flujo Mostrar menú que se pueda llamar en medio de un flujo de pedidos si un usuario así lo solicita.

Variables y Ámbito

En Visual Flow Designer, las variables para las que se pueden definir se pueden definir en dos niveles:

  • En un flujo individual. Solo se puede acceder a las variables definidas en este nivel desde el interior del flujo en el que están definidas.

    No se puede acceder directamente a una variable de ámbito de flujo fuera del flujo donde está definida, incluso desde subflujos o flujos de llamada. Sin embargo, puede definir parámetros de entrada y salida para que un flujo transfiera valores hacia y desde variables definidas en el flujo.

    Cuando finaliza el flujo, se restablecen los valores de las variables.

    La mayoría de las variables se deben definir en este nivel. Al hacer un uso regular de las variables de flujo, hace que sus flujos sean más autónomos, lo que los hace más fáciles de reutilizar, más fáciles de probar de forma aislada y menos propensos a verse afectados negativamente por errores en otros flujos.

  • En el flujo principal. Las variables definidas aquí tienen un ámbito (global) de toda la aptitud, lo que significa que todos los flujos de la aptitud pueden acceder a ellas.

    Los valores de estas variables globales siguen limitando la sesión del usuario con la aptitud. Las variables se borran cuando finaliza la sesión de usuario con la aptitud, lo que ocurre cuando se produce una de las siguientes situaciones:

    • El usuario cierra la ventana de chat.
    • La sesión sufre un timeout después de un período de inactividad (cuyo valor se define en el nivel de canal y suele ser de 24 horas).
    • En el contexto de un asistente digital, el usuario sale de la aptitud o alcanza un estado que llama directamente a otra aptitud.
      Nota

      Cuando el usuario interrumpe una conversación con una entrada non sequitur y se enruta temporalmente a una aptitud diferente, la asistencia digital permanece en el contexto de la aptitud original y sus variables no se borran automáticamente. En este caso, si el usuario vuelve a la aptitud original después de la interrupción, las variables mantienen sus valores. Si el usuario decide no volver a la aptitud original, se sale de la aptitud original y se borran las variables.

    Debe limitar el uso de estas variables de ámbito de aptitud a variables que requieren un contexto compartido. Por ejemplo, en una aptitud de entrega de alimentos, puede que necesite una variable de nivel de aptitud para la lista de todos los pedidos que un usuario ha realizado en una sesión.

Nota

En los componentes Respuesta común y Definir variable, también puede crear variables de ámbito de usuario o perfil. En tales casos, las variables se crean mediante la lista desplegable directamente en la propiedad Variable del componente (no el botón Crear situado junto a la propiedad). Consulte Otros tipos de variables.

Los valores de variable deben coincidir con el tipo declarado para la variable. Si se asigna a una variable un valor que no coincide con el tipo declarado, se produce un error de tiempo de ejecución.

Nota

En Visual Flow Designer, se puede asignar un valor inicial a las variables cuando se declaran. (Esto es diferente en los flujos de diálogo basados en YAML, donde debe utilizar un componente System.SetVariable para definir el valor inicial).

Notas para desarrolladores utilizados en flujos de diálogo basados en YAML

Si está acostumbrado a diseñar flujos de diálogo mediante el editor de código OBotML, debe conocer lo siguiente sobre los flujos que crea con Visual Flow Designer:

  • No hay ninguna transición return disponible en el diseñador de flujos visuales.

    Cuando se alcanza el último estado de un flujo, las variables del flujo se borran automáticamente (aunque cualquier variable de nivel de aptitud permanece activa hasta el final de la sesión).

  • Las transiciones de estado solo se pueden definir mediante las acciones de transición o transición next.

    Cuando se utiliza el diseñador para insertar un estado en un flujo, las transiciones next adecuadas se insertan en ese estado y en el estado anterior.

    No se permiten transiciones implícitas basadas en la secuencia de los estados. Si no se encuentra ninguna transición coincidente, se devolverá un error de tiempo de ejecución.

  • No es posible utilizar directamente expresiones FreeMarker para definir condicionalmente los estados de destino para las transiciones en un componente. Para especificar condicionalmente el estado de destino, inserte un componente Switch en el flujo para contener la expresión y definir las transiciones de acción según el resultado de la expresión.

Diseño de flujos

Crear un flujo

Para poder asignar cualquier tipo de evento, ya sea un evento de intención para un flujo transaccional o un evento incorporado para un flujo de utilidad, primero debe crear el flujo en sí. La asignación que finalmente asigne a un flujo determina si su ámbito se extiende a toda la aptitud o solo a un flujo.

Para crear un flujo, haga clic en + Agregar flujo.

El editor se rellena con un nodo de inicio de flujo El icono de inicio de diálogo.. Construye el flujo desde aquí. El editor también incluye el nodo Events, donde se definen los subflujos para los eventos de transición del sistema que manejan errores de diálogo, mensajes de usuario desordenados, entradas de usuario inesperadas y autenticación.
A continuación se muestra la descripción de df-2-0-initial-flow.png
Descripción de la ilustración df-2-0-initial-flow.png

El flujo puede terminar sin un estado de flujo final real (implícitamente), pero si ha definido parámetros de salida que transfieren los valores necesarios a otro flujo, debe agregar un estado de flujo final Icono Finalizar flujo., que especifique estos parámetros de salida.

Consejo:

Haga clic en Validar y, a continuación, revise las conclusiones a medida que crea un flujo.

.

Creación de variables de nivel de aptitud

Si necesita crear una variable a la que accedan todos los flujos, la primera parada antes de crear cualquiera de los flujos reales es crear una variable de aptitud en la página Variables de aptitudes del flujo principal:
  1. Seleccione Flujo principal > Variable de aptitud.
  2. Haga clic en + Agregar variable y, a continuación, complete el cuadro de diálogo.
  3. Seleccione el tipo de variable como entidad, tipo primitivo o como lista (matriz JSON) o mapa (objeto JSON). Si la variable hace referencia a una entidad (personalizada o incorporada), complete el cuadro de diálogo asignándole un nombre a la variable para la entidad seleccionada.
    Nota

    Debe crear variables para cualquier variable que se defina o cree en manejadores de eventos de entidades o componentes personalizados.
  4. Si es necesario, introduzca un valor inicial (por defecto). Puede ser un único valor (por ejemplo, false, para un booleano o 4 para un entero), una expresión (por ejemplo, list.ManageAccounts.addAccount para una cadena) o un objeto JSON, que incluya las claves y los valores entre comillas dobles (") como se ilustra en el siguiente objeto de lista:
    [
     {
      "pizzaType":"Veggie",
      "price":"10 USD"
      } 
    ]
    Este fragmento ilustra el valor por defecto de una variable de tipo lista en una matriz.

    Consejo:

    Si define un valor inicial para una variable, no necesitará agregar un estado Definir variable en el flujo para darle un valor inicial.

Designar un estado de inicio

Puede utilizar el menú para continuar agregando o suprimiendo estados, o para reasignar el estado de inicio, o el nodo de inicio Imagen del icono de inicio de nodo., del flujo. Por ejemplo, si agrega un estado anterior al nodo de inicio, puede asignarlo como estado de inicio.
Nota

El estado de inicio es el primer estado que se ejecuta en un flujo. Si cualquier otro estado precede al estado de inicio, el flujo omitirá esos estados, dejándolos sin ejecutar.


Agregar estado


A continuación se muestra la descripción de df-2-0-initial-flow.png
Descripción de la ilustración df-2-0-initial-flow.png

En el nodo de inicio Flow, puede crear el estado haciendo clic primero en el menú el icono de menú Add State y, a continuación, insertando un estado seleccionado en el cuadro de diálogo Agregar estado, abierto haciendo clic en Agregar estado de inicio.
A continuación se muestra la descripción de df-2-0-add-state-dialog.png
Descripción de la ilustración df-2-0-add-state-dialog.png

Insertar un estado entre estados

Para insertar un estado entre dos estados existentes:

Edición de las propiedades de un estado

Al hacer clic en un estado, se abre el editor de propiedades, donde puede definir la configuración y las transiciones del componente.
A continuación se muestra la descripción de df-2-0-start-state-properties.png
Descripción de la ilustración df-2-0-start-state-properties.png

El editor de propiedades para el estado de salida, por ejemplo, es un componente de mensaje de envío para la salida de una cadena.
A continuación se muestra la descripción de df-2-0-start-state-component-page.png
Descripción de la ilustración df-2-0-start-state-component-page.png

Supresión de Estados

Puede suprimir un estado pasando el cursor sobre su mosaico, haciendo clic en icono de menú y, a continuación, seleccionando Suprimir.

ADVERTENCIA:

La supresión de un estado puede tener consecuencias no deseadas. Si suprime un estado, el estado se elimina por completo de todos los lugares que aparece en el flujo. Si suprime el estado incorrecto, puede restaurarlo.
Si desea suprimir una secuencia de estados:
  1. Seleccione Suprimir estados del menú.

  2. Haga clic en Suprimir en el diálogo de confirmación.

    Si ha suprimido los estados por error, haga clic en Deshacer.
    Imagen del cuadro de diálogo Deshacer.

Consejo:

Si sólo desea eliminar una incidencia de un estado en un flujo, puede desconectarlo de esa parte del flujo cambiando el valor de la transición al estado anterior.

Restaurar un Estado Suprimido

Si suprime accidentalmente un estado y, a continuación, se da cuenta de que lo desea de nuevo, puede restaurarlo siempre que permanezca en el diseñador de flujos visuales y no haya realizado ningún otro cambio. Para ello:

  1. Localice el cuadro de diálogo que confirma que se ha suprimido el estado. Esto debería aparecer en la parte inferior izquierda de la pantalla y tener un aspecto similar al de la siguiente captura de pantalla:

  2. Haga clic en Deshacer.

Volver a conectar un estado desconectado

En el curso del desarrollo, puede causar una ruptura entre estados cambiando una transición. En este punto, la parte del flujo que se interrumpe del flujo se detiene en un mosaico denominado Desconectado, que aparece debajo del mosaico Eventos.



Puede volver a conectar una parte de un flujo desconectado a un flujo de trabajo especificando el nombre de un estado desconectado como transición en el flujo de trabajo. Para ello:

  1. Si no está seguro de qué estados se han desconectado, haga doble clic en el mosaico Desconectado para mostrar los estados que se han desconectado del flujo.
  2. Seleccione el mosaico del estado desde el que desea realizar la transición al estado desconectado actualmente para abrir su inspector de propiedades.
  3. En el inspector de propiedades, seleccione el separador Transiciones.
  4. Si utiliza la siguiente transición, seleccione el estado desconectado de la lista desplegable Siguiente transición.
  5. Si utiliza una transición de acción, haga clic en Editar (Icono Editar) para la transición que desea utilizar para el estado y cambie el valor de Transición a al estado al que desea conectarse.

Insertar un nuevo primer estado

Puede que necesite insertar un estado antes del nodo de inicio.Imagen del icono de nodo inicial.. Por ejemplo, después de construir su flujo, puede descubrir que necesita revisarlo porque está comenzando en el punto equivocado. Por ejemplo, el flujo se inicia abruptamente: su nodo de inicio es un estado que llama a un servicio REST que requiere entrada de usuario, pero no hay ningún estado anterior para recopilar esta entrada de usuario. Y debido a que es un nodo de inicio, no hay ninguna línea de transición que le permita insertar un estado. Para agregar un estado antes del nodo de inicio, debe utilizar la opción Agregar estado anterior. Para agregar un estado con esta opción:
  1. Pase el mouse sobre el estado del nodo de inicio para llamar al menú el icono de menú.
  2. Seleccione Agregar estado anterior.

  3. Seleccione una plantilla en el cuadro de diálogo Agregar estado. Puede seleccionar la transición Next por defecto o crear una acción de transición, que puede configurar posteriormente en el editor de propiedades.

  4. Después de insertar el estado anterior, puede asignarlo como nodo de inicio seleccionando Convertir en estado de inicio en el menú.

Copiar estados

Puede copiar y pegar un estado (o estados) en otra parte del flujo o en un flujo independiente dentro de la aptitud.
  1. Haga clic en el menú el icono de menú Add State en el estado que desea copiar y, a continuación, seleccione Copiar estados. Su selección puede incluir un solo estado, o una rama entera, dependiendo de la posición del estado y la relación con otros estados.
    Opción Copiar estados

  2. Seleccione el flujo de destino (el flujo actual u otro flujo dentro de la aptitud). A continuación, haga clic en Copiar. Si selecciona un flujo independiente, las variables asociadas a la selección se copiarán en ese flujo.

  3. Abra el nodo Desconectado y, a continuación, defina una transición que conecte el estado o los estados al flujo. Si va a crear un nuevo flujo basado en los estados copiados, seleccione Convertir en estado de inicio para el estado seleccionado.

    Nota

    Los estados copiados en el flujo actual se diferencian de los originales con un 1. Por ejemplo, la copia de cancelOrder es cancelOrder1.