Amazon Alexa

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との戦いになります。その戦いについてはまた後ほど・・・

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts