Compartir a través de


Acerca de los diálogos de componentes y cascadas

Se aplica a: SDK v4

Los diálogos vienen en varios tipos diferentes. En este artículo se describen los diálogos de componentes, cascadas y mensajes. Para obtener información sobre los diálogos en general, consulte el artículo biblioteca de diálogos . Para obtener información sobre los diálogos adaptables, consulte la introducción a los diálogos adaptables.

Un diálogo en cascada (o cascada) define una secuencia de pasos, lo que permite al bot guiar a un usuario a través de un proceso lineal. Estos diálogos están diseñados para funcionar dentro del contexto de un cuadro de diálogo de componente.

Un cuadro de diálogo de componente es un tipo de diálogo de contenedor que permite que los diálogos del conjunto llamen a otros diálogos del conjunto, como un cuadro de diálogo en cascada que llama a diálogos de solicitud u otro diálogo en cascada. Los diálogos de componente administran un conjunto de diálogos secundarios, como diálogos en cascada, solicitudes, etc. Puede diseñar un cuadro de diálogo de componente para controlar tareas específicas y reutilizarlas, en el mismo bot o en varios bots.

Los diálogos de solicitud (avisos) son diálogos diseñados para pedir al usuario tipos específicos de información, como un número, una fecha o un nombre, etc. Las indicaciones están diseñadas para trabajar con diálogos en cascada en un cuadro de diálogo de componentes.

Diálogos de componente

A veces quiere escribir un cuadro de diálogo reutilizable que quiera usar en diferentes escenarios, como un cuadro de diálogo de dirección que pida al usuario que proporcione valores para la calle, la ciudad y el código postal.

El cuadro de diálogo de componente proporciona una estrategia para crear diálogos independientes para controlar escenarios específicos, lo que divide un conjunto de diálogos grande en partes más fáciles de administrar. Cada una de estas partes tiene su propio conjunto de diálogos y evita conflictos de nombres con el conjunto de diálogos que lo contiene. Para obtener más información, vea el cuadro de diálogo de componentes cómo hacerlo.

Diálogos en cascada

Un diálogo en cascada es una implementación específica de un diálogo utilizado para recopilar información del usuario o guiar al usuario a través de una serie de tareas. Cada paso de la conversación se implementa como una función asincrónica que toma un parámetro de contexto de paso en cascada ().step En cada paso, el bot solicita al usuario la entrada (o puede iniciar un cuadro de diálogo secundario, pero a menudo es un mensaje), espera una respuesta y, a continuación, pasa el resultado al paso siguiente. El resultado de la primera función se pasa como argumento a la función siguiente, etc.

En el diagrama siguiente se muestra una secuencia de pasos en cascada y las operaciones de pila que se realizan. Los detalles sobre el uso de la pila de diálogos se encuentran a continuación en la sección uso de diálogos .

Representación de cómo los mensajes se mapean a los pasos de la cascada.

Dentro de los pasos de cascada, el contexto del cuadro de diálogo en cascada se almacena en su contexto de paso de cascada. El contexto del paso es similar al contexto del diálogo y proporciona acceso al contexto del turno en curso y al estado. Use el objeto de contexto de paso de cascada para interactuar con un conjunto de diálogos desde un paso de cascada.

Puede controlar un valor devuelto desde un cuadro de diálogo dentro de un paso en cascada en un diálogo o desde el controlador de turnos del bot, aunque por lo general solo es necesario comprobar el estado del resultado del turno del cuadro de diálogo a partir de la lógica de turno del bot. Dentro de un paso de cascada, el cuadro de diálogo proporciona el valor devuelto en la propiedad de resultado del contexto del paso de cascada.

Propiedades del contexto de la etapa de la cascada

El contexto del paso de cascada contiene las siguientes propiedades:

  • Opciones: contiene información de entrada para el cuadro de diálogo.
  • Valores: contiene información que puede agregar al contexto y se lleva a cabo en pasos posteriores.
  • Resultado: contiene el resultado del paso anterior.

Además, el siguiente método (NextAsync en C#, siguiente en JavaScript y Python) continúa con el siguiente paso del cuadro de diálogo en cascada en el mismo turno, lo que permite que el bot omita un determinado paso si es necesario.

Mensajes

Las solicitudes, dentro de la biblioteca de diálogos, proporcionan una manera fácil de pedir al usuario información y evaluar su respuesta. Por ejemplo, para un mensaje de número, especifique la pregunta o la información que está solicitando y la solicitud comprueba automáticamente si ha recibido una respuesta numérica válida. Si es así, la conversación puede continuar; si no lo hacía, se volverá a pedir al usuario una respuesta válida.

En segundo plano, las indicaciones consisten en un diálogo en dos etapas. En primer lugar, el sistema pide una entrada; en segundo lugar, devuelve el valor válido o empieza de nuevo con otro aviso.

Las indicaciones tienen opciones de solicitud que se dan al llamar a la indicación; aquí puede especificar el texto para la solicitud, el mensaje de reintento si falla la validación y las opciones para responder a la indicación. En general, las propiedades de aviso y aviso de reintento son actividades, aunque hay alguna variación sobre cómo se maneja en diferentes lenguajes de programación.

Además, puede optar por agregar alguna validación personalizada para el mensaje al crearlo. Por ejemplo, supongamos que queremos obtener un tamaño de grupo usando la solicitud numérica, pero ese tamaño de grupo debe ser mayor que 2 y menor que 12. El aviso primero comprueba si ha recibido un número válido y luego ejecuta la validación personalizada si esta ha sido proporcionada. Si se produce un error en la validación personalizada, volverá a pedir al usuario como se indicó anteriormente.

Cuando se completa una solicitud, devuelve el valor resultante solicitado de manera explícita. Cuando se devuelve ese valor, podemos estar seguros de que ha pasado tanto la validación de la solicitud predeterminada como cualquier validación personalizada adicional que se haya proporcionado.

Para obtener ejemplos sobre el uso de varios mensajes, eche un vistazo a cómo usar la biblioteca de diálogos para recopilar la entrada del usuario.

Tipos de avisos

En segundo plano, las indicaciones consisten en un diálogo en dos etapas. Primero, se solicita una entrada; segundo, devuelve el valor válido o empieza de nuevo desde el principio con otra solicitud. La biblioteca de diálogos ofrece varios mensajes básicos, cada uno de los cuales se usa para recopilar un tipo de respuesta diferente. Las indicaciones básicas pueden interpretar la entrada del lenguaje natural, como "diez" o "una docena" para un número, o "mañana" o "viernes a las 10 a.m." para una fecha y hora.

Pronto Descripción Devoluciones
Solicitud de datos adjuntos Solicita uno o varios datos adjuntos, como un documento o una imagen. Colección de objetos adjuntos .
Mensaje de elección Pide una opción de un conjunto de opciones. Objeto de elección encontrado .
Confirmación del mensaje Pide una confirmación. Valor booleano.
Indicador de fecha y hora Pide una fecha y hora. Una colección de objetos de resolución de fecha y hora.
Solicitud de número Pide un número. Valor numérico.
Mensaje de texto Pide una entrada de texto general. Una cadena.

Para solicitar una entrada a un usuario, defina un mensaje mediante una de las clases integradas, como el mensaje de texto y agréguela al conjunto de diálogos. Las indicaciones tienen identificadores fijos que deben ser únicos dentro de un conjunto de diálogos. Puede tener un validador personalizado para cada solicitud y, para algunos avisos, puede especificar una configuración regional predeterminada.

Configuración regional del entorno

La configuración regional se usa para determinar el comportamiento específico del idioma de las indicaciones de elección, confirmación, fecha y hora e número. Para cualquier entrada dada del usuario, si el canal proporcionó una propiedad de configuración regional en el mensaje del usuario, se usa. De lo contrario, si se establece la configuración regional predeterminada de la solicitud, proporcionándola al llamar al constructor de la solicitud o estableciéndola más adelante, se usará. Si no se proporciona ninguna de esas configuraciones regionales, se usa inglés ("en-us") como configuración regional.

La configuración regional es un código ISO 639 de dos, tres o cuatro caracteres que representa un idioma o una familia de idiomas.

Opciones de solicitud

El segundo parámetro del método prompt de la contexto del paso toma un objeto de opciones de prompt, que tiene las siguientes propiedades.

Propiedad Descripción
Aviso La actividad inicial que se va a enviar al usuario, para solicitar su opinión.
Solicitud de reintento La actividad para enviar al usuario si su primera entrada no fue válida.
Opciones Lista de opciones de las que el usuario puede escoger, para usarlas con un mensaje de elección.
validaciones de Parámetros adicionales que se usarán con un validador personalizado.
estilo Define cómo se mostrarán las opciones de un mensaje de elección o confirmación para un usuario.

Siempre debe especificar el mensaje de solicitud inicial para enviar al usuario y un mensaje de reintento cuando la entrada del usuario no se valida.

Si la entrada del usuario no es válida, la solicitud de reintento se envía al usuario; si no se ha especificado ningún reintento, se usa la solicitud inicial. Sin embargo, si se devuelve una actividad al usuario desde el validador, no se envía ningún mensaje de reintento.

Validación de la solicitud

Puede validar una respuesta solicitada antes de devolver el valor al siguiente paso de la cascada. Una función de validador tiene un parámetro de contexto de solicitud del validador y devuelve un valor booleano, indicando si la entrada pasa la validación. El contexto del validador del indicador incluye las siguientes propiedades:

Propiedad Descripción
Contexto Contexto de turno actual para el bot.
Reconocido Resultado del reconocedor de comandos que contiene información sobre la entrada del usuario, según lo procesa el reconocedor.
Opciones Contiene las opciones del indicador que se proporcionaron en la llamada para iniciar el indicador.

El resultado del reconocedor de mensajes iniciales tiene las siguientes propiedades:

Propiedad Descripción
Éxito Indica si el reconocedor pudo analizar la entrada.
Valor El valor de retorno del reconocedor. Si es necesario, el código de validación puede modificar este valor.

Uso de diálogos

Los diálogos se pueden considerar como una pila programática, que llamamos pila de diálogos, con el controlador de turnos como el encargado de dirigirla y que actúa como alternativa si la pila está vacía. El elemento en la parte superior de esa pila se considera el diálogo activo, y el contexto del diálogo dirige toda la entrada al diálogo activo.

Cuando comienza un diálogo, se agrega a la pila y pasa a ser el diálogo activo. Permanece el diálogo activo hasta que finaliza, se quita mediante el método replace dialog u otro diálogo se inserta en la pila (ya sea por el controlador de turnos o el diálogo activo) y se convierte en el diálogo activo. Cuando finaliza ese cuadro de diálogo, se elimina de la pila y el siguiente cuadro de diálogo pasa a ser nuevamente el diálogo activo. Esto permite repetir un cuadro de diálogo o bifurcar una conversación, que se describe a continuación.

Puede iniciar o continuar un diálogo raíz mediante el método de extensión de diálogo run. Desde el código del bot, al llamar al método de extensión de ejecución del cuadro de diálogo, continúa el diálogo existente o inicia una nueva instancia del diálogo si la pila está vacía actualmente. El control y la entrada del usuario van al cuadro de diálogo activo en la pila.

El método run requiere un descriptor de acceso de propiedad de estado para tener acceso al estado del cuadro de diálogo. El descriptor de acceso se crea y se usa del mismo modo que otros descriptores de acceso de estado, pero se crea como una propiedad independiente derivada del estado de la conversación. Los detalles sobre la administración del estado se pueden encontrar en el tema de administración del estado y el uso del estado de diálogo se muestra en el procedimiento de flujo de conversación secuencial .

Desde dentro de un diálogo, tiene acceso al contexto del diálogo y puede usarlo para iniciar otros diálogos, finalizar el diálogo actual y realizar otras operaciones.

Para iniciar un cuadro de diálogo

Desde dentro de un escenario en cascada, pase el identificador del diálogo que desea iniciar en el contexto del escenario en cascada mediante el método iniciar diálogo, prompt o reemplazar diálogo.

  • Los métodos de diálogo prompt y begin insertarán una nueva instancia del diálogo al que se hace referencia en la parte superior de la pila.
  • El método replace dialog mostrará el diálogo actual fuera de la pila e insertará el diálogo de reemplazo en la pila. El cuadro de diálogo reemplazado se cancela y se elimina cualquier información de la instancia contenida.

Use el parámetro options para pasar información a la nueva instancia del cuadro de diálogo. Se puede acceder a las opciones que se pasan al nuevo cuadro de diálogo a través de la propiedad options del contexto del paso en cualquier paso del cuadro de diálogo. Para obtener más información, consulte Cómo crear un flujo de conversación avanzado mediante ramas y bucles.

Para continuar un diálogo

Dentro de un cuadro de diálogo en cascada, use la propiedad values del contexto del paso para conservar el estado entre turnos. Cualquier valor agregado a esta colección en un turno anterior está disponible en turnos posteriores. Para obtener más información, consulte Cómo crear un flujo de conversación avanzado mediante ramas y bucles.

Para cerrar un diálogo

Dentro de un cuadro de diálogo en cascada, use el método terminar el diálogo para finalizar un diálogo eliminándolo de la pila. El método de diálogo final puede devolver un resultado opcional al contexto primario (como el cuadro de diálogo que lo llamó o el controlador de turnos del bot). Esto suele llamarse desde dentro del cuadro de diálogo para finalizar la instancia actual de sí misma.

Puede llamar al método de cierre de diálogo desde cualquier contexto de diálogo disponible, pero parecerá al bot que fue llamado desde el diálogo que está activo actualmente.

Sugerencia

Se recomienda llamar explícitamente al método de diálogo final al final del diálogo.

Para borrar todos los diálogos

Si desea quitar todos los diálogos de la pila, puede borrar la pila de diálogos llamando al método cancel all dialogs del contexto de diálogo.

Repetir un diálogo

Puede reemplazar un diálogo por sí mismo, creando un bucle, mediante el método replace dialog . Esta es una excelente manera de controlar interacciones complejas y una técnica para administrar menús.

Nota:

Si necesita conservar el estado interno del cuadro de diálogo actual, deberá pasar información a la nueva instancia del diálogo en la llamada al método replace dialog y, a continuación, inicializar el diálogo correctamente.

Ramificar una conversación

El contexto del diálogo mantiene la pila de diálogos y, para cada diálogo de la pila, realiza un seguimiento del próximo paso. Su método begin dialog crea un elemento secundario e inserta ese diálogo en la parte superior de la pila, y su método end dialog retira el diálogo superior de la pila. End dialog normalmente se invoca desde dentro del diálogo que está finalizando.

Un diálogo puede iniciar un diálogo nuevo dentro del mismo conjunto de diálogos llamando al método begin dialog del contexto de diálogo y proporcionando el identificador del nuevo diálogo, que luego convierte el diálogo nuevo en el diálogo activo actualmente. El diálogo original todavía está en la pila, pero las llamadas al método continue dialog del contexto de diálogo solo se envían al diálogo que está encima de la pila, el diálogo activo. Cuando se saca un diálogo de la pila, el contexto del diálogo se reanudará con el siguiente paso de la cascada en la pila donde se dejó del diálogo original.

Por lo tanto, puede crear una rama dentro del flujo de conversación mediante la inclusión de un paso en un diálogo que condicionalmente puede elegir un diálogo para comenzar desde un conjunto disponible de diálogos.

Información adicional