Google assistant でGoogleのアカウントの情報を取得する #dialogflow


Googleアカウントのログイン情報の取得

Google assistantのアプリケーションを開発していく上で、ユーザー情報を使いたくなる場面が出てくると思います。OAuth 2.0 Implicit Flowという方法を使ってGoogleアカウントの情報を取得することができるので、その手順を紹介したいと思います。

下準備 Dialogflow(旧API.AI)

Dialogflowで作成している方は左メニューのIntegrationsからGoogle Assistantを選択し、Sign in required for welcome intentにチェックを入れてください。この作業によりログインを必須にすることができます。

Oauth認証の準備

GCP Consoleに移動します。Google assistantでも使用している同じプロジェクトIDを選択します。APIとサービスというメニューを開きます。

Web client (auto created by Google Service)を選択します。

クライアントIDは後ほど使用するので、どこかに保管してください。

承認済リダイレクトURIに下記のURIを追加して保存してください
hogehogeは自分のプロジェクトIDに変えてください。

https://oauth-redirect.googleusercontent.com/r/hogehoge

Actions on Google Overviewの編集

Actions on Google OverviewのAccount linkingでOauth認証の設定を行います。Account linkingは最後の項目なので1~4の必須項目を入力する必要があります。Oauth認証を試すだけなので、深く考えずササッと入力しちゃいましょう。

Account linking

下記を参考に必要な項目を入力します。

  • Configure your client (optional)
    • こちらを参考に好きなscopeを入れる
    • URLのスタイルで入れるのは非推奨となりました

  • Testing instructions
    • とりあえず何か入力しておきましょう

全て入力が終えたらSaveしましょう

UserIDとAccessTokenの取得

いつも通りGoogle Assistantのシミュレーションを行いましょう。するとまだアカウントがリンクがされていないと言われます。

この時にシミュレーターの右のメニューからDEBUGタブを選択します。

{
  "sharedDebugInfo": [
    {
      "debugInfo": "",
      "name": "Account Linking Url"
    }
  ]
}

debugInfoにあるURLにブラウザでアクセスするとこのような見覚えのあるページに飛ぶので、ログインをしましょう。

ログインが終わったらもう一度シミュレーションに戻りアプリを呼び出します。すると今度は普通に会話がスタートしました。

またDEBUGタブを選択します

userIdとaccessTokenが取ることが出来ました\(^o^)/

"user": {
  "userId": "",
  "accessToken": "",
  "locale": "en-US"
}

詳細情報の取得

ブラウザで以下のURLにアクセスすると詳細を取得することが出来ます。
※hogehogeは取得したaccessTokenに置き換えます。

https://www.googleapis.com/oauth2/v1/userinfo?access_token=hogehoge

レスポンス例

{
 "id": "",
 "email": "",
 "verified_email": true,
 "name": "",
 "given_name": "",
 "family_name": "",
 "link": "",
 "picture": "",
 "gender": ""
}

備考

アカウントへのアクセス権が付与されているアプリの表示