Alexaスキル開発:スキルがリクエストに正しく応答できませんでした

Alexaスキル開発

こんにちは、ハルアキです。

久しぶりにAlexaでスキル開発をしようとしたところ、スキルが起動しない事態に陥ってしまいました。

わかってしまえばすごく初歩的なミスだったのですが、画面からだと原因が分かりづらかったので、解決までに時間がかかってしまいました。

解決:呼び出し名をユニークにする

結論から言いますと、単純な話ですが呼び出し名をユニークにすることで解決しました。

何が起こっていたかをご紹介します。

現象:ask new しただけなのにうまく動かない

Alexaスキル開発を始めるとき、例えばnew-skill という名前で作りるときはこうなります。(ask newの中で new-skill をしています。)

$ ask new
$ cd new-skill
$ ask deploy

ask newで作ると英語(en-US)のスキルになるのですが、まずは一旦動作確認ということで開発者コンソールから起動してみます。

すると、「The requested skill did not provide a valid response」 となってしまいました。

JSON出力1にも何も出力されていません。

日本語だと 「スキルがリクエストに正しく応答できませんでした。」となっています。

AWSのlambda関数側のCloudWatchを見てみても、たしかにアクセスされた履歴がありません、、ローカルのEndpointに切り替えてもダメでした。

原因:呼び出し名が重複していた

原因は呼び出し名が重複していたことでした。

かつ、重複していた呼び出し名の方のスキルはlambdaの関数を削除していました。

【スキルA(呼び出し名:hello world)】ーーー> 【lambda A <=削除済み】
【スキルB(呼び出し名:hello world)】ーーー> 【lambda B】

この状態で hello world で呼び出すとスキルA が呼ばれ、lambda Aが削除されているので応答がないという結果になっていたんですね。

誤解:Alexaシミュレータはスキルに紐づくものではない

そもそも、同じ呼び出し名で複数のスキルを作っていたことが間違いなのですが、気づくのに時間がかかった要因の一つに、Alexaシミュレータに対する誤解がありました。

スキルのビルド、コードエディタとならんでテストがあるので、そのスキルのテスト専用だと思いこんでいたんですね。

Alexaシミュレータはスキルに紐づくものではないので、「おはよう」といえば
いつものように今日は何の日かを教えてくれます。

他に開発中のスキルがあれば、呼び出すこともできるんですね。
同じ呼び出し名が複数ある場合は、一番先に登録したものを呼び出しているようです。

今回は以前作成したスキルのlambdaを削除していたので応答が返ってきませんでしたが、返ってくる状態になっていたら気づいていなかったかもしれません。

Alexaシュミレータのログを確認する

Alexaシミュレータ上の「デバイスのログ」をチェックするとデバイスのログを確認することができます。
ログの中にDirective: SkillDebugger.CaptureErrorというログがあり、その中でスキルがアクセスしているendpointが確認できました。

ちゃんとログを確認していればもっと早く気付けましたね、、反省。

まとめ

同じ呼び出し名が複数あり、一部のスキルでlamba関数を無効にしている場合に応答が返ってこないという現象の解決方法をご紹介しました。

あまりないとは思いますが、同じようなスキルの別バージョンを作るときなど、つい同じ呼び出し名で開発を始めてしまうと、テストの際に意図していないスキルを呼び出してしまう可能性があるので注意しましょう。

この記事がみなさんの助けになれば幸いです。
それでは、今日も素敵なアレクサライフを!

コメント

タイトルとURLをコピーしました