「スキルからの応答に問題があります」の新パターン

はじめに

Alexaスキル開発の経験が少ない頃は、開発スキルを実行した際に、Alexaから「スキルからの応答に問題があります」と言われることがよくあります。

これは、以下のいずれかが原因であることが多いようです:

  1. SessionEndedRequestをハンドリングしていない
  2. Lambdaで実行しているコードにエラーがある

こういった理由での対処法については過去の記事をご参照いただければと思います。

[日本語Alexa] SessionEndedRequestの正しい料理法

今回は、少し違うパターンに遭遇しましたのでご紹介します。

「スキルからの応答に問題があります」

SessionEndedRequestはハンドリングしているし、コードにもエラーがないのに「スキルからの応答に問題があります」と返ってくる現象があり、悩んでいました。

手元で実行しているデバッガーやCloudWatchでは、想定通りのレスポンスがJSONで返ってきています。

当初、レスポンスのJSONの構文が正しくないのかと、色々と調べましたが、問題が起きる場合と起きない場合があり、構文は正しいようです。

かなりハマっている状態で、いろいろなところを確認していました。

なんだろう...と思いながら、たまたまAlexaアプリを確認していたところ...

Exceeded max response sizeと書かれたスキルカード

"Exceeded max response size"、つまり「最大レスポンスサイズを超えています」と書かれたスキルカードが表示されていました。

Alexaアプリにエラーメッセージが出ることがあるのか...とドキュメントを調べて見ると、次の記述がありました。

  • 応答の合計サイズは24キロバイト以内でなければなりません。

応答がこれらの制限を超える場合、Alexaサービスはエラーを返します。

これか!ということで、レスポンスサイズを増大させる原因を調べました。

この時は、バックエンドのシステムから得られる情報をsessionAttributesに保存していました。これが、バックエンドからの応答によっては、レスポンスサイズ全体が24キロバイトを超えることがありました。

バックエンドシステムからの応答をsessionAttributesに保存する前にサイズを削減することで、エラーは出なくなりました。

最後に

ずっと開発をしていると、手元のデバッガの出力やCloudWatchで問題が解決することが多いのですが、 それらを見ても問題が解決しないときは、Alexaアプリに何かメッセージが出ていないか確認するとよいようです。