AlexaSkills開発初めて見ました。
一つスキル作ったので、ハマったところをまとめておきます。
作成したスキルがアプリで表示されない
アカウント作成時に新規にアカウントを作成した場合と、amazon.comとamazon.co.jpのアカウントが同一の場合に発生します。
アカウント作成で、間違うと英語版のEchoをセットアップする扱いになってしまうようです。(日本のechoでは表示できない)
- amazon.com
- 海外のアマゾンのアカウント
- AWSのアカウントを作成する時に自動で作られる
- amazon.co.jp
- 日本のアマゾンのアカウント(買い物とかで使ってる方)
- Amzon Developperではこのアカウントでログインする
以下に、当てはまる場合、事象が発生するかもしれません。
- 海外のアマゾンで買い物したことある人
- 既にAWSアカウントを持っている人
- Developperの画面から新規に作成した場合
私は、amazon.com(AWS)のアカウントとamazon.co.jp(Developper・お買い物アカウント)のパスワードを異なるのものにすることで解決できました。(メールアドレスは同じでもOK)
スキル作成時の言語を間違えて、ビルドできない
何も考えず設定していたら、下記のビルド時に下記のエラーが出ました。

「Invocation name must start with a letter and can only contain lower case letters, spaces, apostrophes, and periods.エラーコード: InvalidCharInInvocationName」
エラーメッセージを見る感じ、呼び出し名がよくないようです。
呼び出し名の下のところに、ひらがなも大丈夫みたいなの書いてたんでおかしいなと思いつつ
よくよく確認して見ると、言語設定が英語になってました。
英語だとひらがなダメですよね。ということで、「言語設定」から日本語に変更しました。

言語設定を変更すると、設定した箇所も消え入るのでjsonをコピーして貼り付けます。

無事にビルドできました。
appidを変更してテストした時にエラーになる(テストの方を編集するの忘れた)
CloudwatchLogsを見ていたら、スキルで使用しているLambdaに下記のエラーが出ていました。
「Warning: Application ID is not set」
Application IDとは、作成したスキルからの呼び出し以外でLambdaを使えないようにするための、一意の文字列です。
Alexaスキルのデベロッパーコンソールから確認できます。
設定するのが、推奨なので設定します。
「設計図 alexa-skill-kit-sdk-factskill 」から、Lambdaを作ると「alexa.APP_ID」となっていますが
正しくは、「alexa.appId」です。仕様が変わったらしいです。
Alexaのスキル開発中、Warning: Application ID is not set
設定してLamdbaをテストしたところ、エラーが発生しました。

テスト側のApplication ID変えていないかった。
編集するテストを選んで、テストイベントの設定から編集します。
applicationIdと書いている箇所を、変更します。(下記の場合だと2箇所)
{
"session": {
"new": true,
"sessionId": "amzn1.echo-api.session.[unique-value-here]",
"attributes": {},
"user": {
"userId": "amzn1.ask.account.[unique-value-here]"
},
"application": {
"applicationId": "amzn1.ask.skill.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
},
"version": "1.0",
"request": {
"locale": "en-US",
"timestamp": "2016-10-27T18:21:44Z",
"type": "LaunchRequest",
"requestId": "amzn1.echo-api.request.[unique-value-here]"
},
"context": {
"AudioPlayer": {
"playerActivity": "IDLE"
},
"System": {
"device": {
"supportedInterfaces": {
"AudioPlayer": {}
}
},
"application": {
"applicationId": ""amzn1.ask.skill.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx""
},
"user": {
"userId": "amzn1.ask.account.[unique-value-here]"
}
}
}
}
テスト成功しました。
