Projetar e controlar o fluxo de conversação

APLICA-SE A: SDK v4

Em um aplicativo tradicional, a interface do usuário (UI) 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 onde os usuários inicialmente pousam, e essa tela fornece navegação que leva a outras telas para várias funções, como iniciar um novo pedido, navegar por produtos ou procurar ajuda.

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

Enquanto um aplicativo ou site tradicional pode solicitar várias informações em uma tela de uma só vez, um bot coletará a mesma quantidade de informações usando várias mensagens. Desta forma, o processo de recolha de informação do utilizador é uma experiência ativa; um em que o usuário está tendo uma conversa ativa com o bot.

Um bot bem projetado terá um fluxo conversacional que parece natural. O bot deve ser capaz de lidar com a conversa principal sem problemas e ser capaz de lidar com interrupções ou alternar tópicos graciosamente.

Fluxo de conversação processual

As conversas com um bot podem se concentrar na tarefa que um bot está tentando alcançar, o que é chamado de fluxo processual. O bot faz ao usuário uma série de perguntas para reunir todas as informações necessárias antes de processar a tarefa.

Em um fluxo de conversa processual, você define a ordem das perguntas e o bot fará as perguntas na ordem que você definiu. Você pode organizar as perguntas em grupos lógicos para manter o código cMicrosoft Entralized enquanto mantém o foco em guiar a conversa. Por exemplo, você pode projetar um módulo para conter a lógica que ajuda o usuário a procurar produtos e um módulo separado para conter a lógica que ajuda o usuário a criar uma nova ordem.

Você pode estruturar esses módulos para fluir da maneira que quiser, desde a forma livre até a sequencial. O SDK do Bot Framework fornece uma biblioteca de diálogos que permite que você construa qualquer fluxo de conversação que seu bot precise. A biblioteca inclui caixas de diálogo em cascata para criar uma sequência de etapas e prompts para fazer perguntas aos usuários. Para obter mais informações, consulte Biblioteca de diálogos.

Diagram comparing application GUI flow against bot conversation flow.

Numa aplicação tradicional, tudo começa com o ecrã principal . A tela principal invoca a nova tela de ordem . A nova tela de pedido permanece no controle até fechar ou invocar outras telas, como a tela de pesquisa de produtos. Se a nova tela de pedido fechar, o usuário retornará à tela principal.

Em um bot que usa diálogos, tudo começa com a caixa de diálogo raiz. A caixa de diálogo raiz invoca a caixa de diálogo nova ordem. Nesse ponto, a nova caixa de diálogo de pedido assume o controle da conversa e permanece no controle até fechar ou invocar outra caixa de diálogo, como a caixa de diálogo de pesquisa de produtos. Se a caixa de diálogo de nova ordem for fechada, o controle da conversa retornará à caixa de diálogo raiz.

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

Lidar com interrupções

Pode ser tentador supor que os usuários executarão tarefas processuais uma a uma de forma limpa e ordenada. Por exemplo, em um fluxo de conversa processual usando diálogos, o usuário iniciará na caixa de diálogo raiz e invocará a caixa de diálogo nova ordem. Na caixa de diálogo de novo pedido, eles invocam a caixa de diálogo de pesquisa de produtos. Em seguida, ao selecionar um dos resultados listados na caixa de diálogo de pesquisa de produtos, eles invocam a caixa de diálogo de novo pedido. Depois de concluir o pedido, eles chegam de volta à caixa de diálogo raiz.

Embora fosse ótimo se os usuários sempre percorressem um caminho tão linear e lógico, isso raramente ocorre. As pessoas nem sempre se comunicam em ordem sequencial. Tendem a mudar de ideias com frequência. Considere o seguinte exemplo:

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

Embora seu bot possa ser centrado em procedimentos, o usuário pode decidir fazer algo totalmente diferente ou fazer uma pergunta que pode não estar 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 seu bot deve responder?

  • Insista para que o usuário responda à pergunta primeiro.
  • Desconsidere tudo o que o usuário fez anteriormente, redefina toda a pilha de diálogo e comece do início tentando responder à pergunta do usuário.
  • Tente responder à pergunta do usuário e, em seguida, retorne à pergunta sim/não e tente retomar a partir daí.

Não há uma resposta certa para essa pergunta, pois a melhor solução dependerá das especificidades do seu cenário e de como o usuário esperaria razoavelmente 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:

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

Para obter mais informações, consulte como expirar uma conversa.

Próximos passos

Gerenciar a navegação do usuário entre caixas de diálogo e projetar um fluxo de conversação de uma maneira que permita que os usuários atinjam seus objetivos (mesmo de forma não linear) é um desafio fundamental do design de bots. O artigo de navegação do bot de design analisa algumas armadilhas comuns da navegação mal projetada e discute estratégias para evitar essas armadilhas.