Conceptos básicos del Microsoft Bot Framework

SE APLICA A: SDK v4

Un bot es una aplicación con la que los usuarios interactúan de forma conversacional mediante texto, gráficos (tarjetas o imágenes) o voz. Azure Bot Service es una plataforma en la nube. Hospeda bots y los pone a disposición de los canales, como Microsoft Teams, Facebook o Slack.

Bot Framework Service, que es un componente de Azure Bot Service, envía información entre la aplicación conectada al bot del usuario y el bot. Cada canal puede incluir información adicional en las actividades que envían. Antes de crear bots, es importante comprender cómo un bot usa objetos de actividad para comunicarse con sus usuarios.

En este diagrama se muestran dos tipos de actividad, actualización de conversación y mensaje, que pueden intercambiarse cuando un usuario se comunica con un bot de eco.

Diagrama de actividades

Bot Framework Service envía una actualización de conversación cuando una parte se une a la conversación. Por ejemplo, al iniciar una conversación con el Bot Framework Emulator, es posible que vea dos actividades de actualización de conversación (una para el usuario que se une a la conversación y otra para la unión del bot). Para distinguir estas actividades de actualización de conversación, compruebe quién está incluido en la propiedad de los miembros agregados de la actividad.

La actividad del mensaje lleva información de conversación entre las partes. En un ejemplo de bot de eco, las actividades de mensaje llevan texto simple y el canal representará este texto. Como alternativa, la actividad de mensaje podría llevar texto hablado, acciones sugeridas o tarjetas para mostrar.

Sugerencia

Es necesario que cada canal implemente el protocolo Bot Framework y cómo lo hace cada canal podría ser un poco diferente. Por ejemplo, algunos canales envían primero actividades de actualización de conversación y algunas envían actividades de actualización de conversación después de enviar la primera actividad de mensaje. Un canal puede incluir tanto el bot como el usuario en una actividad de actualización de conversación, mientras que otro podría enviar dos actividades de actualización de conversación.

En este ejemplo, el bot crea y envía una actividad de mensaje como respuesta a la actividad de mensaje entrante que ha recibido. Sin embargo, un bot puede responder de otras maneras a una actividad de mensaje recibida y es habitual que un bot responda a una actividad de actualización de conversación mediante el envío de una actividad de mensaje con un mensaje de bienvenida. Puede encontrar más información en cómo dar la bienvenida a un usuario.

The Bot Framework SDK

Bot Framework SDK permite compilar bots que se pueden hospedar en Azure Bot Service. El servicio define una API REST y un protocolo de actividad para saber cómo pueden interactuar el bot y los canales o los usuarios. El SDK se basa en esta API rest y proporciona una abstracción del servicio para que pueda centrarse en la lógica conversacional. Aunque no es necesario comprender el servicio REST para usar el SDK, comprender algunas de sus características puede ser útil.

Los bots son aplicaciones que tienen una interfaz conversacional. Se pueden usar para desplazar las tareas simples y repetitivas, como reservar una mesa en un restaurante o recopilar información de un perfil, a sistemas automatizados que puede que no requieran intervención humana directa. Los usuarios conversan con los bot mediante texto, tarjetas interactivas y la voz. Una interacción con un bot puede ser tanto una pregunta y una respuesta rápidas como una conversación sofisticada que proporciona acceso a servicios de forma inteligente.

Nota

La compatibilidad con las características proporcionadas por el SDK y la API REST varía según el canal. Puede probar el bot mediante el Bot Framework Emulator, pero también debe probar todas las características del bot en cada canal en el que pretende que el bot esté disponible.

Las interacciones implican el intercambio de actividades, que se controlan a su vez.

Actividades

Cada interacción entre el usuario (o un canal) y el bot se representa como una actividad. El esquema de actividad de Bot Framework define las actividades que se pueden intercambiar entre un usuario o canal y un bot. Las actividades pueden representar texto humano o voz, notificaciones de aplicación a aplicación, reacciones a otros mensajes, etc.

Turnos

En una conversación, la gente a menudo habla de uno en uno, haciendo turnos para hablar. Con un bot, por lo general reacciona a las entradas del usuario. En Bot Framework SDK, un turno consiste en la actividad de la entrada del usuario en el bot y en cualquier actividad que el bot devuelve al usuario como respuesta inmediata. Puede considerar un turno como el procesamiento asociado al bot que recibe una actividad determinada.

Por ejemplo, un usuario podría pedir a un bot que realice una tarea determinada. El bot puede responder con una pregunta para obtener más información sobre la tarea, momento en el que finaliza este turno. En el siguiente turno, el bot recibe un nuevo mensaje del usuario que podría contener la respuesta a la pregunta del bot, o podría representar un cambio de asunto o una solicitud para omitir la solicitud inicial para realizar la tarea.

Estructura de la aplicación de bot

El SDK define una clase de bot que controla el razonamiento conversacional de la aplicación de bot. La clase de bot:

  • Reconoce e interpreta la entrada del usuario.
  • Razones sobre la entrada y realiza tareas pertinentes.
  • Genera respuestas sobre lo que hace o ha hecho el bot.

El SDK también define una clase de adaptador que controla la conectividad con los canales. El adaptador:

  • Proporciona un método para controlar las solicitudes de y los métodos para generar solicitudes al canal del usuario.
  • Incluye una canalización de middleware, que incluye el procesamiento de turnos fuera del controlador de turnos del bot.
  • Llama al controlador de turnos del bot y detecta errores que, de lo contrario, no se controlan en el controlador de turnos.

Además, los bots a menudo necesitan recuperar y almacenar el estado de cada turno. El estado se controla a través de las clases de descriptor de accesode almacenamiento, estado del bot y propiedades. El SDK no proporciona almacenamiento integrado, pero proporciona abstracciones para el almacenamiento y algunas implementaciones de una capa de almacenamiento. En el tema de administración de estado se describen estas características de estado y almacenamiento.

Un bot tiene elementos de conectividad y razonamiento, y una abstracción para el estado

El SDK no requiere que use una capa de aplicación específica para enviar y recibir solicitudes web. Bot Framework tiene plantillas y ejemplos para ASP.NET (C#), restify (JavaScript) y aiohttp (Python). Sin embargo, puede optar por usar una capa de aplicación diferente para la aplicación.

Al crear un bot mediante el SDK, se proporciona el código para recibir el tráfico HTTP y reenviarlo al adaptador. Bot Framework proporciona algunas plantillas y ejemplos que puede usar para desarrollar sus propios bots.

Lógica del bot

El objeto bot contiene el razonamiento conversacional o la lógica de un turno y expone un controlador de turnos, que es el método que puede aceptar actividades entrantes del adaptador del bot.

El SDK proporciona un par de paradigmas diferentes para administrar la lógica del bot.

  • Los controladores de actividad proporcionan un modelo controlado por eventos en el que los tipos y subtipos de actividad entrantes son los eventos. Considere un controlador de actividad para los bots que tienen interacciones cortas y limitadas con el usuario.
    • Use un controlador de actividad e implemente controladores para cada tipo de actividad o subtipo al que reconocerá y reaccionará el bot.
    • Use un controlador de actividad de Teams para crear bots que se puedan conectar al canal de Teams. (El canal de Teams requiere que el bot controle algún comportamiento específico del canal).
  • La biblioteca de diálogos proporciona un modelo basado en estado para administrar una conversación de larga duración con el usuario.
  • Implemente su propia clase de bot y proporcione su propia lógica para controlar cada turno. Para obtener un ejemplo, consulte cómo crear sus propias indicaciones para recopilar la entrada del usuario.

El adaptador de bot

El adaptador tiene un método de actividad de proceso para iniciar un turno.

  • Toma el cuerpo de la solicitud (la carga de la solicitud, traducida a una actividad) y el encabezado de solicitud como argumentos.
  • Comprueba si el encabezado de autenticación es válido.
  • Crea un objeto de contexto para el turno. El objeto de contexto incluye información sobre la actividad.
  • Envía el objeto de contexto a través de su canalización de middleware .
  • A continuación, envía el objeto de contexto al controlador de turnos del objeto bot.

El adaptador también:

  • Da formato y envía actividades de respuesta. Estas respuestas suelen ser mensajes para el usuario, pero también pueden incluir información que el canal del usuario va a consumir directamente.
  • Muestra otros métodos proporcionados por la API REST de Bot Connector, como el mensaje de actualización y el mensaje de eliminación.
  • Detecta errores o excepciones que no se detectan para el turno.

Contexto de turno

El objeto de contexto de turno proporciona información acerca de la actividad, como el remitente y receptor, el canal y otros datos necesarios para procesar la actividad. También permite la adición de información durante el turno en las distintas capas del bot.

El contexto de turno es una de las abstracciones más importantes en el SDK. No solo lleva la actividad de entrada a todos los componentes de middleware y la lógica de la aplicación, sino que también proporciona el mecanismo por el que los componentes de middleware y la lógica del bot pueden enviar actividades salientes.

Software intermedio

El middleware es muy similar a cualquier otro middleware de mensajería, incluye un conjunto lineal de componentes que se ejecutan en orden, dando a cada uno la oportunidad de operar en la actividad. La etapa final de la canalización del middleware es una devolución de llamada al controlador de turnos de la clase del bot que la aplicación ha registrado con el método process activity del adaptador. El middleware implementa un método de activación al que llama el adaptador.

El controlador de turnos toma un contexto de turno como argumento, normalmente la lógica de la aplicación que se ejecuta dentro de la función de controlador de turnos procesará el contenido de la actividad de entrada y generará una o varias actividades en respuesta, enviando estas actividades salientes mediante la función de actividad de envío en el contexto de turno. Una llamada a send activity en el contexto de turno hará que se invoque a los componentes de middleware en las actividades de salida. Los componentes de middleware se ejecutan antes y después de la función del controlador de turnos del bot. La ejecución está intrínsecamente anidada y, como tal, a veces se conoce como una cebolla.

En el tema de middleware se describe el middleware con mayor profundidad.

Estado y almacenamiento del bot

Al igual que con otras aplicaciones web, un bot no tiene estado inherentemente. El estado dentro de un bot sigue los mismos paradigmas que las aplicaciones web modernas y Bot Framework SDK proporciona abstracciones de administración de estado y capa de almacenamiento para facilitar la administración de estados.

En el tema de administración de estado se describen estas características de estado y almacenamiento.

Punto de conexión de mensajería y aprovisionamiento

Normalmente, la aplicación necesitará un punto de conexión REST en el que recibir mensajes. También tendrá que aprovisionar recursos para el bot de acuerdo con la plataforma que decida usar.

Siga el inicio rápido Creación de un bot para crear y probar un bot de eco simple.

Detalles HTTP

Las actividades llegan al bot desde Bot Framework Service mediante una solicitud POST HTTP. El bot responde a la solicitud POST entrante con un código de estado HTTP 200. Las actividades que se envían desde el bot al canal se envían en una solicitud POST HTTP independiente a Bot Framework Service. Esta se confirma de vuelta con un código de estado HTTP 200.

El protocolo no especifica el orden en que se realizan estas solicitudes POST y sus confirmaciones. Sin embargo, para ajustarse a los marcos de servicios HTTP comunes, normalmente estas solicitudes se anidan, lo que significa que el bot realiza la solicitud HTTP de salida en el ámbito de la solicitud HTTP de entrada. Este patrón se muestra en el diagrama anterior. Puesto que hay dos conexiones HTTP distintas consecutivas, se debe proporcionar un modelo de seguridad para ambas.

Nota

El bot tiene 15 segundos para confirmar la llamada con un estado 200 en la mayoría de los canales. Si el bot no responde en un plazo de 15 segundos, se produce un error HTTP GatewayTimeout (504).

Pila de procesamiento de actividades

Vamos a profundizar en el diagrama de secuencia anterior con un enfoque en la llegada de una actividad de mensaje.

Diagrama de secuencia que ilustra cómo un bot procesa una actividad.

El canal envía el mensaje del usuario al Bot Service de Azure y el servicio reenvía el mensaje al punto de conexión de mensajería del bot. La respuesta del bot se envía al usuario dentro del ámbito del turno.

En el ejemplo anterior, el bot respondió a la actividad de mensaje con otra actividad de mensaje que contenía el mismo mensaje de texto. El procesamiento comienza con la solicitud POST HTTP, con la información de la actividad en forma de una carga JSON que llega al servidor web. A menudo, los proyectos de ASP.NET se usan para bots de C#, y se usa un marco popular como Express o restify para bots de Node.js javaScript.

El adaptador, un componente integrado del SDK, es el núcleo del entorno de ejecución del SDK. La actividad se realiza como JSON en el cuerpo de la solicitud HTTP POST. Este JSON se deserializa para crear el objeto de actividad que, a continuación, se entrega al adaptador a través de su método de actividad de proceso . Tras la recepción de la actividad, el adaptador crea un contexto de turno y llama al middleware.

Como se ha indicado anteriormente, el contexto de turno proporciona el mecanismo para que el bot envíe las actividades de salida, muy frecuentemente en respuesta a una actividad de entrada. El contexto de turno proporciona métodos de respuesta de actividad de envío, actualización y eliminación . Cada método de respuesta se ejecuta en un proceso asincrónico.

Importante

El subproceso que controla el turno del bot principal se ocupa de eliminar el objeto de contexto cuando haya terminado. Asegúrese de usar await para las llamadas de actividad, para que el subproceso principal espere la actividad generada antes de finalizar su procesamiento y desechar el contexto de turno. De otro modo, si una respuesta (incluidos sus controladores) tarda mucho e intenta actuar sobre el objeto de contexto, es posible que reciba un error relativo a que el contexto se ha eliminado.

Plantillas de bot

Debe elegir el uso del nivel de aplicación para la aplicación; Sin embargo, Bot Framework tiene plantillas y ejemplos para ASP.NET (C#), restify (JavaScript) y aiohttp (Python). La documentación se escribe suponiendo que se usa una de estas plataformas, pero el SDK no lo requiere. Consulte el inicio rápido Creación de un bot para obtener instrucciones sobre cómo acceder a las plantillas e instalarlas.

Un bot es una aplicación web y se proporcionan plantillas para cada versión de lenguaje del SDK. Todas las plantillas proporcionan una implementación y un adaptador de punto de conexión predeterminados. Cada plantilla incluye:

  • Aprovisionamiento de recursos
  • Una implementación de punto de conexión HTTP específica del lenguaje que enruta las actividades entrantes a un adaptador.
  • Un objeto de adaptador
  • Un objeto de bot

La principal diferencia entre los distintos tipos de plantilla se encuentra en el objeto de bot. Las plantillas son:

  • Bot vacío
    • Incluye un controlador de actividad que da la bienvenida a un usuario a la conversación mediante el envío de un mensaje "hola mundo" en el primer turno de la conversación.
  • Bot de eco
    • Usa un controlador de actividad para dar la bienvenida a los usuarios y devolver la entrada del usuario.
  • Bot principal
    • Reúne muchas características del SDK y muestra los procedimientos recomendados para un bot.
    • Usa un controlador de actividad para dar la bienvenida a los usuarios.
    • Usa un cuadro de diálogo de componente y diálogos secundarios para administrar la conversación.
    • Los cuadros de diálogo usan Language Understanding (LUIS) y las características de QnA Maker.

Nota

Azure QnA Maker se retirará el 31 de marzo de 2025. A partir del 1 de octubre de 2022, no podrá crear nuevos recursos ni bases de conocimiento de QnA Maker. Ya hay disponible una versión más reciente de la funcionalidad de preguntas y respuestas como parte de Azure Cognitive Service for Language.

La respuesta a preguntas personalizada, una característica de Azure Cognitive Service for Language, es la versión actualizada del servicio QnA Maker. Para más información sobre la compatibilidad con preguntas y respuestas en Bot Framework SDK, consulte Reconocimiento del lenguaje natural.

Información adicional

Administración de recursos de bot

Deberá administrar los recursos del bot, como su identificador de aplicación y contraseña, así como la información de los servicios conectados. Al implementar el bot, necesitará acceso seguro a esta información. Para evitar la complejidad, la mayoría de los artículos de Bot Framework SDK no describen cómo administrar esta información.

Adaptadores de canal

El SDK también le permite usar adaptadores de canal, en los que el propio adaptador realiza además las tareas que Bot Connector Service haría normalmente para un canal.

El SDK proporciona algunos adaptadores de canal en algunos idiomas. Hay más adaptadores de canal disponibles a través de los repositorios botkit y community. Para más información, consulte la tabla de canales y adaptadores del repositorio de Bot Framework SDK.

Api REST del conector de bots

Bot Framework SDK se ajusta y se basa en la API REST de Bot Connector. Si desea comprender las solicitudes HTTP subyacentes que admiten el SDK, consulte los artículos autenticación del conector y asociados. Las actividades que envía un bot y recibe se ajustan al esquema de actividad de Bot Framework.

Pasos siguientes