【Alexa Skill開発】LaunchRequest時にエラーになってしまう場合に確認すべき事項(Python)

概要

Alexaのスキルはシミュレータでもデバッグできるので、比較的デバッグがしやすい。
しかし、スキルが最初に呼び出された際の挙動がシミュレータでは確認できないため、エラーが発生した際のデバッグが困難。
気づいてみれば簡単なことだったけれど、結構見つけるのに苦労したので、メモとして残しておく。
ちなみに今回対象とするのは、以下の時刻表skill。

【Alexa Skill開発】Alexaに最寄り駅の次発電車の発車時刻を教えてもらう(AmazonEcho) - 技術メモ集

現象

「時刻表で平日ダイヤを教えて」等の、IntentRequestを起動すると正常に動くが、「時刻表を開いて」とLaunchRequestを起動するとエラーが起きてしまう。

エラーの原因

IntentRequest以外の挙動の記述が記載されていなかった

pythonだと、event['request']['type']内にリクエストの種類が記載される。
今回は、IntentRequestで平日or祝日を明示的に示し、この明示がなくただ時刻表アプリを起動した場合は、平日か土日かを自動判定したいため、以下のようにIntentRequestかどうかで場合分けをすることとした。

    if event['request']['type'] == "IntentRequest":
        intent = event['request']['intent']
        value = intent['slots']['DayType']['value']
    else:
        if (jsttime.weekday() >= 5):
            value = "休日"
        else:
            value = "平日"

IntentRequestで入れる項目を他で参照してしまっていた

event['request']['intent'], intent['slots']['DayType']['value']といったIntentRequestで入力されるべき項目は、LaunchRequestで参照するとエラーになってしまう。
ここで注意すべきなのは、len(event['request']['intent'])==0 として、配列が空かどうか判別するやり方ではダメ、ということ!
LaunchRequestではそもそも、event['request']['intent']といった項目がないため、値を参照した段階でエラーが発生してしまうため、配列が空かどうかでは判別できない。

感想

気づいてしまえば当たり前でごく単純なことだけれど、一旦エラーになってしまうとなかなか見つからないもの・・・・。