AlexaでGoogleとアカウントリンクしてみた

2018.03.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

Alexaでは、アカウントリンクと呼ばれる仕組みを利用することで、別システムのユーザーとスキルのユーザーを紐付けることができます。

今回は、Google APIsを使って、GoogleアカウントとAlexaをリンクさせてみました。

認証情報の作成

Googleアカウントでアカウントリンクするために、まず認証情報を作成します。
Google APIsコンソールを開いて、鍵アイコンを選択します。
(プロジェクトを作成するように促される場合は、新規にプロジェクトを作成してください)

「認証情報を作成」を選択して、「OAuth クライアント ID」を選択します。

クライアントIDの作成画面が表示されます。

  • アプリケーションの種類 -> 「ウェブアプリケーション」を選択
  • 名前 -> クライアントIDの名前を入力
  • 承認済みのリダイレクト URI -> スキルの開発コンソールにて表示される「Redirect URLs」(下記参照)を全て入力します。

入力後、「作成」を選択すればOAuthクライアントIDが発行されます。

次に、「OAuth同意画面」タブを選択し、サービス名を入力して保存します。
(OAuthを有効にするために、必ずサービス名を入力する必要があります)

最後に、アクセスするサービスのAPIを有効にします。
「ライブラリ」を選択し、対象のサービスを選びます。今回は「Google Calendar API」を有効にしてみます。

スキルのアカウントリンク設定

開発者コンソールでスキルのアカウントリンク設定を行います。
「Build」タブ内の「Account Linking」を選択します。

各設定項目について、以下のように入力し保存します。

  • Authorization URL -> https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force
  • Client Id -> 発行したクライアントID
  • Scope -> https://www.googleapis.com/auth/calendar.readonly
  • Authorization -> Auth Code Grant
  • Access Token URI -> https://accounts.google.com/o/oauth2/token
  • Client Secret -> 発行したクライアントシークレット
  • Client Authentication Scheme -> HTTP Basic (Recommended)

他、呼び出し名やエンドポイントの設定など、最低限スキルが起動/テストできる状態にしておきます。

アカウントリンクの有効化

Alexaアプリでスキルのアカウントリンクを有効にします。

アクセス許可画面が開くので、「許可」を選択。

以下の画面が開けば、アカウントリンクは成功です。

アクセストークンの確認

開発者コンソールのテストでスキルを起動し、アクセストークンが取得できることを確認します。

JSON Inputで取得できるアクセストークンを使用して、サービスにアクセスできることを確認してみます。
参考

$ curl -X GET -H "Authorization:Bearer (取得したトークン)" https://www.googleapis.com/calendar/v3/calendars/primary/events?timeMin=2018-03-01T10:00:00Z
{
 "kind": "calendar#events",
 "etag": "\"xxx\"",
 "summary": "(アカウントリンクしたメールアドレス)",
 "updated": "2018-03-05T02:53:47.152Z",
 "timeZone": "Asia/Tokyo",
 "accessRole": "owner",
 "defaultReminders": [
  {
   "method": "popup",
   "minutes": 30
  }
 ],
 "nextSyncToken": "xxx=",
 "items": [
  {
   "kind": "calendar#event",
   "etag": "\"xxx\"",
   "id": "xxx",
   "status": "confirmed",
   "htmlLink": "https://www.google.com/calendar/event?eid=xxx",
   "created": "2018-02-26T02:53:20.000Z",
   "updated": "2018-02-26T02:53:36.187Z",
   "summary": "めそ子とデート",
   (以下略)
  }
}

問題なくアクセスできていますね。

おわりに

Googleアカウントとアカウントリンクし、Googleのサービスにアクセスしてみました。
カレンダーだけでなく色々なAPIが用意されているので、Googleのサービスを利用した有用なスキルが作れそうですね。

なお、Googleカレンダーはデフォルトの機能でAlexaと連携することができます。。
【公式】Alexaにカレンダーをリンクする

それでは。

参考