Compartilhar via


Design e controle de fluxo da conversa

APLICA-SE A: SDK v4

Em um aplicativo tradicional, a interface do usuário consiste em uma série de telas e um único aplicativo ou site pode usar uma ou mais telas, conforme necessário, para trocar informações com o usuário. A maioria dos aplicativos começa com uma tela principal em que os usuários acessam primeiro e essa tela fornece uma navegação que leva a outras telas para várias funções, como o início de um novo pedido, a navegação de produtos ou a busca por ajuda.

Assim como aplicativos e sites, os bots têm uma interface do usuário, mas ela é composta por mensagens, em vez de telas. As mensagens podem conter botões, texto e outros elementos, ou ser totalmente baseados na fala.

Embora um aplicativo ou um site tradicional possa solicitar várias informações em uma tela ao mesmo tempo, um bot coletará a mesma quantidade de informações usando várias mensagens. Dessa forma, o processo de coleta de informações do usuário é uma experiência ativa: aquela em que o usuário está tendo uma conversa ativa com o bot.

Um bot bem projetado terá um fluxo de conversa que parece natural. O bot deve conseguir lidar com a conversa principal de forma contínua e manipular as interrupções ou mudar de tópico de conversa normalmente.

Fluxo da conversa de procedimento

As conversas com um bot pode se concentrar na tarefa que um bot está tentando concluir, que é chamada de fluxo de procedimento. O bot faz uma série de perguntas ao usuário para coletar todas as informações necessárias antes de processar a tarefa.

Em um fluxo de conversa de procedimento, você define a ordem das perguntas e o bot fará as perguntas na ordem definida. Você pode organizar as perguntas em grupos lógicos para manter o código centralizado e permanecer concentrado em guiar a conversa. Por exemplo, você pode criar um módulo para conter a lógica que ajuda o usuário a navegar pelos produtos e um módulo separado para conter a lógica que ajuda o usuário a criar um pedido.

Você pode estruturar esses módulos para fluírem da maneira desejada, variando de forma livre para sequencial. O SDK do Bot Framework fornece uma biblioteca de diálogos que permite construir qualquer fluxo de conversa necessário para o bot. A biblioteca inclui caixas de diálogo em cascata para criar uma sequência de etapas e solicitações para fazer perguntas aos usuários. Para obter mais informações, confira a Biblioteca de diálogos.

Diagram comparing application GUI flow against bot conversation flow.

Em um aplicativo tradicional, tudo começa com a tela principal. A tela principal invoca a tela de novo pedido. A tela de novo pedido permanece no controle até que seja fechada ou invoque outras telas, como a tela de pesquisa de produtos. Se a tela de novo pedido fechar, o usuário retornará à tela principal.

Em um bot, tudo começa com o diálogo raiz. O diálogo raiz invoca o novo diálogo de pedido. Nesse ponto, o diálogo de novo pedido assume o controle da conversa e permanece no controle até que ele seja fechado ou invoque outros diálogos, como o diálogo de pesquisa de produtos. Se o diálogo de novo pedido for fechado, o controle da conversa retornará ao diálogo raiz.

Para obter um exemplo de como implementar um fluxo de conversação usando as bibliotecas de diálogo, confira Implementar fluxo de conversação sequencial.

Manipular interrupções

Pode ser difícil resistir à tentação de pressupor que os usuários façam tarefas de procedimento individualmente de uma forma clara e organizada. Por exemplo, em um fluxo de conversa de procedimento que usa diálogos, o usuário começará no diálogo raiz e invocará o novo diálogo de pedido. No diálogo do novo pedido, o usuário invoca o diálogo de pesquisa de produtos. Em seguida, ao selecionar um dos resultados listados no diálogo de pesquisa de produto, o usuário invoca o diálogo de novo pedido. Depois de concluir o pedido, o usuário retorna ao diálogo raiz.

Embora seja ótimo se os usuários sempre percorressem esse caminho lógico e linear, ele raramente ocorre. Nem sempre as pessoas se comunicam em ordem sequencial. Eles tendem a mudar de ideia com frequência. Considere o seguinte exemplo:

Example of a user asking a question in response to a question from the bot.

Embora o bot possa ser voltado para procedimentos, o usuário pode decidir fazer algo totalmente diferente ou fazer uma pergunta que não esteja relacionada ao tópico atual. No exemplo acima, o usuário faz uma pergunta em vez de fornecer a resposta sim/não que o bot espera. Como o bot deve responder?

  • Insistir que o usuário responda à pergunta primeiro.
  • Desconsiderar tudo o que o usuário fez anteriormente, redefinir toda a pilha de diálogos e começar do início, tentando responder à pergunta do usuário.
  • Tentar responder a pergunta do usuário e, em seguida, retornar a essa pergunta sim/não e tentar retomar desse ponto.

Não há resposta certa para essa pergunta, pois a melhor solução dependerá das especificidades do cenário e de como o usuário esperaria que o bot respondesse. Veja como Lidar com interrupções de usuário para um bot projetado para lidar com alguns tipos de interrupções.

Expirar uma conversa

Às vezes, é útil reiniciar uma conversa desde o início. Por exemplo, se um usuário não responder após um determinado período de tempo. Diferentes métodos para encerrar uma conversa incluem:

  • Acompanhar a última vez que uma mensagem foi recebida de um usuário e limpar o estado se o tempo for maior que uma duração pré-configurada ao receber a próxima mensagem do usuário.
  • Usar um recurso de camada de armazenamento, como o recurso de vida útil do Cosmos DB, para limpar o estado após um período de tempo pré-configurado.

Para obter mais informações, confira como Expirar uma conversa.

Próximas etapas

O gerenciamento da navegação do usuário em diálogos e o projeto do fluxo de conversa de uma maneira que permita que os usuários atinjam suas metas (mesmo em uma forma não linear) são um desafio fundamental do design de bot. O artigo Criar bot de navegação examina algumas armadilhas comuns de navegação mal projetada e aborda estratégias para evitá-las.