1. Prima di iniziare
In questo codelab, imparerai a creare un chatbot per la vendita al dettaglio con Dialogflow CX, una piattaforma di IA conversazionale (CAIP) per la creazione di UI conversazionali. Dialogflow CX può implementare agenti virtuali, come chatbot, voicebot, gateway telefonici e supportare più canali in oltre 50 lingue diverse.
Questo codelab ti guiderà nella creazione di un chatbot per il sito web di un'attività di vendita al dettaglio. L'attività fittizia per cui stiamo creando il chatbot si chiama G-Records. G-Records è una casa discografica di musica rock con sede in California. La casa discografica ha firmato 4 band rock: Alice Googler, G's N' Roses, The Goo Fighters e The Google Dolls. G-Records vende merchandising della band a tutti i fan del rock.
Al termine di questo codelab, puoi utilizzare il chatbot per ordinare magliette o musica oppure per chiedere informazioni sul tuo ordine.
Obiettivi didattici
Scoprirai i vantaggi di Dialogflow CX rispetto a Dialogflow ES facendo pratica. Sono inclusi i seguenti concetti:
- Come creare un agente virtuale Dialogflow CX in Google Cloud
- Scopri come creare flussi
- Scopri come creare entità
- Scopri come creare intent
- Scopri come creare pagine e pagine di transizione con gestori dello stato
- Scopri come eseguire la transizione delle pagine con le route per intent
- Scopri come eseguire la transizione delle pagine con parametri e percorsi con condizioni
- Scopri come restituire risposte condizionali con le funzioni di sistema
- Scopri come creare messaggi di riserva
- Scopri come utilizzare il simulatore
- Scopri come creare scenari di test e test di copertura
Il design finale dell'agente Dialogflow CX sarà il seguente:
Che cosa ti serve
- Per creare un agente Dialogflow CX, devi disporre di un indirizzo Gmail/dell'identità Google.
- Accesso a Google Cloud.
2. Configurazione dell'ambiente
Crea un progetto Google Cloud
Poiché Dialogflow CX viene eseguito in Google Cloud, devi creare un progetto Google Cloud. che organizza tutte le risorse Google Cloud. È composto da un insieme di collaboratori, API abilitate (e altre risorse), strumenti di monitoraggio, dati di fatturazione e controlli di autenticazione e accesso.
Quando crei un nuovo progetto, devi inserire un nome del progetto. Inoltre, dovrai collegarlo a un account di fatturazione e a un'organizzazione esistenti.
Un account di fatturazione viene utilizzato per definire chi deve pagare un determinato insieme di risorse e può essere collegato a uno o più progetti. L'utilizzo del progetto viene addebitato all'account di fatturazione collegato. Nella maggior parte dei casi, la fatturazione viene configurata quando crei un progetto. Per ulteriori informazioni, consulta la documentazione relativa alla fatturazione. Verifica che la fatturazione sia attivata per il tuo progetto Cloud.
Abilita l'API Dialogflow
Per utilizzare Dialogflow, devi abilitare l'API Dialogflow per il tuo progetto.
- Seleziona il progetto per cui vuoi attivare l'API e fai clic su Continua.
- Comprimi il menu API e servizi e fai clic su Crea credenziali
- Fai clic su Dati dell'applicazione.
- Di' No, non li sto utilizzando perché per il momento non stai utilizzando Kubernetes Engine, App Engine o Cloud Functions.
- Fai clic su Fine.
Creare un nuovo agente Dialogflow CX
Per creare un nuovo agente Dialogflow CX, apri prima la console Dialogflow CX:
- Scegli il progetto Google Cloud creato in precedenza.
- Fai clic su Crea agente.
Compila il modulo per le impostazioni di base dell'agente:
- Puoi scegliere qualsiasi nome visualizzato.
- Come località, scegli us-central1
- Seleziona il fuso orario che preferisci.
- Seleziona en - English come lingua predefinita
Fai clic su Crea.
Bene, è tutto a posto. Finalmente possiamo iniziare a creare il modello del nostro agente virtuale.
3. Flussi
I dialoghi complessi spesso coinvolgono più argomenti di conversazione. Nel caso del chatbot che stiamo creando per G-Records, per la vendita di merchandising della band, avremmo dialoghi sul catalogo dei prodotti, sul pagamento, sullo stato degli ordini e sulle domande dell'assistenza clienti. Potremmo suddividere gli argomenti della conversazione in flussi.
I flussi consentono ai team di lavorare su singoli percorsi di conversazione. Una buona pratica è semplificare il flusso, in modo che si adatti facilmente a uno schermo ed è più modulare.
I flussi sono un nuovo concetto di Dialogflow CX. Dialogflow Essentials ha il concetto di Mega Agent, che sono in qualche modo simili ai flussi. Tuttavia, utilizzerai i flussi molto più spesso.
Più avanti in questo lab, utilizzeremo gli handler di stato che possono terminare un flusso (quindi tornerà a un flusso successivo o precedente) oppure puoi terminare l'intera sessione dell'agente.
Andiamo a creare alcuni flussi.
Creazione di flussi
- In Dialogflow CX, fai clic sull'icona + > Crea flusso.
- Specifica il nome:
Catalog
e premi Invio.
Il tuo primo catalogo del flusso è stato creato. Ora crea gli altri flussi:
Order Process
My Order
Customer Care
Più avanti in questo lab imposteremo i gestori dello stato della pagina, in modo che la visualizzazione abbia il seguente aspetto:
Simulatore
Sul lato destro della console Dialogflow CX puoi testare l'agente virtuale con il simulatore integrato. Puoi testare la conversazione dall'inizio o da un determinato flusso.
- Fai clic sul pulsante Test agente in alto a destra nella schermata.
- Nel campo Parla con un agente, scrivi:
Hello
L'agente virtuale risponderà con un messaggio di benvenuto predefinito: Un saluto da Google. Come posso aiutarti?
Modifichiamo questo testo di benvenuto predefinito.
Default Start Flow
Inizia creando una route dell'intent che verrà attivata una volta accolto l'agente virtuale.
- Nella barra laterale Build > Flussi a sinistra, fai clic su Flusso di inizio predefinito e seleziona il nodo dell'albero Inizio.
Si aprirà la pagina Inizia. È stata selezionata automaticamente la home page nella sezione della barra laterale Crea > Pagine.
- In Start > Routes, fai clic su Default Welcome Intent (Intent di benvenuto predefinito).
Un intent classifica l'intenzione di un utente finale per un turno di conversazione. In Dialogflow CX, gli intent possono far parte di un gestore dello stato per indirizzare la pagina o l'implementazione attiva successiva
- Rimuovi tutte le voci Agente dice e aggiungi questo nuovo testo:
Welcome, I am the virtual agent of G-Records, a fictional rock label. You can order artists merchandise, ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?
Per semplificare la conversazione, avremo anche bisogno di alcuni pulsanti di risposta rapida / chip di suggerimento.
- Fai clic su Aggiungi opzione di dialogo > Payload personalizzato e utilizza lo snippet di codice riportato di seguito.
- Utilizza lo snippet di codice riportato di seguito come payload personalizzato e fai clic su Salva.
Per saperne di più sui payload personalizzati, consulta la documentazione.
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Which artists?"
},
{
"text": "Which products?"
},
{
"text": "About my order..."
}
]
}
]
]
}
- Prova l'intent di benvenuto nel simulatore.
Probabilmente ti starai chiedendo perché non riesci a vedere i contenuti avanzati. Questo perché i contenuti avanzati, come i chip di suggerimento, dipendono da un'integrazione. I passaggi seguenti richiedono un account di fatturazione, ma puoi saltarli se non ne hai uno.
- Nella barra laterale di sinistra, fai clic su Gestisci > Integrazioni.
- Scegli Dialogflow Messenger e fai clic su Connetti.
- Nella finestra popup, fai clic su Attiva.
Verrà visualizzato un altro popup, questa volta con codice JavaScript di integrazione che puoi incollare nel sito web per integrare il componente Dialogflow Messenger nel sito. Dato che non abbiamo ancora un sito web, testeremo l'agente virtuale direttamente nello strumento.
- Fai clic sul link Prova ora.
- Fai clic sull'icona del chatbot in basso a destra per aprire la finestra della chat. Scrivi
Hello
per avviare la conversazione.
Per il momento, quando fai clic sui chip di suggerimento, l'agente virtuale non capisce cosa intendi. Questo perché il nostro agente virtuale non passa ancora da uno stato all'altro. Possiamo farlo in Dialogflow CX con Pages. Continuiamo con il lab. Per prima cosa creeremo alcune entità e intent.
4. Tipi di entità
I tipi di entità vengono utilizzati per controllare il modo in cui vengono estratti i dati dall'input dell'utente finale. I tipi di entità di Dialogflow CX sono molto simili a quelli di Dialogflow ES. Dialogflow fornisce entità di sistema predefinite che possono corrispondere a molti tipi comuni di dati. Ad esempio, esistono entità di sistema per la corrispondenza di date, orari, colori, indirizzi email e così via. Puoi anche creare entità personalizzate per la corrispondenza dei dati personalizzati.
Inizia preparando tutte le entità personalizzate prima di progettare le pagine in un flusso. Creeremo le seguenti entità:
Creazione di entità
Creiamo un'entità Artista.
- Fai clic su Gestisci > Tipi di entità.
- Fai clic su + Crea.
- Nome visualizzato:
Artist
- Entità:
The Google Dolls
(con sinonimo:Google Dolls
)The Goo Fighters
(con sinonimo:Goo Fighters
)G's N' Roses
(con sinonimo:Gs and Roses
)Alice Googler
- Fai clic su Opzioni avanzate e seleziona Corrispondenza approssimativa. Se lo scrivi in modo errato, potrebbe comunque corrispondere all'entità corretta.
- In Opzioni avanzate seleziona anche Oscura nel log. Se digiti il nome del cinturino in modo errato, il nome nel registro verrà corretto.
- Fai clic su Salva.
Abbiamo anche bisogno di un'entità per l'elemento Merch:
- Fai clic su Gestisci > Tipi di entità
- Fai clic su + Crea.
- Nome visualizzato:
Merch
- Entità:
T-shirt
Longsleeve
(con sinonimo:Longsleeve shirt
)Tour Movie
Digital Album
(con sinonimo:MP3 Album
,MP3
)CD
(con sinonimiDisc
,Physical CD
)
- Fai clic su Salva.
È necessaria anche un'entità per l'Album:
- Fai clic su Gestisci > Tipi di entità.
- Fai clic su + Crea.
- Nome visualizzato:
Album
- Entità:
Live
Greatest Hits
(con sinonimo:Hits
)
- Fai clic su Salva.
Abbiamo anche bisogno di un'entità per le taglie di abbigliamento:
- Fai clic su Gestisci > Tipi di entità.
- Fai clic su + Crea.
- Nome visualizzato:
ShirtSize
- Entità:
XS
(con sinonimo:Extra Small
)S
(con sinonimo:Small
)M
(con sinonimo:Medium
)L
(con sinonimo:Large
)XL
(con sinonimo:Extra Large
)2XL
(con sinonimo:Extra Extra Large
)3XL
- Fai clic su Salva.
e un'entità per i numeri d'ordine, che in genere sono 4 alfanumerici e 3 numeri. (ad esempio ABCD123)
- Fai clic su Gestisci > Tipi di entità
- Fai clic su + Crea.
- Nome visualizzato:
OrderNumber
- Entità Regexp
- Entità: [A-Z]{4}[0-9]{3}
- Fai clic su Salva.
La configurazione dell'entità dovrebbe essere simile alla seguente:
@Artista:
@Merch:
@Album:
@ShirtSize:
@NumeroOrdine:
Una volta preparate le entità personalizzate, possiamo preparare gli intent. Continuiamo il lab.
5. Intent
Un intent classifica l'intenzione di un utente finale per un turno di conversazione. In Dialogflow CX sono stati semplificati notevolmente e non sono più un componente di base per il controllo conversazionale. Dialogflow CX utilizza gli intent solo per trovare una corrispondenza con ciò che dicono gli utenti. In Dialogflow ES, dovevi collegare tutto a un'intenzione (parametri, eventi, adempimento e così via). Gli intent in Dialogflow CX contengono solo frasi di addestramento e, di conseguenza, sono riutilizzabili. Non controlla più la conversazione. Pertanto, la procedura di creazione degli intent sarà semplice:
Le frasi di addestramento negli intent possono utilizzare le entità per estrarre l'input "variabile", motivo per cui è buona norma creare in anticipo i tipi di entità, come abbiamo fatto nella pagina precedente della procedura del laboratorio.
Creazione di intent
Iniziamo preparando tutti gli intent prima di poter progettare le pagine in un flusso.
- Fai clic su Gestisci > Intent.
- Fai clic su + Crea.
Utilizza i seguenti dettagli:
- Nome visualizzato
redirect.artists.overview
- Descrizione
Artists overview: The bands supported by the label
Scorri verso il basso e crea le seguenti frasi di addestramento:
Which bands are signed?
Which bands
Which artists
Which artists are part of the record label
Who is part of the label
From which bands can I buy merchandise
Band merchandise
Which music do you have?
I would like to know who are signed to the label
Who are supported by the label
From who can I buy shirts
What music can I order
Can I get an overview of all the artists
- Fai clic su Salva.
- Ora continuiamo e creiamo tutti gli altri intent. Usa la tua immaginazione per creare altre frasi di addestramento. Una best practice consiste nell'avere almeno 10 frasi di addestramento per ogni intento per coprire i diversi modi in cui un utente potrebbe attivare l'intento. Ai fini di questo lab, anche un numero inferiore di utenti dovrebbe andare bene.
Ecco un paio di aspetti da controllare:
- Tieni presente che quando inserisci la frase di addestramento, Dialogflow CX annullerà automaticamente le tue entità. In caso contrario, potrebbe essere necessario aggiornare l'entità (aggiungendo un sinonimo) o annotare manualmente la frase di addestramento.
- Frasi di addestramento più brevi: il sistema NLU di Dialogflow può funzionare anche con frasi di addestramento più brevi e abbiamo fornito un paio di esempi qui.
- Sovrallenamento: troppe frasi di addestramento per un intento possono causare un sovraaddestramento e un risultato meno auspicabile. È buona norma utilizzare test iterativi e incrementali e aggiungere frasi di addestramento nel caso in cui non venga trovata una corrispondenza con un'intenzione.
Nome visualizzato | Frasi di addestramento |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ora che gli elementi riutilizzabili (flussi, entità e intent) sono pronti, possiamo riunirli creando pagine e gestori dello stato.
6. Pagine e gestori dello stato
Una conversazione Dialogflow CX (una sessione) può essere descritta e visualizzata come una macchina a stati finiti. Prendiamo ad esempio una macchinetta automatica, che potrebbe essere modellata come una macchina a stati finiti. Ha i seguenti stati: In attesa di monete, Seleziona caramella, Dai caramella e, a seconda di un insieme di input, passa da uno stato all'altro. Ad esempio, l'inserimento di una moneta fa passare la macchinetta automatica da In attesa di monete a Seleziona caramella. Le pagine ci consentono di modellare questi stati per un agente virtuale Dialogflow CX.
Quando un utente finale interagisce con Dialogflow CX in una conversazione, la conversazione passa da una pagina all'altra, quindi in un determinato momento è attiva esattamente una pagina, che è considerata attiva, così come il flusso associato a quella pagina.
Per ogni flusso, devi definire molte pagine in cui le pagine combinate possono gestire una conversazione completa sugli argomenti per cui è stato progettato il flusso. Ogni flusso ha una pagina iniziale speciale. Quando un flusso diventa inizialmente attivo, la pagina iniziale diventa la pagina corrente. Per ogni turno di conversazione, la pagina corrente rimarrà invariata o passerà a un'altra pagina. Questo concetto ti consentirà di creare agenti più grandi con molte pagine e più turni di conversazione.
Le pagine contengono comandi (dialoghi di inserimento statici e/o webhook), parametri e gestori dello stato. Il controllo della conversazione avviene tramite gestori degli stati, che ti consentono di creare vari percorsi di transizione per passare a un'altra pagina di Dialogflow CX, anche rendendoli condizionali (per il branching delle conversazioni).
Lo stato di una conversazione viene controllato gestendo le transizioni tra le pagine con tre diversi tipi di percorsi:
- Route per intent: quando deve essere trovata una corrispondenza con un intent (ad es. cambiare pagina in base a ciò che dice un utente finale). (linee blu nel diagramma visivo).
- Percorsi delle condizioni: quando deve essere verificata una condizione (ad es. cambiare pagina in base a determinati parametri memorizzati nella sessione) (linee arancioni nel diagramma visivo).
- Gestori di eventi: quando deve essere gestito un determinato evento di riserva (ad es. gestione di nessun input, nessuna corrispondenza, per disambiguare l'utente finale in base a un percorso di intent o condizione) (linee verdi nel diagramma visivo).
Le frasi della conversazione (ovvero i contenuti o la risposta all'utente) sono definite dal fulfillment, che può essere statico o dinamico:
- Completamento statico: quando viene fornita una risposta di completamento statica.
- Evasione dinamica: quando viene chiamato un webhook di evasione per le risposte dinamiche
Per il nostro bot di vendita al dettaglio, creeremo alcuni percorsi di intenti e forniremo alcune risposte di completamento dell'inserimento statico, che verranno presentate all'utente non appena viene attivata una pagina. In seguito, creeremo parametri con percorsi di condizioni per raccogliere le informazioni necessarie per effettuare un ordine di merce.
Route intent pagina
Creazione delle pagine nel flusso di avvio predefinito
Di seguito è riportato un diagramma di flusso del flusso di inizio predefinito:
Fai clic qui insieme a me:
- Fai clic su Crea > Flusso di inizio predefinito.
- Fai clic sulla pagina iniziale.
- Fai clic sull'icona + accanto a Percorsi.
- Aggiungi redirect.artists.overview
- Scorri verso il basso fino a Transizione e passa al flusso Catalogo.
- Fai clic su Salva.
- Ripeti i passaggi precedenti per
redirect.product.overview
e le altre 11 righe di questa tabella:
Pagina (in-flow) | Percorsi > Intent | Percorsi > Passa a |
Inizia |
| - |
Inizia |
| Flusso: Catalogo |
Inizia |
| Flusso: Catalogo |
Inizia |
| Flusso: Catalogo |
Inizia |
| Flusso: Catalogo |
Inizia |
| Flusso: Catalogo |
Inizia |
| Flusso: Catalogo |
Inizia |
| Flow: Assistenza clienti |
Inizia |
| Flow: Assistenza clienti |
Inizia |
| Flow: Assistenza clienti |
Inizia |
| Flow: Il mio ordine |
Inizia |
| Flow: Il mio ordine |
Inizia |
| Flow: Il mio ordine |
Inizia |
| Pagina: Termina sessione |
Il flusso di inizio predefinito funziona come un menu di opzioni quando chiami un call center. Tuttavia, in questo agente virtuale viene addestrato con il linguaggio naturale, con le frasi di addestramento negli intent. Pertanto, l'interazione è basata sulla conversazione e non sulle opzioni DTMF ed è più naturale e simile a quella umana.
Creazione delle pagine nel flusso del catalogo
La seguente trascrizione della chat appartiene al flusso Catalog:
> "Hi"
"Welcome, I am the virtual agent of G-Records, a fictional rock label.
You can order artists merchandise, ask questions about your order or shipping,
and I can tell you more which artists are currently signed with us. How can I help?"
> "Which bands are signed with this record label?"
"The following bands are signed with G-Records:
Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
From which of these artists would you like to order merchandise?"
> "Alice Googler"
"You want to rock with Alice Googler merchandise. Awesome!
We sell shirts, music or the tour movie.
Which merchandise item do you want?"
"(Suggestion chips: [Shirts] [Music] [Tour Movie])"
> "I would like to buy a Shirt"
"Do you want a longsleeve or a t-shirt?"
"(Suggestion chips: [T-shirt, Longsleeve, Price?])"
> "What's the price difference?"
"A t-shirt costs $25 and a longsleeve costs $30.
Do you want a longsleeve or a t-shirt?"
> "A t-shirt",
"What shirt size do you want?"
"(Suggestion chips: [XS, S, M, L, XL, 2XL, 3XL])"
> "M"
"A T-shirt of Alice Googler size: M costs $25. Shall I continue to order?"
Il dialogo sarà diverso se scegli Musica o Filmato del tour: per la musica, il dialogo sarà il seguente:
> "Music"
"We have a Greatest Hits Album or the Live Album. Which one do you want?"
"(Suggestion chips: [Greatest Hits, Live, Price?])"
> "The Live Album"
"Do you want this album on CD or MP3?"
"(Suggestion chips: [CD, MP3])"
> "What's the price difference?"
"A CD costs $15. The digital album on MP3 costs $10.
Do you want this album on CD or MP3?"
> "Digital Album",
"The Digital Album: Alice Googler - Live costs $10. Shall I continue to order?"
Per il Video tour, la finestra di dialogo avrà il seguente aspetto:
> "Tour Movie"
"The Tour Movie of G's N' Roses costs $25. Shall I continue to order?
Ecco un diagramma di flusso di tutte le pagine del flusso del catalogo:
Nota la complessità di questo flusso:
- Potrei saltare la domanda su quali artisti e chiedere subito "Quali articoli di merchandising sono disponibili".
- Dal flusso di inizio predefinito, potrei chiedere: "Voglio acquistare la t-shirt delle bambole Google" o "Voglio acquistare qualcosa". Ciò significa che l'agente virtuale farà domande di follow-up per compilare gli spazi per questi parametri obbligatori. Vai direttamente alla pagina del prodotto.
- La finestra di dialogo Prezzo proviene dalla pagina Prezzo che verrà riutilizzata.
- Anche se il dialogo del film del tour sembra essere il più semplice, in realtà faremo qualcosa di speciale. Riutilizzeremo questa parte del dialogo, in modo che gli utenti finali possano inserirla direttamente anche per uno degli altri prodotti, se specializzano tutte le informazioni contemporaneamente:
> "I want The Goo Fighters longsleeve size S."
"The longsleeve of The Goo Fighters size S costs $30. Shall I continue to order?"
Iniziamo collegando le pagine.
- Fai clic su Crea > Catalogo
- Fai clic sulla Home page.
- Fai clic sull'icona + accanto a Percorsi.
- Aggiungi redirect.artists.overview
- Scorri verso il basso fino a Transizione, seleziona Pagina e scegli + Nuova pagina.
- Utilizza il nome della pagina:
Artist Overview
e fai clic su Salva.
Ora completiamo il resto del flusso:
- I passaggi precedenti possono essere ripetuti con le seguenti pagine, intenzioni e implementazioni. Prendi il controllo di questa tabella. Pagina è la pagina che selezioni nel flusso, Percorsi > Passa a è il nuovo flusso o la nuova pagina che creerai e a cui passerai.
Pagina (in-flow) | Percorsi > Intent | Percorsi > Transizione a |
Catalog Start |
| Panoramica dell'artista |
Catalog Start |
| Prodotto |
Catalog Start |
| Panoramica del prodotto |
Catalog Start |
| Panoramica del prodotto |
Catalog Start |
| Camicie |
Inizio catalogo |
| Musica |
Inizio catalogo |
| Termina sessione |
Catalog Start |
| Termina flusso |
Panoramica dell'artista |
| Panoramica del prodotto |
Ora continuiamo e aggiungiamo altri completamenti statici.
- Nel flusso del catalogo, fai clic sulla pagina Panoramica dell'artista.
- Fai clic su Modifica adempimento nella sezione Adempimento delle richieste.
- Utilizza le seguenti implementazioni statiche (Agente dice):
The following bands are signed with G-Records: Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
- Fai clic su Salva.
- Nel flusso del catalogo, fai clic sulla pagina Panoramica prodotto.
- Fai clic su Modifica adempimento nella sezione Adempimento delle richieste.
- Utilizza la seguente esecuzione statica (Agente dice):
We sell shirts, music or the tour movie.
- Fai clic su Salva.
Parametri pagina
I parametri vengono utilizzati per acquisire e fare riferimento ai valori forniti dall'utente finale durante una sessione. Ogni parametro ha un nome e un tipo di entità. @Artist
e @Merch
sono i parametri minimi che dobbiamo raccogliere per effettuare un ordine di merchandising. Per le t-shirt o le maniche lunghe, devi anche raccogliere @ShirtSize
e, se vuoi ordinare musica, ti serviranno anche i nomi @Carrier
e @Album
.
Questi parametri dovranno essere contrassegnati come obbligatori. Una volta che è richiesto, ti consigliamo di fornire prompt personalizzati per ricordare l'utente finale, in modo che fornisca le risposte corrette per consentire la raccolta di questi parametri. Esistono alcuni meccanismi in Dialogflow CX che possono aiutarti.
Ad esempio, puoi fornire messaggi di adempimento statici personalizzati nella sezione Parametro. Se il parametro è obbligatorio, verranno mostrate queste sostituzioni. Questi messaggi di risposta verranno aggiunti alla coda di risposta. Durante il turno di un agente, è possibile (e a volte auspicabile) chiamare più adempimenti, ognuno dei quali può generare un messaggio di risposta. Dialogflow gestisce queste risposte in una coda di risposta. Per scoprire di più sul ciclo di vita della pagina e sull'ordine in cui questi adempimenti verranno aggiunti alla coda di risposta, leggi la documentazione relativa alle pagine Dialogflow CX.
Creazione dei parametri nella pagina Panoramica dell'artista
Definiamo alcuni parametri di pagina:
- Nel flusso Catalogo, fai clic sulla pagina Panoramica dell'artista.
- Fai clic sul segno + nel blocco Parametri. Aggiungi il parametro artist:
- Nome visualizzato:
artist
- Tipo di persona giuridica:
@Artist
- Obbligatorio: verifica
- Oscura nel log: verifica
- Ora aggiungeremo alcuni messaggi di completamento dei parametri personalizzati. Se il parametro artist non è stato ancora raccolto dall'agente virtuale, l'utente finale riceverà questa risposta dell'agente aggiunta alla coda delle risposte:
From which of these artists would you like to order merchandise?
- Aggiungi una seconda opzione di dialogo che fornisca chip di suggerimenti avanzati. Fai clic su Aggiungi opzione di dialogo e utilizza questo codice (in JSON):
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
È possibile gestire diversi prompt di adempimento alternativo in base al numero di tentativi con cui l'utente finale ha cercato di rispondere. Potresti usare i gestori di eventi dei parametri. Puoi scegliere tra vari gestori di eventi integrati, ad esempio Parametri non validi, Espressioni troppo lunghe, Nessun input, Nessun input 1° tentativo, 2° tentativo o Nessuna corrispondenza. La differenza tra nessun input e nessuna corrispondenza è che, nel primo caso, l'utente non ha mai fornito una risposta, mentre nel secondo caso l'utente ha fornito una risposta, ma Dialogflow CX non è stato in grado di associarla a una pagina.
- Scorri verso il basso fino alla sezione Gestori di eventi richiesti.
- Fai clic su Aggiungi gestore eventi e seleziona l'evento:
No-match default
- Utilizza la seguente erogazione di testo statica dell'evento:
I missed that. Please, specify the artist. You can choose between: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
- Fai clic su Salva.
- Fai clic su Aggiungi gestore eventi e seleziona l'evento:
No-input default
- Utilizza la seguente erogazione di testo statica dell'evento:
I am sorry, I could understand the artist's name. You can choose between Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
- Fai clic su Salva.
Percorsi delle condizioni della pagina
I parametri sono molto efficaci se combinati con i percorsi condizionali della pagina. Quando una condizione restituisce il valore true, viene chiamato il percorso pagina associato. Una condizione potrebbe essere Un parametro è uguale a un valore specifico, Un parametro non può mancare, Un modulo è stato completato e molte altre. Puoi trovare ulteriori informazioni su Parametri e Condizioni nella documentazione di Dialogflow CX.
Per il nostro agente virtuale per la vendita al dettaglio, dovremo raccogliere una sequenza di parametri, quindi dovremo creare una condizione per verificare se è stato completato un "modulo". Un modulo è un elenco di parametri che devono essere raccolti dall'utente finale per la pagina. L'agente virtuale interagisce con l'utente finale per più turni di conversazione, finché non ha raccolto tutti i parametri del modulo richiesti, noti anche come parametri di pagina.
Dialogflow CX imposta automaticamente i valori dei parametri forniti dall'utente finale durante la compilazione del modulo. Per verificare se il modulo completo della pagina corrente è compilato, utilizza la seguente condizione: $page.params.status = "FINAL"
Creazione delle route condizionali nella pagina Panoramica dell'artista
Creiamo un percorso condizionale che passerà alla pagina successiva una volta conosciuto l'artista:
- Nella pagina Panoramica dell'artista, fai clic sull'icona + nella sezione Percorsi.
- Scorri verso il basso fino alla sezione Condizione.
- Seleziona Almeno una (OPPURE)
- Ora scriveremo un'espressione
- Parametro:
$page.params.status
- Operatore:
=
- Valore:
"FINAL"
- Ora creeremo un messaggio di adempimento statico specifico nel percorso, che confermerà la scelta dell'utente finale. Scorri verso il basso fino al blocco Fulfillment e scrivi i seguenti messaggi di evasione:
$session.params.artist, great choice! Rock on!
You want to rock with $session.params.artist merchandise. Awesome!
- Quando la condizione è vera, devi passare alla pagina Panoramica dei prodotti. Scorri verso il basso fino alla sezione Transizione e utilizza la pagina seguente:
Product Overview
- Fai clic su Salva.
Creazione delle route nella pagina Panoramica del prodotto
Ora che sappiamo come creare parametri e percorsi condizionali, creiamo altri parametri per le seguenti pagine:
Panoramica del prodotto
- Crea il parametro
artist
nella pagina Panoramica prodotto:
- Nome visualizzato:
artist
- Tipo di persona giuridica:
@Artist
- Obbligatorio: verifica
- Oscuramento nel log: selezionato
- Soddisfazione del prompt iniziale:
From which of these artists would you like to order merchandise?
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
- Gestore eventi >
No-match default
:To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
- Payload personalizzato:
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
- Gestore eventi >
No-input default
:To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist were you trying to mention?
- Payload personalizzato:
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
- Crea il parametro
merch
:
- Nome visualizzato:
merch
- Tipo di persona giuridica:
@Merch
- Obbligatorio: verifica
- Oscura nel log: verifica
- Evasione degli ordini:
Which merchandise item do you want?
- Fai clic su Aggiungi opzione di dialogo > Payload personalizzato:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Shirts"
},
{
"text": "Music"
},
{
"text": "Tour movie"
}
]
}
]
]
}
- Gestore eventi >
No-match default
- Adempimento del gestore di eventi:
We sell Shirts, Music or the Tour movie. Which of these items do you want?
- Payload personalizzato:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Shirts"
},
{
"text": "Music"
},
{
"text": "Tour movie"
}
]
}
]
]
}
- Gestore eventi >
No-input default
- Adempimento del gestore di eventi:
I couldn't understand which merchandise item you wanted to buy. You can choose between: Shirts, Music or the Tour movie. Which item do you want?
- Payload personalizzato:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Shirts"
},
{
"text": "Music"
},
{
"text": "Tour movie"
}
]
}
]
]
}
- Crea una route che passi alla pagina Prodotto quando viene fornito
artist
e l'elementomerch
.
- Condizione:
- Corrisponde a OGNI regola (AND)
- Espressione:
$session.params.artist != null
- Espressione:
$session.params.merch != null
- Adempimento:
Alright! $session.params.merch of $session.params.artist, let's go!
- Transizione: Pagina:
Product
- Crea un percorso per i casi in cui l'utente dice "Camicie"
- Intent: redirect.shirts
- Transizione: pagina:
Shirts
- Crea una route per quando l'utente dice "Musica"
- Intent: redirect.music
- Transizione: Pagina:
Music
- Crea un percorso per quando l'utente chiede informazioni sui prezzi
- Intent: redirect.price
- Transizione: crea nuova pagina:
Price
Dopo aver impostato la configurazione precedente, visualizzerai una visualizzazione simile all'immagine di seguito. Tieni presente che i percorsi degli intent sono blu nel diagramma e quelli delle condizioni sono arancioni. Anche se non sono rappresentati, i gestori di eventi sono verdi e quando più tipi di route passano a una pagina, la linea è grigia.
A questo punto, hai imparato a creare flussi, entità, intent e pagine con gestori dello stato come percorsi intent e percorsi condizionali basati su parametri. Più avanti in questo lab, utilizzeremo il branching condizionale nell'implementazione per fornire dialoghi diversi in base all'input.
Per completare il nostro agente virtuale, puoi utilizzare le seguenti configurazioni.
Pagina Camicie:
- Crea le seguenti configurazioni nella pagina Magliette:
- Adempimento delle voci:
Do you want a longsleeve or a t-shirt?
- Payload personalizzato per l'evasione delle voci:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
},
{
"text": "Price?"
}
]
}
]
]
}
- Crea un route intent:
redirect.price
con una transizione alla paginaPrice
- Crea il seguente parametro:
- Parametro:
merch
- Tipo di entità:@Merch
,Required
eRedact in log
- Parametro > Gestore eventi >
No-match default
- Parametro > Adempimento gestore eventi:
You can choose between a t-shirt or a longsleeve. Which of these do you want?
- Parametro > Payload personalizzato per l'elaborazione dell'handler evento:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
}
]
}
]
]
}
- Parametro > Gestore eventi >
No-input default
- Parametro > Completamento gestione eventi:
I couldn't understand if you want the t-shirt or the longsleeve. Which of these do you want?
- Parametro > Payload personalizzato del gestore di eventi:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
}
]
}
]
]
}
- Fai clic sul completamento dell'inserimento e scorri verso il basso fino a Preimpostazioni dei parametri. Ogni volta che la pagina Camicie diventa attiva, il parametro della categoria viene impostato su camicie:
Parametro | Valore |
|
|
- Aggiungi una route condizionale:
- Corrispondenza con almeno una regola (OR)
- Espressione:
$session.params.merch = "T-shirt"
- Espressione:
$session.params.merch = "Longsleeve"
- Transizione alla nuova pagina:
Shirt Size
Pagina del prezzo:
Poiché i messaggi relativi ai prezzi dipendono dall'articolo o dalla categoria di merchandising scelta (musica o magliette), correggeremo questa parte in un secondo momento nel lab. Per il momento, è sufficiente inserire un segnaposto.
- Crea le seguenti configurazioni nella pagina Prezzo:
- Evasione della voce:
PRICE TODO
Poiché puoi richiedere il prezzo in vari punti della conversazione, il bot dovrebbe sempre darti una risposta e rimetterti alla parte precedente del dialogo per continuare l'ordine. Nella struttura ad albero della conversazione ci sono cinque punti in cui puoi eseguire un ramo per ottenere informazioni sui prezzi. (Maglia, Taglia M, Musica, Vettore e anche direttamente tramite un Intent Route), quindi avremo bisogno di alcuni percorsi condizionali per tornare indietro:
- Aggiungi una route condizionale:
- Corrispondenza con ogni regola (AND)
- Espressione:
$session.params.category = "shirts"
- Espressione:
$session.params.merch = "null"
- Transizione alla nuova pagina:
Shirts
- Aggiungi una route condizionale:
- Corrispondenza con ogni regola (AND)
- Espressione:
$session.params.category = "shirts"
- Espressione:
$session.params.size = "null"
- Transizione alla nuova pagina:
Shirt Size
- Aggiungi una route condizionale:
- Corrisponde a OGNI regola (AND)
- Espressione:
$session.params.category = "music"
- Espressione:
$session.params.album = "null"
- Transizione alla nuova pagina:
Music
- Aggiungi una route condizionale:
- Corrisponde a OGNI regola (AND)
- Espressione:
$session.params.category = "music"
- Espressione:
$session.params.merch = "null"
- Transizione alla nuova pagina:
Carrier
- Aggiungi una route condizionale:
- Corrisponde a OGNI regola (AND)
- Espressione:
$session.params.category = "null"
- Transizione alla nuova pagina:
Product Overview
Pagina taglia camicia:
- Crea le seguenti configurazioni nella pagina Misura camicia:
- Evasione della voce:
What shirt size do you want?
- Payload personalizzato per l'evasione delle voci:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- Crea un'route intent:
redirect.price
con una transizione alla paginaPrice
. - Crea il seguente parametro:
- Parametro:
shirtsize
- Tipo di entità:@ShirtSize
-Required
,Redact In Log
- Parametro > Gestore eventi >
No-match default
- Parametro > Completamento gestione eventi:
Please tell me the shirt size, such as XL.
- Parametro > Payload personalizzato del gestore di eventi:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- Parametro > Gestore eventi >
No-input default
- Parametro > Adempimento gestore eventi:
I couldn't understand the shirt size. What size do you want?
- Parametro > Payload personalizzato per l'elaborazione dell'handler evento:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- Aggiungi una route condizionale:
- Corrisponde a OGNI regola (AND)
- Espressione:
$page.params.shirtsize != "null"
- Passa alla pagina:
Product
Pagina Musica:
- Crea le seguenti configurazioni nella pagina Musica:
- Adempimento delle voci:
We have a Greatest Hits Album or the Live Album. Which one do you want?
- Payload personalizzato per l'evasione delle voci:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
},
{
"text": "Price?"
}
]
}
]
]
}
- Crea un route intento:
redirect.price
con una transizione alla pagina:Price
. - Crea il seguente parametro:
- Parametro:
album
- Tipo di entità:@Album
-Required
,Redact In Log
- Parametro > Gestore eventi >
No-match default
- Parametro > Adempimento gestore eventi:
You can choose between Greatest Hits and Live Album. Which of these do you want?
- Parametro > Payload personalizzato per l'elaborazione dell'handler evento:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
}
]
}
]
]
}
- Parametro > Gestore eventi >
No-input default
- Parametro > Adempimento gestore eventi:
I couldn't understand if you want the album: Greatest Hit or Live. Which of these do you want?
- Parametro > Payload personalizzato per l'elaborazione dell'handler evento:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
}
]
}
]
]
}
- Fai clic sul completamento dell'elemento e scorri verso il basso fino a Preimpostazioni dei parametri. Ogni volta che la pagina Musica diventa attiva, il parametro della categoria viene impostato su music:
Parametro | Valore |
|
|
- Aggiungi una route condizionale:
- Corrispondenza con ogni regola (AND)
- Espressione:
$page.params.album != "null"
- Passa alla pagina:
Carrier
Pagina dell'operatore:
- Crea le seguenti configurazioni nella pagina Operatore:
- Adempimento delle voci:
Do you want this album on CD or MP3?
- Payload personalizzato per il completamento delle voci:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "MP3"
},
{
"text": "Price?"
}
]
}
]
]
}
- Crea una route intent:
redirect.price
che passa alla paginaPrice
. - Crea il seguente parametro:
- Parametro:
merch
- Tipo di entità:@Merch
-Required
,Redact In Log
- Parametro > Gestore eventi >
No-match default
- Parametro > Adempimento gestore eventi:
Do you want a physical CD or the digital album?
- Parametro > Adempimento gestore evento: payload personalizzato:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "Digital Album"
}
]
}
]
]
}
- Parametro > Gestore eventi >
No-input default
- Parametro > Completamento gestione eventi:
I couldn't understand if you mean CD or MP3. Which one do you want?
- Parametro > Adempimento gestore evento: payload personalizzato:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "MP3"
}
]
}
]
]
}
- Aggiungi una route condizionale:
- Corrisponde a OGNI regola (AND)
- Espressione:
$page.params.merch != "null"
- Passa alla pagina:
Product
Pagina del prodotto:
- Crea i seguenti parametri:
Nome visualizzato parametro | Tipo di entità parametro | Controlli |
|
| Obbligatorio, Oscuramento nel log |
|
| Obbligatorio, Oscuramento nel log |
- Il parametro artist richiede il completamento della seguente richiesta iniziale, che verrà mostrata quando l'artista non è noto.
You didn't mention which artist you are interested in. You can ask me to buy the $session.params.merch of the artist you like or ask which artists we signed. How can I help?
{
"richContent": [
[
{
"options": [
{
"text": "Which artists?"
}
],
"type": "chips"
}
]
]
}
- Aggiungi anche un gestore di eventi
No-input default
con il completamento:I couldn't understand what you just said. Ask me which artists are signed.
- E un gestore di eventi
No-match default
con fulfillment:I missed that. Please ask me which artists are signed.
- Anche il parametro merch richiede gestori di eventi di richiesta di nuovo.
- Aggiungi un gestore eventi
No-input default
con il completamento:I couldn't understand what you just said. Which merchandise item do you want?
- E un gestore di eventi
No-match default
con adempimento:I missed that. Which merchandise item do you want?
Il percorso successivo passerà alla pagina di conferma quando l'artista è noto e l'utente sceglie un "Film del tour".
- Aggiungi una route condizionale:
- Corrispondenza con ogni regola (AND)
- Espressione:
$session.params.artist != null
- Espressione:
$session.params.merch = "Tour Movie"
- Parametri preimpostati Aggiungi parametro >
price = 25
- Transizione alla nuova pagina:
Confirmation
Il percorso successivo passerà alla pagina di conferma quando l'artista è noto e l'utente sceglie una "T-shirt" e la taglia della camicia.
- Aggiungi una route condizionale:
- Espressione personalizzata:
$session.params.artist != null AND $session.params.merch = "T-shirt" AND $session.params.shirtsize != null
- Parametri preimpostati Aggiungi parametro >
price = 25
- Transizione alla pagina:
Confirmation
Il percorso successivo passerà alla pagina di conferma quando l'artista viene conosciuto e l'utente sceglie una "manica lunga" e viene scelta la taglia della maglietta.
- Aggiungi una route condizionale:
- Espressione personalizzata:
$session.params.artist != null AND $session.params.merch = "Longsleeve" AND $session.params.shirtsize != null
- Parametri preimpostati Aggiungi parametro >
price = 30
- Transizione alla pagina:
Confirmation
Il percorso successivo passerà alla pagina di conferma quando l'artista è noto e l'utente sceglie un "CD", nonché il nome dell'album.
- Aggiungi una route condizionale:
- Espressione personalizzata:
$session.params.artist != null AND $session.params.merch = "CD" AND $session.params.album != null
- Parametri preimpostati Aggiungi parametro >
price = 15
- Transizione alla pagina:
Confirmation
Il percorso successivo passerà alla pagina di conferma quando l'artista è noto e l'utente sceglie un "Album digitale" e il nome dell'album.
- Aggiungi una route condizionale:
- Espressione personalizzata:
$session.params.artist != null AND $session.params.merch = "Digital Album" AND $session.params.album != null
- Parametri preimpostati Aggiungi parametro >
price = 10
- Transizione alla pagina:
Confirmation
Ora creeremo alcune condizionali avanzate con prompt che rilevano informazioni mancanti. Il percorso successivo tornerà alla pagina della musica quando l'artista è noto e l'utente sceglie un "CD" o un "Album digitale", ma il nome dell'album non è stato scelto.
- Aggiungi una route condizionale:
- Espressione personalizzata:
$session.params.artist != null AND ($session.params.merch = "CD" OR $session.params.merch = "Digital Album") AND $session.params.album = null
- Evasione degli ordini:
I would also need to know which album you would like to buy!
- Transizione alla pagina:
Music
L'ultimo percorso passerà alla pagina di conferma quando l'artista è noto e l'utente sceglie una "T-shirt" o una "Longsleeve", ma non ha scelto la taglia della t-shirt.
- Aggiungi una route condizionale:
- Espressione personalizzata:
$session.params.artist != null AND ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve") AND $session.params.shirtsize = null
- Adempimento:
I would also need to know which shirt size you need!
- Transizione alla pagina:
Shirt Size
Nella parte successiva del lab, utilizzeremo i completamenti condizionali per fornire messaggi di completamento diversi a seconda dell'input.
7. Risposte condizionali
Alcune risposte restituiranno un dialogo diverso in base all'input. I dialoghi si dirameranno, si tratta delle risposte condizionali. Questo può diventare interessante se non utilizzi i fulfillment webhook, in cui le risposte condizionali sono state determinate sul backend. Un esempio potrebbe essere:
if [condition]
[response]
elif [condition]
[response]
elif [condition]
[response]
else
[response]
endif
- Un esempio di [condizione] potrebbe essere:
$session.params.user-age >= 21
. Utilizza una formattazione simile a quella delle condizioni nei percorsi. - Una [risposta] accetta la risposta testuale statica
- Le risposte condizionali iniziano sempre con
if
elif
eelse
blocchi sono facoltativi
Dialogflow CX può anche utilizzare le funzioni di sistema integrate. Ad esempio, per formattare una data o un'ora o per visualizzare l'ora corrente ($sys.func.NOW()
)
Finalizziamo il flusso Catalogo correggendo le pagine Conferma e Prezzo.
Pagina di conferma:
Ora creeremo la pagina di conferma. Prevede i seguenti requisiti:
- Se merch è CD o Digital Album. Nella conferma verranno visualizzati i seguenti campi: artist, merch, album e price.
- Se merch è T-shirt o Longsleeve. Nella conferma verranno visualizzati i seguenti campi: artist, merch, size e price.
- In caso contrario (e quindi se merch è Tour Movie). Nella conferma verranno visualizzati i seguenti campi: artist, merch e price.
- Fai clic sulla pagina di conferma.
- Fai clic su Modifica fulfillment > Risposte dell'agente > opzione Aggiungi dialogo > Risposta condizionale:
if ($session.params.merch = "CD" OR $session.params.merch = "Digital Album")
The $session.params.merch: $session.params.artist - $session.params.album costs $$session.params.price. Shall I continue to order?
elif ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve")
A $session.params.merch of $session.params.artist size: $session.params.shirtsize costs $$session.params.price. Shall I continue to order?
elif $session.params.merch = "Tour Movie"
The $session.params.merch of $session.params.artist costs $$session.params.price. Shall I continue to order?
else
It looks like something went wrong with your order. You can say "Reset", to restart the order process.
endif
- Create the following Custom payload:
- Custom payload:
{
"richContent": [
[
{
"options": [
{
"text": "Yes, confirm"
}
],
"type": "chips"
}
]
]
}
Next, create two intent routes:
confirm.proceed.order
transitions to:Order Process
Flow.decline.proceed.order
transitions toEnd Flow
When the user declines the order, and does not want to proceed the order process, we will have to transition back to the welcome page, but all the parameters have to be cleared. We can do this by specifically setting null to all the possible parameters. You can do this with Parameter presets.
- In the decline.proceed.order intent route, scroll down to Parameter presets and add the following parameters:
Parameter | Value |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Notice that we have created an additional parameter called restart
. If this parameter is present, the Default Start Flow, should know to continue the conversation by showing a customized message.
- Click on the Default Start Flow, Start Page, and create another Conditional Route:
$session.params.restart = "true"
- Fulfillment:
"Welcome back, as the virtual agent of G-Records, I can help you order artists merchandise, you can ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?"
- Custom payload:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Which artists?"
},
{
"text": "Which products?"
},
{
"text": "About my order..."
}
]
}
]
]
}
- Select the Start Page and click on the
redirect.end
intent. Create the following fulfillment:Thank you for contacting G-Records! Have a nice day!
Price Page:
Let's also fix the Price TODOs. The price information will be static for now. Click on the Price Page in the Catalog Flow, and use the following entry fulfillment:
- Delete the Agent Says entry fulfillment.
- Create a new Conditional Response:
if $session.params.category = "shirts"
A t-shirt costs $25 and a longsleeve costs $30.
elif $session.params.category = "music"
A CD costs $15. The digital album on MP3 costs $10.
else
A t-shirt costs $25 and a longsleeve costs $30. A CD costs $15 and a digital album on MP3 $10. In case you are interested in the Tour Movie, that one is $25.
endif
Well done, by now you completed the Catalog flow. Your flow should look similar to this diagram:
8. Wrapping up the agent
We are almost at the end of this lab. Let's configure the last flows together, and take in practice all the new things that we have learned.
Creating the My Order Flow
- Go to the My Order Flow, and create the following intent transitions:
Page (In Flow) | Routes > Intent | Routes > Transition To |
My Order Start |
| My Order |
My Order Start |
| My Order Status |
My Order Start |
| My Order Cancellation |
My Order Start |
| End Session |
My Order Start |
| End Flow |
My Order |
| My Order Status |
My Order |
| My Order Cancellation |
Default Start Flow |
| Flow: My Order |
Default Start Flow |
| Flow: My Order |
- Let's create the following entry fulfillment for the My Order Page:
- Entry fulfillment:
I can look up the status of your order, or I can cancel an order.
- In the My Order Page create the following parameter:
- Displayname:
ordernumber
- Entity Type:
@OrderNumber
- Required: checked
- Initial prompt fulfillment:
What's the order number? For example ABCD123.
- Event Handler:
No-match default
:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- Event Handler:
No-input default
:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- Create the following conditional route:
- Customize Expression:
$page.params.status = "FINAL"
- Fulfillment:
And do you want to Cancel your order, or should I look up the status?
- Click on Add state handler > Event Handlers and create the Event Handler:
No-input default
- Fulfillment:
I'm sorry, what was that? Would you like me to cancel an order or look up the status?
- Custom payload:
{
"richContent": [
[
{
"options": [
{
"text": "Status"
},
{
"text": "Cancel"
}
],
"type": "chips"
}
]
]
}
- Create the Event Handler:
No-match default
- Fulfillment:
Would you like me to cancel an order or lookup the status?
- Custom payload:
{
"richContent": [
[
{
"options": [
{
"text": "Status"
},
{
"text": "Cancel"
}
],
"type": "chips"
}
]
]
}
- In the My Order Status Page create the following parameter:
- Displayname:
ordernumber
- Entity Type:
@OrderNumber
- Required checked
- Initial prompt fulfillment:
What's the order number? For example ABCD123.
- Event Handler:
No-match default
:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- Event Handler:
No-input default
:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- In the My Order Status Page create the following conditional route:
- Customize Expression:
$session.params.ordernumber != null
- Fulfillment:
Your order $session.params.ordernumber has been shipped, it can take up to approx 2 weeks before you will receive your items.
- Add dialogue option > Text:
Is there anything else I can help you with?
- In the My Order Cancelation Page create the following parameter:
- Displayname:
ordernumber
- Entity Type:
@OrderNumber
- Required checked
- Initial prompt fulfillment:
What's the order number? For example ABCD123.
- Event Handler:
No-match default
:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- Event Handler:
No-input default
:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- In the My Order Cancelation Page create the following conditional route:
- Customize Expression:
$session.params.ordernumber != null
- Fulfillment:
Your order $session.params.ordernumber has been canceled.
- Add dialogue option > Text:
Is there anything else I can help you with?
- Test the flow and create the following two test scenarios:
>"About my order"
>"ABCD123"
>"Status"
And:
>"What's the status of order DEFG222"
- Select the Start Page and click on the
redirect.end
intent. Create the following fulfillment:Thank you for contacting G-Records! Have a nice day!
- Select the Start Page and click on the
redirect.home
intent. Create the following parameter preset:restart = true
Default Negative intents (Fallback)
When you create a virtual agent, a default negative intent is created for you. You can add training phrases to this intent that act as negative examples that will trigger a No-match event. There may be cases where end-user input has a slight resemblance to training phrases in normal intents, but you do not want these inputs to match any normal intents.
- Try in the simulator:
I don't like Alice Googler
.
You will see that the virtual agent answers with the Product Overview Page, to continue ordering Alice Googler merchandise. However, your end user does not like that artist. Let's use the Default Negative Intent for this.
- Go to Manage > Intents and select the Default Negative Intent.
- Add the following training phrases that will trigger the No-match event.
I don't like Alice Googler
I am not a fan of G's N' Roses
I can't stand the music of the Google Dolls
- Hit Save and test the following sentence in the simulator:
I am really not a fan of the Goo Fighters
This time the No-match
event was triggered, you stayed on the Start Page.
Default Fallback Messages
- Click the Default Start Flow, select the
sys.no-input-default
event handler.
The No-input fallback basically means: No text or speech answers were detected. Likely no answers were given, or the system couldn't hear it. Therefore, let's make the fallback messages more specific. Use the tab key, to create alternative dialogues:
- Remove all answers, and add these text dialogues:
I'm sorry, I didn't receive an answer. Can you say it again?
I missed your answer, can you say it again?
Sorry, I didn't hear anything. Can you say it again?
I couldn't hear what you were saying, what was that?
I'm sorry, I missed your answer. What were you trying to say?
Don't forget to click Save.
- Click the Default Start Flow, select the
sys.no-match-default
event handler.
The No Match fallback basically means: Text or speech answers were detected but nothing in Dialogflow CX got matched.
- Remove all answers, and add these text dialogues:
Sorry, I didn't get that. Can you please rephrase?
I'm sorry, I don't understand. Can you please rephrase?
I don't understand, please rephrase.
Sorry, I didn't get that. What was that?
I didn't get that, can you please rephrase?
Don't forget to click Save.
- It's advised to repeat these steps for the Catalog, My Order, Order Process and Customer Care flows.
Here's a tip: when creating fallback messages, make them more explicit, by rephrasing the previous question or by mentioning an example. You could create these type of No-match and No-input events on Page level when creating parameters. In our labs, we have already done this.
Creating the Order Process Flow
- Go to the Order Process Flow, and create the following intent transitions:
Page (In Flow) | Routes > Intent | Routes > Transition To |
Order Process Start |
| End Session |
Order Process Start |
| End Flow |
Order Process Start |
| New Page: Shipping Details |
- Let's create the following entry fulfillment for the Shipping Details Page:
- Entry fulfillment:
To complete your order I will first need to collect your shipping details.
- Create the following parameters:
These parameters will make use of built-in system entities. System entity support differs for each language. See the docs for more information.
Parameter Display name | Entity | Required? | Initial prompt fulfillment | No-match default | No-input default |
| @sys.person | Required |
|
|
|
| @sys.person | Required |
|
|
|
| @sys.address | Required |
|
|
|
| @sys.any | Required |
|
|
|
| @sys.geo-city | Required |
|
|
|
| @sys.geo-country | Required |
|
|
|
| @sys.email | Required |
|
|
|
- Create the following conditional route:
- Customize Expression:
$page.params.status = "FINAL"
- Transition to new Page:
Payment Details
- Create the following entry fulfillment.
Let's fake it that this virtual agent makes use of Google Pay. Don't worry this tutorial won't make real transactions. Create the following entry dialogues:
- Agent Says:
Alright $session.params.firstname! We will make use of Google Pay, that's connected to your email account: $session.params.email.
- Conditional Response
if $session.params.merch != "Digital Album"
Shipping costs an additional 5 dollars. This will make the total price $$sys.func.TO_TEXT($sys.func.ADD($session.params.price, 5)).
Your merchandise will be shipped to:
$session.params.firstname $session.params.lastname
$session.params.address
$session.params.zipcode $session.params.city
$session.params.country
To continue the order process please explicitly say "I confirm". Do you want to confirm your $session.params.artist $session.params.merch order?
else
The total costs will be: $$session.params.price.
After purchasing the digital album, you will receive an email with the download link.
To continue the order process please explicitly say "I confirm".
Do you want to confirm your $session.params.artist $session.params.merch order?
endif
- Crea la seguente route intent
- Intent:
confirm.proceed.order
- L'agente dice:
Thank you for your order! Your merchandise will be shipped today!
- Aggiungi opzione di dialogo > Testo:
Here's the order number: ABCD123
. - Aggiungi opzione di dialogo > Testo:
Have a good day!
- Transizione:
End Session
- Seleziona la pagina Inizia e fai clic sull'intent
redirect.end
. Crea il seguente fulfillment:Thank you for contacting G-Records! Have a nice day!
- Seleziona la pagina Inizia e fai clic sull'intent
redirect.home
. Crea il seguente preset del parametro:restart = true
Ottimo! A questo punto abbiamo un chatbot per rivenditori reali completamente funzionante. Nel prossimo lab testeremo il rendimento dell'agente virtuale.
9. Testare l'agente virtuale
Puoi utilizzare il simulatore integrato per testare i dialoghi del tuo agente virtuale. Il vantaggio del test dei flussi nel simulatore è che vedrai una panoramica completa di flussi, pagine, parametri ed eventi DTMF raccolti dal simulatore durante l'esplorazione dei flussi. In questo modo, i test sono più semplici rispetto a quelli diretti in un'integrazione, poiché questi tipi di informazioni vengono nascosti all'utente finale. È persino possibile creare scenari di test, salvarli e riutilizzarli. Questo è molto utile quando gestisci o modifichi i flussi nel tempo e vuoi assicurarti che nessuna delle modifiche comprometta il lavoro precedente.
È anche possibile esportare e importare casi di test creati in precedenza archiviandoli in Google Cloud Storage o localmente. L'esportazione di un test comporterà il download di un file BLOB. Per scoprire di più sul simulatore e sui casi di test, consulta la documentazione del simulatore/dei casi di test.
Prima di creare alcuni casi di test, finalizziamo il resto dell'agente virtuale:
Creazione del flusso per l'assistenza clienti
- Vai al flusso Assistenza clienti e crea le seguenti transizioni di intent:
Pagina (in-flow) | Percorsi > Intent | Percorsi > Passa a |
Customer Care Start |
| Spedizione |
Inizio assistenza clienti |
| Rimborso |
Inizio assistenza clienti |
| Scambio |
Customer Care Start |
| Termina flusso |
Customer Care Start |
| Termina sessione |
- Crea le seguenti implementazioni di voci per la pagina Spedizione:
Shipping physical merchandise items can take up to 2 weeks.
Is there anything else I can help you with?
- Crea i seguenti adempimenti per l'inserimento per la pagina Rimborso:
We offer free returns and refunds. We provide one free return label for each order. You can use it within 30 days from receiving your order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.
Is there anything else I can help you with?
- Crea i seguenti adempimenti per l'inserimento per la pagina Scambio:
If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.
Is there anything else I can help you with?
- Seleziona la pagina Start e fai clic sull'intent
redirect.end
. Crea la seguente esecuzione:Thank you for contacting G-Records! Have a nice day!
- Seleziona la pagina Start e fai clic sull'intent
redirect.home
. Crea il seguente preset di parametri:restart = true
Crea scenari di test
- Fai clic sul pulsante Test Agent (Esegui test agente) sul lato destro dello schermo.
Quando apri il simulatore per la prima volta, devi selezionare un ambiente agente e un flusso attivo. Nella maggior parte dei casi, è consigliabile utilizzare l'ambiente bozza e il flusso di avvio predefinito.
- Tipo:
Hi
- Chiedi:
Which artists are signed with your label?
- Di':
The Google Dolls
- Di':
I am interested in buying a shirt
- Di':
A t-shirt
- Di':
Medium
- Ora fai clic sul pulsante Salva test case. che puoi trovare nella parte superiore del simulatore (accanto alla freccia di annullamento e all'icona del cestino di ripristino)
- Assegna i seguenti dettagli:
- Nome del caso di test:
Buy Google Dolls t-shirt size M
- Tag: #catalog, #shirts, #t-shirt, #TheGoogleDolls
- Fai clic su Salva.
Creiamo altri casi di test.
- Cancella innanzitutto la finestra di dialogo corrente, facendo clic sull'icona Ripristina (cestino).
- Crea i seguenti casi di test:
Acquista la t-shirt Alice Googler:
>"Buy the Alice Googler t-shirt."
>"XL"
- Nome dello scenario di test:
Buy the Alice Googler t-shirt
- Tag:
#catalog, #shirts, #t-shirt, #AliceGoogler
Acquista una t-shirt taglia M: (nota: il nome dell'artista non è stato menzionato, ma vuoi saltare la panoramica dei gruppi, la panoramica dei prodotti, le pagine delle magliette e delle taglie delle magliette)
>"Buy a t-shirt size M"
>"The Google Fighters"
- Nome del caso di test:
Buy a t-shirt size M
- Tag:
#catalog, #shirts, #t-shirt, #TheGoogleFighters
- Descrizione: (tieni presente che il nome dell'artista non è stato menzionato, ma vuoi saltare la panoramica delle fasce, la panoramica dei prodotti, le pagine delle magliette e delle taglie delle magliette)
Acquista musica di Guns N' Roses (tieni presente che verrà saltata la pagina di panoramica dei gruppi e dei prodotti)
>"Purchase music of G's N' Roses"
>"Live"
>"CD"
- Nome del caso di test:
Purchase music of G's N' Roses
- Tag:
#catalog, #music, #CD, #GsNRoses, #live
- Descrizione: tieni presente che verrà saltata la pagina Panoramica dei gruppi e Panoramica dei prodotti
Verifica le informazioni sui prezzi:
>"Which products"
>"Shirts"
>"What's the price difference?"
>"Longsleeve"
>"What does it cost?"
>"M"
>"The Google Dolls"
>"No"
>"Which bands"
>"The Gooo Fighters"
>"Music"
>"How much does it cost?"
>"Greatest Hits"
>"What's the price difference?"
>"Mp3"
>"No"
>"I want to buy the tour movie"
>"Alice Googler"
>"Yes"
- Nome dello scenario di test:
Price info
- Tag:
#catalog, #music, #tourmovie, #shirts
- Descrizione: testa le informazioni sui prezzi in vari punti del dialogo
Testare i casi di test preregistrati
- Seleziona Gestisci > Test case nel menu principale di Dialogflow a sinistra.
- Seleziona tutti i casi di test e premi il pulsante Esegui sopra la tabella.
Dialogflow CX eseguirà tutti gli scenari di test selezionati sulla registrazione salvata come "Scenari di test di riferimento". Se i risultati sono gli stessi di quelli salvati, i test sono stati superati. - Se è cambiato qualcosa nei flussi, ad esempio pagine non configurate correttamente o intent che ti hanno indirizzato alle pagine sbagliate, i test non andranno a buon fine.
- Nel simulatore, fai la seguente domanda:
How long will shipping take?
- Prendi nota del risultato e salva lo scenario di test come
Shipping
con il tag:#shipping
. - Vai al riquadro Gestisci > Scenario di test e premi il pulsante Esegui in alto a destra nella griglia, per eseguire solo lo scenario di test
Shipping
.
Questo test dovrebbe essere superato.
- Torna al flusso per l'assistenza clienti, seleziona la pagina Inizia e fai clic sull'intestazione Percorsi.
Verrà visualizzata una schermata con una griglia che mostra tutti i percorsi.
- Rimuovi
redirect.shipping.info route
- Vai al riquadro Gestisci > Casi di test e premi il pulsante Esegui in alto a destra nella griglia per eseguire solo il caso di test
Shipping
.
Questo test non deve riuscire.
- Puoi fare clic sul test non riuscito per visualizzarne i dettagli.
In questo caso, il test non è riuscito e viene visualizzato il messaggio di errore seguente:
Page: Page mismatch:
Expected: Shipping
Actual: Start Page
Il motivo è che la pagina non esiste più nel flusso. Ci aspettavamo la pagina Shipping
, ma non siamo mai usciti dalla pagina Start
. In caso contrario, gli utenti finali riceveranno un messaggio di riserva.
In altre parole, si tratta di una richiesta mancata, un risultato del test Falso negativo. Il test non è riuscito. Ci aspettavamo la pagina Spedizione, ma non succede nulla o viene visualizzato un messaggio di riserva.
- Torna al flusso dell'assistenza clienti e aggiungi
redirect.shipping.info
come percorso per intent alla pagina Inizio. Non dimenticare di passare alla pagina Spedizione e di fare clic su Salva. - Nel simulatore, registra il seguente scenario di test:
I want to swap my item
, salvalo comeSwapping
#swapping
. - Apri Gestisci > Intent > redirect.refund.info e aggiungi la seguente frase di addestramento:
I want to swap this item for a refund
Senza questa frase di addestramento, quando un utente chiede di cambiare un articolo per ottenere un rimborso, viene attivata l'intenzione redirect.swapping.info, ma non vogliamo fornire informazioni sulla sostituzione degli articoli, bensì sui rimborsi.
- Crea il seguente test case di riferimento:
I want to swap this item for a refund
nel simulatore e salvalo comeSwap for Refund
#refund
- Torna all'intent Gestisci > Intent > redirect.refund.info e rimuovi la riga
I want to swap this item for a refund
. - Torna a Gestisci > Casi di test, seleziona il caso di test Scambio con rimborso ed Esegui.
L'ultimo test non è riuscito con il seguente messaggio di errore:
If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.`
Is there anything else I can help you with?
Page: Page mismatch:
Expected: Refund
Actual: Swapping
In altre parole, si tratta di una richiesta non compresa, un risultato del test Falso positivo. Il test non è riuscito. Ci aspettavamo la pagina Rimborso, ma la pagina Scambio si è attivata.
Copertura
In Dialogflow CX, la copertura del test è una misura utilizzata per descrivere il grado in cui il dialogo dell'agente virtuale (pagine e intent) viene eseguito quando viene eseguita una determinata suite di test. Un agente virtuale con una copertura dei test elevata, misurata in percentuale, ha visto eseguire più dialoghi durante i test, il che suggerisce che ha meno probabilità di contenere bug non rilevati (come richieste non comprese) rispetto a un agente virtuale con una copertura dei test ridotta.
- Per visualizzare un report Copertura del test per tutti gli scenari di test, fai clic su Copertura.
- Fai clic sulla scheda Transizioni.
Viene visualizzata la copertura del test per tutte le transizioni di pagina.
- Fai clic sulla scheda Intent.
Verrà visualizzata la copertura del test per tutti gli intent.
Congratulazioni, a questo punto hai creato e testato un esempio completo e reale di un bot per rivenditori. Vai alla pagina successiva del lab per leggere la conclusione e trovare alcuni riferimenti utili.
10. Conclusione
Dialogflow CX è una piattaforma di IA conversazionale (CAIP) per la creazione di agenti virtuali come chatbot o bot vocali. Dialogflow CX consente al tuo team di accelerare la creazione di esperienze di conversazione a livello aziendale tramite builder di bot visivi, intent riutilizzabili e la possibilità di gestire conversazioni con più turni.
In questo codelab hai imparato a creare un agente virtuale per la vendita al dettaglio nel mondo reale. Abbiamo affrontato i seguenti concetti:
- Flussi
- Parametri, entità personalizzate e di sistema
- Pagine
- Gestori di stato come route di intent e route di condizione
- Messaggi di adempimento statici e risposte condizionali
- Intent di riserva
- Simulatore, casi di test e copertura
Riferimenti
Per scoprire di più su Dialogflow CX, dai un'occhiata ai seguenti blog e alla documentazione.