Daten in der Unterhaltung speichern (Dialogflow)

In Dialogflow ansehen

Klicken Sie auf Continue (Weiter), um unser Beispiel zum Speichern von Daten in Dialogflow zu importieren. Folgen Sie dann den mit den folgenden Schritten zum Bereitstellen und Testen des Beispiels:

  1. Geben Sie einen Agent-Namen ein und erstellen Sie einen neuen Dialogflow-Agent für das Beispiel.
  2. Nachdem der Agent importiert wurde, klicken Sie auf Zum Agent.
  3. Klicken Sie im Hauptnavigationsmenü auf Fulfillment (Auftragsausführung).
  4. Aktivieren Sie den Inline-Editor und klicken Sie dann auf Bereitstellen. Der Editor enthält das Beispiel Code.
  5. Klicken Sie im Hauptnavigationsmenü auf Integrations (Integrationen) und dann auf Google Assistant
  6. Aktivieren Sie im angezeigten modalen Fenster die Option Automatische Vorschau der Änderungen und klicken Sie auf Testen. um den Actions-Simulator zu öffnen.
  7. Geben Sie im Simulator Talk to my test app ein, um das Beispiel zu testen.
<ph type="x-smartling-placeholder"></ph> Weiter

Zu einer hervorragenden User Experience gehört häufig die Möglichkeit, Daten zu sparen zwischen mehreren Unterhaltungen mit einem Nutzer hin und her wechseln. Das ist hilfreich, wenn Sie in einer einzigen Unterhaltung das Speichern von Spielständen über mehrere Sitzungen hinweg oder das Merken kleiner Informationen für Nutzende.

Die Anforderungen variieren geringfügig, je nachdem, ob Sie Daten innerhalb eines oder unterhaltungsübergreifend. Um Daten in einer Unterhaltung zu speichern, können Sie Verwenden Sie dazu das Feld conversationToken des AppResponse-Objekts.

Führen Sie stattdessen die folgenden Schritte aus, um Daten zwischen Unterhaltungen zu speichern:

  1. Ermitteln Sie, ob es sich bei dem Nutzer um einen bestätigten Nutzer oder einen Gast handelt.
  2. Sie können Nutzerdaten über das Feld userStorage von Das AppResponse-Objekt.

Daten zwischen den einzelnen Unterhaltungsrunden speichern

Das Feld conversationToken ist ein String, der ein intransparentes Token enthält, das wird in jeder Unterhaltung wieder in die Aktion zurückverfolgt. Wenn Sie beispielsweise den Wert "count=1" in der AppResponse Unterhaltung, die AppRequest, die deine Aktion in der zweiten Runde erhalten hat der Konversation enthält "count=1" in ihrem conversationToken.

Das Token wird immer mit einem leeren String am Anfang eines Gespräch. Wenn Sie das Node.js-Clientbibliothek von Actions on Google: mit dem Unterhaltungstoken als JSON-Objekt mithilfe von conv.data, wobei conv ist Ihre Instanz von Conversation.

Im folgenden Beispiel wird gezeigt, wie ein Zähler in conversationToken gespeichert wird. von 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

Im JSON-Format wird eine Webhook-Antwort beschrieben, die outputContexts statt 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

Im folgenden JSON-Code 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}}"
}

Weitere Informationen finden Sie unter Hilfreiche Antwortaufforderungen bieten und fehlerfrei scheitern. Best-Practices-Leitfaden für ein praktisches Anwendungsbeispiel.

Daten zwischen Unterhaltungen speichern

Das Feld userStorage des AppResponse-Objekts ist ein String, der enthält ein intransparentes Token, das von der Aktion bereitgestellt wird und über für einen bestimmten Nutzer. Ein Spiel kann beispielsweise die höchste Wert eines Nutzers in userStorage und verwenden Sie dessen Wert jeweils in der Begrüßungsnachricht wenn der Nutzer eine neue Unterhaltung beginnt.

Status der Nutzerbestätigung ermitteln und verarbeiten

Der Bestätigungsstatus eines Nutzers kann den Wert GUEST oder VERIFIED haben. Im Beginn jeder Unterhaltung, legt Actions on Google die Bestätigung des Nutzers basierend auf verschiedenen Indikatoren zu Beginn der Unterhaltung. Als eine Ein Nutzer, der auf seinem Mobilgerät in Google Assistant angemeldet ist, hat Bestätigungsstatus von VERIFIED.

Mögliche Gründe für den Bestätigungsstatus eines Nutzers: GUEST:

  • Der Nutzer hat persönliche Ergebnisse deaktiviert.
  • Der Nutzer hat die Web- und App-Aktivitäten. Denken Sie daran, dass einige Nutzende wird diese Einstellung möglicherweise auf Domainebene deaktiviert.
  • Wenn auf einem Gerät Voice Match aktiviert ist und der Abgleich fehlschlägt oder der Nutzer ohne die Stimme des Nutzers zu verwenden (z. B. langes Drücken Startseite).
  • Der Nutzer ist nicht angemeldet.

Überprüfen Sie immer den Bestätigungsstatus des Nutzers, bevor Sie Daten mit userStorage oder eine Kontoverknüpfung starten, um Gastnutzer daran zu hindern, mit einer Funktion interagieren, die für sie nicht funktioniert.

Wenn Sie die Actions on Google-Clientbibliothek für Node.js verwenden, können Sie mit dem Nutzerspeicher als JSON-Objekt kommunizieren, conv.user.storage, wobei conv Ihre Instanz von Conversation ist. Die Das folgende Beispiel zeigt, wie Sie einen Zähler im Feld userStorage Ihres 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

Im folgenden JSON-Code 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 folgenden JSON-Code 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}}"
}

Weitere Informationen finden Sie im Hilfeartikel Unterhaltung mit Nutzereinstellungen personalisieren. Best-Practices-Leitfaden für ein praktisches Anwendungsbeispiel.

Rechtlicher Hinweis: Bitte vor dem Zugriff auf userStorage die Einwilligung einholen. In einigen Ländern gibt es Vorschriften, die Entwickler dazu verpflichtet, eine Einwilligung bevor sie auf bestimmte Daten (z. B. personenbezogene Daten) zugreifen oder diese speichern können. Informationen) in userStorage. Wenn Sie in einem dieser Bereiche tätig sind und Sie auf diese Informationen zugreifen userStorage, müssen Sie die Methode Zu fragender Bestätigungsassistent Einwilligung des Nutzers einholen und die Einwilligung einholen, bevor Sie mit der Speicherung solcher Informationen in userStorage.

Ablauf des Nutzerspeichers

Wenn Assistant dem Nutzer eine Identität zuordnen kann, werden die Inhalte userStorage läuft nie ab und nur der Nutzer oder die Aktion selbst kann sie löschen.

Wenn Assistant dem Nutzer keine Identität zuordnen kann, werden die Inhalte von userStorage wird am Ende der Unterhaltung gelöscht. Hier einige Beispiele: Fälle, in denen Assistant dem Nutzer keine Identität zuordnen 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, indem du wird das Feld resetUserStorage von AppResponse auf „true“ gesetzt. Wenn Sie den Wert von userStorage auf einen leeren String setzen, wird der Wert von userStorage bleibt bei der nächsten Unterhaltung unverändert. So können Sie Vermeiden Sie es, abwechselnd den gesamten userStorage-Wert zurückzugeben, wenn der Inhalt nicht ändern können.

Wenn Sie die Actions on Google-Clientbibliothek für Node.js verwenden, setzen Sie den Wert von conv.user.storage einfach auf {} (leeres Objekt).

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 folgenden JSON-Code 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 folgenden JSON-Code 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 kannst du dir den Inhalt des Felds userStorage in einer Aktion ansehen, die du aufgerufen wird. Du kannst auch deine gespeicherten Nutzerdaten aus dieser bestimmten Aktion entfernen indem Sie verhindern, dass sich der Dienst an Sie erinnert.

  1. Öffne die Assistant App auf deinem Smartphone.
  2. Tippe auf das Leistensymbol.

  3. Suche auf dem Tab Entdecken die Aktion, die du aufrufen möchtest, oder lösche den Nutzer und tippen Sie darauf, um die Detailseite zu öffnen.
  4. Scrollen Sie zum Ende der Seite.
    • Tippen Sie auf [Gespeicherte Daten ansehen], um den Inhalt des Felds „userStorage“ aufzurufen.
    • Wenn Sie die gespeicherten Nutzerdaten entfernen möchten, tippen Sie auf $action daran hindern, sich an mich zu erinnern.