Descripción de los conceptos del bot
Las interacciones de un bot pueden usar texto, voz, imágenes o vídeo. Procesa la entrada del usuario para comprender su solicitud y evalúa la entrada para realizar las tareas pertinentes. Un bot puede solicitar información o habilitar el acceso a los servicios y responde al usuario.
Ámbitos de bot
Los bots en Microsoft Teams pueden formar parte de una conversación uno a uno, de un chat de grupo o de un canal de un equipo. Cada ámbito proporciona oportunidades y dificultades únicas para su bot de conversación.
En un canal | En un chat de grupo | En un chat individual |
---|---|---|
Alcance masivo | Menos miembros | Manera tradicional |
Interacciones individuales concisas | @mention a bot | Bots de Q&A |
@mention a bot | Similar al canal | Bots que cuentan chistes y toman notas |
En un canal
Los canales contienen conversaciones en subprocesos entre varias personas, incluso hasta 2000. Esto proporciona un alcance potencialmente masivo al bot, pero las interacciones individuales deben ser concretas. Las interacciones tradicionales de varios turnos no funcionan. En su lugar, debe buscar usar tarjetas o diálogos interactivos (denominados módulos de tareas en TeamsJS v1.x) o mover la conversación a una conversación uno a uno para recopilar mucha información. El bot solo tiene acceso a los mensajes en los que es @mentioned
. Puede recuperar mensajes adicionales de la conversación con Microsoft Graph y los permisos a nivel de organización.
Los bots funcionan mejor en un canal en los siguientes casos:
- Notificaciones, especialmente si se proporciona una tarjeta interactiva para que los usuarios puedan obtener información adicional.
- Escenarios de comentarios, como sondeos y encuestas.
- El ciclo de solicitud o respuesta única resuelve las interacciones y los resultados son útiles para varios miembros de la conversación.
- Bots sociales o divertidos, donde hay imágenes de gatos geniales, se elige aleatoriamente un ganador, etc.
En un chat de grupo
Los chats de grupo son conversaciones entre tres o más personas que no se desarrollan en hilos. Tienden a tener menos miembros que un canal y son más transitorios. De forma similar a un canal, el bot solo tiene acceso a los mensajes donde está @mentioned
directamente.
Los bots que funcionan mejor en un canal también funcionan mejor en un chat de grupo.
En un chat individual
Esta es la manera tradicional en la que un bot de conversación interactúa con un usuario. Algunos ejemplos de bots conversacionales individuales son:
- Bots de Q&A
- bots que inician flujos de trabajo en otros sistemas.
- bots que cuentan chistes.
- bots que toman notas. Antes de crear bots de chat uno a uno, considere si una interfaz basada en conversación es la mejor manera de presentar la funcionalidad.
Controlador de actividad y lógica de bot
Para crear una aplicación de bot que satisfaga sus necesidades, es esencial comprender el controlador de actividad y la lógica del bot de Microsoft Teams. Estos dos componentes clave funcionan juntos para organizar la lógica conversacional.
Controlador de actividad de Teams: los controladores de actividad de Teams amplían la funcionalidad de los bots estándar agregando compatibilidad con eventos e interacciones específicos de Teams. Estos eventos pueden incluir la creación de canales, adiciones de miembros del equipo y otras acciones exclusivas del entorno de Teams. Mediante el uso de controladores de actividad de Teams, los bots pueden proporcionar una experiencia de usuario más integrada y fluida dentro de la plataforma teams.
Lógica del bot: el objeto de bot, que contiene la lógica conversacional del bot, es responsable de tomar decisiones en función de la entrada del usuario. Expone un controlador de turnos, que es el método que acepta actividades entrantes desde el adaptador del bot. La lógica del bot garantiza que cada turno de la conversación se controle correctamente, lo que contribuye a la coherencia y eficacia general del bot.
Estos dos componentes funcionan juntos para crear una experiencia conversacional atractiva. El controlador de actividad procesa lo que dice el usuario, mientras que la lógica del bot determina la mejor respuesta. Juntos, habilitan:
- Descripción del contexto de la conversación
- Personalización de las interacciones
- Recuperación de información de forma eficaz
- Mantener un flujo conversacional adaptable
Al comprender el controlador de actividad y la lógica del bot, puede diseñar e implementar soluciones de inteligencia artificial conversacional inteligentes y fáciles de usar y bots convencionales.
Controlador de actividad de Teams
El controlador de actividad es el núcleo de la funcionalidad de un bot, la administración y el procesamiento de las interacciones del usuario. Se basa en el controlador de actividad del Microsoft Bot Framework y enruta todas las actividades de Teams antes de controlar las que no sean específicas de Teams. Actúa como intermediario entre la entrada del usuario y la respuesta del bot:
- Recibe mensajes entrantes.
- Recupera los datos clave de la entrada del usuario.
- Identifica la intención del usuario mediante el procesamiento de lenguaje natural (NLP).
- Mantiene el contexto y el estado de la conversación.
- Genera respuestas basadas en la entrada y la intención del usuario.
El controlador de actividad mejora la experiencia del usuario, la eficacia, la precisión, la escalabilidad y la flexibilidad.
Cuando un bot de Teams obtiene una actividad, se enruta a través de los controladores de actividad. Todas las actividades pasan por un controlador base denominado controlador de turnos, que luego llama al controlador de actividad adecuado. El bot de Teams se deriva de la TeamsActivityHandler
clase , que procede de la clase de ActivityHandler
Bot Framework.
Nota:
Si una actividad de bot tarda más de 15 segundos en procesarse, Teams envía una solicitud de reintento al punto de conexión del bot, por lo que es posible que vea solicitudes duplicadas.
Los bots se crean mediante Bot Framework. Cuando un bot recibe un mensaje, se notifica al controlador de turnos y se lo envía al OnMessageActivityAsync
controlador. Esto funciona de la misma manera en Teams. Si el bot obtiene una actualización de conversación, el controlador de turnos la envía a OnConversationUpdateActivityAsync
. El controlador de actividad de Teams busca primero cualquier evento específico de Teams. Si no hay ninguno, los pasa al controlador de actividad de Bot Framework.
En la clase de controlador de actividad de Teams, hay dos controladores de actividad de Teams principales:
-
OnConversationUpdateActivityAsync
enruta todas las actividades de actualización de conversación. -
OnInvokeActivityAsync
enruta todas las actividades de invocación de Teams.
Para implementar la lógica para los controlares de actividades específicas de Teams, debe invalidar los métodos en el bot, como se muestra en la sección Lógica del bot. No hay ninguna implementación base para estos controladores. Por lo tanto, agregue la lógica que desee en la invalidación.
Para configurar la lógica para controladores de actividad específicos de Teams, debe invalidar los métodos del bot, como se muestra en la sección lógica del bot . No hay ninguna implementación predeterminada para estos controladores, por lo que solo tiene que agregar la lógica que desee en la invalidación.
Fragmentos de código para controladores de actividad de Teams:
OnTeamsChannelCreatedAsync
protected override Task OnTeamsChannelCreatedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
// Code logic here
}
OnTeamsChannelDeletedAsync
protected override Task OnTeamsChannelDeletedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
// Code logic here
}
OnTeamsChannelRenamedAsync
protected override Task OnTeamsChannelRenamedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
// Code logic here
}
OnTeamsTeamRenamedAsync
protected override Task OnTeamsTeamRenamedAsync(TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
// Code logic here
}
OnTeamsMembersAddedAsync
protected override Task OnTeamsMembersAddedAsync(IList<TeamsChannelAccount> teamsMembersAdded, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
// Code logic here
}
OnTeamsMembersRemovedAsync
protected override Task OnTeamsMembersRemovedAsync(IList<TeamsChannelAccount> teamsMembersRemoved, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken);
{
// Code logic here
}
OnTeamsMessageEditAsync
protected override async Task OnTeamsMessageEditAsync(ITurnContext<IMessageUpdateActivity> turnContext, CancellationToken cancellationToken)
{
// Code logic here
}
OnTeamsMessageUndeleteAsync
protected override async Task OnTeamsMessageUndeleteAsync(ITurnContext<IMessageUpdateActivity> turnContext, CancellationToken cancellationToken)
{
// Code logic here
}
OnTeamsMessageSoftDeleteAsync
protected override async Task OnTeamsMessageSoftDeleteAsync(ITurnContext<IMessageDeleteActivity> turnContext, CancellationToken cancellationToken)
{
// Code logic here
}
Ejemplo de controlador de actividad de bot
El código siguiente proporciona un ejemplo de una actividad de bot para un ámbito de equipo de canal:
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
var mention = new Mention
{
Mentioned = turnContext.Activity.From,
// EncodeName: Converts the name to a valid XML name.
Text = $"<at>{XmlConvert.EncodeName(turnContext.Activity.From.Name)}</at>",
};
// MessageFactory.Text(): Specifies the type of text data in a message attachment.
var replyActivity = MessageFactory.Text($"Hello {mention.Text}.");
replyActivity.Entities = new List<Entity> { mention };
// Sends a message activity to the sender of the incoming activity.
await turnContext.SendActivityAsync(replyActivity, cancellationToken);
}
El código siguiente proporciona un ejemplo de actividad de bot para un chat individual:
// Handle message activity
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
// Remove recipient mention text from Text property.
// Use with caution because this function is altering the text on the Activity.
turnContext.Activity.RemoveRecipientMention();
var text = turnContext.Activity.Text.Trim().ToLower();
// Sends a message activity to the sender of the incoming activity.
await turnContext.SendActivityAsync(MessageFactory.Text($"Your message is {text}."), cancellationToken);
}
Lógica del bot
La lógica del bot incorpora las reglas fundamentales y los marcos de toma de decisiones que dictan las acciones e interacciones de un bot. Describe cómo interpreta el bot la entrada del usuario, formula respuestas y participa en conversaciones.
En Teams, la lógica del bot procesa las actividades entrantes de uno o varios de los canales del bot y, en respuesta, genera actividades salientes. Sigue siendo cierto en el caso de los bots derivados de la clase de controlador de actividad de Teams, que primero comprueba las actividades de Teams. Después de comprobar si hay actividades de Teams, pasa todas las demás actividades al controlador de actividad de Bot Framework.
Controladores del Bot Framework principal
Nota:
- Excepto para las actividades de los miembros agregados y quitados, todos los controladores de actividad descritos en esta sección siguen funcionando como lo hacen con un bot que no es de Teams.
- El método
onInstallationUpdateActivityAsync()
se usa para obtener la configuración regional de Teams a la vez que se agrega el bot a Teams.
Los controladores de actividad son diferentes en el contexto de un equipo, ya que se agrega un nuevo miembro al equipo en lugar de una conversación.
La lista de controladores definidos en ActivityHandler
incluye los siguientes eventos:
Evento | Controlador o método del SDK | Descripción |
---|---|---|
Cualquier tipo de actividad recibida | OnTurnAsync() |
Este método llama a uno de los otros controladores, en función del tipo de actividad recibida. |
Actividad de mensaje recibida | OnMessageActivityAsync() |
Puede invalidar este método para controlar una Message actividad. |
Actividad de actualización de mensajes recibida | OnMessageUpdateActivityAsync() |
Puede invalidar este método para controlar una actividad de actualización de mensajes. |
Actividad de eliminación de mensajes recibida | OnMessageDeleteActivityAsync() |
Puede invalidar este método para controlar una actividad de eliminación de mensajes. |
Actividad de actualización de conversación recibida | OnConversationUpdateActivityAsync() |
Este método llama a un controlador si miembros distintos del bot se unieron o abandonaron la conversación, en una actividad ConversationUpdate . |
Miembros que no son bots se unieron a la conversación | OnMembersAddedAsync() |
Este método se puede invalidar para controlar los miembros que se unen a una conversación. |
Miembros que no son bots abandonaron la conversación | OnMembersRemovedAsync() |
Este método se puede invalidar para controlar los miembros que salen de una conversación. |
Actividad de evento recibida | OnEventActivityAsync() |
Este método llama a un controlador específico del tipo de evento, en una actividad Event . |
Actividad de evento de respuesta de token recibida | OnTokenResponseEventAsync() |
Este método se puede invalidar para controlar los eventos de respuesta de token. |
Actividad de evento que no es de respuesta de token recibida | OnEventAsync() |
Este método se puede invalidar para controlar otros tipos de eventos. |
Otro tipo de actividad recibido | OnUnrecognizedActivityTypeAsync() |
Este método se puede invalidar para controlar cualquier tipo de actividad que no está controlada. |
Controladores de actividades específicas de Teams
TeamsActivityHandler
amplía la lista de controladores en la sección principal de controladores de Bot Framework para incluir los siguientes eventos:
Evento | Controlador o método del SDK | Descripción |
---|---|---|
channelCreated |
OnTeamsChannelCreatedAsync() |
Este método se puede invalidar para controlar un canal de Teams que se está creando. Para obtener más información, vea Canal creado en Eventos de actualización de conversación. |
channelDeleted |
OnTeamsChannelDeletedAsync() |
Este método se puede invalidar para controlar un canal de Teams que se va a eliminar. Para obtener más información, vea Canal eliminado en Eventos de actualización de conversación. |
channelRenamed |
OnTeamsChannelRenamedAsync() |
Este método se puede invalidar para controlar un canal de Teams al que se le está cambiando el nombre. Para obtener más información, consulte el nombre del canal en Eventos de actualización de conversación. |
teamRenamed |
OnTeamsTeamRenamedAsync() |
return Task.CompletedTask; Este método se puede invalidar para controlar un equipo de Teams al que se le va a cambiar el nombre. Para obtener más información, consulte cambio de nombre del equipo en Eventos de actualización de conversación. |
MembersAdded |
OnTeamsMembersAddedAsync() |
Este método llama al método OnMembersAddedAsync en ActivityHandler . El método se puede invalidar para controlar los miembros que se unen a un equipo. Para obtener más información, consulte los miembros del equipo agregados en Eventos de actualización de conversación. |
MembersRemoved |
OnTeamsMembersRemovedAsync() |
Este método llama al método OnMembersRemovedAsync en ActivityHandler . El método se puede invalidar para controlar los miembros que abandonan un equipo. Para obtener más información, vea Miembros del equipo eliminados en Eventos de actualización de conversaciones. |
messageEdit |
OnTeamsMessageEditAsync() |
Puede invalidar este método para controlar un evento de edición de mensajes de Teams. |
messageUndelete |
OnTeamsMessageUndeleteAsync() |
Puede invalidar este método para controlar un evento de recuperación de mensajes de Teams. |
messageSoftDelete |
OnTeamsMessageSoftDeleteAsync() |
Puede invalidar este método para controlar un evento de eliminación temporal de mensajes de Teams. |
Actividades de invocación de Teams
La lista de controladores de actividad de Teams a los que se llama desde el OnInvokeActivityAsync
controlador de actividad de Teams incluye los siguientes tipos de invocación:
Tipos de invocación | Controlador o método del SDK | Descripción |
---|---|---|
CardAction.Invoke |
OnTeamsCardActionInvokeAsync() |
Cuando el conector recibe una actividad de invocación de acción de tarjeta, se invoca este método. |
fileConsent/invoke | OnTeamsFileConsentAcceptAsync() |
Cuando un usuario acepta una tarjeta de consentimiento de archivo, se invoca este método. |
fileConsent/invoke | OnTeamsFileConsentAsync() |
Cuando el conector recibe una actividad de tarjeta de consentimiento de archivo, se invoca este método. |
fileConsent/invoke | OnTeamsFileConsentDeclineAsync() |
Cuando un usuario rechaza una tarjeta de consentimiento de archivo, se invoca este método. |
actionableMessage/executeAction | OnTeamsO365ConnectorCardActionAsync() |
Cuando el conector recibe una tarjeta de conector para Grupos de Microsoft 365 actividad de acción, se invoca este método. |
signin/verifyState | OnTeamsSigninVerifyStateAsync() |
Cuando el conector recibe una signIn actividad de estado de comprobación, se invoca este método. |
task/fetch | OnTeamsTaskModuleFetchAsync() |
Puede invalidar este método en una clase derivada para proporcionar lógica cuando se captura un cuadro de diálogo (denominado módulo de tareas en TeamsJS v1.x). |
task/submit | OnTeamsTaskModuleSubmitAsync() |
Puede invalidar este método en una clase derivada para proporcionar lógica cuando se envía un cuadro de diálogo. |
Las actividades invoke enumeradas en esta sección son para bots conversacionales en Teams. El SDK de Bot Framework también admite la invocación de actividades específicas de las extensiones de mensaje. Para obtener más información, consulte ¿Qué son las extensiones de mensaje?
Ahora que se ha familiarizado con los controladores de actividad del bot, veamos cómo se comportan los bots de forma diferente en función de la conversación y de los mensajes que recibe o envía.
Recomendaciones
Un amplio diálogo entre el bot y el usuario es una manera lenta y compleja de completar una tarea. Un bot que admite comandos excesivos, especialmente una amplia gama de comandos, no es correcto o los usuarios no los ven de forma positiva.
Evitar experiencias de varios turnos en el chat Un cuadro de diálogo extenso requiere que el desarrollador mantenga el estado. Para salir de este estado, un usuario debe agotar el tiempo de espera o seleccionar Cancelar. Además, el proceso es tedioso. Por ejemplo, consulte el siguiente escenario de conversación:
USUARIO: Programe una reunión con Megan.
BOT: he encontrado 200 resultados, incluidos el nombre y el apellido.
USUARIO: Programe una reunión con Megan Bowen.
BOT: Ok, ¿a qué hora le gustaría reunirse con Megan Bowen?
USUARIO: 1:00 p.m.
BOT: ¿En qué día?
Compatibilidad con seis comandos o menos frecuentes Dado que solo hay seis comandos visibles en el menú del bot actual, es poco probable que se use nada más con cualquier frecuencia. Bots que profundizan en un área específica en lugar de tratar de ser un asistente de trabajo amplio y funcionan mejor.
Optimización del tamaño de la base de conocimiento para una interacción más rápida Una de las desventajas de los bots es que es difícil mantener una gran knowledge base de recuperación con respuestas no clasificadas. Los bots son más adecuados para interacciones breves y rápidas y no para examinar listas largas en busca de una respuesta.
Exploración de otras características del bot
Además de las características de bot convencionales, también puede explorar las características avanzadas disponibles en una aplicación de bot de Teams:
- Cambios en la API del bot de Teams para capturar miembros del equipo o chat.
- Llamadas y bots de reuniones en línea.
- Habilite el inicio de sesión único para la aplicación.
Ejemplo de código
Ejemplo de nombre | Descripción | .NET | Node.js | Python |
---|---|---|---|---|
Bot de conversación de Teams | Esta aplicación de ejemplo muestra cómo usar diferentes eventos de conversación de bot disponibles en Bot Framework v4. | View | View | View |
Ejemplos de bot | Conjunto de ejemplos de Bot Framework v4. | View | View | View |