Daten in Unterhaltung speichern (Dialogflow)

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:

  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 auf Bereitstellen. Der Editor enthält den Beispielcode.
  5. Gehen Sie im Hauptnavigationsmenü zu Integrationen und klicken Sie 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.
Fortfahren

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:

  1. Bestimmen Sie, ob der Nutzer bestätigt ist oder ein Gast ist.
  2. Nutzerdaten können im Feld userStorage des AppResponse-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.

  1. Öffne die Assistant-App auf deinem Smartphone.
  2. Tippen Sie auf das Leistensymbol.

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