あなたのAlexaコンソール
?
サポート

SpeechRecognizer インターフェース

SpeechRecognizerインターフェース

ユーザーの発話はすべてSpeechRecognizerを利用します。これは、Alexa Voice Service (AVS)のコアインターフェースです。Alexaがユーザーの発話をキャプチャしたり、追加の情報が必要な場合にユーザーに質問したりするためのディレクティブやイベントを公開します。

また、クライアントは、このインターフェースを使ってAVSにAlexaとの対話がどのように開始されたか(ボタンの長押し、タップしてリリース、音声/ウェイクワードによる起動など)を伝え、製品に適した自動音声認識(ASR)プロファイルを選択することでAlexaが正確にユーザーの発話を理解して応答できるようにすることができます。

状態ダイアグラム

以下のダイアグラムは、SpeechRecognizerコンポーネントによって制御される状態の変化を表しています。ボックスはSpeechRecognizerの状態、コネクターは状態の遷移を表します。

SpeechRecognizerには以下の状態があります。

IDLE: ユーザー発話のキャプチャを行う前、SpeechRecognizerはidle状態です。また、AVSとの音声対話が完了した後も、SpeechRecognizerはidle状態に戻る必要があります。これは、音声リクエストが正常に処理されたとき、またはExpectSpeechTimedOutイベントに指定された時間を過ぎたときに発生する可能性があります。

さらに、SpeechRecognizerは、マルチターンの対話中にidle状態に戻ることもあります。その時点で、ユーザーからの追加の発話が必要な場合は、ユーザーが新規で対話を開始しなくてもidle状態からexpecting speech状態に戻ります。

RECOGNIZING: ユーザーがクライアントとの対話を開始するとき、具体的には、キャプチャされたオーディオがAVSにストリーミングされたとき、SpeechRecognizerはidle状態からrecognizing stateに遷移する必要があります。SpeechRecognizerコンポーネントは、クライアントが音声の録音を停止する(またはストリーミングが完了する)までrecognizing状態を保ち、その時点でrecognizing状態からbusy状態に遷移します。

BUSY: 音声リクエストの処理中、SpeechRecognizerはbusy状態になります。コンポーネントがbusy状態を抜けるまで、別の音声リクエストを開始することはできません。busy状態からは、リクエストが正常に処理(完了)した場合にidle状態、Alexaがユーザーから追加の発話を必要とする場合はexpecting speech状態に、それぞれ遷移します。

EXPECTING SPEECH: SpeechRecognizerは、ユーザーからの追加のオーディオ入力が必要な場合にexpecting speech状態になります。expecting speech状態からは、ユーザーの対話が発生するか、ユーザーに代わって対話が自動的に開始されたときにrecognizing state状態に遷移します。ユーザーの発話が指定したタイムアウト期間内に検出されなかった場合、idle状態に遷移する必要があります。

SpeechRecognizerの状態ダイアグラム
クリックして拡大

Recognizeイベント

Recognizeイベントは、ユーザー音声をAVSに送信し、その音声を1つ以上のディレクティブに翻訳するために使用します。このイベントは、マルチパートのメッセージとして送信する必要があります。このマルチパートのメッセージは、最初のパートにJSON形式のオブジェクト、2番めのパートに製品のマイクでキャプチャされたオーディオが格納されます。レイテンシーを低減するにはキャプチャしたオーディオをAVSにストリーミング(チャンクに分割して送信)することをお勧めします。この場合、ストリームにはチャンクあたり10ミリ秒のキャプチャオーディオ(320バイト)を含める必要があります。

Alexaとの対話が開始されると、マイクは以下の条件に当てはまるまでオープンのままになります。

  • StopCaptureディレクティブを受信した
  • Alexaサービスによってストリームがクローズされた
  • ユーザーが手動でマイクをクローズした(ボタンの長押しなど)

profileパラメーターとinitiatorオブジェクトは、AlexaにどのASRプロファイルを使うとキャプチャされたオーディオを最もよく理解できるか、およびAlexaとの対話がどのように開始されたかを伝えます。

音声によって起動する製品の場合、クラウドベースのウェイクワード検証の要件に従う必要があります。

AVSに送信されるすべてのキャプチャされたオーディオは、以下の仕様でエンコードする必要があります。

  • 16ビットのリニアPCM (LPCM16)
  • 16kHzのサンプルレート
  • シングルチャネル
  • リトルエンディアンのバイトオーダー

プロトコル固有の例については、HTTP/2リクエストの構成を参照してください。

サンプルメッセージ

{
    "context": [
        // This is an array of context objects that are used to communicate the
        // state of all client components to Alexa. See Context for details.
    ],
    "event": {
        "header": {
            "namespace": "SpeechRecognizer",
            "name": "Recognize",
            "messageId": "{{STRING}}",
            "dialogRequestId": "{{STRING}}"
        },
        "payload": {
            "profile": "{{STRING}}",
            "format": "{{STRING}}",
            "initiator": {
                "type": "{{STRING}}",
                "payload": {
                    "wakeWordIndices": {
                        "startIndexInSamples": {{LONG}},
                        "endIndexInSamples": {{LONG}}
                    },
                    "token": "{{STRING}}"
                }
            }
        }
    }
}

バイナリオーディオ添付ファイル

Recognizeイベントには、マルチパートメッセージの一部として対応するバイナリオーディオ添付ファイルが必要です。以下のヘッダーは、各バイナリオーディオ添付ファイルに必須です。

Content-Disposition: form-data; name="audio"
Content-Type: application/octet-stream

{{BINARY AUDIO ATTACHMENT}}

コンテキスト

このイベントでは、製品がAlexaに対して、すべてのクライアントコンポーネントのステータスをコンテキストオブジェクトに格納して報告しなければならない。その他の情報については、コンテキストを参照してください。

ヘッダーのパラメーター

パラメーター 説明
messageId 特定のメッセージを表すのに使用する一意のID。 string
dialogRequestId Alexaに送信されるRecognizeイベントに対して、クライアントが作成する必要のある一意のID。このパラメーターは、特定のRecognizeイベントへの応答として送信されるディレクティブの関連付けに使用する一意のIDです。 string

ペイロードのパラメーター

パラメーター 説明
profile 製品に関連付けられた自動音声認識(ASR)プロファイルを識別します。AVSは、それぞれ異なる距離からのユーザー音声に最適化された3つのASRプロファイルをサポートしています。
有効な値: CLOSE_TALKNEAR_FIELDFAR_FIELD
string
format キャプチャされたオーディオのフォーマットを識別します。
有効な値: AUDIO_L16_RATE_16000_CHANNELS_1
string
initiator Alexaに対話がどのように開始されたかを伝えます。

このオブジェクトは、対話がエンドユーザーによって開始された(ウェイクワード、タップ、長押し)場合に必須です。

initiatorExpectSpeechディレクティブに存在する場合、後続のRecognizeイベントで返される必要があります。initiatorExpectSpeechディレクティブにない場合、後続のRecognizeイベントに含めるべきではありません
object
initiator.type Alexaとの対話を開始するためにユーザーが行ったアクションを表します。
有効な値: PRESS_AND_HOLDTAPWAKEWORDinitiator.typeExpectSpeechディレクティブで提供され、その文字列が後続のRecognizeイベントでinitiator.typeとして返される必要があります。
string
initiator.payload initiatorに関する情報を含みます。 object
initiator.payload.wakeWordIndices このオブジェクトは、音声によって起動する製品では必須です。
wakeWordIndicesには、startIndexInSamplesendIndexInSamplesを含みます。その他の詳細については、クラウドベースのウェイクワード検証の要件を参照してください。
object
initiator.payload.wakeWordIndices.startIndexInSamples オーディオストリーム内のウェイクワードが開始するインデックスを表します(サンプル数)。開始インデックスのウェイクワード検出との誤差は、50ミリ秒以内である必要があります。 long
initiator.payload.wakeWordIndices.endIndexInSamples オーディオストリーム内のウェイクワードが終了するインデックスを表します(サンプル数)。終了インデックスと検出されたウェイクワード終了との誤差は、150ミリ秒以内である必要があります。 long
initiator.payload.token この値は、先行するExpectSpeechディレクティブのペイロードに存在する場合にのみ必須です。 string

プロファイル

ASRプロファイルは、異なる製品、フォームファクター、音響環境、利用用途に合わせて調整されます。profileパラメーターの有効な値についての詳細を、以下の表に示します。

最適な聞き取り距離
CLOSE_TALK 0~2.5フィート(0~0.76m)
NEAR_FIELD 0~5フィート(0~1.5m)
FAR_FIELD 0~20+フィート(0~6.1m以上)

initiator

initiatorパラメーターはAVSにAlexaとの対話がどのように開始されたかを伝え、以下の2つのことを決定します。

  1. クラウドで発話の終了が検出されたときにStopCaptureをクライアントに送信するかどうか
  2. ストリームでクラウドベースのウェイクワード検証を実施するかどうか

initiatorは、各SpeechRecognizer.Recognizeイベントのペイロードに含まれる必要があります。有効な値は以下のとおりです。

説明 サポートされるプロファイル(複数可) StopCaptureは有効か ウェイクワード検証は有効か ウェイクワードのインデックスは必要か
PRESS_AND_HOLD ボタン(物理またはGUI)を押すことで開始し、離すことで終了するオーディオストリーム CLOSE_TALK N N N
TAP ボタン(物理またはGUI)をタップして離すことで開始し、StopCaptureディレクティブを受信したときに終了するオーディオストリーム NEAR_FIELDFAR_FIELD Y N N
WAKEWORD ウェイクワードの使用により開始し、StopCaptureディレクティブを受信したときに終了するオーディオストリーム NEAR_FIELDFAR_FIELD Y Y Y

StopCaptureディレクティブ

このディレクティブは、AVSがユーザーのインテントを特定したとき、または発話の終了が検出されたときにキャプチャを停止するようクライアントに指示します。このディレクティブを受信すると、クライアントは直ちにマイクをクローズし、ユーザー発話の聞き取りを停止する必要があります。

サンプルメッセージ

{
    "directive": {
        "header": {
            "namespace": "SpeechRecognizer",
            "name": "StopCapture",
            "messageId": "{{STRING}}",
            "dialogRequestId": "{{STRING}}"
        },
        "payload": {
        }
    }
}

ヘッダーのパラメーター

パラメーター 説明
messageId 特定のメッセージを表すのに使用する一意のID。 string
dialogRequestId 特定のRecognizeイベントの応答として送信されるディレクティブの関連付けに使用する一意のID string

ExpectSpeechディレクティブ

ExpectSpeechは、Alexaがユーザーリクエストを満たすために追加の情報を必要としているときに送信されます。このディレクティブは、マイクをオープンしてユーザー発話のストリーミングを開始するようクライアントに指示します。指定したタイムアウト期間内にマイクがオープンされない場合、ExpectSpeechTimedOutイベントをクライアントからAVSに送信する必要があります。

Alexaとのマルチターンの対話中、デバイスは、クライアントにユーザー発話の聞き取りを開始するよう指示するExpectSpeechディレクティブを少なくとも1つ受信します。ExpectSpeechディレクティブのペイロードにinitiatorオブジェクトが存在する場合、後続のRecognizeイベントでinitiatorオブジェクトとして返す必要があります。ペイロードにinitiatorがない場合、後続のRecognizeイベントにinitiatorを含めるべきではありません

オーディオの優先順位付けを管理するルールの詳細は、対話モデルをご確認ください。

サンプルメッセージ

{
    "directive": {
        "header": {
            "namespace": "SpeechRecognizer",
            "name": "ExpectSpeech",
            "messageId": "{{STRING}}",
            "dialogRequestId": "{{STRING}}"
        },
        "payload": {
            "timeoutInMilliseconds": {{LONG}},
            "initiator": {
                "type": "{{STRING}}",
                "payload": {
                    "token": "{{STRING}}"
                }
            }
        }
    }
}

ヘッダーのパラメーター

パラメーター 説明
messageId 特定のメッセージを表すのに使用する一意のID。 string
dialogRequestId 特定のRecognizeイベントの応答として送信されるディレクティブの関連付けに使用する一意のID string

ペイロードのパラメーター

パラメーター 説明
timeoutInMilliseconds クライアントがマイクのオープンとAVSへのユーザー発話のストリーミング開始をどのくらい待機するべきかをミリ秒で指定します。指定したタイムアウト期間内にマイクがオープンされない場合、ExpectSpeechTimedOutイベントを送信する必要があります。この動作の主な利用用途は、PRESS_AND_HOLDの実装環境です。 long
initiator 対話に関する情報を含みます。このパラメーターが存在する場合、後続のRecognizeイベントでAlexaに返す必要があります。 object
initiator.type このパラメーターが存在する場合、後続のRecognizeイベントでAlexaに返す必要があります。 string
initiator.payload initiatorに関する情報を含みます。 object
initiator.payload.token このパラメーターが存在する場合、後続のRecognizeイベントでAlexaに返す必要があります。 string

ExpectSpeechTimedOutイベント

このイベントは、ExpectSpeechディレクティブを受信したが、指定したタイムアウト期間内にユーザー発話を聞き取れなかった場合、AVSに送信する必要があります。

サンプルメッセージ

{
    "event": {
        "header": {
            "namespace": "SpeechRecognizer",
            "name": "ExpectSpeechTimedOut",
            "messageId": "{{STRING}}",
        },
        "payload": {
        }
    }
}

ヘッダーのパラメーター

パラメーター 説明
messageId 特定のメッセージを表すのに使用する一意のID。 string

ペイロードのパラメーター

空のペイロードを送信する必要があります。

その他のインターフェース

このドキュメントの最初に戻り、サイドバーからその他のインターフェースを参照してください。

リソース