すべてのプロダクト
Search
ドキュメントセンター

Intelligent Speech Interaction:WebSocket

最終更新日:Jan 12, 2025

音声対話 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。次の情報は、値について説明しています。

  • -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。 enable_ignore_sentence_timeout が有効になっている場合、タイムアウトが発生するとエラーコード 51040104 が返され、現在の接続が維持されます。

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." // ステータスメッセージ
    }
}