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.
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.
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.
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 . 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.
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 , 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
- Seleccione Flujo principal > Variable de aptitud.
- Haga clic en + Agregar variable y, a continuación, complete el cuadro de diálogo.
- 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. - Si es necesario, introduzca un valor inicial (por defecto). Puede ser un único valor (por ejemplo,
false
, para un booleano o4
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:
Este fragmento ilustra el valor por defecto de una variable de tipo lista en una matriz.[ { "pizzaType":"Veggie", "price":"10 USD" } ]
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

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
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ú y, a continuación, insertando un estado seleccionado en el cuadro de diálogo Agregar estado, abierto haciendo clic en Agregar estado de inicio.
Descripción de la ilustración df-2-0-add-state-dialog.png
Insertar un estado entre estados
- Haga clic en la línea de transición que conecta los dos estados y, a continuación, abra el menú Add State haciendo clic en
. Tenga en cuenta que la línea de transición indica el tipo de transición entre los estados (
next
, por ejemplo). - Cree un estado sobre la marcha seleccionando Agregar estado en el menú Siguiente transición o en el menú Transición a para las acciones.
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.
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.
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 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.- Seleccione Suprimir estados del menú.
- Haga clic en Suprimir en el diálogo de confirmación.
Si ha suprimido los estados por error, haga clic en 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:
- 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:
- 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:
- 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.
- Seleccione el mosaico del estado desde el que desea realizar la transición al estado desconectado actualmente para abrir su inspector de propiedades.
- En el inspector de propiedades, seleccione el separador Transiciones.
- Si utiliza la siguiente transición, seleccione el estado desconectado de la lista desplegable Siguiente transición.
- Si utiliza una transición de acción, haga clic en 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

- Pase el mouse sobre el estado del nodo de inicio para llamar al menú
.
- Seleccione Agregar estado anterior.
- 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. - Después de insertar el estado anterior, puede asignarlo como nodo de inicio seleccionando Convertir en estado de inicio en el menú.
Copiar estados
- Haga clic en el menú
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.
- 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.
- 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 decancelOrder
escancelOrder1
.