Alexaスキル開発していますか?
自分の実装したとおりにAlexa様が話してくれるのはとても楽しいのですが、Webやモバイルアプリとはまた異なるインターフェイスなこともあり、開発環境にはやや面倒臭さを感じる今日このごろです。
「スキルからの応答に問題があります」
スキルをLambdaへデプロイ後、動作確認のためにalexa developer consoleから「テスト」を実行していることと思います。
ウェイクワードを発話していざ実装したインテントリクエストを起動すると、
「スキルからの応答に問題があります」
無慈悲なこの文言が帰ってきます。
皆さんはこんなときどうしていますか? むしろ教えてほしいくらいなのですが、自分なりの調査方法を載せておきます。
1. Cloud9でデバッグする
これが一番です。
利用料が多少かかりますが、些末なものです。
(ちなみにAWS Cloud9は東京リージョンでは利用できません。なので、Lambdaが東京リージョンへデプロイされている場合はこの方法は使えません。ここは多言語対応を見込んでバージニア北部リージョンあたりへデプロイするのはどうでしょうか)
右ペインの「AWS Resources」内の「Remote Functions」ツリーにcloud9と同じリージョンにデプロイされたLambdaファンクションの一覧が表示されているので、右クリック=>Importを選択します。
すると左ペインのEnvironmentツリー内にLambdaファンクションが表示されます。
まずはここでもエラーが再現するかやってみます。
上の「Run」ボタンをクリックすると画面が分割され、デバッグ用のウィンドウが表示されます。
"payload"と表示されているエリアにalexa developer consoleに出力された、こちらが発話した際にAlexaが読み取ってLambdaに投げたJSONをコピペし、「Run」ボタンを押します。
すると、"Response"エリアにLambdaの実行結果が出力されます。
ここで何某かのエラーが出力されていればあとはブレークポイントを張ってデバッグすれば良いです。
cloud9でのデバッグ機能の使い方についてはここでは触れません。
2. Lambda Management Consoleでデバッグする
まれに、alexa developper consoleではエラーになるのにcloud9では正常なレスポンスが返される、ということがあります。
大抵の場合は権限ですが、まずは調べてみましょう。
AWS Management ConsoleからデプロイしたLambdaの編集ページを開きます。
右上のセレクトボックスから「テストイベントの設定」を選択します。
ダイアログが開くので、ここに先ほどと同じJSONをコピペし、適当な名前をつけて保存します。
あとは「テスト」ボタンを押すだけです。
cloud9では再現しなかったエラーがこちらでは再現するかもしれません。
エラーログまで出力されるので、原因究明まで一瞬ですね。
「AskSdk.DynamoDbPersistenceAdapter Error」
自分の場合は、DynamoDBへのアクセス権限がなかったことが原因でした。
cloud9はAWSの各種サービスへのアクセス権を持ったユーザーで実行していたため、DynamoDBを参照した際にもエラーにならなかったのだと思います。
上記2ではLambdaに付与されているロールで実行されるため、アクセス権エラーが再現するのでしょうね。
2019.6.1 追記
2019年4月にCloud9が東京リージョンに対応したとのニュースがありましたね。
AWS Cloud9 が東京リージョンに対応しました