スキルにメッセージを送信するようアプリケーションやサービスを設定する



スキルにメッセージを送信するようアプリケーションやサービスを設定する

開発中のスキルに対応するサードパーティアプリケーションのバックエンドには、スキルにメッセージを送信することを認可させる必要があります。認可には、アクセストークンを取得します。 アクセストークンの取得には、開発者のサーバーからHTTPS接続でPOSTリクエストを発行します。

関連トピック: AlexaスキルのスキルイベントスキルメッセージAPIリファレンス

アクセストークン取得リクエストの形式

このセクションでは、アクセストークンを取得するPOSTリクエストの形式について説明します。

HTTPヘッダー

POST /auth/O2/token HTTP/1.1
Host : api.amazon.com
Content-Type : application/x-www-form-urlencoded;charset=UTF-8

HTTPヘッダーのパラメーター

パラメーター説明
Content-Typeリソースのコンテンツタイプです。application/x-www-form-urlencodedである必要があります。Content-Type: application/x-www-form-urlencoded

リクエスト本文の構文

grant_type=client_credentials&client_id=(clientID)&client_secret=(clientSecret)&scope=alexa:skill_messaging

リクエスト本文のパラメーター

パラメーター説明
grant_type 値はclient_credentialsである必要があります。 grant_type=client_credentials
client_id 開発者コンソールで取得したClientId値です。 client_id=amzn1.iba-client.b2b360f8a77d457981625636121d6edf
client_secret 開発者コンソールで取得したClientSecret値です。 client_secret=c559965801308f2bb79ca787b1dfc8deece8a2fd7d7618946cec1635d26dcbfb
scope 値はalexa:skill_messagingである必要があります。 scope=alexa:skill_messaging

cURLリクエストのサンプル

curl -k -X POST -H

'Content-Type: application/x-www-form-urlencoded' -d

'grant_type=client_credentials&client_id=xxxx&client_secret=yyyy&scope=alexa:skill_messaging'

https://api.amazon.com/auth/O2/token

応答の形式

ここでは、アクセストークンを要求するPOSTリクエストへの応答形式について説明します。

HTTPヘッダー

X-Amzn-RequestId: d917ceac-2245-11e2-a270-0bc161cb589d

Content-Type: application/json
パラメーター説明
X-Amzn-RequestIdサーバーで作成された値です。リクエストを一意に識別します。問題が発生する場合、Amazonはこの値をトラブルシューティングに使用します。X-Amzn-RequestId: d917ceac-2245-11e2-a270-0bc161cb589d
Content-Typeリソースのコンテンツタイプ(application/jsonContent-Type: application/json

応答本文の構文

{
    "access_token":"Atc|MQEWYJxEnP3I1ND03ZzbY_NxQkA7Kn7Aioev_OfMRcyVQ4NxGzJMEaKJ8f0lSOiV-yW270o6fnkI",
    "expires_in":3600,
    "scope":"alexa:skill_messaging",
    "token_type":"Bearer"
}

応答のパラメーター

パラメーター説明
access_tokenアクセストークンです。すべてのリクエストに使用します。"access_token":"Atc|MQEWYJxEnP3I1ND03Zz..."
expires_inアクセストークンの有効期間(秒)です。3600の場合、アクセストークンは応答が生成されてから1時間で無効になります。"expires_in":3600
scopeアクセストークンリクエストで指定したスコープです。値はalexa:skill_messagingになります。"scope":"alexa:skill_messaging"
token_type発行されるトークンのタイプです。ベアラートークンのみがサポートされます。"token_type":"Bearer"

リクエストが正常に完了しなかった場合、200以外のエラーステータスコードを受信します。200以外のコードの場合、応答メッセージのJSONObject本文に以下のパラメーターが含まれることがあります。

  • reason: « リクエストが受け付けられなかった理由が入ります。 »

エラー

ステータスコード説明
400INVALID_REQUESTこの応答には、以下の理由が考えられます。
- 認可サーバーでコンテンツタイプがサポートされていません。つまり、これはapplication/x-www-form-urlencodedではありません。
- リクエストに次の必須パラメーターがありません:grant-typescopeclient_idclient_secret
- リクエストの形式が正しくありません。
400 UNAUTHORIZED_CLIENT クライアントは、リクエストされた操作を行うことを認可されていません。
400 UNSUPPORTED_GRANT_TYPE grant種別が認可サーバーでサポートされていません。つまり、これはclient_credentialsではありません。
400 INVALID_SCOPE リクエストされたスコープが無効です。つまりこれはalexa:skill_messagingではありません。
401 INVALID_CLIENT クライアントの認証に失敗しました。
500 SERVER_ERROR 内部サーバーエラーです。リクエスターはリクエストを再試行できます。
503 SERVICE_UNAVAILABLE サーバーが一時的に使用できません。リクエスターは応答のRetry-Afterヘッダーを参照して再試行する必要があります。Retry-After値の形式については、HTTP/1.1仕様のセクション14.37を参照してください。

トークンを取得すると、アプリケーションはスキル管理APIを呼び出してスキルにメッセージを送信できるようになります。