Partilhar via


Compreender os conceitos do bot

As interações de um bot podem estar a utilizar texto, voz, imagens ou vídeo. Processa a entrada do utilizador para compreender o pedido e avalia a entrada para realizar tarefas relevantes. Um bot pode pedir informações ou ativar o acesso aos serviços e responder ao utilizador.

Âmbitos do bot

Os bots no Microsoft Teams podem fazer parte de uma conversa privadas, um chat em grupo ou um canal em uma equipe. Cada escopo fornece oportunidades únicas e desafios para seu bot conversacional.

Em um canal. Em um chat em grupo Chat Privado
Alcance enorme Menos membros Maneira tradicional
Interações individuais concisas @mention para bot Bots de P e R
@mention para bot Semelhante ao canal Bots que contam piadas e fazem anotações

Em um canal.

Os canais contêm conversações por tópicos entre várias pessoas até 2000. Isso potencialmente dá ao seu bot um alcance enorme, mas as interações individuais devem ser concisas. As interações multifator tradicionais não funcionam. Em vez disso, tem de procurar utilizar cartões ou caixas de diálogo interativos (referidos como módulos de tarefas no TeamsJS v1.x) ou mover a conversação para uma conversação um-para-um para recolher muitas informações. O bot só tem acesso a mensagens em que é @mentioned. Você pode recuperar mensagens adicionais da conversa usando as permissões do Microsoft Graph no nível da organização.

Os bots funcionam melhor em um canal nos seguintes casos:

  • Notificações, em que você fornece um cartão interativo para os usuários obterem informações adicionais.
  • Comentários cenários como votações e pesquisas.
  • Um único ciclo de solicitação ou resposta resolve interações e os resultados são úteis para vários membros da conversa.
  • Bots sociais ou divertidos, em que você obtém uma imagem de gato incrível, escolhe aleatoriamente um vencedor e assim por diante.

Em um chat em grupo

Os chats de grupo são conversas não-encadeadas entre três ou mais pessoas. Tendem a ter menos membros do que um canal e são mais temporários. Semelhante a um canal, o bot só tem acesso a mensagens onde está @mentioned diretamente.

Os bots que funcionam melhor num canal também funcionam melhor numa conversa de grupo.

Chat Privado

O chat privado é a maneira tradicional de um bot de conversação interagir com um usuário. Alguns exemplos de bots de chat ptivado são:

  • Bots de P e R
  • bots que iniciam fluxos de trabalho noutros sistemas.
  • bots que contam piadas.
  • bots que tiram notas. Antes de criar chatbots um-para-um, considere se uma interface baseada em conversação é a melhor forma de apresentar a sua funcionalidade.

Processador de atividade e lógica do bot

Para criar uma aplicação de bot que satisfaça as suas necessidades, é essencial compreender o processador de atividades do Microsoft Teams e a lógica do bot. Estes dois componentes principais trabalham em conjunto para organizar a lógica de conversação.

  • Processador de atividades do Teams: os processadores de atividade do Teams expandem a funcionalidade dos bots padrão ao adicionar suporte para eventos e interações específicos do Teams. Estes eventos podem incluir a criação de canais, adições de membros da equipa e outras ações exclusivas para o ambiente do Teams. Ao utilizar processadores de atividade do Teams, os bots podem proporcionar uma experiência de utilizador mais integrada e totalmente integrada na plataforma Teams.

  • Lógica do bot: o objeto de bot, que aloja a lógica de conversação do bot, é responsável por tomar decisões com base na entrada do utilizador. Expõe um processador turn, que é o método que aceita atividades de entrada do adaptador de bot. A lógica do bot garante que cada viragem da conversação é processada adequadamente, contribuindo para a coerência e eficácia gerais do bot.

Estes dois componentes trabalham em conjunto para criar uma experiência de conversação envolvente. O processador de atividade processa o que o utilizador diz, enquanto a lógica do bot calcula a melhor resposta. Em conjunto, ativam:

  • Compreender o contexto da conversação
  • Personalizar interações
  • Obter informações de forma eficiente
  • Manter um fluxo de conversação adaptável

Ao compreender o processador de atividades e a lógica do bot, pode conceber e implementar soluções inteligentes de IA de conversação e bot convencionais.

Processador de atividades do Teams

O processador de atividade é o núcleo da funcionalidade de um bot, ao gerir e processar as interações do utilizador. Baseia-se no processador de atividades do Microsoft Bot Framework e encaminha todas as atividades do Teams antes de processar quaisquer atividades não específicas do Teams. Funciona como um intermediário entre a entrada do utilizador e a resposta do bot:

  • Recebe mensagens recebidas.
  • Obtém dados chave a partir da entrada do utilizador.
  • Identifica a intenção do utilizador através do Processamento de Linguagem Natural (NLP).
  • Mantém o contexto e o estado da conversação.
  • Gera respostas com base na intenção e na entrada do utilizador.

O processador de atividade melhora a experiência, eficiência, precisão, escalabilidade e flexibilidade do utilizador.

Quando um bot do Teams obtém uma atividade, é encaminhado através dos processadores de atividade. Todas as atividades passam por um processador base chamado processador turn, que, em seguida, chama o processador de atividade adequado. O bot do Teams é derivado da TeamsActivityHandler classe , que vem da classe do ActivityHandler Bot Framework.

Observação

Se uma atividade de bot demorar mais de 15 segundos a ser processada, o Teams envia um pedido de repetição para o ponto final do bot, para que possa ver pedidos duplicados.

Os bots são criados com o Bot Framework. Quando um bot recebe uma mensagem, o processador turn é notificado e envia-o para o OnMessageActivityAsync processador. Isto funciona da mesma forma no Teams. Se o bot receber uma atualização de conversação, o processador turn envia-a para OnConversationUpdateActivityAsync. O processador de atividades do Teams procura primeiro eventos específicos do Teams. Se não existirem, são passados para o processador de atividades do Bot Framework.

Na classe de processador de atividades do Teams, existem dois processadores de atividades principais do Teams:

  • OnConversationUpdateActivityAsync encaminha todas as atividades de atualização de conversação.
  • OnInvokeActivityAsync encaminha todas as atividades de invocação do Teams.

Para implementar sua lógica de manipuladores de atividades específicos do Teams, você deve substituir os métodos em seu bot, conforme mostrado na seção lógica do bot. Não existe nenhuma implementação base para estes processadores. Por conseguinte, adicione a lógica pretendida na substituição.

Para configurar a sua lógica para processadores de atividade específicos do Teams, tem de substituir os métodos no bot, conforme mostrado na secção lógica do bot . Não existe uma implementação predefinida para estes processadores, pelo que basta adicionar a lógica que pretende na substituição.

Os trechos de código para manipuladores de atividades do Teams:

OnTeamsChannelCreatedAsync


protected override Task OnTeamsChannelCreatedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
        {
            // Code logic here
        }

OnTeamsChannelDeletedAsync


protected override Task OnTeamsChannelDeletedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
        {
            // Code logic here
        }

OnTeamsChannelRenamedAsync


protected override Task OnTeamsChannelRenamedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
  {
   // Code logic here
  }

OnTeamsTeamRenamedAsync


protected override Task OnTeamsTeamRenamedAsync(TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
  {
   // Code logic here
  }

OnTeamsMembersAddedAsync


protected override Task OnTeamsMembersAddedAsync(IList<TeamsChannelAccount> teamsMembersAdded, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
  {
   // Code logic here
  }

OnTeamsMembersRemovedAsync


protected override Task OnTeamsMembersRemovedAsync(IList<TeamsChannelAccount> teamsMembersRemoved, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken);
  {
   // Code logic here
  }

OnTeamsMessageEditAsync

protected override async Task OnTeamsMessageEditAsync(ITurnContext<IMessageUpdateActivity> turnContext, CancellationToken cancellationToken)
  { 
   // Code logic here 
  } 

OnTeamsMessageUndeleteAsync

protected override async Task OnTeamsMessageUndeleteAsync(ITurnContext<IMessageUpdateActivity> turnContext, CancellationToken cancellationToken)
  { 
   // Code logic here 
  } 

OnTeamsMessageSoftDeleteAsync

 protected override async Task OnTeamsMessageSoftDeleteAsync(ITurnContext<IMessageDeleteActivity> turnContext, CancellationToken cancellationToken)
  { 
   // Code logic here 
  } 

Exemplo de processador de atividade de bot

O código seguinte fornece um exemplo de uma atividade de bot para um âmbito de equipa de canal:


protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    var mention = new Mention
    {
        Mentioned = turnContext.Activity.From,
        // EncodeName: Converts the name to a valid XML name.
        Text = $"<at>{XmlConvert.EncodeName(turnContext.Activity.From.Name)}</at>",
    };
    
    // MessageFactory.Text(): Specifies the type of text data in a message attachment.
    var replyActivity = MessageFactory.Text($"Hello {mention.Text}.");
    replyActivity.Entities = new List<Entity> { mention };

    // Sends a message activity to the sender of the incoming activity.
    await turnContext.SendActivityAsync(replyActivity, cancellationToken);
}

O código a seguir fornece um exemplo de atividade de bot para um chat privado:


// Handle message activity
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    // Remove recipient mention text from Text property.
    // Use with caution because this function is altering the text on the Activity.
    turnContext.Activity.RemoveRecipientMention();
    var text = turnContext.Activity.Text.Trim().ToLower();

    // Sends a message activity to the sender of the incoming activity.
    await turnContext.SendActivityAsync(MessageFactory.Text($"Your message is {text}."), cancellationToken);
}

Lógica do bot

A lógica do bot incorpora as regras fundamentais e as estruturas de tomada de decisões que ditam as ações e interações de um bot. Descreve como o bot interpreta a entrada do utilizador, formula respostas e participa em conversações.

No Teams, a lógica do bot processa as atividades recebidas de um ou mais canais de bot e, em resposta, gera atividades de saída. Continua a ser verdade para os bots derivados da classe de processador de atividades do Teams, que verifica primeiro as atividades do Teams. Depois de verificar as atividades do Teams, ele passa todas as outras atividades para o manipulador de atividades do Bot Framework.

Manipuladores Principais do Bot Framework

Observação

  • Exceto para as atividades dos membros adicionados e removidos, todos os manipuladores de atividades descritos nesta seção continuam funcionando como fazem com um bot que não é do Teams.
  • O método onInstallationUpdateActivityAsync() é usado para obter a Localidade do Teams ao adicionar o bot ao Teams.

Os manipuladores de atividade são diferentes no contexto de uma equipe, onde um novo membro é adicionado à equipe em vez de um thread de mensagens.

A lista de processadores definidos em ActivityHandler inclui os seguintes eventos:

Evento Processador ou método SDK Descrição
Qualquer tipo de atividade recebida OnTurnAsync() Esse método chama um dos outros manipuladores, com base no tipo de atividade recebida.
Atividade de mensagem recebida OnMessageActivityAsync() Pode substituir este método para processar uma Message atividade.
Atividade de atualização de mensagens recebida OnMessageUpdateActivityAsync() Pode substituir este método para processar uma atividade de atualização de mensagens.
Atividade de eliminação de mensagens recebida OnMessageDeleteActivityAsync() Pode substituir este método para processar uma atividade de eliminação de mensagens.
Atividade de atualização de conversa recebida OnConversationUpdateActivityAsync() Esse método chama um manipulador se outros membros que não sejam o bot ingressaram ou saíram da conversa, em uma atividade de ConversationUpdate.
Membros que não são bots ingressaram na conversa OnMembersAddedAsync() Esse método pode ser substituído para manipular membros que ingressam em uma conversa.
Membros que não são bots saíram da conversa OnMembersRemovedAsync() Esse método pode ser substituído para manipular membros que saem de uma conversa.
Atividade de evento recebida OnEventActivityAsync() Esse método chama um manipulador específico para o tipo de evento, em uma atividade de Event.
Atividade de evento de resposta de token recebida OnTokenResponseEventAsync() Esse método pode ser substituído para manipular eventos de resposta de token.
Atividade de evento de resposta sem token recebida OnEventAsync() Esse método pode ser substituído para manipular outros tipos de eventos.
Outro tipo de atividade recebida OnUnrecognizedActivityTypeAsync() Esse método pode ser substituído para manipular qualquer tipo de atividade que não seria manipulada.

Manipuladores de atividades específicos do Teams

O TeamsActivityHandler expande a lista de processadores na secção principais processadores do Bot Framework para incluir os seguintes eventos:

Evento Processador ou método SDK Descrição
channelCreated OnTeamsChannelCreatedAsync() Esse método pode ser substituído para manipular um canal do Teams sendo criado. Para obter mais informações, veja canal criado em Eventos de atualização de conversação.
channelDeleted OnTeamsChannelDeletedAsync() Esse método pode ser substituído para manipular um canal do Teams sendo excluído. Para obter mais informações, consulte Canal eliminado em Eventos de atualização de conversação.
channelRenamed OnTeamsChannelRenamedAsync() Esse método pode ser substituído para manipular um canal do Teams sendo renomeado. Para obter mais informações, consulte o nome do canal mudado em Eventos de atualização de conversação.
teamRenamed OnTeamsTeamRenamedAsync() return Task.CompletedTask; Esse método pode ser substituído para manipular uma equipe do Teams sendo renomeada. Para obter mais informações, consulte o nome da equipa mudado em Eventos de atualização de conversação.
MembersAdded OnTeamsMembersAddedAsync() Esse método chama o método OnMembersAddedAsync no ActivityHandler. O método pode ser substituído para manipular membros que ingressam em uma equipe. Para obter mais informações, consulte membros da equipa adicionados em Eventos de atualização de conversação.
MembersRemoved OnTeamsMembersRemovedAsync() Esse método chama o método OnMembersRemovedAsync no ActivityHandler. O método pode ser substituído para manipular membros que saem de uma equipe. Para obter mais informações, veja Membros da equipa removidos em Eventos de atualização de conversação.
messageEdit OnTeamsMessageEditAsync() Pode substituir este método para processar um evento de edição de mensagens do Teams.
messageUndelete OnTeamsMessageUndeleteAsync() Pode substituir este método para processar um evento de anulação de eliminação de mensagens do Teams.
messageSoftDelete OnTeamsMessageSoftDeleteAsync() Pode substituir este método para processar um evento de eliminação recuperável de mensagens do Teams.

Atividades de invocação do Teams

A lista de processadores de atividade do Teams chamados a partir do processador de atividades do OnInvokeActivityAsync Teams inclui os seguintes tipos de invocação:

Invocar tipos Processador ou método SDK Descrição
CardAction.Invoke OnTeamsCardActionInvokeAsync() Quando o conector recebe uma atividade de invocação de ação card, este método é invocado.
fileConsent/invoke OnTeamsFileConsentAcceptAsync() Quando um utilizador aceita um consentimento de ficheiro card, este método é invocado.
fileConsent/invoke OnTeamsFileConsentAsync() Quando o conector recebe um consentimento de ficheiro card atividade, este método é invocado.
fileConsent/invoke OnTeamsFileConsentDeclineAsync() Quando um utilizador recusa um consentimento de ficheiro card, este método é invocado.
actionableMessage/executeAction OnTeamsO365ConnectorCardActionAsync() Quando o conector recebe um conector card para Grupos do Microsoft 365 atividade de ação, este método é invocado.
signin/verifyState OnTeamsSigninVerifyStateAsync() Quando o conector recebe uma signIn atividade de estado de verificação, este método é invocado.
task/fetch OnTeamsTaskModuleFetchAsync() Pode substituir este método numa classe derivada para fornecer lógica quando for obtida uma caixa de diálogo (referida como módulo de tarefas no TeamsJS v1.x).
task/submit OnTeamsTaskModuleSubmitAsync() Pode substituir este método numa classe derivada para fornecer lógica quando uma caixa de diálogo é submetida.

As atividades de Invocação listadas nesta secção destinam-se a bots de conversação no Teams. O Bot Framework SDK também é compatível com atividades de invocação específicas para extensões de mensagem. Para saber mais, confira o que são extensões de mensagem.


Agora que se familiarizou com os processadores de atividade de bots, deixe-nos ver como os bots se comportam de forma diferente consoante a conversação e as mensagens que recebe ou envia.

Recomendações

Uma caixa de diálogo extensa entre o bot e o usuário é uma maneira lenta e complexa de concluir uma tarefa. Um bot que suporta comandos excessivos, especialmente uma vasta gama de comandos, não é bem-sucedido ou visto positivamente pelos utilizadores.

  • Evitar experiências multi-turn no chat Uma caixa de diálogo extensa requer que o programador mantenha o estado. Para sair deste estado, um utilizador tem de exceder o limite de tempo ou selecionar Cancelar. Além disso, o processo é entediante. Por exemplo, consulte o seguinte cenário de conversa:

    USER: Agende uma reunião com Sara.

    BOT: Encontrei 200 resultados, incluindo o nome próprio e o apelido.

    USER: Agende uma reunião com Sara Melo.

    BOT: OK, a que hora você gostaria de se encontrar com Sara Melo?

    USUÁRIO: 13h.

    BOT: Em qual dia?

  • Suportar seis ou menos comandos frequentes Uma vez que existem apenas seis comandos visíveis no menu de bot atual, é pouco provável que sejam utilizados com qualquer frequência. Bots que se aprofundam em uma área específica em vez de tentar ser um amplo trabalho de assistente funcionam melhor.

  • Otimizar o tamanho da base de dados de conhecimento para uma interação mais rápida Uma das desvantagens dos bots é que é difícil manter uma grande base de dados de conhecimento de obtenção com respostas não classificadas. Os bots são mais adequados para interações rápidas e curtas e não passam por listas longas em busca de uma resposta.

Explorar outras funcionalidades do bot

Além das funcionalidades de bot convencionais, também pode explorar funcionalidades avançadas disponíveis numa aplicação de bot do Teams:

Exemplo de código

Nome do exemplo Descrição .NET Node.js Python
Bot de conversas do Teams Esta aplicação de exemplo mostra como utilizar diferentes eventos de conversação de bot disponíveis no Bot Framework v4. View View Exibir
Exemplos de bot Conjunto de exemplos do Bot Framework v4. View View View

Próxima etapa

Confira também