Salvare i dati nella conversazione (Dialogflow)

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:

  1. Inserisci il nome di un agente e crea un nuovo agente Dialogflow per l'esempio.
  2. Al termine dell'importazione dell'agente, fai clic su Vai all'agente.
  3. Nel menu di navigazione principale, vai ad Fulfillment.
  4. Attiva l'editor incorporato, quindi fai clic su Esegui il deployment. L'editor contiene il codice di esempio.
  5. Nel menu di navigazione principale, vai a Integrazioni, quindi fai clic su Assistente Google.
  6. Nella finestra modale visualizzata, attiva Anteprima automatica delle modifiche e fai clic su Test per aprire il simulatore di azioni.
  7. Nel simulatore, inserisci Talk to my test app per testare il campione.
Continua

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:

  1. Determina se l'utente è verificato o è ospite.
  2. Archivia o accedi ai dati utente utilizzando il campo userStorage dell'oggetto AppResponse.

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.

  1. Apri l'app Assistente Google sul tuo telefono.
  2. Tocca l'icona del riquadro a scomparsa.

  3. 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.
  4. 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.