音声対話 SDK、または Java、C、C++ 用の SDK を使用したくない場合、あるいはこれらの SDK がビジネス要件を満たせない場合は、カスタムプログラムを開発して音声対話にアクセスできます。
概要
音声対話は WebSocket プロトコルを使用して、音声メッセージをリアルタイムでテキストに変換します。長い音声メッセージもサポートされています。コマンドとイベントはどちらも WebSocket のテキストタイプのデータフレームです。音声ストリームはバイナリフレーム形式でサーバーにアップロードする必要があります。呼び出しシーケンスは WebSocket の要件を満たしている必要があります。送信音声データは WebSocket のバイナリフレーム形式を使用します。詳細については、「データフレーム」をご参照ください。
サポートされている入力形式: 16 ビットサンプリングおよびモノラルチャネルの非圧縮 PCM または WAV ファイル
サポートされている音声サンプリングレート: 8,000 Hz および 16,000 Hz
中間結果を返すかどうか、後処理中に句読点を追加するかどうか、および中国語の数字をアラビア数字に変換するかどうかを指定できます。
音声対話コンソールでプロジェクトを管理するときに、さまざまな言語の音声メッセージを認識するための言語モデルを選択できます。詳細については、「プロジェクトの管理」をご参照ください。
認証
サーバーは認証に一時アクセス トークンを使用します。リクエストを行うときは、URL にアクセス トークンを含める必要があります。アクセス トークンの取得方法の詳細については、「アクセス トークンの取得」をご参照ください。アクセス トークンを取得したら、次のいずれかの方法で音声対話にアクセスできます。
アクセスタイプ | 説明 | URL |
外部ネットワークからのアクセス | この URL を使用して、すべてのサーバーから音声対話にアクセスできます。 | wss://nls-gateway-ap-southeast-1.aliyuncs.com/ws/v1?token=<your token> |
対話プロセス
コマンドと音声ストリームは、次の図に示すように順番に送信する必要があります。そうでない場合、サーバーとの対話は失敗します。
コマンド
リクエストコマンドは、音声認識タスクを開始または停止するために使用されます。リクエストは、テキストフレームメソッドを使用して JSON 形式で送信する必要があります。 Header セクションにリクエストの基本情報を設定する必要があります。コマンドは、Header セクションと Payload セクションで構成されます。 Header セクションは統一された形式を使用しますが、Payload セクションはコマンドごとに異なる形式を使用します。
1. Header セクション
Header セクションは、次のパラメーターで構成されます。
パラメーター | タイプ | 必須 | 説明 |
appkey | String | はい | 音声対話コンソールで作成されたプロジェクトの AppKey。 |
message_id | String | はい | リクエストの 32 ビット ID。 ID はランダムに生成され、一意です。 |
task_id | String | はい | 音声認識セッションの 32 ビット ID。 ID は一意であり、リクエスト全体で変更しないでください。 |
namespace | String | はい | アクセスするサービスの名前。値を SpeechTranscriber に設定します。 |
name | String | はい | StartTranscription コマンドと StopTranscription コマンドの名前。詳細については、「StartTranscription コマンド」と「StopTranscription コマンド」をご参照ください。 |
2. StartTranscription コマンド
次の表に、Payload セクションのパラメーターを示します。
パラメーター | タイプ | 必須 | 説明 |
format | String | いいえ | 音声コーディング形式。サポートされている形式: 16 ビットサンプリングおよびモノラルチャネルの非圧縮 PCM または WAV ファイル。 |
sample_rate | Integer | いいえ | 音声サンプリングレート。デフォルトレートは 16,000 Hz です。このパラメーターを設定した後、音声対話コンソールでプロジェクトのシナリオと音声サンプリングレートに適用可能なモデルを指定する必要があります。 |
enable_intermediate_result | Boolean | いいえ | 中間結果を返すかどうかを指定します。デフォルト値: false。 |
enable_punctuation_prediction | Boolean | いいえ | 後処理中に句読点を追加するかどうかを指定します。デフォルト値: false。 |
enable_inverse_text_normalization | Boolean | いいえ | 後処理中に逆テキスト正規化 (ITN) を有効にするかどうかを指定します。デフォルト値: false。このパラメーターを true に設定すると、中国語の数字はアラビア数字に変換されます。 重要 ITN は単語には適用されません。 |
customization_id | String | いいえ | カスタム言語モデルの ID。 |
vocabulary_id | String | いいえ | カスタム流行語の語彙 ID。 |
max_sentence_silence | Integer | いいえ | 文の終わりを判断するためのしきい値。無音時間が指定されたしきい値を超えると、システムは文の終わりを判断します。単位: ミリ秒。有効な値: 200 ~ 2000。デフォルト値: 800。 |
enable_words | Boolean | いいえ | 単語に関する情報を返すかどうかを指定します。デフォルト値: false。 |
enable_ignore_sentence_timeout | Boolean | いいえ | リアルタイム音声認識で単一文の認識タイムアウトを無視するかどうかを指定します。デフォルト値: false。 |
disfluency | Boolean | いいえ | モダリティ粒子と反復的な発話を削除するために、非流暢性検出を有効にするかどうかを指定します。デフォルト値: false。 |
speech_noise_threshold | Float | いいえ | 音声ストリームをノイズとして認識するためのしきい値。有効な値: -1 ~ 1。次の情報は、値について説明しています。
説明 このパラメーターは高度なパラメーターです。慎重に行ってください。適切な値を見つけるためにテストを実行することをお勧めします。 |
enable_semantic_sentence_detection | Boolean | いいえ | 意味的文分割を有効にするかどうかを指定します。デフォルト値: false。 |
サンプルコード:
{
"header": {
"message_id": "05450bf69c53413f8d88aed1ee60****", // リクエストのID
"task_id": "640bc797bb684bd6960185651307****", // セッションID
"namespace": "SpeechTranscriber", // サービスの名前空間
"name": "StartTranscription", // コマンド名
"appkey": "17d4c634****" // プロジェクトのAppKey
},
"payload": {
"format": "opus", // 音声フォーマット
"sample_rate": 16000, // サンプリングレート
"enable_intermediate_result": true, // 中間結果を返すかどうか
"enable_punctuation_prediction": true, // 句読点を予測するかどうか
"enable_inverse_text_normalization": true // 逆テキスト正規化を有効にするかどうか
}
}3. StopTranscription コマンド
StopTranscription コマンドを実行して、音声認識タスクを停止できます。したがって、Payload セクションは空のままにします。サンプルコード:
{
"header": {
"message_id": "05450bf69c53413f8d88aed1ee60****", // リクエストのID
"task_id": "640bc797bb684bd6960185651307****", // セッションID
"namespace": "SpeechTranscriber", // サービスの名前空間
"name": "StopTranscription", // コマンド名
"appkey": "17d4c634****" // プロジェクトのAppKey
}
}イベント
1. TranscriptionStarted イベント
TranscriptionStarted イベントは、サーバーが音声を認識する準備ができていること、およびクライアントから音声ストリームを送信できることを示します。
パラメーター | タイプ | 説明 |
session_id | String | クライアントがリクエストを送信するときに session_id が設定されている場合、同じ値が返されます。それ以外の場合、ランダムに生成された一意の 32 ビット ID が返されます。 |
サンプルコード:
{
"header": {
"message_id": "05450bf69c53413f8d88aed1ee60****", // リクエストのID
"task_id": "640bc797bb684bd6960185651307****", // セッションID
"namespace": "SpeechTranscriber", // サービスの名前空間
"name": "TranscriptionStarted", // イベント名
"status": 20000000, // ステータスコード
"status_message": "GATEWAY|SUCCESS|Success." // ステータスメッセージ
},
"payload": {
"session_id": "1231231dfdf****" // セッションID
}
}2. SentenceBegin イベント
SentenceBegin イベントは、サーバーが文の開始を検出したことを示します。
パラメーター | タイプ | 説明 |
index | Integer | 文のシーケンス番号。 1 から始まります。 |
time | Integer | 文の開始時間から音声ストリームの開始時間まで。単位: ミリ秒。 |
サンプルコード:
{
"header": {
"message_id": "05450bf69c53413f8d88aed1ee60****", // リクエストのID
"task_id": "640bc797bb684bd6960185651307****", // セッションID
"namespace": "SpeechTranscriber", // サービスの名前空間
"name": "SentenceBegin", // イベント名
"status": 20000000, // ステータスコード
"status_message": "GATEWAY|SUCCESS|Success." // ステータスメッセージ
},
"payload": {
"index": 1, // 文のインデックス
"time": 320 // 文の開始時間
}
}3. TranscriptionResultChanged イベント
TranscriptionResultChanged イベントは、認識結果が変更されたことを示します。
パラメーター | タイプ | 説明 |
index | Integer | 文のシーケンス番号。 1 から始まります。 |
time | Integer | 処理された音声ストリームの期間。単位: ミリ秒。 |
result | String | 認識結果。 |
words | Word | 単語に関する情報。 |
status | Integer | ステータスコード。 |
単語構造:
パラメーター | タイプ | 説明 |
text | String | テキストコンテンツ。 |
startTime | Integer | 単語の開始時間。 |
endTime | Integer | 単語の終了時間。 |
サンプルコード:
{
"header":{
"message_id":"05450bf69c53413f8d88aed1ee60****", // リクエストのID
"task_id":"640bc797bb684bd6960185651307****", // セッションID
"namespace":"SpeechTranscriber", // サービスの名前空間
"name":"TranscriptionResultChanged", // イベント名
"status":20000000, // ステータスコード
"status_message":"GATEWAY|SUCCESS|Success." // ステータスメッセージ
},
"payload":{
"index":1, // 文のインデックス
"time":1800, // 処理された音声の長さ
"result":"今年のダブルイレブン", // 認識結果
"words":[
{
"text":"今年", // 単語
"startTime":1, // 単語の開始時間
"endTime":2 // 単語の終了時間
},
{
"text":"ダブルイレブン", // 単語
"startTime":2, // 単語の開始時間
"endTime":3 // 単語の終了時間
}
]
}
}4. SentenceEnd イベント
SentenceEnd イベントは、サーバーが文の終わりを検出したことを示します。
パラメーター | タイプ | 説明 |
index | Integer | 文のシーケンス番号。 1 から始まります。 |
time | Integer | 処理された音声ストリームの期間。単位: ミリ秒。 |
begin_time | Integer | 文に対応する SentenceBegin イベントの時間。単位: ミリ秒。 |
result | String | 認識結果。 |
confidence | Double | 結果の精度レベル。有効な値: 0.0 ~ 1.0。値が大きいほど、精度レベルが高くなります。 |
words | Word | 単語に関する情報。 |
status | Integer | ステータスコード。デフォルト値: 20000000。 |
stash_result | StashResult | 一時的に保存された結果。意味的文分割が有効になっている場合、次の分割されていない文の中間結果が返されます。 |
StashResult 構造:
パラメーター | タイプ | 説明 |
sentenceId | Integer | 文のシーケンス番号。 1 から始まります。 |
beginTime | Integer | 文の開始時間。 |
text | String | トランスクリプションコンテンツ。 |
currentTime | Integer | 処理中の音声ストリームの時間。 |
サンプルコード:
{
"header": {
"message_id": "05450bf69c53413f8d88aed1ee60****", // リクエストのID
"task_id": "640bc797bb684bd6960185651307****", // セッションID
"namespace": "SpeechTranscriber", // サービスの名前空間
"name": "SentenceEnd", // イベント名
"status": 20000000, // ステータスコード
"status_message": "GATEWAY|SUCCESS|Success." // ステータスメッセージ
},
"payload": {
"index": 1, // 文のインデックス
"time": 3260, // 処理された音声の長さ
"begin_time": 1800, // 文の開始時間
"result": "今年のダブルイレブンにテレビを買いたい" // 認識結果
}
}5. TranscriptionCompleted イベント
TranscriptionCompleted イベントは、音声認識タスクが停止されたことを示します。サンプルコード:
{
"header": {
"message_id": "05450bf69c53413f8d88aed1ee60****", // リクエストのID
"task_id": "640bc797bb684bd6960185651307****", // セッションID
"namespace": "SpeechTranscriber", // サービスの名前空間
"name": "TranscriptionCompleted", // イベント名
"status": 20000000, // ステータスコード
"status_message": "GATEWAY|SUCCESS|Success." // ステータスメッセージ
}
}