Suscribirse a eventos de conversación

Importante

Los ejemplos de código de esta sección se basan en 4,6 y versiones posteriores del SDK de bot Framework. Si está buscando documentación para versiones anteriores, vea la sección SDK de bots-V3 en la carpeta recursos de la documentación.

Microsoft Teams envía notificaciones a su bot para eventos que ocurren en ámbitos donde el bot está activo. Puede capturar estos eventos en el código y realizar acciones en ellos, como los siguientes:

  • Desencadenar un mensaje de bienvenida cuando se agrega un bot a un equipo
  • Desencadenar un mensaje de bienvenida cuando se agrega o se quita un nuevo integrante del grupo
  • Desencadenar una notificación cuando se crea un canal, se le cambia el nombre o se elimina
  • Cuando un usuario le gusta un mensaje de bot?

Eventos de actualización de conversación

Un bot recibe un conversationUpdate evento cuando se ha agregado a una conversación, se han agregado o quitado otros miembros de una conversación, o bien se han cambiado los metadatos de la conversación.

El conversationUpdate evento se envía a su bot cuando recibe información sobre las actualizaciones de pertenencia para equipos en los que se ha agregado. También recibe una actualización cuando se ha agregado por primera vez específicamente para conversaciones personales.

En la siguiente tabla se muestra una lista de los eventos de actualización de conversación de Microsoft Teams, con vínculos a más detalles.

Acción emprendida EventType Método denominado Descripción Ámbito
canal creado channelCreated OnTeamsChannelCreatedAsync Se ha creado un canal Equipo
canal con nombre cambiado channelRenamed OnTeamsChannelRenamedAsync Se cambió el nombre de un canal Equipo
canal eliminado channelDeleted OnTeamsChannelDeletedAsync Se ha eliminado un canal Equipo
miembros del equipo agregados teamMemberAdded OnTeamsMembersAddedAsync Un miembro agregado al equipo Todo
miembros del equipo quitados teamMemberRemoved OnTeamsMembersRemovedAsync Se ha quitado un miembro del equipo & equipo de groupChat
nombre del equipo teamRenamed OnTeamsTeamRenamedAsync Se cambió el nombre de un equipo Equipo

Canal creado

El evento creado por el canal se envía a su bot cuando se crea un nuevo canal en un equipo en el que está instalado el bot.

protected override async Task OnTeamsChannelCreatedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    var heroCard = new HeroCard(text: $"{channelInfo.Name} is the Channel created");
    await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
}

Canal con nombre cambiado

El evento de canal cambiado de nombre se envía a su bot cuando se cambia el nombre de un canal en un equipo en el que está instalado el bot.

protected override async Task OnTeamsChannelRenamedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    var heroCard = new HeroCard(text: $"{channelInfo.Name} is the new Channel name");
    await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
}

Canal eliminado

El evento de canal eliminado se envía a su bot cuando se elimina un canal en un equipo en el que está instalado el bot.

protected override async Task OnTeamsChannelDeletedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    var heroCard = new HeroCard(text: $"{channelInfo.Name} is the Channel deleted");
    await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
}

Miembros del equipo agregados

El teamMemberAdded evento se envía a su bot la primera vez que se agrega a una conversación y cada vez que se agrega un nuevo usuario a un equipo o chat de grupo en el que se instala el bot. La información del usuario (ID) es única para el bot y puede almacenarse en caché para su uso en el servicio (por ejemplo, enviar un mensaje a un usuario específico).

protected override async Task OnTeamsMembersAddedAsync(IList<ChannelAccount> membersAdded, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    foreach (TeamsChannelAccount member in membersAdded)
    {
        if (member.Id == turnContext.Activity.Recipient.Id)
        {
            // Send a message to introduce the bot to the team
            var heroCard = new HeroCard(text: $"The {member.Name} bot has joined {teamInfo.Name}");
            await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
        }
        else
        {
            var heroCard = new HeroCard(text: $"{member.Name} joined {teamInfo.Name}");
            await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
        }
    }
}

Miembros del equipo quitados

El teamMemberRemoved evento se envía a su bot si se quita de un equipo y cada vez que se quita un usuario de un equipo del que es miembro el bot. Puede determinar si el nuevo miembro quitado era el propio bot o un usuario mirando en el Activity objeto del. turnContext Si el Id campo del MembersRemoved objeto es el mismo que el Id campo del Recipient objeto, el miembro quitado es el bot; de lo contrario, es un usuario. Normalmente Id , el bot será:28:<MicrosoftAppId>

protected override async Task OnTeamsMembersRemovedAsync(IList<ChannelAccount> membersRemoved, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    foreach (TeamsChannelAccount member in membersRemoved)
    {
        if (member.Id == turnContext.Activity.Recipient.Id)
        {
            // The bot was removed
            // You should clear any cached data you have for this team
        }
        else
        {
            var heroCard = new HeroCard(text: $"{member.Name} was removed from {teamInfo.Name}");
            await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
        }
    }
}

Nombre del equipo

El bot recibirá una notificación cuando se haya cambiado el nombre al equipo en el que se encuentra. Recibe un conversationUpdate evento con eventType.teamRenamed en el channelData objeto.

protected override async Task OnTeamsTeamRenamedAsync(TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    var heroCard = new HeroCard(text: $"{teamInfo.Name} is the new Team name");
    await turnContext.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()), cancellationToken);
}

Eventos de reacción del mensaje

El messageReaction evento se envía cuando un usuario agrega o quita reacciones de un mensaje enviado por el bot. El replyToId contiene el identificador del mensaje específico y el Type es el tipo de reacción en formato de texto. Entre los tipos de reacciones se incluyen: "enfadado", "corazón", "Laugh", "like", "triste", "sorprenda". Este evento no contiene el contenido del mensaje original, por lo que, si es importante procesar las reacciones a los mensajes para el bot, deberá almacenarlos cuando los envíe.

EventType Objeto payload Descripción Ámbito
messageReaction reactionsAdded Mensaje de reacción a bot Todo
messageReaction reactionsRemoved Se ha eliminado la reacción del mensaje de bot Todo

Reacciones a un mensaje de bot

protected override async Task OnReactionsAddedAsync(IList<MessageReaction> messageReactions, ITurnContext<IMessageReactionActivity> turnContext, CancellationToken cancellationToken)
{
    foreach (var reaction in messageReactions)
    {
      var newReaction = $"You reacted with '{reaction.Type}' to the following message: '{turnContext.Activity.ReplyToId}'";
      var replyActivity = MessageFactory.Text(newReaction);
      var resourceResponse = await turnContext.SendActivityAsync(replyActivity, cancellationToken);
    }
}

Reacciones eliminadas del mensaje de bot

protected override async Task OnReactionsRemovedAsync(IList<MessageReaction> messageReactions, ITurnContext<IMessageReactionActivity> turnContext, CancellationToken cancellationToken)
{
    foreach (var reaction in messageReactions)
    {
      var newReaction = $"You removed the reaction '{reaction.Type}' from the following message: '{turnContext.Activity.ReplyToId}'";
      var replyActivity = MessageFactory.Text(newReaction);
      var resourceResponse = await turnContext.SendActivityAsync(replyActivity, cancellationToken);
    }
}