プログラミング

AlexaSkillsハマったとこ備忘録(初心者向け)

AlexaSkills開発初めて見ました。
一つスキル作ったので、ハマったところをまとめておきます。

作成したスキルがアプリで表示されない

アカウント作成時に新規にアカウントを作成した場合と、amazon.comとamazon.co.jpのアカウントが同一の場合に発生します。
アカウント作成で、間違うと英語版のEchoをセットアップする扱いになってしまうようです。(日本のechoでは表示できない)

Alexa 開発者アカウント作成時のハマりどころ

  • 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
言語設定を変更すると、設定した箇所も消え入るので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]"
      }
    }
  }
}
test_success

テスト成功しました。