セッションを開いたままにする
セッションを開いたままにする
イベントハンドラーはAlexaに含まれるコンポーネントであり、ガジェットの入力をスキルに転送します。このトピックでは、一般的なスキルセッションのライフサイクルと、有効なイベントハンドラーがそれに与える影響について説明します。たとえば、有効なイベントハンドラーによって、セッションが長くなったり、特定の状況で再プロンプトがキャンセルされたりすることがあります。
スキルセッションのライフサイクル
スキルセッションのライフサイクルは次のとおりです。
- ユーザーがスキルを呼び出すとスキルセッションが開始されます。これにより、Alexaはスキルにリクエストを送信します。通常、これは起動リクエストで行いますが、特定のインテントを使用してスキルを呼び出すこともできます。リクエストにはsessionオブジェクトが含まれます。このオブジェクトには、新規のセッションを表す
new
というブール値が入ります。 - スキルはリクエストを受け取り、Alexaがユーザーに答える応答を返します。
- 次に行われる処理は、スキルが返す応答の
shouldEndSession
パラメーターに入る値によって異なります。true
– セッションを終了します。それ以降は、スキルではなくAlexaがユーザーの発話を処理します。ユーザーが再度スキルを呼び出すと、Alexaは新規のセッションを作成します(つまり、ステップ1に戻ります)。false
– セッションは開いたままです。Alexaはマイクをオンにしてユーザーの応答を待ちます。ユーザーが応答した場合、Alexaはスキルが定義したインテントのいずれかにその音声をマッピングし、スキルに応答を送信します。ただし、数秒間待ってもユーザーからの応答がない場合、Alexaはマイクをオフにします。スキルが再プロンプトを指定した場合、Alexaは再度ユーザーに話しかけ、さらに数秒間マイクをオンにします。マイクをオフにした後のセッションの動作は、次の説明のとおり、スキルがshouldEndSession
をundefinedのままにした場合と同じです。undefined
– セッションの動作は、ユーザーとの対話に使用するEchoデバイスの種類や、有効なイベントハンドラーの有無によって異なります。デバイスに画面が付いている場合、セッションは最大30秒間開いたままになります。ただし、マイクをオンにしてユーザーに入力を求めることはありません。ユーザーが話しかけてきて、リクエストの前に「アレクサ」を付けた場合、Alexaはリクエストをスキルに送信します。それ以外の場合、Alexaはユーザーの音声を無視します。イベントハンドラーが有効な場合、スキルがCustomInterfaceController.StopEventHandler
を呼び出すまで、あるいはイベントハンドラーの有効期限が切れない限り、セッションは開いたままになります。
イベントハンドラーがスキルセッションのライフサイクルに与える影響
有効なイベントハンドラーは、スキルセッションに以下のような影響を与えます。
- セッションを延長する – イベントハンドラーが有効である限り、イベントハンドラーの有効期間中、スキルセッションは開いたままになります。ただし、スキルがいずれかのスキル応答で
shouldEndSession
をtrue
に設定した場合を除きます。つまり、ユーザーが音声入力を提供しない場合でも、イベントハンドラーの有効期限が切れる、スキルがCustomInterfaceController.StopEventHandler
を呼び出す、あるいはスキルがshouldEndSession
をtrue
に設定するまで、セッションは開いたままになります。 - ガジェット入力でマイクを開くことができる – スキルは、ガジェット入力イベントを処理するときに、スキル応答で
shouldEndSession
をfalse
に設定することで、Alexaにマイクをオンにさせて、ユーザーからの音声入力をリクエストできます。 -
再プロンプトをキャンセルできる – 有効なイベントハンドラーがある場合、ボタンアクティビティで再プロンプトをキャンセルできます。たとえば、スキルが前のスキル応答で
shouldEndSession
をfalse
に設定して音声入力をリクエストした場合や、ガジェットイベントを待機している場合です。ユーザーがガジェットを操作し、スキルがガジェット入力イベントを受け取った場合、保留中の音声の再プロンプトはすべてキャンセルされます。スキルが複数のイベントを処理している場合、予期せずこの動作が起こることがあります。たとえば、スキルが2つのイベントを受け取り、最初のイベントのイベントハンドラーによって音声入力の再プロンプトが設定されたとします。最初のイベントハンドラーによって設定された再プロンプトは、スキルが2番目のイベントに応答していない場合でも、2番目のイベントによってキャンセルされます。