カスタムスキルのアカウントリンク
カスタムスキルの中には、ユーザーの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は他のシステムでユーザーを識別するアクセストークン(他のシステムによって提供されたもの)を格納するようになります。以後このトークンはスキルに対するすべてのリクエストに含まれ、スキルは必要に応じて他のシステムのユーザー情報にアクセスできます。
この例では、このスキルはLogin with Amazonを使用しているため、AlexaアプリではユーザーにAmazonのログインページが表示されます。
ユーザーがスキルと対話する
ユーザーは通常どおりスキルを呼び出してリクエストを行うことができます。ユーザーのアカウントが正しくリンクされると、リクエストにアクセストークンが含まれます。スキルは他のシステムの情報にアクセスする時に、このトークンを使用します。
たとえば、以下の対話ではタクシー予約スキルがトークンを使ってユーザーのプロフィールを取得しています。プロフィールには支払い情報やデフォルトの勤務場所が含まれます。
ユーザー: アレクサ、タクシー予約で職場までの車を手配して (スキルに送信されるIntentRequest
にはタクシー予約サービスのユーザーを識別する有効なアクセストークンが含まれます。スキルはユーザーのアカウント詳細やデフォルトの場所を取得します。)
タクシー予約: タクシー予約アカウントを使用して車を手配します。デフォルトの勤務場所でよろしいですね?
ユーザー: はい。
ユーザーとスキルの対話が続きます...
ユーザーアカウントがリンクされていない場合、リクエストにはアクセストークンが含まれません。スキルはこれを確認し、以下の両方を返します。
- テキストを読み上げてアカウントリンクのメリットを簡単に説明します。
- ユーザーがAlexaアプリのアカウントをリンクするのに使用できるアカウントリンクカード。
ユーザー: アレクサ、タクシー予約で職場までの車を手配して ユーザーがアカウントをまだリンクしていないため、スキルに送信されるIntentRequest
には有効なアクセストークンが含まれません。スキルはアカウントリンクカードを使用してリクエストを行う必要があります。)
タクシー予約: 車を手配する前に、タクシー予約アカウントでログインする必要があります。Alexaアプリを開いてタクシー予約アカウントをリンクしてください。 (この応答には、ユーザーがアカウントリンクプロセスを開始するのに使用できるLinkAccountCard
が含まれます。)
スキルの対話が終了します。
スキルにはシステムのパーソナライズされたデータを必要としないリクエストを含めることができるため、認証は必要ありません。このようなインテントの場合、スキルは通常の応答を返し、ユーザーはアカウントリンクなしでスキルとの対話を続行できます。
ユーザー: アレクサ、タクシー予約に仙台で利用可能なサービスを聞いて。
CarFuAvailabilityByCity
インテントが送信されます。このインテントでは、タクシー予約サービスから公開データを取得し、ユーザーのタクシー予約アカウントにアクセスする必要はありません。そのため、スキルはアクセストークンの有無を確認しないで、応答のみを返します。
タクシー予約: 仙台ではタクシー予約で提供しているすべてのサービスが利用できます。たとえば...
スキルの対話が続きます...
ユーザーがスキルを無効にする
ユーザーが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仕様については、以下を参照してください。
カスタムスキルにアカウントリンクを実装する手順
カスタムスキルにアカウントリンクを追加するには、以下を実行します。
- Grant種別としてImplicit grant、Authorization code grantのどちらを使うかを決定します。
-
開発者コンソールのTOOLS > アカウントリンクセクションでスキルにアカウントリンクを設定します。詳細については、以下のいずれかを参照してください。
-
アカウントリンク処理をスキルのサービスに追加します。スキルコードを使用して受信するリクエストのアクセストークンを確認し、適切な処理を行います。
詳細については、カスタムスキルコードでアクセストークンを検証して使用するを参照してください。
関連トピック
最終更新日: 2023 年 05 月 16 日