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]" } } } }
テスト成功しました。