Progettare e controllare il flusso della conversazione

SI APPLICA A: SDK v4

In un'applicazione tradizionale l'interfaccia utente è costituita da una serie di schermate e una singola app o sito Web può usare una o più schermate, in base alle necessità, per scambiare informazioni con l'utente. La maggior parte delle applicazioni inizia con una schermata principale a cui gli utenti accedono inizialmente e tale schermata consente di passare alle schermate di diverse altre funzioni, ad esempio l'avvio di un nuovo ordine, l'esplorazione dei prodotti o la ricerca di assistenza.

Come le app e i siti Web, i bot hanno un'interfaccia utente, ma sono costituiti da messaggi anziché da schermate. I messaggi possono contenere pulsanti, testo e altri elementi o essere completamente basati sulla sintesi vocale.

Mentre un'applicazione o un sito Web tradizionale può richiedere più informazioni in una volta in una sola schermata, un bot raccoglierà invece la stessa quantità di informazioni usando più messaggi. In questo modo, il processo di raccolta delle informazioni dall'utente è un'esperienza attiva, in cui l'utente ha una conversazione attiva con il bot.

Un bot ben progettato avrà un flusso di conversazione che si sente naturale. Il bot deve essere in grado di gestire facilmente la conversazione principale e di gestire correttamente le interruzioni o il cambio di argomenti.

Flusso della conversazione procedurale

Le conversazioni con un bot possono concentrarsi sull'attività che un bot sta tentando di ottenere, ovvero un flusso procedurale. Il bot chiede all'utente una serie di domande per raccogliere tutte le informazioni necessarie prima di elaborare l'attività.

In un flusso di conversazione procedurale si definisce l'ordine delle domande e il bot porrà le domande nell'ordine definito. È possibile organizzare le domande in gruppi logici per mantenere il codice cMicrosoft Entralized mantenendo lo stato attivo sulla guida della conversazione. È ad esempio possibile progettare un modulo contenente la logica che consente all'utente di esplorare i prodotti e un modulo separato contenente la logica che consente all'utente di creare un nuovo ordine.

È possibile strutturare tali moduli dando al flusso la forma desiderata, da quella libera a quella sequenziale. Bot Framework SDK offre una libreria di dialoghi che consente di creare qualsiasi flusso di conversazione necessario per il bot. La libreria include dialoghi a cascata per la creazione di una sequenza di passaggi e richieste di porre domande agli utenti. Per altre informazioni, vedere Libreria Dialogs.

Diagram comparing application GUI flow against bot conversation flow.

In un'applicazione tradizionale tutto inizia con la schermata principale. La schermata principale richiama la schermata del nuovo ordine . La schermata del nuovo ordine rimane in controllo finché non chiude o richiama altre schermate, ad esempio la schermata di ricerca del prodotto. Se la schermata del nuovo ordine si chiude, l'utente viene riportato alla schermata principale.

In un bot che usa i dialoghi, tutto inizia con il dialogo radice. Il dialogo radice richiama la finestra di dialogo nuovo ordine. A questo punto, la finestra di dialogo del nuovo ordine prende il controllo della conversazione e rimane in controllo finché non chiude o richiama un altro dialogo, ad esempio la finestra di dialogo di ricerca del prodotto. Se la finestra di dialogo del nuovo ordine viene chiusa, il controllo della conversazione torna al dialogo radice.

Per un esempio di come implementare un flusso di conversazione usando le librerie di dialoghi, vedere Implementare il flusso di conversazione sequenziale.

Gestire le interruzioni

Si può essere tentati di presumere che gli utenti eseguiranno le attività procedurali una alla volta in modo preciso e ordinato. Ad esempio, in un flusso di conversazione procedurale tramite dialoghi, l'utente inizierà nella finestra di dialogo radice e richiamerà la finestra di dialogo del nuovo ordine. Nella finestra di dialogo nuovo ordine richiamano la finestra di dialogo di ricerca del prodotto. Quindi, quando si seleziona uno dei risultati elencati nella finestra di dialogo di ricerca del prodotto, richiama la finestra di dialogo nuovo ordine. Dopo aver completato l'ordine, tornano al dialogo radice.

Se gli utenti seguissero sempre un percorso tanto lineare e logico, sarebbe ideale, ma raramente succede così. Persone non sempre comunicano in ordine sequenziale. Tendono infatti a cambiare spesso idea. Si consideri l'esempio seguente:

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

Anche se il bot può essere basato su procedure, l'utente può decidere di eseguire un'operazione completamente diversa o di porre una domanda non inerente all'argomento corrente. Nell'esempio precedente l'utente pone una domanda invece di fornire la risposta sì/no prevista dal bot. Il bot dovrebbe reagire

  • Insistendo perché l'utente fornisca prima una risposta alla domanda.
  • Indipendentemente da tutte le operazioni eseguite in precedenza dall'utente, dovrebbe reimpostare l'intero stack di dialoghi e partire dall'inizio provando a rispondere alla domanda dell'utente.
  • Cercando di rispondere alla domanda dell'utente e quindi tornare alla domanda che prevede una risposta sì/no e provare a ripartire da lì.

Non esiste una risposta corretta a questa domanda, perché la soluzione migliore dipenderà dalle specifiche dello scenario e dal modo in cui l'utente dovrebbe ragionevolmente aspettarsi che il bot risponda. Vedere come gestire le interruzioni dell'utente per un bot progettato per gestire alcuni tipi di interruzioni.

Impostare la scadenza di una conversazione

A volte è utile riavviare una conversazione dall'inizio. Ad esempio, se un utente non risponde dopo un determinato periodo di tempo. I diversi metodi per terminare una conversazione includono:

  • Tenere traccia dell'ultima volta che un messaggio è stato ricevuto da un utente e cancellare lo stato se l'ora è maggiore di una lunghezza preconfigurata al momento della ricezione del messaggio successivo dall'utente.
  • Usare una funzionalità del livello di archiviazione, ad esempio la funzionalità time-to-live di Cosmos DB, per cancellare lo stato dopo un periodo di tempo preconfigurato.

Per altre informazioni, vedere Come scadere una conversazione.

Passaggi successivi

La gestione dello spostamento dell'utente tra i dialoghi e la progettazione di un flusso di conversazione in modo da consentire agli utenti di raggiungere i propri obiettivi (anche in modo non lineare) è una sfida fondamentale della progettazione del bot. L'articolo Progettazione spostamento bot esamina alcune insidie comuni di navigazione non progettate correttamente e illustra le strategie per evitare tali trappole.