Daten in der Unterhaltung speichern (Dialogflow)

In Dialogflow ansehen

Klicken Sie auf Continue (Weiter), um unser „Save data“-Beispiel in Dialogflow zu importieren. Führen Sie dann die folgenden Schritte aus, um das Beispiel bereitzustellen und zu testen:

  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 den Beispielcode.
  5. Klicken Sie im Hauptnavigationsmenü auf Integrations (Integrationen) und dann auf Google Assistant.
  6. Aktivieren Sie im angezeigten modalen Fenster die Option Änderungen automatisch in der Vorschau anzeigen 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.
Weiter

Zu einer ausgezeichneten Nutzererfahrung gehört oft die Möglichkeit, Daten zwischen Unterhaltungsrunden oder mehreren Unterhaltungen mit einem Nutzer zu speichern. Dies ist hilfreich, wenn Sie hilfreiche Wiederholungen in einer einzelnen Unterhaltung bereitstellen, Spielstände über mehrere Sitzungen hinweg speichern oder sich kleine Informationen für einen Nutzer merken möchten.

Die Anforderungen variieren geringfügig, je nachdem, ob Sie Daten innerhalb einer Unterhaltung oder zwischen Unterhaltungen speichern müssen. Um Daten in einer Unterhaltung zu speichern, können Sie das Feld conversationToken des AppResponse-Objekts verwenden.

Wenn Sie Daten in mehreren Unterhaltungen speichern möchten, führen Sie stattdessen die folgenden Schritte aus:

  1. Ermitteln Sie, ob der Nutzer bestätigt oder ein Gast ist.
  2. Mit dem Feld userStorage Ihres AppResponse-Objekts können Sie Nutzerdaten speichern oder darauf zugreifen.

Daten zwischen Unterhaltungsrunden speichern

Das Feld conversationToken ist ein String mit einem intransparenten Token, das bei jeder Unterhaltungsrunde an die Aktion zurückgegeben wird. Wenn Sie beispielsweise den Wert in Ihrem AppResponse für die erste Unterhaltungsrunde auf "count=1" setzen, enthält die von Ihrer Aktion für die zweite Runde der Unterhaltung empfangene AppRequest "count=1" in ihrer conversationToken.

Das Token wird zu Beginn einer Unterhaltung immer mit einem leeren String initialisiert. Wenn Sie die Node.js-Clientbibliothek für Actions on Google verwenden, können Sie mithilfe von conv.data das Unterhaltungstoken als JSON-Objekt verwenden, wobei conv Ihre Instanz von Conversation ist.

Im folgenden Beispiel wird gezeigt, wie Sie einen Zähler im Feld conversationToken Ihrer 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

Der folgende JSON-Code beschreibt eine Webhook-Antwort, die outputContexts anstelle von conversationToken verwendet.

{
  "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

Beachten Sie, dass der folgende JSON-Code eine Webhook-Antwort beschreibt.

{
  "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 Anwendungsbeispiel finden Sie im Best Practice-Leitfaden Nützliche Prompts bereitstellen und ordnungsgemäß scheitern.

Daten in Unterhaltungen speichern

Das Feld userStorage des AppResponse-Objekts ist ein String mit einem intransparenten Token, das von der Aktion bereitgestellt wird und in allen Konversationen für einen bestimmten Nutzer gespeichert wird. Ein Spiel kann beispielsweise den höchsten Wert eines Nutzers in userStorage speichern und seinen Wert jedes Mal in der Willkommensnachricht verwenden, wenn der Nutzer eine neue Unterhaltung startet.

Status der Nutzerbestätigung ermitteln und verarbeiten

Der Bestätigungsstatus 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, wann die Unterhaltung beginnt. Ein Beispiel: Ein Nutzer, der auf seinem Mobilgerät bei Google Assistant angemeldet ist, hat den Bestätigungsstatus VERIFIED.

Wenn ein Nutzer den Bestätigungsstatus GUEST hat, kann das folgende Gründe haben:

  • Der Nutzer hat persönliche Ergebnisse deaktiviert.
  • Der Nutzer hat seine Web- & App-Aktivitäten deaktiviert. Beachten Sie, dass diese Einstellung bei einigen Nutzern auf Domainebene deaktiviert sein kann.
  • Wenn auf einem Gerät Voice Match aktiviert ist und der Abgleich fehlschlägt oder der Nutzer Assistant ohne Verwendung einer Stimme aufruft (z. B. durch langes Drücken auf ein Google Home-Gerät).
  • Der Nutzer ist nicht angemeldet.

Prüfen Sie immer den Bestätigungsstatus des Nutzers, bevor Sie Daten mit userStorage speichern oder einen Kontoverknüpfungsvorgang starten, um zu verhindern, dass Gastnutzer mit einer Funktion interagieren, die für sie fehlschlägt.

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 verwenden, wobei conv Ihre Instanz von Conversation ist. Das folgende Beispiel zeigt, wie Sie einen Zähler im Feld userStorage Ihrer 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

Beachten Sie, dass der folgende JSON-Code eine Webhook-Antwort beschreibt.

{
  "payload": {
    "google": {
      "expectUserResponse": false,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Alright, I'll store that for next time. See you then."
            }
          }
        ]
      },
      "userStorage": "{\"data\":{\"sum\":68}}"
    }
  }
}

JSON

Beachten Sie, dass der folgende JSON-Code eine Webhook-Antwort beschreibt.

{
  "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}}"
}

In unserem Best Practices-Leitfaden Unterhaltungen mit Nutzereinstellungen personalisieren finden Sie ein praktisches Anwendungsbeispiel.

Rechtlicher Hinweis: Einholen der Einwilligung vor dem Zugriff auf userStorage. In einigen Ländern gibt es Vorschriften, die Entwickler verpflichten, die Einwilligung des Nutzers einzuholen, bevor sie auf bestimmte Daten (z. B. personenbezogene Daten) im userStorage zugreifen oder diese speichern können. Wenn Sie in einem dieser Länder tätig sind und auf solche Informationen zugreifen oder sie in userStorage speichern möchten, müssen Sie mit dem Bestätigungsassistent die Einwilligung des Nutzers einholen und seine Einwilligung einholen, bevor Sie solche Informationen in userStorage speichern können.

Ablauf des Nutzerspeicherplatzes

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

Wenn Assistant dem Nutzer keine Identität zuordnen kann, wird der Inhalt von userStorage am Ende der Unterhaltung gelöscht. Hier sind einige Beispiele, 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 das Feld resetUserStorage der AppResponse auf „true“ setzt. Wenn Sie den Wert von userStorage auf einen leeren String festlegen, bleibt der Wert von userStorage in der nächsten Unterhaltungsrunde unverändert. So vermeiden Sie, dass das gesamte userStorage-Element abwechselnd zurückgegeben wird, wenn sich sein Inhalt nicht geändert hat.

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

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

Beachten Sie, dass der folgende JSON-Code eine Webhook-Antwort beschreibt.

{
  "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

Beachten Sie, dass der folgende JSON-Code eine Webhook-Antwort beschreibt.

{
  "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 ansehen. Du kannst auch deine gespeicherten Nutzerdaten aus dieser bestimmten Aktion entfernen, indem du den Dienst daran hinderst, sich an dich zu erinnern.

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

  3. Suchen Sie auf dem Tab Explore die Aktion, deren Nutzerspeicher Sie ansehen oder löschen möchten, und tippen Sie darauf, um die Detailseite zu öffnen.
  4. Scrollen Sie zum Ende der Seite.
    • Wenn Sie sich den Inhalt des Felds „userStorage“ ansehen möchten, tippen Sie auf [Gespeicherte Daten ansehen].
    • Wenn Sie die gespeicherten Nutzerdaten entfernen möchten, tippen Sie auf $action darf sich nicht mehr an mich erinnern.