?
サポート

その他のプラットフォームおよびデバイス向けのコードベースのリンク

その他のデバイスおよびプラットフォーム用コードベースの連携(CBL)

Alexa Voice Service(AVS)にアクセスするには、Alexa搭載製品でLogin with Amazon(LWA)のアクセストークンを取得する必要があります。このアクセストークンを、リクエストのたびにAVSに送信します。このドキュメントでは、テレビやスマートウォッチといった文字入力が制限される、または文字入力ができない製品に最適な認証方法である、コードベースの連携(CBL)について説明します。

製品の登録中に、ユーザーに対して英数字の短いコードとURLが提示されます。ブラウザへのアクセスが可能な別のデバイスで、ユーザーはそのURLに移動し、Amazon認証情報でログインしてから、そのコードを入力して製品をAmazonアカウントにリンクします。リンクが完了すると、製品にスプラッシュ画面が表示され、AVSにアクセスできるようになります。

認証フロー

この図では、AVSで使用するaccess_tokenrefresh_tokenのAlexa搭載製品とLWAの間での交換の流れを示しています。

コードベースの連携のシーケンス図
クリックして拡大

ステップ1: CBLの有効化

  1. Alexaダッシュボードにログインし、Alexa Voice Serviceを選択してから、以下のいずれかを実行します。
    • Manage」をクリックし、既存の製品でCBLを有効化します。または
    • Create Product」をクリックして新しい製品を作成します。
  2. Security Profiles」タブをクリックし、「Other devices and platforms」を選択します。
  3. クライアントID名を入力し、「Generate ID」をクリックします。
  4. あとで必要になるため、「Client ID」を保存します。
クライアントIDの生成

ステップ2: デバイス認証リクエスト

まず、Alexa搭載製品でPOSTリクエストを行い、LWAからユーザーコードとURLを取得します。有効な応答が返されたら、ユーザーにuser_codeverification_uriが表示されます。

リクエスト

エンドポイント: https://api.amazon.com/auth/O2/create/codepair

リクエストには以下のパラメーターを含める必要があります。

  • response_type: 想定される値は、device_codeです。これにより、CBLリクエストであることがサービスに通知されます。
  • client_id: ステップ1で作成したクライアントIDです。
  • scope: 想定される値は、alexa:allです。製品の権限を指定します。
  • scope_data: productIDdeviceSerialNumberなど製品固有の情報を含む追加のJSON。JSONのサンプルは以下の通りです。
    • productID: 製品のデバイスタイプID。この情報にアクセスするには、Amazon開発者コンソールに移動します。ログインしたら、Alexa Voice Serviceの下の「Alexa」、「Get Started >」の順にクリックします。登録した製品の横にある「Edit」をクリック(または新規作成)します。このページには、製品のクライアントIDとクライアントシークレットの両方が含まれています。
    • productInstanceAttributes: deviceSerialNumberを含むオブジェクト。
      • deviceSerialNumber: 製品のこのインスタンスを識別する一意のキーです。たとえば、シリアルナンバーやMACアドレスなどがあります。
              {
                "alexa:all": {
                  "productID": "{{productId}}",
                  "productInstanceAttributes": {
                      "deviceSerialNumber": "{{deviceSerialNumber}}"
                  }
                }
              }
              

任意: ユーザーのログインと登録の言語を選択するには、リクエスト内にAccept-Languageヘッダーを含めます。

  • 有効な値: en-USde-DEes-ESen-GBfr-FRit-ITpt-BRja-JPzh-CN

リクエストのサンプル

以下は、curlのサンプルリクエストです。


curl -k -d 'response_type=device_code&client_id={{client_id}}&scope=alexa%3Aall&scope_data=%7B%22alexa%3Aall%22%3A%7B%22productID%22%3A%22Speaker%22,%22productInstanceAttributes%22%3A%7B%22deviceSerialNumber%22%3A%2212345%22%7D%7D%7D' -H "Content-Type: application/x-www-form-urlencoded" -X POST https://api.amazon.com/auth/O2/create/codepair

応答

応答は、OAuth仕様のセクション3.4に従ってフォーマットします。入力内容が有効な場合、応答は以下のように構成されます。

応答のサンプル

{
    "user_code": "{{STRING}}",
    "device_code": "{{STRING}}",
    "verification_uri": "{{STRING}}",
    "expires_in": {{INTEGER}},
    "interval": {{INTEGER}}
}
パラメーター 説明
user_code ユーザーに表示されるコード。このコードは、登録時にユーザーが入力するものです。 string
device_code デバイストークンリクエストに必要なコード。値は公開しないようにする必要があります。 string
verification_uri ユーザーに表示するURL。 string
expires_in コードが有効な時間(秒)。 整数
interval デバイストークンリクエスト間の間隔(秒)。 整数

エラー

  • HTTP 400: MissingValue
  • HTTP 500: ServiceError
  • HTTP 503: ServiceUnavailable

ステップ3: ユーザーをログイン画面へ誘導

製品がデバイス認証リクエストへの応答を受信したら、ユーザーに対してuser_codeverification_uriを表示する必要があります。セットアップと認証に記載されている設計ガイダンスと画面の例を活用してください。

ユーザーがverification_uriに移動すると、Amazon開発者認証情報を使用してログインし、提供されたuser_codeを入力するよう指示されます。コード登録ページは、OAuth仕様のユーザー指示コンポーネントを実装します。

登録ページ
以下は、登録ページのサンプルです。

user_codeの入力後、ユーザーは認証に成功したか失敗したかを示すページに誘導されます。認証に失敗した場合、ページにはエラーの理由(すでに認証されたコード、認識されないコードなど)が提供されます。

ステップ4: デバイストークンリクエスト

ユーザーにログインするよう指示したら、製品はaccess_tokenrefresh_tokenのポーリングを開始します。

リクエスト

エンドポイント: https://api.amazon.com/auth/O2/token

リクエストには以下のヘッダーを含める必要があります。

POST /auth/o2/token
Host: api.amazon.com
Content-Type: application/x-www-form-urlencoded

リクエストには以下のパラメーターを含める必要があります。

  • grant_type: 想定される値は、device_codeです。これによりサービスにグラントタイプを知らせます。
  • device_code: デバイス認証リクエストに返されるコード。
  • user_code: ユーザーに表示されるコード。このコードは、登録時にユーザーが入力するものです。

応答

ユーザーが登録フローを完了した後、応答はこの構造と照合されます。

{
  "access_token": "{{STRING}}",
  "refresh_token": "{{STRING}}",
  "token_type": "bearer",
  "expires_in": {{INTEGER}}
}
  • access_token: アクセストークン。
  • refresh_token: リフレッシュトークン。
  • token_type: ベアラー。
  • expires_in: アクセストークンの有効期限が切れるまでの秒数。

ステップ5: 新しいアクセストークンとリフレッシュトークンの交換

アクセストークンの有効期限が切れたか、間もなく切れるとき、新しいアクセストークンを取得するためにリフレッシュトークンが交換されます。構成したURLにこれらのパラメーターを渡して、POSThttps://api.amazon.com/auth/O2/tokenにリクエストします。

  • grant_type: refresh_token
  • refresh_token: リフレッシュトークン。
  • client_id: クライアントID。

応答には、以下の値が含まれます。

  • access_token: アクセストークン。
  • refresh_token: リフレッシュトークン。
  • token_type: bearer
  • expires_in: アクセストークンの有効期限が切れるまでの秒数。

リソース