Acerca de los diálogos de componente y cascada
SE APLICA A: SDK v4
Los diálogos vienen en algunos tipos diferentes. En este artículo se describen los diálogos de componentes, cascadas y avisos. 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 en el contexto de un 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 u otro diálogo en cascada. Los diálogos de componentes administran un conjunto de diálogos secundarios , como diálogos en cascada, avisos, 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. Los avisos están diseñados para trabajar con diálogos en cascada en un cuadro de diálogo de componente.
A veces desea escribir un diálogo reutilizable que desea utilizar en diferentes escenarios, como un diálogo de dirección que pide al usuario que proporcione los valores de calle, ciudad y código postal.
El diálogo de componente proporciona una estrategia para crear diálogos independientes para controlar escenarios concretos, lo que divide un conjunto de diálogos grande en elementos más manejables. Cada una de estas piezas tiene su propio conjunto de diálogos y evita los 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.
Un diálogo en cascada es una implementación concreta de un diálogo que normalmente se usa para recopilar información del usuario o guiarlo en una serie de tareas. Cada paso de la conversación se implementa como una función asincrónica que toma un parámetro del contexto de pasos 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 y así sucesivamente.
En el diagrama siguiente se muestra una secuencia de pasos de cascada y las operaciones de la pila que tienen lugar. En la sección acerca del uso de diálogos encontrará más información acerca del uso de la pila de diálogos.
En los pasos en cascada, el contexto del diálogo en cascada se almacena en su contexto de paso en cascada. El contexto del paso es similar al contexto del cuadro de diálogo y proporciona acceso al contexto de turno actual y al estado. Use el contexto de ambiente del paso de cascada para interactuar con un conjunto de diálogos desde un paso de cascada.
Puede controlar un valor devuelto de un diálogo, ya sea en un paso de una cascada de un diálogo o desde el controlador del turnos del bot, aunque generalmente solo necesita comprobar el estado del resultado de turnos del diálogo desde la lógica de turnos del bot. Dentro de un paso de la cascada, el diálogo proporciona el valor devuelto en la propiedad result del contexto del paso.
El contexto del paso de cascada contiene las siguientes propiedades:
- Opciones: contiene información de entrada del diálogo.
- Valores: contiene información que se puede agregar al contexto y que se transmite a los pasos siguientes.
- 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 al bot omitir un determinado paso si es necesario.
Los avisos, en la biblioteca de diálogos, proporcionan una forma fácil de pedir información al usuario 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 lo hizo, la conversación puede continuar; si no lo hizo, volverá a pedir al usuario una respuesta válida.
En un segundo plano, las preguntas consisten en un diálogo de dos pasos. En primer lugar, el aviso pide información y, en segundo lugar, devuelve el valor válido o se inicia desde el principio con un nuevo aviso.
A los avisos se les proporcionan opciones de aviso cuando se llama al aviso, que es el lugar en que se puede especificar el texto con el que se pide, el aviso de reintento si se produce un error de validación y las distintas opciones para responder al aviso. En general, las propiedades prompt y retry prompt son actividades, aunque hay alguna variación sobre cómo se controla esto en diferentes lenguajes de programación.
Además, puede agregar una validación personalizada para el aviso al crearlo. Por ejemplo, supongamos que deseamos conocer el tamaño de una entidad mediante el símbolo numérico, pero dicho tamaño debe ser superior a 2 e inferior a 12. En primer lugar, el símbolo del sistema comprueba si recibió un número válido y, a continuación, ejecuta la validación personalizada si se proporciona. Si se produce un error en la validación personalizada, se volverá a solicitar al usuario como se indica anteriormente.
Cuando se completa un aviso, este devuelve explícitamente el valor resultante que se ha pedido. Cuando se devuelve ese valor, podemos asegurarnos de que ha pasado tanto la validación del símbolo del sistema integrada como cualquier validación personalizada adicional que se haya proporcionado.
Para ver ejemplos acerca del uso de varios avisos, eche un vistazo a cómo usar la biblioteca de diálogos para recopilar la entrada de usuario.
En un segundo plano, las preguntas consisten en un diálogo de dos pasos. En primer lugar, la solicitud solicita la entrada; en segundo lugar, devuelve el valor válido o se reinicia desde la parte superior con una reprompt. La biblioteca de diálogos ofrece varios mensajes básicos, cada uno de los cuales se usa para recopilar un tipo diferente de respuesta. Las preguntas básicas pueden interpretar entradas en lenguaje natural como, por ejemplo, "diez" o "una docena" para un número, o "mañana" o "el viernes a las 10 am" para una fecha y hora.
Prompt | Descripción | Devuelve |
---|---|---|
Solicitud de archivos adjuntos | Pide uno o varios archivos adjuntos como, por ejemplo, documentos o imágenes. | Una colección de objetos adjuntos. |
Solicitud de elección | Pide que se realice una elección entre las diversas opciones de un conjunto. | Un objeto de opción seleccionada. |
Solicitud de confirmación | Solicita una confirmación. | Valor booleano. |
Solicitud de fecha y hora | Pregunta una fecha y una hora. | Una colección de objetos de resolución de fecha y hora. |
Solicitud de número | Solicita un número. | Un valor numérico. |
Solicitud de texto | Solicita la entrada de texto general. | Una cadena. |
Para solicitar una entrada al usuario, defina una pregunta mediante una de las clases integradas, como la pregunta de texto, y agréguela al conjunto de diálogos. Las preguntas tienen identificadores fijos que deben ser únicos dentro de un conjunto de diálogos. Puede tener un validador personalizado para cada pregunta y, para algunas preguntas, puede especificar una configuración regional predeterminada.
La configuración regional se usa para determinar el comportamiento específico del idioma de las solicitudes de elección, confirmación, fecha y hora y número. Para cualquier entrada del usuario, si el canal ha proporcionado una propiedad de configuración regional en el mensaje del usuario, se usará esa. En caso contrario, si se establece la configuración regional predeterminada de la pregunta, ya sea proporcionándola al llamar al constructor de la misma o estableciéndola posteriormente, esa será la que se use. 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.
El segundo parámetro del método prompt del contexto del paso toma un objeto de opciones de pregunta que tiene las siguientes propiedades.
Propiedad | Descripción |
---|---|
Pregunta | La actividad inicial para enviar al usuario para pedir su entrada. |
Reintentar pregunta | Actividad para enviar al usuario si su primera entrada no se validó. |
Opciones | Una lista de opciones entre las que el usuario puede elegir, para su uso en una solicitud de elección. |
Validaciones | Parámetros adicionales que se van a usar con un validador personalizado. |
Estilo | Define la forma en que las opciones de una solicitud de opción o de confirmación se presentará al usuario. |
Siempre debe especificar la actividad de solicitud inicial para enviar al usuario y una solicitud de reintento para las instancias 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 el símbolo del sistema inicial. Sin embargo, si se devuelve una actividad al usuario desde el validador, no se envía ninguna pregunta de reintento.
Puede validar una respuesta antes de devolver el valor al siguiente paso de la cascada. Una función de validador tiene un parámetro prompt validator context que devuelve un valor booleano que indica si la entrada supera la validación. El contexto del validador de la solicitud incluye las siguientes propiedades:
Propiedad | Descripción |
---|---|
Contexto | El contexto del turno actual del bot. |
Recognized | Un resultado del reconocedor de la solicitud que contiene información sobre la entrada del usuario según la procesa el reconocedor. |
Opciones | Contiene las opciones de aviso que se proporcionaron en la llamada para iniciar el aviso. |
El resultado del reconocedor de la solicitud tiene las siguientes propiedades:
Propiedad | Descripción |
---|---|
Correcto | Indica si el reconocedor ha podido analizar la entrada. |
Valor | El valor devuelto por el reconocedor. Si es necesario, el código de validación puede modificar este valor. |
Los diálogo pueden considerarse una pila mediante programación, lo que llamamos la pila de diálogos, con el controlador de turnos como lo que le ordena y que actúa como la reserva si la pila está vacía. El elemento 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 se inicia un diálogo, se inserta en la pila y ahora es 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 por el propio diálogo activo) y se convierte en el diálogo activo. Cuando finaliza ese nuevo diálogo, se extrae de la pila y el siguiente cuadro de diálogo se convierte de nuevo en el diálogo activo. Esto permite repetir un cuadro de diálogo o crear una bifurcación en una conversación, como se indica a continuación.
Puede comenzar o continuar un cuadro de diálogo raíz mediante el método de extensión run dialog. Desde el código del bot, la llamada al método de extensión de ejecución 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 de la pila.
El método run requiere un descriptor de acceso de propiedad de estado para tener acceso al estado del diálogo. Dicho descriptor se crea y se usa de la misma forma que los restantes descriptores de acceso del estado, ya que basa en su propia propiedad del estado de la conversación. Los detalles relativos a la administración del estado se pueden encontrar en el tema relativo a la administración del estado, mientras que el uso del estado del diálogo se muestra en el procedimiento referente al flujo de conversaciones secuenciales.
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.
Desde dentro de un diálogo en cascada, pase el identificador de diálogo del diálogo que desea iniciar en el contexto del diálogo en cascada mediante el método begin dialog, prompt o replace dialog .
- 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 retira el diálogo actual de la pila e inserta el diálogo de reemplazo en la pila. Se cancela el cuadro de diálogo reemplazado y se elimina toda la información que esa instancia contenga.
Use el parámetro options para pasar información a la nueva instancia del diálogo. Para acceder a las opciones pasadas al nuevo diálogo se puede usar la propiedad options del contexto en cualquier paso del diálogo. Para obtener más información, consulte Cómo crear un flujo de conversación avanzado mediante ramas y bucles.
Dentro de un cuadro de diálogo en cascada, use la propiedad values del contexto de paso para conservar el estado entre turnos. Todos los valores agregados a esta colección en un turno anterior estará disponible en los turnos posteriores. Para obtener más información, consulte Cómo crear un flujo de conversación avanzado mediante ramas y bucles.
Dentro de un diálogo en cascada, use el método de diálogo final para finalizar un diálogo sacandolo de la pila. El método de diálogo final puede devolver un resultado opcional al contexto primario (como el diálogo que lo llamó o el controlador de turnos del bot). Muy a menudo desde el propio diálogo se realiza la llamada para finalizar la instancia actual de sí mismo.
Este método se puede llamar desde cualquier lugar en que tenga un contexto de diálogo, pero aparecerá en el bot al que se llamó desde el diálogo activo actual.
Sugerencia
Se recomienda llamar explícitamente al método de diálogo final al final del diálogo.
Si desea quitar todos los diálogos de la pila, puede borrar la pila de diálogos, para lo que debe llamar al método cancel all dialogs del contexto del diálogo.
Puede reemplazar un diálogo por él mismo y crear 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 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.
El contexto del diálogo mantiene la pila del mismo y, en todos los diálogo de la pila, realiza un seguimiento de cuál es el paso siguiente. Su método de comienzo de diálogo crea un diálogo secundario y lo inserta al principio de la pila, mientras que su método de finalización de diálogo retira el diálogo de la pila. A este último método normalmente se le llama desde dentro del diálogo que finaliza.
Para iniciar un nuevo diálogo dentro del mismo conjunto de diálogos, un diálogo puede llamar al método begin dialog del contexto del diálogo o proporcionar el identificador del nuevo diálogo, lo que convierte a este en el diálogo actualmente activo. El diálogo original está todavía en la pila, pero las llamadas al método continue del contexto del diálogo solo se envían al diálogo que está arriba de la pila, el diálogo activo. Cuando un diálogo se retira de la pila, el contexto del diálogo se reanuda con el siguiente paso de la cascada en la pila donde se dejó el diálogo original.
Por lo tanto, puede crear una bifurcación dentro del flujo de conversación mediante la inclusión de un paso en un diálogo que puede elegir condicionalmente un diálogo para iniciar de un conjunto de diálogos disponibles.
- Para más información acerca de los diálogos adaptables, consulte la introducción a los diálogos adaptables.
- Para más información acerca de las aptitudes, consulte la documentación acerca de las aptitudes.