Controladores de actividad de bots
Este documento se basa en el artículo sobre cómo funcionan los bots de la documentación de Bot Framework principal. La principal diferencia entre los bots desarrollados para Microsoft Teams y el Bot Framework principal se encuentra en las características proporcionadas en Teams.
Se usa un controlador de actividad para organizar la lógica conversacional del bot. Las actividades se controlan de dos maneras mediante controladores de actividad de Teams y la lógica de bot. El controlador de actividad de Teams agrega compatibilidad con eventos e interacciones específicos de Teams. El objeto del 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 desde el adaptador del bot.
Controladores de actividades de Teams
El controlador de actividad de Teams se deriva del controlador de actividad de Microsoft Bot Framework. Enruta todas las actividades Teams antes de permitir que se controlen las actividades específicas que no sean de Teams.
Cuando un bot de Teams recibe una actividad, se enruta a los controladores de actividad. Todas las actividades se enrutan a través de un controlador base denominado controlador de turnos. El controlador de turnos llama al controlador de actividad necesario para controlar el tipo de actividad que se recibió. El bot de Teams se deriva de la clase TeamsActivityHandler
, que se deriva de la clase ActivityHandler
de Bot Framework.
Nota:
Si la actividad del 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 tanto, verá solicitudes duplicadas en el bot.
Los bots se crean con Bot Framework. Si los bots reciben una actividad de mensaje, el controlador de turnos recibe una notificación de esa actividad entrante. A continuación, el controlador de turnos envía la actividad entrante al controlador de actividad OnMessageActivityAsync
. En Teams, esta funcionalidad sigue siendo la misma. Si el bot recibe una actividad de actualización de conversación, el controlador de turnos recibe una notificación de esa actividad entrante y la envía a OnConversationUpdateActivityAsync
. El controlador de actividad de Teams comprueba primero si hay eventos específicos de Teams. Si no se encuentra ningún evento, los pasa al controlador de actividad de Bot Framework.
En la clase del controlador de actividad de Teams, hay dos controladores de actividad de Teams principales, OnConversationUpdateActivityAsync
y OnInvokeActivityAsync
.
OnConversationUpdateActivityAsync
enruta todas las actividades de actualización de conversación y 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.
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
}
Lógica del bot
La lógica del bot procesa las actividades entrantes desde 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 | 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 | 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 | 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 la actividad de acción Grupos de Microsoft 365, 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.
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 |
Paso siguiente
Vea también
- Crear bots para Teams
- SDK para cliente de JavaScript en Teams
- Esquema del manifiesto de la aplicación de Teams
- Referencia de API para el servicio Bot Framework Connector
- Obtención del contexto específico de Teams para un bot
- Mensajes en conversaciones de bot
- Cuadros de diálogo de componente y cascada