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 al bot para eventos que se suceden en ámbitos donde el bot está activo. Puedes capturar estos eventos en el código y tomar medidas en ellos, como los siguientes:

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

Eventos de actualización de conversación

Importante

Se pueden agregar eventos nuevos en cualquier momento y el bot empezará a recibirlos. Debe diseñar la posibilidad de recibir eventos inesperados. Si usa el SDK de Bot Framework, el bot responderá automáticamente con un a cualquier evento 200 - OK que no elija controlar.

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

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

En la tabla siguiente se muestra una lista de eventos de actualización de conversaciones de Teams, con vínculos para obtener más detalles.

Acción realizada EventType Método llamado Description Ámbito
canal creado channelCreated OnTeamsChannelCreatedAsync Se creó un canal Equipo
se cambió el nombre del canal channelRenamed OnTeamsChannelRenamedAsync Se cambió el nombre de un canal Equipo
canal eliminado channelDeleted OnTeamsChannelDeletedAsync Se eliminó un canal Equipo
canal restaurado channelRestored OnTeamsChannelRestoredAsync Se restauró un canal Equipo
miembros agregados membersAdded OnTeamsMembersAddedAsync Un miembro agregado Todo
miembros quitados membersRemoved OnTeamsMembersRemovedAsync Se quitó un miembro groupChat & team
se cambió el nombre del equipo teamRenamed OnTeamsTeamRenamedAsync Se cambió el nombre de un equipo Equipo
equipo archivado teamArchived OnTeamsTeamArchivedAsync Se archivó un equipo Equipo
equipo restaurado teamRestored OnTeamsTeamRestoredAsync Se cambió el nombre de un equipo Equipo

Canal creado

El evento de canal creado se envía al bot cada vez que 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);
}

Se cambió el nombre del canal

El evento de cambio de nombre de canal se envía al bot siempre que se cambie 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 eliminación de canal se envía al bot cada vez que 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);
}

Canal restaurado

El evento restaurado del canal se envía al bot cada vez que se restaura un canal que se eliminó anteriormente en un equipo en el que el bot ya está instalado.

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

Se agregaron miembros del equipo

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

protected override async Task OnTeamsMembersAddedAsync(IList<TeamsChannelAccount> teamsMembersAdded , TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    foreach (TeamsChannelAccount member in teamsMembersAdded)
    {
        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);
        }
    }
}

Se cambió el nombre del equipo

El bot recibe una notificación cuando se ha cambiado el nombre del equipo en el que se encuentra. Recibe un conversationUpdate evento con en el eventType.teamRenamed 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);
}

Equipo archivado

El bot recibe una notificación cuando se archiva el equipo en el que está instalado. Recibe un conversationUpdate evento con en el eventType.teamarchived channelData objeto.

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

Equipo restaurado

El bot recibe una notificación cuando se restaura el equipo en el que está instalado. Recibe un conversationUpdate evento con en el eventType.teamrestored channelData objeto.

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

Eventos de reacción de mensajes

El evento se envía cuando un usuario agrega o quita las reacción messageReaction a un mensaje enviado por el bot. Contiene el identificador del mensaje específico y el tipo de reacción replyToId Type en formato de texto. Entre los tipos de reacción se incluyen: "resalte", "corazón", "desanualizado", "me gusta", "Lamentablemente", "sorpresa". Este evento no contiene el contenido del mensaje original, por lo que si el procesamiento de las reacción a los mensajes es importante para el bot, tendrá que almacenar los mensajes cuando los envíe.

EventType Payload (objeto) Description Ámbito
messageReaction reactionsAdded Reacción al mensaje de bot Todo
messageReaction reactionsRemoved Reacción eliminada del mensaje de bot Todo

Reacción 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);
    }
}

Respuestas 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);
    }
}

Ejemplos

Para obtener código de ejemplo que muestre los eventos de conversación de bots, vea:

Ejemplo de eventos de conversación de bots de Microsoft Teams