Informazioni sui dialoghi a cascata e componente
SI APPLICA A: SDK v4
I dialoghi sono disponibili in alcuni tipi diversi. Questo articolo descrive i dialoghi componente, cascata e prompt. Per informazioni sui dialoghi in generale, vedere l'articolo della libreria dei dialoghi . Per informazioni sui dialoghi adattivi, vedere l'introduzione ai dialoghi adattivi.
Una finestra di dialogo a cascata (o cascata) definisce una sequenza di passaggi, consentendo al bot di guidare un utente attraverso un processo lineare. Questi dialoghi sono progettati per funzionare nel contesto di una finestra di dialogo del componente.
Una finestra di dialogo componente è un tipo di finestra di dialogo contenitore che consente ai dialoghi nel set di chiamare altri dialoghi nel set, ad esempio una finestra di dialogo a cascata che chiama i dialoghi di richiesta o un'altra finestra di dialogo a cascata. Le finestre di dialogo componente gestiscono un set di dialoghi figlio , ad esempio dialoghi a cascata, richieste e così via. È possibile progettare una finestra di dialogo del componente per gestire attività specifiche e riutilizzarla, nello stesso bot o in più bot.
Le finestre di dialogo prompt (prompt) sono finestre di dialogo progettate per chiedere all'utente tipi specifici di informazioni, ad esempio un numero, una data o un nome e così via. Le richieste sono progettate per lavorare con finestre di dialogo a cascata in una finestra di dialogo del componente.
Dialoghi componenti
Talvolta si vuole scrivere un dialogo riutilizzabile da usare in diversi scenari, come ad esempio un dialogo relativo agli indirizzi che chiede all'utente di fornire valori per via, città e codice postale.
Il dialogo componenti fornisce una strategia per la creazione di dialoghi indipendenti per gestire scenari specifici, suddividendo un set di dialoghi di grandi dimensioni in componenti più gestibili. Ognuno di questi componenti ha il proprio set di dialoghi ed evita eventuali conflitti di nomi con il set di dialogo che lo contiene. Per altre informazioni, vedere la finestra di dialogo del componente su come.
Dialoghi a cascata
Un dialogo a cascata è un'implementazione specifica di un dialogo comunemente usata per raccogliere informazioni dall'utente o guidare l'utente in una serie di attività. Ogni passaggio della conversazione viene implementato come una funzione asincrona che accetta un parametro di contesto del passaggio a cascata (step
). A ogni passaggio, il bot richiede all'utente l'input (o può avviare una finestra di dialogo figlio, ma che è spesso una richiesta), attende una risposta e quindi passa il risultato al passaggio successivo. Il risultato della prima funzione viene passato come argomento alla funzione successiva e così via.
Il diagramma seguente mostra una sequenza di passaggi della cascata e le operazioni di stack eseguite. I dettagli sull'uso dello stack di dialoghi sono riportati di seguito nella sezione Uso dei dialoghi.
Nei passaggi a cascata, il contesto del dialogo a cascata viene archiviato nel relativo contesto di passaggio a cascata. Il contesto del passaggio è simile al contesto del dialogo e fornisce l'accesso al contesto e allo stato di turno corrente. Usare l'oggetto di contesto dei passaggi della cascata per interagire con un set di dialoghi all'interno di un passaggio a cascata.
È possibile gestire un valore restituito da un dialogo sia all'interno di un passaggio a cascata in un dialogo che dal gestore dei turni del bot, anche se in genere è sufficiente controllare lo stato del risultato del turno del dialogo dalla logica dei turni del bot. All'interno di un passaggio della cascata, il dialogo restituisce il valore nella proprietà result del contesto del passaggio della cascata.
Proprietà del contesto del passaggio a cascata
Il contesto del passaggio a cascata contiene le proprietà seguenti:
- Opzioni: contiene le informazioni di input per il dialogo.
- Valori: contiene le informazioni che è possibile aggiungere al contesto e che vengono riportate nei passaggi successivi.
- Risultato: contiene il risultato del passaggio precedente.
Inoltre, il metodo successivo (NextAsync in C#, successivo in JavaScript e Python) continua al passaggio successivo della finestra di dialogo a cascata nello stesso turno, consentendo al bot di ignorare un determinato passaggio se necessario.
Prompt
Le richieste, all'interno della libreria di dialoghi, forniscono un modo semplice per chiedere informazioni all'utente e valutarne la risposta. Ad esempio, per un prompt dei numeri, specificare la domanda o le informazioni richieste e il prompt verifica automaticamente se ha ricevuto una risposta numerica valida. In caso affermativo, la conversazione può continuare; se non è stato fatto, verrà riprovato l'utente per una risposta valida.
Le richieste non sono altro che un dialogo in due passaggi. Nel primo viene richiesto l'input, nel secondo viene restituito un valore valido oppure si ricomincia dall'inizio con una nuova richiesta.
Le richieste contengono opzioni di richiesta specificate quando la richiesta viene chiamata, ovvero quando è possibile specificare il testo con cui inviare la richiesta, la richiesta di un nuovo tentativo se la convalida non riesce e le scelte per rispondere alla richiesta. In generale, le proprietà del prompt dei tentativi e dei tentativi sono attività, anche se esistono alcune varianti sulla modalità di gestione in diversi linguaggi di programmazione.
Inoltre, è possibile scegliere di aggiungere una convalida personalizzata per la richiesta quando viene creata. Ad esempio, supponiamo di volere ottenere il numero di persone usando la richiesta numerica, ma tale numero deve essere maggiore di 2 e minore di 12. Il prompt verifica prima di tutto se ha ricevuto un numero valido, quindi esegue la convalida personalizzata se viene fornita. Se la convalida personalizzata ha esito negativo, verrà riprovata l'utente come indicato in precedenza.
Quando una richiesta viene completata, restituisce esplicitamente il valore risultante che è stato richiesto. Quando viene restituito tale valore, è possibile assicurarsi che sia stata passata la convalida predefinita del prompt e qualsiasi convalida personalizzata aggiuntiva che potrebbe essere stata fornita.
Per esempi sull'uso di varie richieste, vedere come usare la libreria di dialoghi per raccogliere l'input dell'utente.
Tipi di richieste
Le richieste non sono altro che un dialogo in due passaggi. Prima di tutto, il prompt chiede l'input; in secondo luogo, restituisce il valore valido o riavvia dall'inizio con un reprompt. La libreria dei dialoghi offre varie richieste di base, ognuna utilizzata per la raccolta di un tipo di risposta diverso. Le richieste di base riescono a interpretare l'input in linguaggio naturale, ad esempio "10" o "una decina" per un numero oppure "domani" o "venerdì alle 10" per un valore di data e ora.
Prompt | Descrizione | Valori di codice restituiti |
---|---|---|
AttachmentPrompt | Chiede uno o più allegati, ad esempio un documento o un'immagine. | Raccolta di oggetti allegato. |
ChoicePrompt | Chiede di scegliere tra un set di opzioni. | Oggetto selezione trovata. |
ConfirmPrompt | Chiede una conferma. | Valore booleano. |
DatetimePrompt | Chiede un valore data e ora. | Raccolta di oggetti risoluzione data e ora. |
NumberPrompt | Chiede un numero. | Valore numerico. |
TextPrompt | Chiede input di testo generico. | Stringa. |
Per richiedere input a un utente, definire una richiesta usando una delle classi predefinite, come TextPrompt, e aggiungerla al set di dialoghi. I prompt hanno ID fissi che devono essere univoci all'interno di un set di dialoghi. È possibile avere una convalida personalizzata per ogni prompt e, per alcuni prompt, è possibile specificare impostazioni locali predefinite.
Impostazioni locali dei prompt
Le impostazioni locali consentono di determinare il comportamento specifico della lingua delle richieste ChoicePrompt, ConfirmPrompt, DatetimePrompt e NumberPrompt. Per ogni input dell'utente viene usata la proprietà locale se specificata da un canale nel messaggio dell'utente. In alternativa, verranno usate le impostazioni locali della richiesta se sono state definite durante la chiamata del costruttore della richiesta oppure in un momento successivo. Se non vengono fornite nessuna di queste impostazioni locali, l'inglese ("en-us") viene usato come impostazioni locali.
Le impostazioni locali sono due, tre o quattro caratteri ISO 639 che rappresentano una famiglia di lingue o lingue.
Opzioni richiesta
Il secondo parametro del metodo prompt del contesto del passaggio riceve un oggetto opzioni richiesta con le proprietà seguenti.
Proprietà | Descrizione |
---|---|
Prompt | Attività iniziale da inviare all'utente per chiedere input. |
Retry prompt | Attività da inviare all'utente se il primo input non è stato convalidato. |
Choices | Elenco di selezioni a disposizione dell'utente e utilizzabili con una richiesta di tipo ChoicePrompt. |
Validations | Parametri aggiuntivi da usare con un validator personalizzato. |
Style | Definisce il modo in cui le opzioni disponibili per una richiesta di scelta o di conferma verranno presentate a un utente. |
È sempre necessario specificare l'attività iniziale del prompt da inviare all'utente e una richiesta di ripetizione dei tentativi per le istanze quando l'input dell'utente non convalida.
Se l'input dell'utente non è valido, il prompt dei tentativi viene inviato all'utente; se non è stato specificato alcun tentativo, viene usato il prompt iniziale. Se un'attività viene inviata nuovamente all'utente dalla funzione validator, non verrà inviata alcuna richiesta di ripetizione.
Convalida della richiesta
È possibile convalidare una risposta alla richiesta prima di restituire il valore al passaggio successivo del dialogo a cascata. Una funzione validator contiene un parametro contesto del validator di richiesta e restituisce un valore booleano che indica se l'input è stato convalidato. Il contesto del validator di richiesta include le proprietà seguenti:
Proprietà | Descrizione |
---|---|
Contesto | Contesto del turno corrente per il bot. |
Recognized | Risultato del sistema di riconoscimento richiesta che contiene informazioni sull'input utente elaborato dal sistema di riconoscimento. |
Opzioni | Contiene le opzioni del prompt fornite nella chiamata per avviare il prompt. |
Le proprietà del risultato del sistema di riconoscimento richiesta sono:
Proprietà | Descrizione |
---|---|
Completato | Indica se il sistema di riconoscimento è riuscito ad analizzare l'input. |
Valore | Valore restituito dal sistema di riconoscimento. Se necessario, il codice di convalida può modificare questo valore. |
Uso dei dialoghi
I dialoghi possono essere considerati uno stack programmatico definito stack di dialoghi, con il gestore dei turni che lo coordina e che funge da fallback se lo stack è vuoto. L'elemento superiore in tale stack viene considerato il dialogo attivo e il contesto della finestra di dialogo indirizza tutti gli input alla finestra di dialogo attiva.
Quando inizia una finestra di dialogo, viene eseguito il push nello stack ed è ora la finestra di dialogo attiva. Rimane la finestra di dialogo attiva finché non termina, viene rimossa dal metodo di dialogo sostituisci oppure un altro dialogo viene eseguito il push nello stack (dal gestore di turni o dal dialogo attivo stesso) e diventa la finestra di dialogo attiva. Al termine della nuova finestra di dialogo, viene rimosso dallo stack e la finestra di dialogo successiva diventa nuovamente la finestra di dialogo attiva. In questo modo è possibile ripetere un dialogo o creare un ramo di una conversazione come descritto di seguito.
È possibile iniziare o continuare una finestra di dialogo radice usando il metodo di estensione della finestra di dialogo di esecuzione . Dal codice del bot chiamare il metodo di estensione dell'esecuzione della finestra di dialogo continua la finestra di dialogo esistente oppure avvia una nuova istanza della finestra di dialogo se lo stack è attualmente vuoto. Controllo e input utente passa alla finestra di dialogo attiva nello stack.
Il metodo run richiede una funzione di accesso alla proprietà di stato per accedere allo stato della finestra di dialogo. La funzione di accesso viene creata e usata allo stesso modo delle altre funzioni di accesso allo stato, ma viene creata come proprietà in base allo stato della conversazione. I dettagli sulla gestione dello stato sono disponibili nell'argomento relativo alla gestione dello stato e l'uso dello stato del dialogo viene illustrato nella procedura relativa al flusso di conversazione sequenziale.
Dall'interno di una finestra di dialogo è possibile accedere al contesto del dialogo e usarlo per avviare altri dialoghi, terminare la finestra di dialogo corrente ed eseguire altre operazioni.
Per iniziare un dialogo
Dall'interno di una finestra di dialogo a cascata passare l'ID della finestra di dialogo che si desidera avviare nel contesto della finestra di dialogo a cascata usando il metodo begin dialog, prompt o replace dialog .
- I metodi del prompt e iniziano la finestra di dialogo eseguiranno il push di una nuova istanza della finestra di dialogo a cui si fa riferimento nella parte superiore dello stack.
- Il metodo replace dialog rimuoverà il dialogo corrente dallo stack e vi inserirà quello sostitutivo. Il dialogo sostituito viene annullato e tutte le informazioni contenute in tale istanza vengono eliminate.
Usare il parametro options per passare informazioni alla nuova istanza del dialogo. Le opzioni passate nel nuovo dialogo sono accessibili tramite la proprietà options del contesto di qualsiasi passaggio del dialogo. Per altre informazioni, vedere Come creare un flusso di conversazione avanzato usando rami e cicli.
Per continuare un dialogo
All'interno di una finestra di dialogo a cascata, usare la proprietà valori del contesto del passaggio per mantenere lo stato tra turni. Qualsiasi valore aggiunto a questa raccolta in un turno precedente è disponibile nei turni successivi. Per altre informazioni, vedere Come creare un flusso di conversazione avanzato usando rami e cicli.
Per terminare un dialogo
All'interno di una finestra di dialogo a cascata, usare il metodo di dialogo finale per terminare una finestra di dialogo eliminandolo dallo stack. Il metodo della finestra di dialogo finale può restituire un risultato facoltativo al contesto padre, ad esempio il dialogo che lo ha chiamato o il gestore dei turni del bot. Questo metodo viene in genere chiamato dall'interno del dialogo per terminare l'istanza corrente del dialogo stesso.
È possibile chiamare il metodo end dialog da qualsiasi punto in cui è presente un contesto del dialogo, ma verrà visualizzato nel bot che è stato chiamato dal dialogo attivo corrente.
Suggerimento
È consigliabile chiamare in modo esplicito il metodo di dialogo finale alla fine della finestra di dialogo.
Per cancellare tutti i dialoghi
Per rimuovere tutti i dialoghi dallo stack, è possibile cancellare lo stack di dialoghi chiamando il metodo cancel all dialogs del contesto del dialogo.
Ripetizione di un dialogo
Con il metodo replace dialog è possibile sostituire un dialogo con se stesso, creando un ciclo. Questo è un ottimo modo per gestire interazioni complesse e una tecnica per la gestione dei menu.
Nota
Se è necessario mantenere lo stato interno per la finestra di dialogo corrente, è necessario passare le informazioni alla nuova istanza della finestra di dialogo nella chiamata al metodo di dialogo di sostituzione e quindi inizializzare la finestra di dialogo in modo appropriato.
Creare un ramo di una conversazione
Il contesto di dialogo gestisce lo stack di dialoghi e per ogni dialogo nello stack tiene traccia del passaggio successivo. Il metodo begin dialog crea un elemento figlio e inserisce tale dialogo in cima allo stack, mentre il metodo end dialog rimuove il dialogo che si trova in cima allo stack. End dialog viene in genere chiamato dall'interno del dialogo che sta per terminare.
Un dialogo può iniziare un nuovo dialogo nello stesso set di dialoghi chiamando il metodo begin dialog del contesto del dialogo e fornendo l'ID del nuovo dialogo, rendendolo così attivo. Il dialogo originale viene mantenuto nello stack, ma le chiamate al metodo continue dialog del contesto del dialogo vengono inviate solo al dialogo nella parte superiore dello stack, che è il dialogo attivo. Quando un dialogo viene prelevato dallo stack, il contesto del dialogo riprende dal passaggio successivo della cascata dello stack nel punto in cui è stato interrotto il dialogo originale.
È così possibile creare un ramo nel flusso di conversazione includendo in un dialogo un passaggio che prevede la scelta condizionale di un dialogo da avviare in un set di dialoghi disponibili.
Informazioni aggiuntive
- Per altre informazioni sui dialoghi adattivi, vedere Introduzione ai dialoghi adattivi.
- Per informazioni sulle competenze, vedere Informazioni sulle competenze.