Resumen de capacidades
SE APLICA A: SDK v4
Puede ampliar un bot mediante un bot de aptitud. Una aptitud la pueden consumir varios bots, lo que facilita su reutilización. Además, esto permite crear un bot orientado al usuario y ampliarlo usando sus propios conocimientos o los de terceros.
- Una aptitud es un bot que puede realizar un conjunto de tareas para otro bot: un bot puede ser una aptitud y un bot orientado al usuario.
- Un consumidor de aptitudes es un bot que puede llamar a una o más aptitudes. Un consumidor de aptitudes accesible para el usuario también se denomina bot raíz.
- Un manifiesto de aptitud es un archivo JSON que describe las actividades que puede realizar la aptitud, sus parámetros de entrada y salida y sus puntos de conexión.
- Los desarrolladores que no tienen acceso al código fuente de la aptitud pueden usar la información del manifiesto para diseñar su consumidor de aptitudes.
- El esquema del manifiesto de aptitud es un archivo JSON que describe el esquema del manifiesto de aptitud.
- Vea cómo implementar una aptitud y cómo escribir un manifiesto de aptitud para manifiestos de aptitud de ejemplo.
En otras palabras, el usuario interactúa directamente con el bot raíz y el bot raíz delega parte de su lógica de conversación en una aptitud.
La característica de aptitudes está diseñada de la siguiente manera:
- Las aptitudes y los consumidores se comunican a través de HTTP mediante el protocolo de Bot Framework.
- Un consumidor de aptitudes puede consumir varias aptitudes.
- Un consumidor de aptitudes puede consumir una aptitud independientemente del lenguaje utilizado para implementar la aptitud. Por ejemplo, un bot de C# puede consumir una aptitud implementada mediante JavaScript.
- Una aptitud también puede ser un consumidor de aptitudes y llamar a otras aptitudes.
- Las aptitudes admiten la autenticación de usuarios; sin embargo, esta es local para la aptitud y no se puede transferir a otro bot.
- Las aptitudes pueden funcionar con el adaptador de Bot Framework y con adaptadores personalizados.
En este diagrama se muestran algunas de las permutaciones posibles.
Arquitectura conceptual
Una aptitud y el consumidor de aptitudes son bots independientes y se publican de forma independiente.
- Un consumidor de aptitudes requiere lógica agregada para administrar una aptitud, por ejemplo, cuándo llamar a la aptitud o cancelarla. Además de los objetos de adaptador y bot habituales, el consumidor incluye algunos objetos relacionados con la aptitud, que se usan para intercambiar actividades con la aptitud. Un consumidor de aptitudes implementa al menos dos puntos de conexión HTTP:
- Un punto de conexión de mensajería recibe actividades del usuario o canal. Este es el punto de conexión de mensajería habitual que implementan todos los bots.
- Un punto de conexión de host de aptitudes para recibir actividades de una aptitud. Esto actúa como una dirección URL de devolución de llamada, la dirección URL del servicio a la que responde la aptitud. El consumidor de aptitudes necesita emparejar el código que recibe la solicitud del método HTTP de la aptitud con un controlador de aptitudes.
- Una aptitud requiere una lógica adicional para enviar una actividad
endOfConversation
cuando se completa, de modo que el consumidor de aptitudes sepa cuándo tiene que dejar de reenviar actividades a la aptitud.
En este diagrama se describe el flujo de actividades desde el usuario al bot raíz y a una aptitud, y viceversa.
- El adaptador del bot raíz recibe actividades del usuario y las reenvía al controlador de actividades del bot raíz. (Las actividades del usuario se reciben en el punto de conexión de mensajería del bot raíz).
- El bot raíz usa un cliente HTTP de aptitudes para enviar una actividad a la aptitud. El cliente obtiene la información sobre la conversación entre la aptitud y el consumidor de una definición de aptitud y de un generador de identificadores de conversación de aptitudes. Esto incluye la dirección URL del servicio que la aptitud usará para responder a la actividad.
- El adaptador de la aptitud recibe actividades del consumidor de aptitudes y las reenvía al controlador de actividades de la aptitud. (Las actividades del consumidor se reciben en el punto de conexión de mensajería del bot de aptitudes).
- Cuando la aptitud responde, el controlador de aptitudes del bot raíz recibe la actividad. Obtiene la información sobre la conversación entre el usuario y el bot raíz del generador de identificadores de conversación de aptitudes. A continuación, reenvía la actividad al adaptador del bot raíz. (Las actividades de la aptitud se reciben en el punto de conexión del host de aptitudes del bot raíz).
- El adaptador del bot raíz genera internamente un mensaje activo para reanudar la conversación con el usuario.
- El adaptador del bot raíz envía al usuario todos los mensajes de la aptitud.
Estos objetos ayudan a administrar las aptitudes y a enrutar el tráfico de las aptitudes:
- Una aptitud de Bot Framework describe la información de enrutamiento de una aptitud y se puede leer del archivo de configuración del consumidor de aptitudes.
- Un cliente HTTP de aptitud envía actividades a una aptitud.
- Un controlador de aptitudes recibe actividades de una aptitud.
- El generador de identificadores de conversación de aptitudes traduce de la referencia de la conversación entre el bot raíz y el usuario a la referencia de la conversación entre el bot raíz y la aptitud, y viceversa.
- El servicio Bot Connector proporciona autenticación de canal y de bot a bot. Con un objeto de configuración de autenticación, puede agregar la validación de notificaciones a una aptitud o consumidor de aptitudes para limitar qué aplicaciones o usuarios tienen acceso.
Los objetos de cliente de aptitudes y de controlador de aptitudes usan el generador de identificadores de conversación para traducir de la conversación que el bot raíz usa para interactuar con el usuario a la conversación que el bot raíz usa para interactuar con la aptitud, y viceversa.
Manifiestos de aptitud
Un manifiesto de aptitud es un archivo JSON que describe las actividades que puede realizar la aptitud, sus parámetros de entrada y salida y sus puntos de conexión de la aptitud y los modelos de envío de la aptitud.
Para obtener información sobre el esquema del manifiesto de habilidades, consulte cómo escribir un manifiesto de habilidades.
Comunicación de bot a bot
Es importante comprender determinados aspectos de este diseño, independientemente del bot que esté diseñando.
Acciones de capacidad
Algunas aptitudes pueden realizar varias tareas o acciones. Por ejemplo, una aptitud de tareas pendientes podría permitir la creación, actualización, visualización y eliminación de actividades a las que puede acceder como conversaciones discretas.
- Vea cómo implementar una aptitud para obtener una habilidad sencilla que implementa una acción.
- Vea cómo usar diálogos dentro de una aptitud para una aptitud que use diálogos para implementar varias acciones.
Referencias de conversación
La conversación entre el bot raíz y el usuario es diferente de la conversación entre el bot raíz y la aptitud.
El generador de identificadores de conversación ayuda a administrar el tráfico entre un consumidor de aptitudes y una aptitud. El generador traduce del identificador de la conversación que el bot raíz tiene con el usuario a la conversación que tiene con la aptitud, y viceversa. En otras palabras, genera un identificador de conversación para su uso entre el bot raíz y la aptitud, y recupera el identificador de la conversación entre el bot raíz y el usuario original a partir del identificador de la conversación entre el bot raíz y la aptitud.
Coordinación entre servidores
Los bots raíz y de aptitudes se comunican mediante HTTP. Por lo tanto, la instancia del bot raíz que recibe una actividad de una aptitud podría no ser la misma instancia que envió la actividad de inicio. En otras palabras, las dos solicitudes las han podido controlar distintos servidores.
- Guarde siempre el estado del consumidor de aptitudes antes de reenviar una actividad a una aptitud. Esto garantiza que la instancia que recibe el tráfico de una aptitud pueda continuar donde los dejó la instancia anterior antes de llamar a la aptitud.
- Cuando el controlador de aptitudes recibe una actividad de una aptitud, la convierte a un formato adecuado para el consumidor de aptitudes y lo reenvía al adaptador del consumidor.
Estado de la aptitud y del consumidor de aptitudes
La aptitud y el consumidor de aptitudes administran su propio estado por separado. Sin embargo, el consumidor crea el identificador de conversación que usa para comunicarse con la aptitud. Esto puede tener un efecto en el estado de la conversación de la aptitud.
Importante
Tal y como se indicó anteriormente, cuando el consumidor de aptitudes delega una actividad de usuario en una aptitud, la instancia del consumidor que recibe la respuesta a la aptitud podría ser diferente. El consumidor siempre debe guardar el estado de la conversación inmediatamente antes de reenviar una actividad a una aptitud.
Autenticación de bot a bot
No necesita un identificador de aplicación y una contraseña para probar una aptitud y un consumidor de aptitudes localmente en Bot Framework Emulator. Todavía se requiere una suscripción de Azure para implementar la aptitud en Azure.
El servicio Bot Connector administra la autenticación en el nivel de servicio. Este servicio usa tokens de portador e identificadores de aplicación de bot para comprobar la identidad de cada bot. Bot Framework usa un objeto de configuración de la autenticación para validar el encabezado de autenticación de las solicitudes entrantes.
Importante
Esto requiere que todos los bots implementados (el consumidor de aptitudes y las aptitudes que consume) tengan credenciales de aplicación válidas.
Validación de notificaciones
Debe agregar un validador de notificaciones a la configuración de autenticación. Las notificaciones se evalúan después del encabezado de autenticación. Produzca un error o una excepción en el código de validación para rechazar la solicitud.
Nota:
El bot realiza la validación de notificaciones si tiene un identificador de aplicación y una contraseña; De lo contrario, no se realiza la validación de notificaciones.
Hay varias razones por las que podría rechazar una solicitud autenticada de otro modo:
- Si el consumidor de aptitudes debe aceptar el tráfico únicamente de las aptitudes con las que puede haber iniciado una conversación.
- Si una aptitud es parte de un servicio de pago y los usuarios que no están en la base de datos no deben tener acceso.
- Si desea restringir el acceso a la aptitud a determinados consumidores de aptitudes.
Importante
Si no proporciona un validador de notificaciones, el bot generará un error o una excepción al recibir una actividad de otro bot, tanto si el bot es una aptitud como un consumidor de aptitudes.
Depuración de conversaciones de aptitudes
Dado que se autentica el tráfico entre aptitudes y consumidores de aptitudes, hay pasos adicionales al depurar estos bots.
- El consumidor de aptitudes y todas las aptitudes que consume, directa o indirectamente, deben ejecutarse.
- Si los bots se ejecutan localmente y si alguno de los bots tiene un identificador de aplicación y una contraseña, todos los bots deben tener identificadores y contraseñas válidos.
- Si todos los bots están implementados, consulte cómo depurar un bot desde cualquier canal mediante devtunnel.
- Si algunos de los bots se ejecutan localmente y algunos se implementan, consulte cómo depurar una aptitud o consumidor de aptitudes.
De lo contrario, puede depurar un consumidor de aptitudes o una aptitud como depurar otros bots. Para obtener más información, consulte Depuración de un bot y Depuración con Bot Framework Emulator.
Información adicional
Desde la perspectiva del usuario, están interactuando con el bot raíz. Desde la perspectiva de la aptitud, el consumidor de aptitudes es el canal por el que se comunica con el usuario.
- Para más información acerca de los consumidores de aptitudes, consulte la documentación acerca de los consumidores de aptitudes.