Google ログインのコンセプト ガイド(Dialogflow)

アシスタント向け Google ログイン(GSI)は、ユーザーにとって最もシームレスなリンク エクスペリエンスを提供し、デベロッパーにとって実装が最も簡単なフローです。GSI では、アクションが会話中にユーザーの Google プロフィールへのアクセスを要求し、ユーザーが同意すると、ユーザーの名前、メールアドレス、プロフィール写真を受け取ることができます。アクションはこの情報を使用して、ユーザーがシステムに Google アカウントを持っているかどうかを確認できます。存在しない場合、アクションは Google プロフィール情報に基づいてシステムに新しいアカウントを作成するかどうかユーザーに尋ねます。

GSI は、以下のいずれかに該当する場合は、アカウント リンク ソリューションとして推奨されます。

  • 既存の認証システムがない、またはすべてのユーザーが Google アカウントを持っていることが想定される場合。たとえば、アクションが明確にアシスタントを対象としている場合、すべてのユーザーが Google アカウントを持っていることが想定されます。
  • 既存の認証システムがあり、Google アカウントを使用してシステムにログインしたユーザーのみをリンクしたい場合。

GSI が適切なソリューションかどうかを確認するには、アカウント リンクタイプを選択するをご覧ください。

主な用語

GSI の仕組みを理解する前に、次の用語を理解しておいてください。

  • Google ID トークン: ユーザーの基本的な Google プロフィール情報(名前、メールアドレス、プロフィール写真)を含む、ユーザー ID の署名付きアサーション。Google ID トークンは JSON Web Token(JWT)です。

    デコードされたトークンの例を以下に示します。

{
  "sub": 1234567890,        // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The token's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Client ID assigned to your Actions project
  "iat": 233366400,         // Unix timestamp of the token's creation time
  "exp": 233370000,         // Unix timestamp of the token's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "locale": "en_US"
}
  • アカウント ログイン ヘルパー インテント: アシスタントにアカウントのリンクのフローをリクエストするために呼び出すヘルパー インテント。詳しくは、アカウントへのログインをご覧ください。
    • コンテキスト文字列: アカウント ログイン ヘルパー インテントに追加するカスタム文字列。アカウントをリンクする必要がある理由をユーザーに伝えます。

仕組み

GSI の基本的なフローは次のとおりです。

  1. アクションが、Google プロフィールへのアクセスについてユーザーに同意を求めます。
  2. ユーザーが同意すると、アクションはユーザーの Google プロフィール情報を含む Google ID トークンを受け取ります。
  3. トークンを検証してデコードし、プロファイル コンテンツを読み取ります。Node.js 用 Actions on Google クライアント ライブラリまたは Java クライアント ライブラリを使用すると、トークンの検証とデコードが自動的に行われます。
  4. アクションはこのトークンを使用して、ユーザーの Google プロフィール情報がシステムに存在するかどうかを確認します。

    1. ログインしている場合、ユーザーはすでに Google アカウントでシステムにログインしています。ユーザーは、Google アカウントにリンクされた ID でアシスタントとの会話を続けることができます。
    2. アカウントがない場合、ユーザーは Google ID トークンに含まれる情報を使用して、システムに新しいアカウントを作成できます。これにより、ユーザーは新しいアカウントをリンクして、アシスタントとの会話を続けることができます。

Google ログインフロー

このセクションでは、Google ログインで発生する可能性のあるさまざまなフローについて説明します。

フロー 1: ユーザーの情報がシステムに存在する

次の図は、ユーザーの情報がすでにシステムに存在する場合に GSI で行われるエンドツーエンドのフローを示しています。

この場合、カスタマイズされたコンテキスト文字列で actions.intent.SIGN_IN ヘルパー インテントを呼び出します。このインテントは、Google プロフィール情報にアクセスする権限をユーザーに依頼します。

ユーザーが同意すると、アシスタントは user@gmail.com のプロファイル情報を含むリクエストを送信します。この場合、user@gmail.com の Google ID トークンに含まれる情報がシステムのアカウントと一致するため、アクション内のユーザー ID がそのアカウントに自動的にリンクされます。Webhook は、ユーザーの通常の注文をデータベースから読み取り、それに応じて応答できます。

フロー 2: ユーザーの情報がシステムに存在しない

次の図は、ユーザーの情報がシステムに存在しないときに GSI で行われるエンドツーエンドのフローを示しています。

この場合、user@gmail.com の Google ID トークンに含まれる情報がシステムのアカウントと一致しないため、アシスタントはユーザーに新しいアカウントを作成するかどうかを尋ねます。ユーザーは、スクリーニングされたデバイスに転送せずに、音声でアカウント作成プロセスを完了できます。

ユーザーがアカウントの作成に同意すると、サービスは ID トークン内の情報(ユーザーの名前とメールアドレス)を使用してユーザーのアカウントを作成します。アカウントが作成されると、アクション内のユーザー ID が新しい Google アカウントにリンクされます。

この場合、ユーザーはサービスを初めて利用するため、通常の注文がないため、アクションから注文を尋ねられます。ユーザーに、直近の注文を通常の注文として設定するかどうかを尋ねることもできます。