Inscrever-se para eventos de conversaSubscribe to conversation events

Importante

Os exemplos de código nesta seção são baseados em 4,6 e versões posteriores do SDK da estrutura de bot.The code samples in this section are based on 4.6 and later versions of the Bot Framework SDK. Se você estiver procurando por documentação para versões anteriores, consulte a seção do SDK bots-v3 na pasta recursos da documentação.If you're looking for documentation for earlier versions, see the Bots - v3 SDK section in the Resources folder of the documentation.

O Microsoft Teams envia notificações ao bot para eventos que ocorrem em escopos onde seu bot está ativo.Microsoft Teams sends notifications to your bot for events that happen in scopes where your bot is active. Você pode capturar esses eventos no seu código e tomar ações sobre eles, como o seguinte:You can capture these events in your code and take action on them, such as the following:

  • Acionar uma mensagem de boas-vindas quando seu bot é adicionado a uma equipeTrigger a welcome message when your bot is added to a team
  • Acionar uma mensagem de boas-vindas quando um novo membro da equipe for adicionado ou removidoTrigger a welcome message when a new team member is added or removed
  • Acionar uma notificação quando um canal é criado, renomeado ou excluídoTrigger a notification when a channel is created, renamed or deleted
  • Quando uma mensagem de bot é curtida por um usuárioWhen a bot message is liked by a user

Eventos de atualização de conversaConversation update events

Um bot recebe um conversationUpdate evento quando ele foi adicionado a uma conversa, outros membros foram adicionados ou removidos de uma conversa ou os metadados da conversa foram alterados.A bot receives a conversationUpdate event when it has been added to a conversation, other members have been added to or removed from a conversation, or conversation metadata has changed.

O conversationUpdate evento é enviado ao bot quando recebe informações sobre atualizações de associação para equipes em que foram adicionadas.The conversationUpdate event is sent to your bot when it receives information on membership updates for teams where it has been added. Ele também recebe uma atualização quando foi adicionado pela primeira vez especificamente para conversas pessoais.It also receives an update when it has been added for the first time specifically for personal conversations.

A tabela a seguir mostra uma lista de eventos de atualização de conversa do Teams, com links para mais detalhes.The following table shows a list of Teams conversation update events, with links to more details.

Ação tomadaAction Taken EventTypeEventType Método chamadoMethod Called DescriçãoDescription EscopoScope
canal criadochannel created channelCreatedchannelCreated OnTeamsChannelCreatedAsyncOnTeamsChannelCreatedAsync Um canal foi criadoA channel was created EquipeTeam
canal renomeadochannel renamed channelRenamedchannelRenamed OnTeamsChannelRenamedAsyncOnTeamsChannelRenamedAsync Um canal foi renomeadoA channel was renamed EquipeTeam
canal excluídochannel deleted channelDeletedchannelDeleted OnTeamsChannelDeletedAsyncOnTeamsChannelDeletedAsync Um canal foi excluídoA channel was deleted EquipeTeam
Membros da equipe adicionadosteam members added teamMemberAddedteamMemberAdded OnTeamsMembersAddedAsyncOnTeamsMembersAddedAsync Um membro adicionado ao TeamA Member added to team TodosAll
Membros da equipe removidosteam members removed teamMemberRemovedteamMemberRemoved OnTeamsMembersRemovedAsyncOnTeamsMembersRemovedAsync Um membro foi removido da equipeA Member was removed from team groupChat & equipegroupChat & team
equipe renomeadateam renamed teamRenamedteamRenamed OnTeamsTeamRenamedAsyncOnTeamsTeamRenamedAsync Uma equipe foi renomeadaA Team was renamed EquipeTeam

Canal criadoChannel created

O evento criado pelo canal é enviado ao seu bot sempre que um novo canal é criado em uma equipe na qual seu bot está instalado.The channel created event is sent to your bot whenever a new channel is created in a team your bot is installed in.

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 renomeadoChannel renamed

O evento renomeado de canal é enviado ao seu bot sempre que um canal é renomeado em uma equipe na qual seu bot está instalado.The channel renamed event is sent to your bot whenever a channel is renamed in a team your bot is installed in.

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 excluídoChannel Deleted

O evento Deleted do canal é enviado ao seu bot sempre que um canal é excluído em uma equipe em que seu bot está instalado.The channel deleted event is sent to your bot whenever a channel is deleted in a team your bot is installed in.

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

Membros da equipe adicionadosTeam members added

O teamMemberAdded evento é enviado ao bot pela primeira vez que é adicionado a uma conversa e toda vez que um novo usuário é adicionado a uma equipe ou bate-papo de grupo no qual o bot está instalado.The teamMemberAdded event is sent to your bot the first time it is added to a conversation and every time a new user is added to a team or group chat that your bot is installed in. As informações do usuário (ID) são exclusivas para o bot e podem ser armazenadas em cache para uso futuro pelo serviço (como enviar uma mensagem para um usuário específico).The user information (ID) is unique for your bot and can be cached for future use by your service (such as sending a message to a specific user).

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

Membros da equipe removidosTeam members removed

O teamMemberRemoved evento é enviado ao bot se ele for removido de uma equipe e sempre que qualquer usuário for removido de uma equipe que o seu bot é membro.The teamMemberRemoved event is sent to your bot if it is removed from a team and every time any user is removed from a team that your bot is a member of. Você pode determinar se o novo membro removido era o próprio bot ou um usuário examinando o Activity objeto do turnContext .You can determine if the new member removed was the bot itself or a user by looking at the Activity object of the turnContext. Se o Id campo do MembersRemoved objeto for igual ao Id campo do Recipient objeto, o membro removido será o bot, caso contrário, será um usuário.If the Id field of the MembersRemoved object is the same as the Id field of the Recipient object, then the member removed is the bot, otherwise it is a user. O bot Id geralmente será:28:<MicrosoftAppId>The bot's Id will generally be: 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);
        }
    }
}

Equipe renomeadaTeam renamed

O bot é notificado quando a equipe que está sendo renomeada.Your bot is notified when the team it is in has been renamed. Ele recebe um conversationUpdate evento com eventType.teamRenamed no channelData objeto.It receives a conversationUpdate event with eventType.teamRenamed in the channelData object.

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 reação de mensagensMessage reaction events

O messageReaction evento é enviado quando um usuário adiciona ou remove reações a uma mensagem que foi enviada pelo bot.The messageReaction event is sent when a user adds or removes reactions to a message which was sent by your bot. O replyToId contém a ID da mensagem específica e o Type é o tipo de reação no formato de texto.The replyToId contains the ID of the specific message, and the Type is the type of reaction in text format. Os tipos de reações incluem: "irritado", "coração", "Laugh", "Like", "Sad", "surpreso".The types of reactions include: "angry", "heart", "laugh", "like", "Sad", "surprised". Esse evento não contém o conteúdo da mensagem original, portanto, se o processamento de reações às suas mensagens for importante para o seu bot, você precisará armazenar as mensagens ao enviá-las.This event does not contain the contents of the original message, so if processing reactions to your messages is important for your bot you'll need to store the messages when you send them.

EventTypeEventType Objeto PayloadPayload object DescriçãoDescription EscopoScope
messageReactionmessageReaction reactionsAddedreactionsAdded Reação à mensagem de botReaction to bot message TodosAll
messageReactionmessageReaction reactionsRemovedreactionsRemoved Reação removida da mensagem de botReaction removed from bot message TodosAll

Reações a uma mensagem de botReactions to a bot message

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

Reações removidas da mensagem de botReactions removed from bot message

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