カスタムスキルのアカウントリンク



カスタムスキルのアカウントリンク

カスタムスキルの中には、ユーザーのIDと別のシステムのユーザーアカウントを結び付ける機能が必要なものもあります。この機能を、「アカウントリンク」と呼びます。Alexaユーザーとシステムのユーザーアカウント間でリンクを作成することを目的としているためです。

このドキュメントでは、特にカスタムスキルに関するアカウントリンクの概要について説明します。すぐに詳細をご覧になりたい場合は以下をご参照ください。

スマートホームやビデオなど、別のモデルを使用するスキルの場合、スマートホームなどのドメインのアカウントリンクを参照してください。

アカウントリンクを使用する場合

ユーザーのAlexaアカウントを別のシステムのアカウントに結び付けて、そのシステムからパーソナライズした情報を取得する必要がある場合、カスタムスキルでアカウントリンクを使用します。例:

  • スキルを実行しているサービスに接続します。
  • スキルをOAuth 2.0をサポートするサードパーティサービスに接続します。
アカウントリンクが必要かどうか確認する

認証の必要なシステムにスキルを接続するには、アカウントリンクが必要です。スキルでセッション間のアトリビュートを保存するためにユーザーをトラッキングをするだけの場合は、ユーザーを識別する各リクエストのuserIdを使用できます。指定したユーザーのuserIdは、ユーザーがAlexaアプリでスキルを有効にしたときに生成されます。ユーザーがスキルを無効にしない限り、そのユーザーからスキルへの後続のすべてのリクエストには同じuserIdが含まれます。

スキルセッション間でのアトリビュートの保持は、ASK SDKs for Node.js、Java、およびPythonに組み込まれています。詳細については、アトリビュートの管理に関するASK SDKドキュメントを参照してください。

ユーザーアトリビュートの保持に関するサンプルスキルについては、ハイ&ローゲームを参照してください。

ユーザーのアカウントをリンクする方法

アカウントリンクを開始するには、以下の2つのうちいずれかの方法を使用します。

  • スキルを有効にして、Alexaアプリのスキルの詳細ページから開始します。
  • 認証の必要なリクエストを行った後にAlexaアプリのアカウントリンクカードから開始します。

この方法を使えば、柔軟にアカウントをリンクできます。ユーザーがスキルを有効にするときにアカウントリンクを省略した場合でも、認証の必要なリクエストを行った後にアカウントリンクできます。

カスタムスキルのアカウントリンクも任意で設定することができます。たとえば、基本機能を認証なしで提供した後で、認証を必要とする高度な機能を提供することもできます。この方法でスキルを設定すると、ユーザーがスキルを有効にしたときにはアカウントリンクのフローが表示されません。このオプションの詳細については、ユーザーがアカウントリンクなしでスキルを有効にするを参照してください。

いずれの場合も、スキルへのリクエストにアクセストークンaccessToken)が存在するかどうかで、ユーザーがアカウントリンクを行ったかどうかを判断できます。リクエストからアクセストークンを取得するを参照してください。

スキルの詳細ページから

スキルでアカウントリンクが必要な場合、スキルの詳細ページにアカウントリンクが必要であることを表示します。ユーザーが有効にするをクリックすると、Alexaアプリはアカウントリンクプロセスを自動で開始します。

スキルを有効にしています。スキルのカードにアカウントリンクが必要である旨、表示されています。
スキルを有効にしています。スキルのカードにアカウントリンクが必要である旨、表示されています。

ユーザーがアカウントリンクプロセスをキャンセルしてもスキルを有効にできますが、ユーザーが後でアカウントリンクに戻れるよう、スキルのカードに設定ボタンが表示されます。

ユーザーがアカウントリンクを完了しなかった場合のスキルの詳細ページ
ユーザーがアカウントリンクを完了しなかった場合のスキルの詳細ページ

アカウントリンクカードから

ユーザーがスキルを有効にするときにアカウントリンクを省略した場合、またはAlexaアプリではなく音声でスキルを有効にした場合に使用できます。ユーザーがアカウントリンクなしでスキルを有効にするオプションを選択している場合は、ユーザーはスキルを有効にするときにアカウントリンクをスキップできます。

ユーザーが認証の必要なリクエストを行った後、スキルはアカウントリンクカードLinkAccount)を返しユーザーにアカウントを接続するよう指示します。前述のとおり、スキルへのリクエストにアクセストークンaccessToken)が存在するかどうかを確認すると、アカウントリンクが行われていないことがわかります。リクエストからアクセストークンを取得するを参照してください。

その後、ユーザーはこのカードからプロセスを開始できます。

Alexaアプリのアカウントリンクカード
Alexaアプリのアカウントリンクカード

ユーザーがアカウントリンクプロセスを完了する

ユーザーがどの方法でプロセスを開始したかどうかにかかわらず、後の手順は同じです。

  1. ユーザーがプロセスを開始したら、アプリには他のサービスのログイン画面が表示されます。
  2. ユーザーはログインページで認証情報を入力し、そのサービスを使用して認証します。
  3. Alexaアプリの「成功」ページに戻り、スキルが使用できるようになります。

アカウントリンクが成功すると、Alexaは他のシステムのユーザーを識別するアクセストークン(他のシステムによって提供されたもの)を格納するようになります。以後このトークンはスキルに対するすべてのリクエストに含まれ、スキルは必要に応じて他のシステムのユーザー情報にアクセスできます。

この例では、このスキルはLogin with Amazonを使用しているため、AlexaアプリではユーザーにAmazonのログインページが表示されます。

Alexaアプリに表示されるログインページ(この例ではLogin with Amazon)
Alexaアプリに表示されるログインページ(この例ではLogin with Amazon)
ユーザーのアカウントがリンクされたら表示される成功メッセージ
ユーザーのアカウントがリンクされたら表示される成功メッセージ

ユーザーがスキルと対話する

ユーザーは通常どおりスキルを呼び出してリクエストを行うことができます。ユーザーのアカウントが正しくリンクされると、リクエストにアクセストークンが含まれるようになります。スキルは他のシステムの情報にアクセスする時に、このトークンを使用します。

たとえば、以下の対話ではタクシー予約スキルがトークンを使ってユーザーのプロフィールを取得しています。プロフィールには支払い情報やデフォルトの勤務場所が含まれます。

ユーザー: アレクサ、タクシー予約に「職場まで乗せて」と言って。 (スキルに送信されるIntentRequestにはタクシー予約サービスのユーザーを識別する有効なアクセストークンが含まれます。スキルはユーザーのアカウント詳細やデフォルトの場所を取得します。)
タクシー予約: タクシー予約アカウントを使用して車を手配します。デフォルトの勤務場所でよろしいですね?
ユーザー: はい。
ユーザーとスキルの対話が続きます...

ユーザーアカウントがリンクされていない場合、リクエストにはアクセストークンが含まれません。スキルはこれを確認し、以下の両方を返します。

  • テキストを読み上げてアカウントリンクのメリットを簡単に説明します。
  • ユーザーがAlexaアプリのアカウントをリンクするのに使用できるアカウントリンクカード

ユーザー: アレクサ、タクシー予約に「職場まで乗せて」と言って。 ユーザーがアカウントをまだリンクしていないため、スキルに送信されるIntentRequestには有効なアクセストークンが含まれません。スキルはアカウントリンクカードを使用してリクエストを行う必要があります。)
タクシー予約: 車を手配する前に、タクシー予約アカウントでログインする必要があります。Alexaアプリを開いてタクシー予約アカウントをリンクしてください。 (この応答には、ユーザーがアカウントリンクプロセスを開始するのに使用できるLinkAccountCardが含まれます。)
スキルの対話が終了します。

スキルにはシステムのパーソナライズされたデータを必要としないリクエストを含めることができるため、認証は必要ありません。このような’インテントの場合、スキルは通常の応答を返し、ユーザーはアカウントリンクなしでスキルとの対話を続行できます。

ユーザー: アレクサ、タクシー予約に仙台で利用可能なサービスを聞いて。
CarFuAvailabilityByCityインテントが送信されます。このインテントでは、タクシー予約サービスから公開データを取得し、ユーザーのタクシー予約アカウントにアクセスする必要はありません。そのため、スキルはアクセストークンの有無を確認しないで、応答のみを返します。</em>

タクシー予約: 仙台ではタクシー予約で提供しているすべてのサービスが利用できます。たとえば...
スキルの対話が続きます...

ユーザーがスキルを無効にする

ユーザーがAlexaアプリでスキルを無効にした場合、Alexaサービスはそのユーザーとスキルに関連付けられたアクセストークンを削除します。これにより、ユーザーのAlexaアカウントとサービスのアカウント間のリンクが削除されます。

ユーザーが後でスキルを再度有効にした場合、アカウントリンクプロセスをもう一度開始して、Alexaアカウントとサービスのアカウントとの間の新しいリンクを作成する必要があります。

カスタムスキルのAuthorization grant種別

Alexa Skills Kitは、カスタムスキルで2つのOAuthのAuthorization Grant種別をサポートします。

これら2つの種別の主な違いは、アクセストークン認可サーバーから取得する方法です。

  • Implicit grantでは、認証サーバーはアカウントリンクプロセス中にユーザーがログインした後でアクセストークンを返します。
  • Authorization code grantでは、認証サーバーはアカウントリンクプロセス中にユーザーがログインした後で認可コードを返します。Alexaはこのコードを使って、認可サーバーからアクセストークンと更新トークンのペアをリクエストします。Alexaは、古いトークンの期限が切れたら更新トークンを使って新しいアクセストークンと更新トークンのペアをリクエストできます。

Implicit grantは実装が比較的簡単ですが、Authorization code grantはより安全で堅牢なソリューションのため、可能な限りこちらを使うことをおすすめします。Implicit grantは、認可サーバーがAuthorization code grantをサポートしていない場合のオプションとして使用できます。Implicit grantを使用する場合、トークンの有効期限が切れるたびにAlexaアプリでアカウントを再度リンクする必要があるため、快適なユーザーエクスペリエンスとは言えない可能性があります。

スキルにAuthorization grant種別を設定する方法の詳細については、以下を参照してください。

これらのgrant種別のOAuth仕様については、以下を参照してください。

カスタムスキルにアカウントリンクを実装する手順

カスタムスキルにアカウントリンクを追加するには、以下を実行します。

  1. Grant種別としてImplicit grantAuthorization code grantのどちらを使うかを決定します。
  2. 開発者コンソールのビルド > アカウントリンクセクションでスキルにアカウントリンクを設定します。詳細については、以下のいずれかを参照してください。

  3. アカウントリンク処理をスキルのサービスに追加します。スキルコードを使用して受信するリクエストのアクセストークンを確認し、適切な処理を行います。

    詳細については、カスタムスキルコードでアクセストークンを検証して使用するを参照してください。

OAuthのリソース:

その他のリソース:

先頭に戻る