Esplora in Dialogflow
Fai clic su Continua per importare l'esempio di salvataggio dei dati in Dialogflow. Quindi, segui questi passaggi per eseguire il deployment e testare l'esempio:
- Inserisci il nome di un agente e crea un nuovo agente Dialogflow per l'esempio.
- Al termine dell'importazione dell'agente, fai clic su Vai all'agente.
- Nel menu di navigazione principale, vai ad Fulfillment.
- Attiva l'editor incorporato, quindi fai clic su Esegui il deployment. L'editor contiene il codice di esempio.
- Nel menu di navigazione principale, vai a Integrazioni, quindi fai clic su Assistente Google.
- Nella finestra modale visualizzata, attiva Anteprima automatica delle modifiche e fai clic su Test per aprire il simulatore di azioni.
- Nel simulatore, inserisci
Talk to my test app
per testare il campione.
Nell'offrire un'esperienza utente eccellente, spesso è possibile salvare i dati tra una conversazione e l'altra o tra più conversazioni con un utente. Ciò è utile se fornisci risposte utili in un'unica conversazione, salvando i punteggi delle partite di più sessioni o memorizzando piccole informazioni per un utente.
I requisiti variano leggermente a seconda che sia necessario salvare i dati all'interno di una conversazione o tra conversazioni. Per salvare i dati in una conversazione, puoi utilizzare il campo conversationToken
dell'oggetto AppResponse
.
Per salvare i dati di più conversazioni, svolgi i seguenti passaggi:
- Determina se l'utente è verificato o è ospite.
- Archivia o accedi ai dati utente utilizzando il campo
userStorage
dell'oggettoAppResponse
.
Salvataggio di dati tra le fasi di una conversazione
Il campo conversationToken
è una stringa che contiene un token opaco che
viene ricircolato nell'Azione a ogni turno di conversazione. Ad esempio, se imposti il valore su "count=1"
in AppResponse
per il primo turno della conversazione, la AppRequest
ricevuta dall'Azione per il secondo turno della conversazione conterrà "count=1"
.conversationToken
Il token viene sempre inizializzato in una stringa vuota all'inizio di una conversazione. Se utilizzi la libreria client Actions on Google Node.js, puoi interfacciarsi con il token di conversazione come oggetto JSON utilizzando conv.data
, dove conv
è la tua istanza di Conversation
.
Il seguente esempio mostra come salvare un contatore nel campo conversationToken
di AppResponse
:
Node.js
conv.data.firstNum = firstNum; conv.ask(`Got it, the first number is ${firstNum}.`); conv.ask(`What's the second number?`);
Java
ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.getConversationData().put("firstNum", firstNum); responseBuilder.add("Got it, the first number is " + firstNum + "."); responseBuilder.add("What's the second number?"); return responseBuilder.build();
JSON
Tieni presente che il codice JSON di seguito descrive una risposta webhook che utilizza outputContexts
anziché conversationToken
.
{ "payload": { "google": { "expectUserResponse": true, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Got it, the first number is 23." } }, { "simpleResponse": { "textToSpeech": "What's the second number?" } } ] } } }, "outputContexts": [ { "name": "projects/save-data-df-js/agent/sessions/ABwppHGfFkWJdHKPpBEYiGkhdoakWmYj_2sZa4o8pbGG9nj4q5_GfDTtNEXOY34mLX8G4o_d7oZdUW9bnBZC/contexts/_actions_on_google", "lifespanCount": 99, "parameters": { "data": "{\"firstNum\":23}" } } ] }
JSON
Tieni presente che il JSON di seguito descrive una risposta webhook.
{ "expectUserResponse": true, "expectedInputs": [ { "possibleIntents": [ { "intent": "actions.intent.TEXT" } ], "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Got it, the first number is 23." } }, { "simpleResponse": { "textToSpeech": "What's the second number?" } } ] } } } ], "conversationToken": "{\"data\":{\"firstNum\":23}}" }
Per un esempio di utilizzo pratico, consulta la nostra guida alle best practice Fornire richieste utili e operazioni di esito negativo senza errori.
Salvataggio dei dati di più conversazioni
Il campo userStorage
dell'oggetto AppResponse
è una stringa che contiene un token opaco fornito dall'Azione che viene salvato nelle conversazioni di un determinato utente. Ad esempio, un gioco può salvare il punteggio più alto di un utente in userStorage
e utilizzare il relativo valore nel messaggio di benvenuto ogni volta che l'utente avvia una nuova conversazione.
Determinare e gestire lo stato della verifica dell'utente
Lo stato di verifica di un utente può avere un valore pari a GUEST
o VERIFIED
. All'inizio di ogni conversazione, Actions on Google imposta lo stato di verifica dell'utente in base a una serie di indicatori quando inizia la conversazione. Ad esempio, lo stato di verifica di un utente che ha eseguito l'accesso all'Assistente Google sul proprio dispositivo mobile è VERIFIED
.
Di seguito sono riportati i possibili motivi per cui lo stato di verifica di un utente è GUEST
:
- L'utente ha disattivato i risultati personali.
- L'utente ha disattivato la propria Attività web e app. Tieni presente che per alcuni utenti questa impostazione potrebbe essere disabilitata a livello di dominio.
- Se su un dispositivo è attiva la funzionalità Voice Match e la corrispondenza non va a buon fine o l'utente chiama l'assistente senza usare la voce (ad esempio una pressione prolungata su un dispositivo Google Home).
- L'utente non ha eseguito l'accesso.
Controlla sempre lo stato della verifica dell'utente prima di archiviare i dati con
userStorage
o di avviare un flusso di collegamento dell'account per evitare che gli utenti ospiti
interagiscono con una funzionalità che non riuscirà per loro.
Se utilizzi Actions On Google Client Library per Node.js, puoi interfacciarti con lo spazio di archiviazione dell'utente come oggetto JSON utilizzando conv.user.storage
, dove conv
è la tua istanza di Conversation
. Il seguente esempio mostra come salvare un contatore nel campo userStorage
di AppResponse
:
Node.js
app.intent('Save Sum', (conv) => { if (conv.user.verification === 'VERIFIED') { conv.user.storage.sum = conv.data.sum; conv.close(`Alright, I'll store that for next time. See you then.`); } else { conv.close(`I can't save that right now, but we can add ` + `new numbers next time!`); } });
Java
@ForIntent("Save Sum") public ActionResponse saveSum(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); Integer sum = ((Double) request.getConversationData().get("sum")).intValue(); String verificationStatus = request.getUser().getUserVerificationStatus(); if (verificationStatus.equals("VERIFIED")) { responseBuilder.getUserStorage().put("sum", sum); responseBuilder.add("Alright, I'll store that for next time. See you then."); } else { responseBuilder.add("I can't save that right now, but we can add new numbers next time!"); } responseBuilder.endConversation(); return responseBuilder.build(); }
Node.js
if (conv.user.verification === 'VERIFIED') { conv.user.storage.sum = conv.data.sum; conv.close(`Alright, I'll store that for next time. See you then.`); } else { conv.close(`I can't save that right now, but we can add ` + `new numbers next time!`); }
Java
ResponseBuilder responseBuilder = getResponseBuilder(request); Integer sum = ((Double) request.getConversationData().get("sum")).intValue(); String verificationStatus = request.getUser().getUserVerificationStatus(); if (verificationStatus.equals("VERIFIED")) { responseBuilder.getUserStorage().put("sum", sum); responseBuilder.add("Alright, I'll store that for next time. See you then."); } else { responseBuilder.add("I can't save that right now, but we can add new numbers next time!"); } responseBuilder.endConversation(); return responseBuilder.build();
JSON
Tieni presente che il JSON di seguito descrive una risposta webhook.
{ "payload": { "google": { "expectUserResponse": false, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Alright, I'll store that for next time. See you then." } } ] }, "userStorage": "{\"data\":{\"sum\":68}}" } } }
JSON
Tieni presente che il JSON di seguito descrive una risposta webhook.
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Alright, I'll store that for next time. See you then." } } ] } }, "conversationToken": "{\"data\":{\"firstNum\":23,\"sum\":68}}", "userStorage": "{\"data\":{\"sum\":68}}" }
Per un esempio pratico di utilizzo, consulta la nostra guida alle best practice sulla personalizzazione della conversazione con le preferenze dell'utente.
Nota legale: ottenere il consenso prima di accedere a userStorage
.
Alcuni paesi hanno normative che richiedono agli sviluppatori di ottenere il consenso dell'utente prima di poter accedere a determinate informazioni (come le informazioni personali) o di salvare determinate informazioni (come le informazioni personali) in userStorage
. Se operi in uno di questi paesi e vuoi accedere a queste informazioni o salvarle in userStorage
, devi utilizzare l'Assistente per la conferma per chiedere il consenso all'utente e ottenerlo prima di poter iniziare ad archiviare queste informazioni in userStorage
.
Scadenza dello spazio di archiviazione dell'utente
Quando l'assistente può associare un'identità all'utente, i contenuti di userStorage
non scadono mai e solo l'utente o l'Azione stessa possono cancellarli.
Quando l'assistente non riesce ad associare un'identità all'utente, i contenuti di
userStorage
vengono cancellati alla fine della conversazione. Di seguito sono riportati alcuni esempi di casi in cui l'assistente non è in grado di associare un'identità all'utente:
- Voice Match configurato e non corrisponde.
- L'utente ha disattivato i dati personali.
Cancella il contenuto del campo userStorage
Puoi cancellare i contenuti del campo userStorage
dell'Azione
impostando il campo resetUserStorage
di AppResponse
su true. Se
imposti il valore di userStorage
su una stringa vuota, il valore di
userStorage
rimane inalterato nel prossimo turno di conversazione. In questo modo puoi evitare di restituire l'intero userStorage
a turni in cui il suo contenuto non è cambiato.
Se utilizzi la libreria client di Actions on Google per Node.js,
puoi semplicemente impostare il valore di conv.user.storage
su {}
(oggetto vuoto).
Node.js
app.intent('Forget Number', (conv) => { conv.user.storage = {}; conv.ask(`Alright, I forgot your last result.`); conv.ask(`Let's add two new numbers. What is the first number?`); });
Java
@ForIntent("Forget Number") public ActionResponse forgetNumber(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.getUserStorage().clear(); responseBuilder.add("Alright, I forgot your last result."); responseBuilder.add("Let's add two new numbers. What is the first number?"); return responseBuilder.build(); }
Node.js
conv.user.storage = {}; conv.ask(`Alright, I forgot your last result.`); conv.ask(`Let's add two new numbers. What is the first number?`);
Java
ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.getUserStorage().clear(); responseBuilder.add("Alright, I forgot your last result."); responseBuilder.add("Let's add two new numbers. What is the first number?"); return responseBuilder.build();
JSON
Tieni presente che il JSON di seguito descrive una risposta webhook.
{ "payload": { "google": { "expectUserResponse": true, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Alright, I forgot your last result." } }, { "simpleResponse": { "textToSpeech": "Let's add two new numbers. What is the first number?" } } ] }, "userStorage": "{\"data\":{}}" } } }
JSON
Tieni presente che il JSON di seguito descrive una risposta webhook.
{ "expectUserResponse": true, "expectedInputs": [ { "possibleIntents": [ { "intent": "actions.intent.TEXT" } ], "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Alright, I forgot your last result." } }, { "simpleResponse": { "textToSpeech": "Let's add two new numbers. What is the first number?" } } ] } } } ], "userStorage": "{\"data\":{}}" }
Come utente, puoi visualizzare i contenuti del campo userStorage
in un'azione richiamata. Puoi anche rimuovere i dati utente archiviati da quell'Azione specifica, interrompendo la memorizzazione delle tue informazioni da parte del servizio.
- Apri l'app Assistente Google sul tuo telefono.
- Tocca l'icona del riquadro a scomparsa.
- Nella scheda Esplora, trova l'azione per cui vuoi visualizzare o cancellare lo spazio di archiviazione dell'utente e toccala per aprire la pagina dei dettagli.
- Scorri fino alla fine della pagina.
- Per visualizzare i contenuti del campo
userStorage
, tocca [Visualizza dati archiviati]. - Per rimuovere i dati utente archiviati, tocca Interrompi la memorizzazione delle mie informazioni personali per $action.
- Per visualizzare i contenuti del campo