匿名ユーザー ID

移行ガイド

userId の値を使用して外部システムからの会話を参照している場合は(たとえば、会話のデータを外部データベースに保存している場合など)、できるだけ早くコードを修正して userId の使用を中止することをおすすめします。2019 年 5 月 31 日までにこの措置をとらなかった場合、機能が失われます。

アクションの要件に応じて、次の 3 通りの移行パスが考えられます。

  • アクションと他のプラットフォーム(Android や iOS など)のアプリとの間でデータを共有する必要がなく保存するデータ量が 10 KB を超えない場合は、会話のデータを保存するガイドを参照し、外部システムへの依存を除去してデータを直接会話に保存する方法を確認してください。

  • アクションと他のプラットフォームのアプリとの間でデータを共有する必要がある場合、または 10 KB を超えるデータを保存する必要がある場合は、アカウント リンクへの移行の指示に従って、アカウント リンクをアクションに追加することをおすすめします。

  • アカウント リンクをアクションに追加したくない場合は、Webhook によって生成された ID への移行の指示に従ってください。

アカウント リンクへの移行

外部システムからのユーザーとの会話を参照する手段として userId の値を使用していて(たとえば、userId の値を使用してユーザーを参照し、そのユーザーの設定を外部データベースに保存している場合など)、それを置き換える場合は、アカウント リンクを追加し、ユーザー プロフィールの情報を使用してユーザーを識別することをおすすめします。

次のコード スニペットは、userId からアカウント リンクに移行するときのアクションのフローの変更を大まかに示しています。userId の値は、ユーザーの Google プロフィールの sub プロパティの値(すなわち、ユーザーの Google アカウントの一意の ID)に置き換えられています。このサンプルコードでは、Node.js 用の Actions on Google クライアント ライブラリを使用しています。

移行前:

// WITH ANONYMOUS IDENTITY (DEPRECATED)
const data = "Something you want to save";
const userId = conv.user.id;
// saveDataToDB is a function implemented by your Action that saves 'data' in your
// external database, using the value of 'userId' as a key.
saveDataToDB(userId, data);

移行後:

// WITH ACCOUNT LINKING (Google Sign-In for the Assistant)
const data = "Something you want to save";
const userId = conv.user.profile.payload.sub;
saveDataToDB(userId, data);

Webhook によって生成された ID への移行

アカウント リンクをアクションに追加したくない場合は、userId の値を、Webhook によって生成された、会話とユーザーを適切に関連付ける値(UUID など)に置き換えることができます。その後、その値をユーザー ストレージに保存し、外部データベースに保存するときや外部データベースから読み取るときにその値をストレージから読み出すことができます。

次のコード スニペットは、userId から Webhook 自体によって生成された値の使用に移行するときのアクションのフローの変更を大まかに示しています。このサンプルコードでは、Node.js 用の Actions on Google クライアント ライブラリを使用しています。

移行前:

// WITH ANONYMOUS IDENTITY (DEPRECATED)
const data = "Something you want to save";
const userId = conv.user.id;
// saveDataToDB is a function implemented by your Action that saves 'data' in your
// external database, using the value of 'userId' as a key.
saveDataToDB(userId, data);

移行後:

// WITH WEBHOOK-GENERATED IDS
const data = "Something you want to save";
let userId;
// if a value for userID exists un user storage, it's a returning user so we can
// just read the value and use it. If a value for userId does not exist in user storage,
// it's a new user, so we need to generate a new ID and save it in user storage.
if ('userId' in conv.user.storage) {
  userId = conv.user.storage.userId;
} else {
  // generateUUID is your function to generate ids.
  userId = generateUUID();
  conv.user.storage.userId = userId
}
saveDataToDB(userId, data);

以前のドキュメント

  • 音声認識スピーカー
    • 音声が一致した場合 - 音声がデバイスに登録されている音声プロファイルと一致した場合は、一貫したユーザー ID が返されます。登録された各ユーザーには重複しない一貫したユーザー ID が与えられており、ユーザーがデバイスと会話するときにそのユーザー ID が会話に関連付けられます。
    • 音声が一致しない場合: 登録されたユーザーの音声がデバイスによって認識されない場合、または音声が登録されていない場合は、その会話だけに有効な重複しない別の ID が使用されます。
  • Android モバイル デバイス - ユーザー ID は Google アプリのアクティブな Google アカウントに対応しており、常に変わりません。次のすべての条件が満たされている場合、Android デバイスのユーザー ID は音声認識スピーカーのユーザー ID とも同じになります。
    • ユーザーの Google アカウントが両方のデバイスで同じである。
    • ユーザーが自分の声を音声認識スピーカーに登録した。
    • ユーザーの音声が音声認識スピーカーで一致した。
  • アクション コンソール シミュレータ - ここでのユーザー ID は、シミュレートされているサーフェスによって異なります。会話が変わっても一貫して同じユーザー ID が使用されます。
    • スマートフォン サーフェス - ユーザー ID は、コンソールでアクティブな Google アカウントに対応します。
    • スピーカー サーフェス - ユーザー ID は、あたかも音声プロファイルに従って検証されたかのように機能します。
  • 言語 - ユーザー ID は言語が違っても一貫しているため、ユーザーが異なる言語で質問した(そして、それが認識された)場合でも、各言語に対して同じユーザー ID が使用されます。
  • ユーザー ID の有効期間 - 30 日間操作がない場合、またはユーザーがデバイスで自分のアカウントのリンクを解除した場合、ユーザー ID は自動的にリセットされます。