In Dialogflow ansehen
Klicken Sie auf Weiter, um das Beispiel „Daten speichern“ in Dialogflow zu importieren. Führen Sie dann die folgenden Schritte aus, um das Beispiel bereitzustellen und zu testen:
- Geben Sie einen Agent-Namen ein und erstellen Sie einen neuen Dialogflow-Agent für das Beispiel.
- Nachdem der Agent importiert wurde, klicken Sie auf Zum Agent.
- Klicken Sie im Hauptnavigationsmenü auf Fulfillment (Auftragsausführung).
- Aktivieren Sie den Inline-Editor und klicken Sie auf Bereitstellen. Der Editor enthält den Beispielcode.
- Gehen Sie im Hauptnavigationsmenü zu Integrationen und klicken Sie dann auf Google Assistant.
- Aktivieren Sie im angezeigten modalen Fenster die Option Automatische Vorschau der Änderungen und klicken Sie auf Testen, um den Actions Simulator zu öffnen.
- Geben Sie im Simulator
Talk to my test app
ein, um das Beispiel zu testen.
Nutzer haben dann unter anderem die Möglichkeit, Daten abwechselnd oder über mehrere Unterhaltungen hinweg zu speichern. Das ist hilfreich, wenn du in einer einzelnen Unterhaltung nützliche Aufforderungen bereitstellen, für mehrere Sitzungen Spielstände speichern oder sich kleine Informationen für einen Nutzer merken möchtest.
Die Anforderungen variieren leicht, je nachdem, ob Sie Daten in einer Unterhaltung oder in mehreren Unterhaltungen speichern müssen. Zum Speichern von Daten in einer Unterhaltung können Sie das Feld conversationToken
des AppResponse
-Objekts verwenden.
So speichern Sie Daten in verschiedenen Unterhaltungen:
- Bestimmen Sie, ob der Nutzer bestätigt ist oder ein Gast ist.
- Nutzerdaten können im Feld
userStorage
desAppResponse
-Objekts gespeichert oder abgerufen werden.
Daten zwischen den Unterhaltungsthreads speichern
Das Feld conversationToken
ist ein String, der ein verschlüsseltes Token enthält, das bei jeder Unterhaltung in der Aktion wiederholt wird. Wenn Sie beispielsweise den Wert in Ihrer AppResponse
für die erste Runde der Unterhaltung auf "count=1"
setzen, enthält die von der Aktion für die zweite Richtung empfangene AppRequest
in der conversationToken
deren "count=1"
.
Das Token wird immer zu Beginn einer Unterhaltung mit einem leeren String initialisiert. Wenn Sie die Node.js-Clientbibliothek von Actions on Google verwenden, können Sie mithilfe von conv.data
eine Verbindung zum Unterhaltungstoken als JSON-Objekt herstellen. Dabei ist conv
Ihre Instanz von Conversation
.
Im folgenden Beispiel wird gezeigt, wie Sie einen Zähler im Feld conversationToken
von AppResponse
speichern:
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
Im JSON-Code unten wird eine Webhook-Antwort beschrieben, in der outputContexts
anstelle von conversationToken
verwendet wird.
{ "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
Im JSON-Code unten wird eine Webhook-Antwort beschrieben.
{ "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}}" }
Ein praktisches Beispiel für eine Praxis finden Sie in unserem Leitfaden Bereitstellung von nützlichen Aufforderungen und Fehler bei reibungsloser Ausführung.
Daten in mehreren Unterhaltungen speichern
Das Feld userStorage
des AppResponse
-Objekts ist ein String, der ein verschlüsseltes Token enthält, das von der Aktion bereitgestellt wird, die in Unterhaltungen für einen bestimmten Nutzer gespeichert wird. Beispielsweise kann ein Spiel den höchsten Wert eines Nutzers in userStorage
speichern und seinen Wert jedes Mal in der Willkommensnachricht verwenden, wenn der Nutzer eine neue Unterhaltung beginnt.
Status der Nutzerbestätigung ermitteln und verarbeiten
Der Überprüfungsstatus eines Nutzers kann den Wert GUEST
oder VERIFIED
haben. Zu Beginn jeder Unterhaltung legt Actions on Google den Bestätigungsstatus des Nutzers anhand verschiedener Indikatoren fest, wenn die Unterhaltung beginnt. Ein Beispiel: Ein Nutzer, der auf seinem Mobilgerät in Google Assistant angemeldet ist, hat den Bestätigungsstatus VERIFIED
.
Ein Nutzer kann den folgenden Überprüfungsstatus haben: GUEST
:
- Der Nutzer hat persönliche Ergebnisse deaktiviert.
- Der Nutzer hat die Web- & App-Aktivitäten deaktiviert. Für einige Nutzer ist diese Einstellung möglicherweise auf Domainebene deaktiviert.
- Wenn Voice Match auf einem Gerät aktiviert ist und die Übereinstimmung fehlschlägt oder der Nutzer Assistant aufruft, ohne die Stimme zu verwenden (z. B. lange auf Google Home drücken).
- Der Nutzer ist nicht angemeldet.
Prüfe immer den Bestätigungsstatus des Nutzers, bevor du Daten mit userStorage
speicherst oder einen Kontoverknüpfungsvorgang startest, um zu verhindern, dass Gastnutzer mit einer Funktion interagieren, die nicht funktioniert.
Wenn Sie die Actions On Google-Clientbibliothek für Node.js verwenden, können Sie den Nutzerspeicher mithilfe von conv.user.storage
als JSON-Objekt konfigurieren, wobei conv
Ihre Instanz von Conversation
ist. Im folgenden Beispiel wird gezeigt, wie Sie einen Zähler im Feld userStorage
von AppResponse
speichern:
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
Im JSON-Code unten wird eine Webhook-Antwort beschrieben.
{ "payload": { "google": { "expectUserResponse": false, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Alright, I'll store that for next time. See you then." } } ] }, "userStorage": "{\"data\":{\"sum\":68}}" } } }
JSON
Im JSON-Code unten wird eine Webhook-Antwort beschrieben.
{ "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}}" }
Praktische Beispiele findest du in unserem Leitfaden Unterhaltung mit Nutzereinstellungen personalisieren.
Rechtlicher Hinweis: Wird vor dem Zugriff auf userStorage
eingeholt.
In einigen Ländern sind Entwickler verpflichtet, die Einwilligung des Nutzers einzuholen, bevor er userStorage
aufrufen und bestimmte Informationen wie personenbezogene Daten speichern kann. Wenn Sie in einem dieser Länder tätig sind und auf diese Informationen zugreifen oder sie in userStorage
speichern möchten, müssen Sie den Bestätigungsassistent verwenden, um die Einwilligung des Nutzers einzuholen und die Einwilligung einzuholen, bevor Sie diese Informationen in userStorage
speichern können.
Ablauf des Nutzerspeichers
Wenn Assistant eine Identität dem Nutzer zuordnen kann, laufen die Inhalte von userStorage
nie ab und nur der Nutzer oder die Aktion selbst kann sie löschen.
Wenn Assistant eine Identität dem Nutzer nicht zuordnen kann, wird der Inhalt von userStorage
am Ende der Unterhaltung gelöscht. Hier sind einige Beispiele, in denen Assistant keine Identität für den Nutzer abgleichen kann:
- Voice Match ist eingerichtet und es gibt keine Übereinstimmung.
- Der Nutzer hat personenbezogene Daten deaktiviert.
Inhalt des Felds „userStorage“ löschen
Du kannst den Inhalt des Felds userStorage
deiner Aktion löschen. Setze dazu das Feld resetUserStorage
deiner AppResponse
auf „true“. Wenn Sie den Wert von userStorage
auf einen leeren String setzen, bleibt der Wert von userStorage
in der nächsten Unterhaltungsrunde unverändert. So wird verhindert, dass das gesamte userStorage
zurückgesendet wird, wenn der Inhalt unverändert ist.
Wenn Sie die Actions On Google-Clientbibliothek für Node.js verwenden, können Sie einfach den Wert von conv.user.storage
auf {}
(leeres Objekt) setzen.
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
Im JSON-Code unten wird eine Webhook-Antwort beschrieben.
{ "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
Im JSON-Code unten wird eine Webhook-Antwort beschrieben.
{ "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\":{}}" }
Als Nutzer können Sie den Inhalt des Felds userStorage
in einer von Ihnen aufgerufenen Aktion aufrufen. Sie können die gespeicherten Nutzerdaten auch aus dieser Aktion entfernen, indem Sie den Dienst daran hindern, sich an Sie zu erinnern.
- Öffne die Assistant-App auf deinem Smartphone.
- Tippen Sie auf das Leistensymbol.
- Suchen Sie auf dem Tab Entdecken die Aktion, die Sie aufrufen oder löschen möchten, und tippen Sie darauf, um die Detailseite zu öffnen.
- Scrollen Sie zum Ende der Seite.
- Tippen Sie auf [Gespeicherte Daten anzeigen], um den Inhalt des Felds
userStorage
zu sehen. - Wenn Sie die gespeicherten Nutzerdaten entfernen möchten, tippen Sie auf $action nicht mehr speichern.
- Tippen Sie auf [Gespeicherte Daten anzeigen], um den Inhalt des Felds