Zapisywanie danych w rozmowie (Dialogflow)

Przeglądaj w Dialogflow

Kliknij Continue (Dalej), aby zaimportować próbkę danych zapisanych w Dialogflow. Następnie postępuj zgodnie z poniższe czynności, aby wdrożyć i przetestować przykład:

  1. Wpisz nazwę agenta i utwórz nowego agenta Dialogflow dla przykładu.
  2. Gdy agent zakończy importowanie, kliknij Przejdź do agenta.
  3. W głównym menu nawigacyjnym kliknij Fulfillment (Realizacja).
  4. Włącz edytor wbudowany, a następnie kliknij Wdróż. Edytor zawiera próbkę w kodzie.
  5. W głównym menu nawigacyjnym kliknij Integrations (Integracje), a następnie kliknij Google (Google). .
  6. W wyświetlonym oknie modalnym włącz Automatyczny podgląd zmian i kliknij Przetestuj aby otworzyć Symulator działań.
  7. W symulatorze wpisz Talk to my test app, aby przetestować próbkę.
Dalej

O zadowolenie użytkowników często decyduje możliwość oszczędzania danych między kolejnymi rozmowami z użytkownikiem. Jest to przydatne, jeśli podajesz przydatne odpowiedzi w ramach jednej rozmowy, zapisywanie wyników gry w różnych sesjach lub zapamiętywanie niewielkich informacji. użytkownika.

Te wymagania różnią się nieco w zależności od tego, czy należy zapisywać dane w i we wszystkich rozmowach. Aby zapisać dane rozmowy, możesz: użyj pola conversationToken obiektu AppResponse.

Aby zapisać dane w rozmowach, wykonaj te czynności:

  1. Określ, czy użytkownik jest zweryfikowany czy gość.
  2. Przechowywać dane użytkowników i uzyskiwać do nich dostęp za pomocą pola userStorage w obiekt AppResponse.
.

Zapisywanie danych między kolejnymi etapami rozmowy

Pole conversationToken to ciąg znaków zawierający nieprzezroczysty token, który ponownie trafia do działania w każdej turze rozmowy. Jeśli na przykład ustawisz wartość do "count=1" w AppResponse dla pierwszego etapu konwersacja, AppRequest otrzymana przez akcję w drugiej turze rozmowy zawierają "count=1" w elemencie: conversationToken.

Token jest zawsze inicjowany przez pusty ciąg na początku rozmowy. Jeśli używasz tagu w bibliotece klienta Actions on Google Node.js, możesz z tokenem rozmowy jako obiektem JSON za pomocą metody conv.data, gdzie conv to Twoja instancja Conversation.

Z przykładu poniżej dowiesz się, jak zapisać licznik w conversationToken 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

Zwróć uwagę, że poniższy kod JSON opisuje odpowiedź webhooka, która wykorzystuje outputContexts zamiast 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

Pamiętaj, że poniższy kod JSON opisuje odpowiedź webhooka.

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

Zapoznaj się z artykułem na temat wyświetlania pomocnych próśb o ponowne przesyłanie próśb i usuwania błędów. .

Zapisuję dane w rozmowach

Pole userStorage obiektu AppResponse jest ciągiem znaków, zawiera nieprzezroczysty token dostarczony przez akcję, który jest zapisywany rozmów z konkretnym użytkownikiem. Na przykład gra może zapisać największą liczbę wynik użytkownika w regionie userStorage i użyj jego wartości w każdej wiadomości powitalnej za każdym razem, gdy użytkownik rozpocznie nową rozmowę.

Określanie i obsługa stanu weryfikacji użytkownika

Stan weryfikacji użytkownika może mieć wartość GUEST lub VERIFIED. Na na początku każdej rozmowy, Actions on Google ustawi weryfikację użytkownika stan oparty na różnych wskaźnikach po rozpoczęciu rozmowy. Jako jeden na przykład użytkownik zalogowany do Asystenta Google na urządzeniu mobilnym ma stan weryfikacji konta VERIFIED.

Oto możliwe powody, dla których stan weryfikacji użytkownika to GUEST:

  • Użytkownik ma wyłączone Twoje wyniki.
  • Użytkownik wyłączył strony internetowe i Aktywność w aplikacjach. Pamiętaj, że niektórzy użytkownicy może mieć wyłączone to ustawienie na poziomie domeny.
  • Jeśli na urządzeniu jest włączona funkcja Voice Match, ale dopasowanie się nie powiedzie lub użytkownik wywoła Asystenta bez użycia głosu (np. przez przytrzymanie Strona główna).
  • Użytkownik nie jest zalogowany.

Przed zapisaniem danych w aplikacji zawsze sprawdzaj stan weryfikacji użytkownika userStorage lub rozpoczęcie procesu łączenia kont, aby uniemożliwić gościom którzy nie wchodzą w interakcję z funkcją, która mu się nie uda.

Jeśli używasz biblioteki klienta Actions on Google dla Node.js, możesz połączyć się z pamięcią użytkowników jako obiektem JSON za pomocą conv.user.storage, gdzie conv to Twoja instancja Conversation. Z tego przykładu dowiesz się, jak zapisać licznik w polu userStorage na Twoim 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

Pamiętaj, że poniższy kod JSON opisuje odpowiedź webhooka.

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

JSON

Pamiętaj, że poniższy kod JSON opisuje odpowiedź webhooka.

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

Zapoznaj się z artykułem na temat personalizacji rozmowy na podstawie ustawień użytkownika. .

Uwaga prawna: uzyskiwanie zgody przed uzyskaniem dostępu do usługi userStorage. W niektórych krajach obowiązują przepisy, które wymagają od deweloperów uzyskania zgody przed uzyskaniem dostępu do pewnych informacji (takich jak dane osobowe) lub ich zapisaniem ) w sekcji userStorage. Jeśli działasz w jednej z tych krajów i chcesz uzyskać do nich dostęp lub zapisać je userStorage, musisz użyć Pomocnik potwierdzenia wyrazić zgodę na przetwarzanie danych osobowych i uzyskać jej zgodę przed rozpoczęciem ich przechowywania. informacje w userStorage.

Wygaśnięcie miejsca na dane użytkownika

Jeśli Asystent może dopasować tożsamość do użytkownika, treść Pole userStorage nigdy nie wygasa, a tylko użytkownik lub samo działanie mogą je usunąć.

Jeśli Asystent nie może dopasować tożsamości użytkownika do użytkownika, treść Pole userStorage zostanie usunięte po zakończeniu rozmowy. Oto kilka przykładów gdy Asystent nie może dopasować tożsamości użytkownika do użytkownika:

  • Funkcja Voice Match jest skonfigurowana, ale nie ma żadnej funkcji.
  • użytkownik wyłączył dane osobowe.

Wyczyść zawartość pola userStorage

Aby wyczyścić zawartość pola userStorage akcji, ustawiając pole resetUserStorage w kodzie AppResponse na true. Jeśli ustawisz wartość userStorage na pusty ciąg, wartość Element userStorage pozostanie niezmieniony w następnej rozmowie. Dzięki temu możesz: Unikaj wysyłania po kolei całego pliku userStorage tam, gdzie jego treść .

Jeśli używasz biblioteki klienta Actions on Google dla Node.js, możesz po prostu ustawić wartość conv.user.storage na {} (pusty obiekt).

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

Pamiętaj, że poniższy kod JSON opisuje odpowiedź webhooka.

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

Pamiętaj, że poniższy kod JSON opisuje odpowiedź webhooka.

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

Jako użytkownik możesz wyświetlić zawartość pola userStorage w akcji, . Możesz też usunąć przechowywane dane użytkownika z konkretnej akcji. zatrzymując zapamiętywanie Cię przez usługę.

  1. Uruchom aplikację Asystent na telefonie.
  2. Kliknij ikonę panelu.

  3. Na karcie Odkrywaj znajdź działanie, które chcesz wyświetlić lub wyczyścić dane użytkownika. i kliknij ją, by otworzyć stronę z informacjami.
  4. Przewiń stronę w dół.
    • Aby wyświetlić zawartość pola userStorage, kliknij [Wyświetl zapisane dane].
    • Aby usunąć zapisane dane użytkownika, kliknij Wyłącz zapamiętywanie mnie przez $action.