Partilhar via


Conversas orientadas a eventos usando um manipulador de atividades

APLICA-SE A: SDK v4

Um manipulador de atividades é uma maneira orientada a eventos de organizar a lógica de conversação para seu bot. Cada tipo ou subtipo diferente de atividade representa um tipo diferente de evento de conversação. Nos bastidores, o processador de turnos do bot chama o manipulador de atividades individuais para qualquer tipo de atividade recebida.

Por exemplo, se o bot receber uma atividade de mensagem, o manipulador de turnos verá essa atividade de entrada e a enviará para o manipulador de atividade de mensagem. Ao criar o seu bot, a lógica do bot para lidar e responder a mensagens irá para este manipulador de atividade de mensagens. Da mesma forma, a sua lógica para lidar com membros que estão a ser adicionados à conversa irá no seu gestor de membros adicionados, que é chamado sempre que um membro é adicionado à conversa.

Para outras maneiras de organizar a lógica do bot, consulte a seção lógica do bot em Como os bots funcionam.

Nota

Para criar agentes com sua escolha de serviços, orquestração e conhecimento de IA, considere usar o SDK de agentes do Microsoft 365. O SDK de agentes tem suporte para C#, JavaScript ou Python. Você pode saber mais sobre o SDK de agentes em aka.ms/agents. Se você estiver procurando por uma plataforma de agente baseada em SaaS, considere o Microsoft Copilot Studio. Se você tiver um bot existente criado com o SDK do Bot Framework, poderá atualizar seu bot para o SDK de agentes. Você pode revisar as principais alterações e atualizações nas diretrizes de migração do SDK do Bot Framework para o SDK de agentes. Os tíquetes de suporte para o SDK do Bot Framework não serão mais atendidos a partir de 31 de dezembro de 2025.

Para implementar a sua lógica para estes gestores, irá substituir esses métodos no seu bot, como na secção de manipulador de atividades de exemplo abaixo. Para cada um desses manipuladores, não existe uma implementação base, então basta adicionar a lógica desejada na sua substituição.

Há certas situações em que se desejará substituir o manipulador de turno base, como salvar o estado no final de um turno. Ao fazer isso, certifique-se de primeiro chamar await base.OnTurnAsync(turnContext, cancellationToken); para garantir que a implementação base de OnTurnAsync seja executada antes do seu código adicional. Essa implementação base é, entre outras coisas, responsável por chamar os outros manipuladores de atividade, como OnMessageActivityAsync.

Gestão de atividades

A lógica do bot processa atividades de entrada de um ou mais canais e gera atividades de saída em resposta.

A lógica principal do bot é definida no código do bot. Para implementar um bot como um manipulador de atividades, derive sua classe de bot de ActivityHandler, que implementa a IBot interface. ActivityHandler define vários manipuladores para diferentes tipos de atividades, como OnMessageActivityAsync, e OnMembersAddedAsync. Esses métodos são protegidos, mas podem ser substituídos, uma vez que estamos derivando de ActivityHandler.

Os manipuladores definidos em ActivityHandler são:

Evento Manipulador Descrição
Qualquer tipo de atividade recebida OnTurnAsync Chama um dos outros gestores, com base no tipo de atividade recebida.
Atividade de mensagem recebida OnMessageActivityAsync Substitua esta funcionalidade para tratar de uma atividade message.
Atividade de atualização de conversação recebida OnConversationUpdateActivityAsync Em uma conversationUpdate atividade, chama um manipulador se outros membros além do bot entraram ou saíram da conversa.
Membros que não são bots se juntaram à conversa OnMembersAddedAsync Altere isto para lidar com membros que se juntam a uma conversa.
Membros que não são bots deixaram a conversa OnMembersRemovedAsync Substitua isso para lidar com membros que saem de uma conversa.
Atividade do evento recebida OnEventActivityAsync Em uma event atividade, chama um manipulador específico para o tipo de evento.
Atividade de evento de resposta ao token recebida OnTokenResponseEventAsync Substitua isso para manipular eventos de resposta de token.
Atividade de evento de resposta não tokenizada recebida OnEventAsync Redefina isto para lidar com outros tipos de eventos.
Atividade de reação de mensagem recebida OnMessageReactionActivityAsync Numa messageReaction atividade, chama um manipulador se uma ou mais reações forem adicionadas ou removidas de uma mensagem.
Reações adicionadas a uma mensagem OnReactionsAddedAsync Sobrescreva isto para tratar as reações adicionadas a uma mensagem.
As reações a uma mensagem foram removidas. OnReactionsRemovedAsync Sobreponha isto para lidar com reações removidas de uma mensagem.
Atividade de atualização de instalação recebida OnInstallationUpdateActivityAsync Em uma installationUpdate atividade, chama um manipulador com base em se o bot foi instalado ou desinstalado.
Bot instalado OnInstallationUpdateAddAsync Substitua esta parte para adicionar lógica quando o bot estiver instalado numa unidade organizacional.
Bot desinstalado OnInstallationUpdateRemoveAsync Altere isso para incluir lógica para quando o bot for desinstalado numa unidade organizacional.
Outro tipo de atividade recebida OnUnrecognizedActivityTypeAsync Modifique isto para lidar com qualquer outro tipo de atividade que, de outra forma, não seria tratada.

Esses manipuladores diferentes têm um turnContext que fornece informações sobre a atividade de entrada, que corresponde à solicitação HTTP de entrada. As atividades podem ser de vários tipos, de modo que cada manipulador fornece uma atividade fortemente tipada no seu parâmetro de contexto de turno; na maioria dos casos, OnMessageActivityAsync será sempre tratado, sendo esta geralmente a mais comum.

Como nas versões 4.x anteriores desta estrutura, há também a opção de implementar o método OnTurnAsyncpúblico . Atualmente, a implementação base desse método lida com a verificação de erros e, em seguida, chama cada um dos manipuladores específicos (como os dois que definimos neste exemplo), dependendo do tipo de atividade de entrada. Na maioria dos casos, você pode deixar esse método sozinho e usar os manipuladores individuais, mas se sua situação exigir uma implementação personalizada do OnTurnAsync, ainda é uma opção.

Importante

Caso substitua o método OnTurnAsync, precisará chamar base.OnTurnAsync para obter a implementação base para chamar todos os outros manipuladores On<activity>Async ou chamar esses manipuladores por si mesmo. Caso contrário, esses manipuladores não serão chamados e esse código não será executado.

Manipulador de atividade de amostra

Por exemplo, você pode lidar com membros adicionados para dar as boas-vindas aos usuários em uma conversa e lidar com mensagens para ecoar mensagens enviadas ao bot.

public class EchoBot : ActivityHandler
{
    protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
        var replyText = $"Echo: {turnContext.Activity.Text}";
        await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
    }

    protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
    {
        var welcomeText = "Hello and welcome!";
        foreach (var member in membersAdded)
        {
            if (member.Id != turnContext.Activity.Recipient.Id)
            {
                await turnContext.SendActivityAsync(MessageFactory.Text(welcomeText, welcomeText), cancellationToken);
            }
        }
    }
}

Próximos passos

  • O canal do Microsoft Teams apresenta algumas atividades específicas do Teams que seu bot precisará oferecer suporte para funcionar corretamente com o Teams. Para entender os principais conceitos de desenvolvimento de bots para o Microsoft Teams, consulte Como os bots do Microsoft Teams funcionam
  • Um manipulador de atividades é uma boa maneira de projetar um bot que não precisa rastrear o estado de conversação entre turnos. A biblioteca de caixas de diálogo fornece maneiras de gerenciar uma conversa de longa duração com o usuário.