SMAPI(Skill Management API)で公開済みAlexaスキルの情報を取ってくる
Alexa Skill アドベントカレンダーとAlexa アドベントカレンダーの14日目を埋めるための記事です。 CloudFormationのAlexa::ASK::Skillを試したくて、そのためにスキルパッケージA […]
目次
Alexa Skill アドベントカレンダーとAlexa アドベントカレンダーの14日目を埋めるための記事です。
CloudFormationのAlexa::ASK::Skill
を試したくて、そのためにスキルパッケージAPIを叩いてみました。
API tokenをとってくる
ドキュメントには、Login with Amazonから取得したアクセストークンを使えという風に書かれています。ただ、SMAPI試すためだけにOAuth2とかもろもろやるのは面倒です。ということですでに取得されているtokenを拾いに行きます。
ASK CLIを使ったことのある人であれば、cat ~/.ask/cli_config | jq .profiles.default.token.access_token -r
でdefaultに設定しているtokenが拾えます。tokenの期限が切れている場合がありますが、その場合はask diff
などのコマンドでASK CLIにtokenを更新させましょう。
うまく行けばこんな感じでデータが取れます。
$ curl https://api.amazonalexa.com/v1/skills/{YOUR_SKILL_ID}/stages/live/accountLinkingClient \
> -H "Authorization: $(cat ~/.ask/cli_config | jq .profiles.default.token.access_token -r)" | jq .
{
"message": "AccountLinking is not present for given skillId ({YOUR_SKILL_ID})."
}
「アカウントリンクしていないよ」というメッセージが出ていますが、これが出るということはSMAPIにアクセスできているということです。でないとアカウントリンクしているかどうかを確認できませんから。
ということで、SMAPIをとりあえずローカルからよんでみたい時は、ASK CLIが使っているtoken使うようにすると手軽だよという話でした。
スキルパッケージを取ってくる
どうせなのでもう1歩踏み込んでみます。以下のコマンドでアップロードされているスキルパッケージのエクスポートをリクエストできます。
$ curl -XPOST https://api.amazonalexa.com/v1/skills/{YOUR_SKILL_ID}/stages/{live | development}/exports \
> -H "Authorization: $(cat ~/.ask/cli_config | jq .profiles.default.token.access_token -r)" \
> --verbose
< HTTP/1.1 202 Accepted
< X-Amz-Date: Fri, 14 Dec 2018 04:54:07 GMT
< Location: /v1/skills/exports/amzn1.ask-package.export.xxxxxxxx
レスポンスヘッダーにデータがかえってきますので、--verbose
つけないとなにも起きていないように見えるので要注意です。そしてLocationにある相対パスを使って、もう一度GETリクエストを出してみましょう。
$ curl https://api.amazonalexa.com/v1/skills/exports/amzn1.ask-package.export.xxxxxxxx \
-H "Authorization: $(cat ~/.ask/cli_config | jq .profiles.default.token.access_token -r)" \
--verbose
{
"skill": {
"expiresAt": "1544767058591",
"location": "https://skill-exports-prod-na.s3.amazonaws.com/amzn1.ask-package.export.xxxxx.zip
},
"status": "SUCCEEDED"
}
S3のpreSigned URLをふくめたJSONが返ってきます。あとはこのURLをブラウザなどで開くと、スキルパッケージをDLできます。
スキルパッケージのファイル構造
ファイルを解凍すると、以下のような構造になっています。
$ tree
├── assets
│ └── images
│ ├── ja-JP_largeIconUri.png
│ └── ja-JP_smallIconUri.png
├── interactionModels
│ └── custom
│ └── ja-JP.json
└── skill.json
Lambda以外の情報・データがまとまっているという認識で良さそうです。
この後
この構造を使えばCloudFormationからAlexa Skillのデプロイができる(はず)なので、あとはCloudFormationとの戦いになります。その戦いについてはまた後ほど・・・