音声入力をガジェットスキルで受信する
一般的なカスタムスキルとは異なり、Alexa Gadget向けのスキルでは、ユーザーの音声とガジェット入力というユーザーからの2種類の入力を処理できる必要があります。たとえば、ロボットガジェットでは、ユーザーがロボットの腕を物理的に上げることも、「ロボットの腕を上げて」というユーザーの発話にも対応できなければなりません。
ガジェット入力を監視するために、スキルはAlexaからのリクエストに対してスキル応答でCustomInterfaceController.StartEventHandler
ディレクティブを送信する必要があります。また、いつでも音声入力を処理できるように準備しておく必要があります。このトピックでは、スキルが音声入力を具体的に想定しているかどうかに基づいてガジェットスキルをAlexaに応答させる方法について説明します。
音声入力のタイプ
スキルのセッション中、ユーザーは2つの方法でスキルに音声入力できます。マイクがオンになっている場合、ユーザーは音声の前に「アレクサ」を付けずに、スキルに直接話しかけることができます。 マイクがオフになっている場合でも、ユーザーは音声入力できますが、リクエストの前に「アレクサ」を付ける必要があります。
音声入力を待機する
このセクションでは、音声入力とガジェット入力を受け取るためにスキルで準備できることについて説明します。
マイクをオンにする
スキルが具体的に音声入力を想定している場合、ユーザーエクスペリエンスを最大限に高めるために、スキルで次のことを行う必要があります。
- ユーザーに質問するためのテキスト読み上げ機能(TTS)を含めます。
shouldEndSession
をfalse
に設定します。これにより、現在のセッションが保持され、応答の最後にマイクがオンになり、ユーザーが別のインテントを話すことができるようになります。ユーザーが応答しない場合、Alexaは再プロンプトを発行します(再プロンプトを含めた場合)。それでもユーザーが応答しない場合、セッションは終了します。
マイクをオンにしない
ガジェットスキルでは、一定の間はセッションを開いたままにする必要がある一方で、マイクをオンにして音声を認識することはしない場合も多くあります。たとえば、スキルでガジェットの点灯式ボタンを押すまでユーザーにパズルを解く時間を与える場合が考えられます。
スキルがガジェット入力を想定しており、音声入力を具体的に想定していない場合、ユーザーエクスペリエンスを最大限に高めるために、スキルで次のことを行う必要があります。
- 必要な操作をユーザーに知らせるための読み上げ機能を含めます。
- ディレクティブに
shouldEndSession
の値を含めないようにします。 - イベントハンドラーを開始する
CustomInterfaceController.StartEventHandler
ディレクティブを含めて、ガジェット入力を監視します。 -
CustomInterfaceController.StartEventHandler
ディレクティブで指定されたexpiration.durationInMilliseconds
が5秒を超える場合は、スキルがまだセッション中であることをユーザーに知らせるために、応答にオーディオファイルも含める必要があります。次の例では、30秒間の秒針サウンドを再生する方法を示しています。このサウンドは開発用に提供されています。<speak> 準備はできましたか?よーいドン! <audio src="https://s3.amazonaws.com/ask-soundlibrary/foley/amzn_sfx_rhythmic_ticking_30s_01.mp3" /> </speak>
音響効果 SSML 秒針サウンド(30秒)
<audio src='https://s3.amazonaws.com/ask-soundlibrary/foley/amzn_sfx_rhythmic_ticking_30s_01.mp3'/>
例
次の例は、点灯式プッシュボタンガジェットを使用するトリビアゲームでよく見られます。Alexaがトリビアの質問をし、ユーザーがボタンを押してブザーを鳴らした後、質問に答えます。この場合、次の対話が行われます。
-
Alexaがトリビアの質問をする – これを設定するには、スキルの応答に音声と
CustomInterfaceController.StartEventHandler
ディレクティブを含めます。応答にはshouldEndSession
の値を含めません。これにより、マイクをオンにせずにガジェット入力を待機できます。 -
ユーザーがブザーを鳴らす – Alexaが
CustomInterfaceController.EventsReceived
リクエストをスキルに送信し、ガジェット入力を通知します。 -
Alexaがユーザーに回答するよう求める –
CustomInterfaceController.EventsReceived
リクエストに対して、スキルがshouldEndSession
をfalse
に設定した応答を返し、ユーザーが回答できるようマイクをオンにします。スキルに「プレイヤー1さん、答えは何ですか?」などの音声を含める場合もあります。
イベントハンドラーと再プロンプト
Alexaスキルと同様に、ガジェットスキルの応答でも再プロンプトを指定できます。ユーザーからの入力がないままマイクがオンになった状態が数秒間続いた場合、Alexaは再プロンプトを読み上げます。数秒後、Alexaは再プロンプトを読み上げ、マイクをさらに数秒間オンにします。
再プロンプト後もユーザーが応答しない場合は、マイクがオフになり、セッションが終了します。セッションが終了したことをスキルに通知するために、AlexaはSessionEndedRequest
をスキルに送信します。その際に、スキルがセッションを再開したり、ほかの方法でユーザーと対話したりすることはできません。スキルで再プロンプトを指定していなかった場合、ユーザーからの入力がなかった最初の数秒後にスキルが終了します。
ガジェットスキルでは、再プロンプトを設定するときの考慮事項がほかにもあります。
- ガジェットイベントのタイプ(
CustomInterfaceController.EventsReceived
またはCustomInterfaceController.Expired
)にかかわらず、保留中の再プロンプトがキャンセルされます。 - テキストまたはSSML応答の再プロンプト機能のみを使用して、ユーザーにガジェットの操作を再プロンプトすることはできません。
CustomInterfaceController.StartEventHandler
ディレクティブを送信し、ガジェット入力を監視する必要があります。CustomInterfaceController.Expired
リクエストに応答を送信し、ユーザーに再度入力を求めることができます。