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. Sob as cobertas, o manipulador 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 na mensagem. Ao criar seu bot, sua lógica de bot para lidar e responder a mensagens irá para isso no manipulador de atividade de mensagens. Da mesma forma, sua lógica para lidar com membros que estão sendo adicionados à conversa irá em seu manipulador 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

Os SDKs JavaScript, C# e Python do Bot Framework continuarão a ser suportados, no entanto, o Java SDK está sendo desativado com suporte final de longo prazo terminando em novembro de 2023.

Os bots existentes construídos com o Java SDK continuarão a funcionar.

Para a criação de novos bots, considere usar o Microsoft Copilot Studio e leia sobre como escolher a solução de copilot certa.

Para obter mais informações, consulte O futuro da criação de bots.

Para implementar sua lógica para esses manipuladores, você substituirá esses métodos em seu bot, como na seção manipulador de atividades de exemplo abaixo. Para cada um desses manipuladores, não há implementação básica, então basta adicionar a lógica desejada em sua substituição.

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

Manuseamento 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 são ActivityHandler :

Evento Processador Description
Qualquer tipo de atividade recebida OnTurnAsync Chama um dos outros manipuladores, com base no tipo de atividade recebida.
Atividade da mensagem recebida OnMessageActivityAsync Substitua isso para lidar com uma message atividade.
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 Substitua isso para lidar com os membros que participam de uma conversa.
Membros que não são bots deixaram a conversa OnMembersRemovedAsync Substitua isso para lidar com os 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 de token recebida OnTokenResponseEventAsync Substitua isso para manipular eventos de resposta de token.
Atividade de evento de resposta não tokenizada recebida OnEventAsync Substitua isso para lidar com outros tipos de eventos.
Atividade de reação de mensagem recebida OnMessageReactionActivityAsync Em uma messageReaction atividade, chama um manipulador se uma ou mais reações foram adicionadas ou removidas de uma mensagem.
Reações de mensagem adicionadas a uma mensagem OnReactionsAddedAsync Substitua isso para lidar com as reações adicionadas a uma mensagem.
Reações de mensagem removidas de uma mensagem OnReactionsRemovedAsync Substitua isso 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 isso para adicionar lógica para quando o bot estiver instalado em uma unidade organizacional.
Bot desinstalado OnInstallationUpdateRemoveAsync Substitua isso para adicionar lógica para quando o bot for desinstalado em uma unidade organizacional.
Outro tipo de atividade recebida OnUnrecognizedActivityTypeAsync Substitua isso para lidar com qualquer 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 em seu parâmetro de contexto por turno; na maioria dos casos, OnMessageActivityAsync será sempre manuseado, sendo geralmente o 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

Se você substituir o OnTurnAsync método, precisará chamar base.OnTurnAsync para obter a implementação base para chamar todos os outros On<activity>Async manipuladores ou chamar esses manipuladores você 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.