Diseño y control del flujo de conversaciónDesign and control conversation flow

se aplica a: SDK V4APPLIES TO: SDK v4

En una aplicación tradicional, la interfaz de usuario (UI) consta de una serie de pantallas y una sola aplicación o sitio web puede usar una o varias pantallas según sea necesario para intercambiar información con el usuario.In a traditional application, the user interface (UI) consists of a series of screens, and a single app or website can use one or more screens as needed to exchange information with the user. La mayoría de las aplicaciones se inician con una pantalla principal a la que los usuarios llegan inicialmente y esa pantalla proporciona características de navegación que conducen a otras pantallas para realizar distintas funciones, como el inicio de un nuevo pedido, la exploración de productos o la búsqueda de ayuda.Most applications start with a main screen where users initially land, and that screen provides navigation that leads to other screens for various functions like starting a new order, browsing products, or looking for help.

Al igual que las aplicaciones y sitios web, los bots tienen una interfaz de usuario, pero esta consta de mensajes, en lugar de pantallas.Like apps and websites, bots have a UI, but it is made up of messages rather than screens. Los mensajes pueden contener botones, texto y otros elementos o estar completamente basados en voz.Messages may contain buttons, text, and other elements, or be entirely speech-based.

Mientras que una aplicación tradicional o un sitio web puede solicitar varios fragmentos de información en una pantalla a la vez, un bot recopilará la misma cantidad de información mediante varios mensajes.While a traditional application or website can request multiple pieces of information on a screen all at once, a bot will gather the same amount of information using multiple messages. De este modo, el proceso de recopilación de información del usuario es una experiencia activa, donde el usuario tiene una conversación activa con el bot.In this way, the process of gathering information from the user is an active experience; one where the user is having an active conversation with the bot.

Un bot bien diseñado tendrá un flujo de conversación que se sienta natural.A well-designed bot will have a conversational flow that feels natural. El bot debe ser capaz de controlar sin problemas la conversación principal y poder controlar las interrupciones o cambiar los temas correctamente.The bot should be able to handle the core conversation seamlessly and be able to handle interruptions or switching topics gracefully.

Flujo de conversación de procedimientosProcedural conversation flow

Las conversaciones con un bot suelen centrarse en la tarea que un bot está intentando conseguir, lo que se denomina flujo de procedimientos.Conversations with a bot are generally focused on the task a bot is trying to achieve, which is called a procedural flow. Aquí es donde el bot hace una serie de preguntas al usuario para recopilar toda la información que necesita para poder procesar la tarea.This is where the bot asks the user a series of questions to gather all the information it needs before processing the task.

En un flujo de conversación de procedimientos, usted define el orden de las preguntas y el bot las formulará en el orden definido.In a procedural conversation flow, you define the order of the questions and the bot will ask the questions in the order you defined. Puede organizar las preguntas en grupos lógicos para mantener el código centralizado mientras se centra en el GUID de la conversación.You can organize the questions into logical groups to keep the code centralized while staying focused on guiding the conversation. Por ejemplo, puede diseñar un módulo que contenga la lógica que ayuda al usuario a examinar productos y un módulo independiente que contenga la lógica que ayuda al usuario a crear un nuevo pedido.For example, you may design one module to contain the logic that helps the user browse for products and a separate module to contain the logic that helps the user create a new order.

Puede estructurar estos módulos para que fluyan como quiera, desde una forma libre a una secuencial.You can structure these modules to flow in any way you like, ranging from free form to sequential. El SDK de bot Framework proporciona una biblioteca de cuadros de diálogo que le permite crear cualquier flujo de conversación que su bot necesita.The Bot Framework SDK provides a dialogs library that allows you to construct any conversational flow your bot needs. La biblioteca incluye cuadros de diálogo de cascada para crear una secuencia de pasos y preguntas para preguntar a los usuarios.The library includes waterfall dialogs for creating a sequence of steps and prompts for asking users questions. Para obtener más información, vea biblioteca de cuadros de diálogo.For more information, see Dialogs library.

Flujo de la GUI de la aplicación comparado con el flujo de conversación de bot

En una aplicación tradicional, todo comienza con la pantalla principal .In a traditional application, everything begins with the main screen. La pantalla principal invoca la pantalla nuevo pedido .The main screen invokes the new order screen. La pantalla nuevo pedido permanece en el control hasta que se cierra o se invoca a otras pantallas, como la pantalla de búsqueda del producto .The new order screen remains in control until it either closes or invokes other screens, such as the product search screen. Si la pantalla de nuevo pedido se cierra, se devuelve al usuario a la pantalla principal.If the new order screen closes, the user is returned to the main screen.

En un bot que utiliza cuadros de diálogo, todo comienza con el cuadro de diálogo raíz.In a bot that uses dialogs, everything begins with the root dialog. El diálogo raíz invoca el diálogo de nuevo pedido.The root dialog invokes the new order dialog. En ese momento, el cuadro de diálogo Nuevo pedido toma el control de la conversación y permanece en el control hasta que se cierra o se invoca otro cuadro de diálogo, como el cuadro de diálogo de búsqueda del producto.At that point, the new order dialog takes control of the conversation and remains in control until it either closes or invokes another dialog, such as the product search dialog. Si se cierra el cuadro de diálogo Nuevo pedido, el control de la conversación vuelve al cuadro de diálogo raíz.If the new order dialog closes, control of the conversation returns back to the root dialog.

Para obtener un ejemplo de cómo implementar un flujo de conversación mediante las bibliotecas de cuadros de diálogo, vea implementar el flujo de conversación secuencial.For an example of how to implement a conversational flow using the dialog libraries, see Implement sequential conversation flow.

Control de las interrupcionesHandle interruptions

Puede resultar tentador suponer que los usuarios realizarán tareas de procedimientos una por una de forma clara y ordenada.It may be tempting to assume that users will perform procedural tasks one by one in a neat and orderly way. Por ejemplo, en un flujo de conversación de procedimientos mediante cuadros de diálogo, el usuario se iniciará en el cuadro de diálogo raíz e invocará el cuadro de diálogo Nuevo pedido.For example, in a procedural conversation flow using dialogs, the user will start at the root dialog and invoke the new order dialog. En el cuadro de diálogo Nuevo pedido, invocan el cuadro de diálogo de búsqueda del producto.From the new order dialog, they invoke the product search dialog. A continuación, al seleccionar uno de los resultados que aparecen en el cuadro de diálogo de búsqueda del producto, invocan el cuadro de diálogo Nuevo pedido.Then when selecting one of the results listed in product search dialog, they invoke the new order dialog. Después de completar el pedido, vuelven al cuadro de diálogo raíz.After completing the order, they arrive back at the root dialog.

Aunque sería estupendo si los usuarios siempre recorriesen dicha ruta lógica y lineal, esto se produce raras veces.Although it would be great if users always traveled such a linear, logical path, it seldom occurs. Las personas no siempre se comunican en orden secuencial.People do not always communicate in sequential order. Tienden a cambiar de opinión con frecuencia.They tend to frequently change their minds. Considere el ejemplo siguiente:Consider the following example:

El usuario formula una pregunta en respuesta a una pregunta del bot

Aunque que el bot puede estar centrado en procedimientos, el usuario puede decidir hacer algo completamente diferente o formular una pregunta que no tenga ninguna relación con el tema actual.While your bot may be procedural centric, the user may decide to do something entirely different or ask a question that may be unrelated to the current topic. En el ejemplo anterior, el usuario hace una pregunta en lugar de facilitar la respuesta afirmativa o negativa que el bot espera.In the example above, the user asks a question rather than providing the yes/no response that the bot expects. ¿Cómo debe responder el bot?How should your bot respond?

  • Insistir en que el usuario responda primero a la pregunta.Insist that the user answer the question first.
  • Pasar por alto todo lo que el usuario ha hecho hasta el momento, restablecer la pila de diálogos al completo y empezar desde cero intentando responder a la pregunta del usuario.Disregard everything that the user had done previously, reset the whole dialog stack, and start from the beginning by attempting to answer the user's question.
  • Intentar responder a la pregunta del usuario y, después, regresar a la pregunta con respuesta afirmativa o negativa para intentar reanudar la conversación desde ahí.Attempt to answer the user's question and then return to that yes/no question and try to resume from there.

No hay ninguna respuesta correcta a esta pregunta, ya que la mejor solución dependerá de los aspectos concretos del escenario y de cómo espera el usuario que responda el bot.There is no right answer to this question, as the best solution will depend upon the specifics of your scenario and how the user would reasonably expect the bot to respond. Vea cómo controlar las interrupciones de usuario para un bot diseñado para controlar algunos tipos de interrupciones.See how to Handle user interruptions for a bot that is designed to handle some types of interruptions.

Expiración de una conversaciónExpire a conversation

Hay ocasiones en las que resulta útil reiniciar una conversación desde el principio.There are times when it is useful to restart a conversation from the beginning. Por ejemplo, si un usuario no responde después de un período de tiempo determinado.For instance, if a user does not respond after a certain period of time. Los distintos métodos para finalizar una conversación incluyen:Different methods for ending a conversation include:

  • Realice un seguimiento de la última vez que se recibió un mensaje de un usuario y borre el estado si la hora es mayor que una longitud preconfigurada al recibir el siguiente mensaje del usuario.Track the last time a message was received from a user, and clear state if the time is greater than a preconfigured length upon receiving the next message from the user.
  • Use una característica de capa de almacenamiento, como la característica de período de vida de Cosmos dB, para borrar el estado después de un período de tiempo preconfigurado.Use a storage layer feature, such as Cosmos DB's time-to-live feature, to clear state after a preconfigured length of time.

Para obtener más información, consulte Cómo hacer expirar una conversación.For more information see how to Expire a conversation.

Pasos siguientesNext steps

Administrar la navegación del usuario en los cuadros de diálogo y diseñar un flujo de conversación de una manera que permita a los usuarios alcanzar sus objetivos (incluso en modo no lineal) es un desafío fundamental del diseño de bot.Managing the user's navigation across dialogs and designing a conversational flow in a manner that enables users to achieve their goals (even in a non-linear fashion) is a fundamental challenge of bot design. En el artículo de navegación de los Bot de diseño se revisan algunos problemas comunes de la navegación mal diseñada y se describen las estrategias para evitar esas capturas.The Design bot navigation article reviews some common pitfalls of poorly designed navigation and discusses strategies for avoiding those traps.