Salvare i dati nella conversazione (Dialogflow)

Esplora in Dialogflow

Fai clic su Continua per importare il nostro campione di dati salvato in Dialogflow. Poi segui le passaggi di seguito per eseguire il deployment e testare l'esempio:

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

Oltre a offrire un'esperienza utente eccellente, spesso è possibile risparmiare dati tra i vari passaggi di una conversazione o in più conversazioni con un utente. È utile se fornisci suggerimenti utili in una singola conversazione, salvare i punteggi delle sessioni o ricordare piccole informazioni per un utente.

I requisiti variano leggermente a seconda che sia necessario salvare i dati in un conversazione o tra una conversazione e l'altra. Per salvare i dati in una conversazione, puoi: utilizza il campo conversationToken dell'oggetto AppResponse.

Per salvare i dati delle conversazioni, segui questi passaggi:

  1. Determina se l'utente è verificato o un ospite.
  2. Archiviare o accedere ai dati utente utilizzando il campo userStorage di l'oggetto AppResponse.
di Gemini Advanced.

Il salvataggio dei dati tra una conversazione e l'altra

Il campo conversationToken è una stringa contenente un token opaco che viene ricircolo sull'Azione a ogni turno di conversazione. Ad esempio, se imposti il valore a "count=1" in AppResponse per il primo turno delle conversazione, la AppRequest ricevuta dall'azione per il secondo turno della conversazione contiene "count=1" nel relativo conversationToken.

Il token è sempre inizializzato in una stringa vuota all'inizio di un conversazione. Se utilizzi Nella libreria client di Actions on Google Node.js, puoi con il token di conversazione come oggetto JSON utilizzando conv.data, dove conv è la tua istanza di Conversation.

L'esempio seguente mostra come salvare un contatore in conversationToken campo 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 seguente 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 codice JSON seguente 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}}"
}

Consulta la nostra sezione Fornire risposte utili e correggere gli errori con grazia guida alle best practice per un esempio pratico.

Salvataggio dei dati tra le conversazioni

Il campo userStorage dell'oggetto AppResponse è una stringa che contiene un token opaco fornito dall'Azione che viene salvato conversazioni per un determinato utente. Ad esempio, un gioco può salvare di un utente in userStorage e utilizza il relativo valore nel messaggio di benvenuto ogni l'inizio di una nuova conversazione.

Determinare e gestire lo stato di verifica degli utenti

Lo stato di verifica di un utente può avere il valore GUEST o VERIFIED. Al all'inizio di ogni conversazione, Actions on Google imposta la verifica dell'utente automaticamente in base a una serie di indicatori all'inizio della conversazione. Come uno Ad esempio, un utente che ha eseguito l'accesso all'Assistente Google sul proprio dispositivo mobile ha una stato della verifica di VERIFIED.

Di seguito sono riportati i possibili motivi per cui un utente ha lo stato di verifica GUEST:

  • L'utente ha disattivato i risultati personali.
  • L'utente ha disattivato l'opzione Web & Attività nelle app. Tieni presente che alcuni utenti potrebbero avere disabilitato questa impostazione a livello di dominio.
  • Se su un dispositivo è attiva Voice Match e la corrispondenza non va a buon fine o l'utente richiama all'assistente senza usare i comandi vocali (ad esempio, una pressione prolungata su un Home).
  • L'utente non ha eseguito l'accesso.

Controlla sempre lo stato di verifica dell'utente prima di archiviare i dati con userStorage o avviare un flusso di collegamento dell'account per impedire agli utenti ospiti di interagendo con una caratteristica che non riuscirà.

Se utilizzi la libreria client di Actions On Google per Node.js, puoi interfacciarti con lo spazio di archiviazione utente come oggetto JSON utilizzando conv.user.storage, dove conv è la tua istanza di Conversation. La l'esempio seguente mostra come salvare un contatore nel campo userStorage della 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 codice JSON seguente 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 codice JSON seguente 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}}"
}

Consulta Personalizzare la conversazione con le preferenze dell'utente guida alle best practice per un esempio pratico.

Nota legale: ottenere il consenso prima di accedere a userStorage. Alcuni paesi hanno normative che richiedono agli sviluppatori di ottenere il consenso l'utente prima che possa accedere o salvare determinate informazioni (ad esempio informazioni) nel userStorage. Se operi in una di queste categorie paesi e che vuoi visualizzare o salvarli in userStorage, devi utilizzare Assistente per la conferma da chiedere il consenso dell'utente e ottenere il consenso prima che tu possa iniziare ad archiviare tali informazioni in userStorage.

Scadenza dello spazio di archiviazione dell'utente

Quando l'assistente è in grado di associare un'identità all'utente, i contenuti userStorage non scade mai e può essere annullato solo dall'utente o dall'azione stessa.

Quando l'assistente non è in grado di associare un'identità all'utente, i contenuti La voce userStorage è stata cancellata al termine della conversazione. Ecco alcuni esempi casi in cui l'assistente non riesce ad associare un'identità all'utente:

  • Voice Match è configurato, ma non c'è corrispondenza.
  • L'utente ha disattivato i dati personali.

Cancella i contenuti 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 userStorage rimane invariato nel prossimo turno della conversazione. Questo consente di evitare di inviare l'intero userStorage a turni in cui i suoi contenuti non corrispondono modifica.

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 codice JSON seguente 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 codice JSON seguente 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\":{}}"
}

In qualità di utente, puoi visualizzare il contenuto del campo userStorage in un'azione richiamato. Puoi anche rimuovere i dati utente memorizzati da quell'azione specifica impedendo al servizio di memorizzare le tue informazioni.

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

  3. Nella scheda Esplora, trova l'azione che vuoi visualizzare o cancellare l'utente. spazio di archiviazione e toccalo per aprire la pagina dei dettagli.
  4. Scorri fino alla fine della pagina.
    • Per visualizzare i contenuti del campo userStorage, tocca [Visualizza dati memorizzati].
    • Per rimuovere i dati utente memorizzati, tocca Impedisci a $action di memorizzare i miei dati.