--- title: "リアルタイムストリーミングの認識" slug: "ai-application-service-clovaspeech-grpc" updated: 2026-10-08T07:24:00Z published: 2026-10-08T07:24:00Z canonical: "api.ncloud-docs.com/ai-application-service-clovaspeech-grpc" --- > ## Documentation Index > Fetch the complete documentation index at: https://api.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # リアルタイムストリーミングの認識 Classic/VPC環境で利用できます。 リアルタイムで、16kHZ、1Channel、16bits per sampleの PCM(ヘッダなしの WAVファイル)形式の音声データを認識し、テキストに変換します。gRPC方式を通じてのみアクセスが可能です。 ## リクエスト リクエスト形式を説明します。リクエスト形式は次の通りです。 | Host | Port | | --- | --- | | clovaspeech-gw.ncloud.com | 50051 | ### リクエスト手順 gRPC方式を通じて認識をリクエストする方法は次の通りです。 1. [事前準備](/docs/ja/ai-application-service-clovaspeech-grpc#%EC%82%AC%EC%A0%84%EC%A4%80%EB%B9%84) 2. [Config JSON](/docs/ja/ai-application-service-clovaspeech-grpc#configjson) 3. [認識(Recognize)](/docs/ja/ai-application-service-clovaspeech-grpc#%EC%9D%B8%EC%8B%9DRecognize) 参考 Rocky Linuxに基づいて説明します。 ## 1. Protoc Compilerのインストールと準備 APIを使用するための事前準備のため、[gRPCサイト](https://grpc.io/docs/ja/protoc-installation)を参照して Protoc Compilerをインストールします。インストール後、必要に応じて Pythonと Javaの中から言語を選択し、APIのインターフェースが定義された`'nest.proto'`ファイルを通じて[Compilerを呼び出し](https://grpc.io/docs/ja/languages/)ます。 Protoc Compilerをインストールして gRPCコードを生成する方法は次の通りです。 1. Protoc Compilerをインストールするサーバにリモートアクセスします。 2. gRPC使用のためのパッケージとプラグインをインストールします。 - Rocky Linux: Python ``` # 最新状態の確認 sudo dnf update # Pythonのインストール: Linuxサーバに Pythonをインストールします。 sudo dnf install python3 # pipのインストールとアップグレード: pipは Python用パッケージインストールプログラムです。 sudo dnf install python3-pip pip3 install --upgrade pip # grpcio-toolsのインストール: pipを使用して「grpcio-tools」をインストールします。 pip3 install grpcio-tools # nest.protoファイルの作成 touch nest.proto # protoc compilerで nest.protoファイルをコンパイル python3 -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. nest.proto ``` - Rocky Linux: Java ``` # protoc-gen-grpc-javaプラグインのダウンロード(バージョン番号は確認が必要 https://github.com/grpc/grpc-java/releases) curl -OL https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/1.66.0/protoc-gen-grpc-java-1.66.0-linux-x86_64.exe # PATHに追加 mv protoc-gen-grpc-java-1.66.0-linux-x86_64.exe /usr/local/bin/protoc-gen-grpc-java # 実行権限に変更する chmod +x /usr/local/bin/protoc-gen-grpc-java # インストールの確認 protoc-gen-grpc-java --version # nest.protoファイルの作成 touch nest.proto # protoc compilerで nest.protoファイルをコンパイル protoc --proto_path=. --java_out=output/directory --grpc-java_out=output/directory nest.proto ``` 3. `'nest.proto'`ファイルを開いて次のコードを入力し、gRPCコードを生成します。 ``` syntax = "proto3"; option java_multiple_files = true; package com.nbp.cdncp.nest.grpc.proto.v1; enum RequestType { CONFIG = 0; DATA = 1; } message NestConfig { string config = 1; } message NestData { bytes chunk = 1; string extra_contents = 2; } message NestRequest { RequestType type = 1; oneof part { NestConfig config = 2; NestData data = 3; } } message NestResponse { string contents = 1; } service NestService { rpc recognize(stream NestRequest) returns (stream NestResponse){}; } ``` ## 2. 認証(Authorization) Protoc Compilerで gRPCコードの生成が完了したら、認証を行います。認証は、API呼び出し時に`Authorization`ヘッダに Bearerトークンを含め、サーバに対して正当性の認証を行う方式で実施します。認証を行う際は、次の点にご注意ください。 - gRPC Channelを設定し、`nest_grpc_pb2`の Client Side Proxyである`stub`を作成します。 - `stub`の作成後、`recognize`メソッドを呼び出す際に、認証キーを含むMetadata(メタデータ)を付与して実行します。 - リアルタイムストリーミング認識 APIは Freeプランではサポートしていません。Basic長文認識プランでのみサポートしています。 ### 認証ヘッダ 認証ヘッダは次の通りです。 | ヘッダ名 | 説明 | | --- | --- | | `Authorization` | `Bearer ${secretKey}` | ### 認証手順 認証方法は次の通りです。 #### Python Rocky Linux環境にて Pythonを使用して認証を行う方法は次の通りです。 1. Pythonファイルを作成します。ここではファイル名を`main.py`に指定しました。 ``` touch main.py ``` 2. `main.py`に次の内容を追加します。 ``` import grpc import json import nest_pb2 import nest_pb2_grpc channel = grpc.secure_channel( 'clovaspeech-gw.ncloud.com:50051', grpc.ssl_channel_credentials() ) client = NestServiceStub(channel) metadata = (("authorization", f"Bearer {secretKey}"),) #小文字 authorizationは必須 / secretkeyは長文認識ドメインで確認 call = client.YourMethod(YourRequest(), metadata=metadata) ``` #### Java Rocky Linux環境にて Javaを使用して認証を行う方法は次の通りです。 1. Javaファイルを作成します。ここではファイル名を`main.java`に指定しました。 ``` touch main.java ``` 2. `main.java`に次の内容を追加します。 ``` ManagedChannel channel = NettyChannelBuilder .forTarget("clovaspeech-gw.ncloud.com:50051") .useTransportSecurity() .build(); NestServiceGrpc.NestServiceStub client = NestServiceGrpc.newStub(channel); Metadata metadata = new Metadata(); metadata.put(Metadata.Key.of("Authorization", Metadata.ASCII_STRING_MARSHALLER), "Bearer ${secretKey}"); client = MetadataUtils.attachHeaders(client, metadata); ``` ## 3. Config JSON Protocで作成された`nest_pb2`の`NestRequest`オブジェクトを使ってストリーミングエンドポイントに渡される Config JSONについて説明します。Config JSONは、リアルタイムストリーミング認識 APIを初回呼び出す際に転送する必要があります。 Config JSONには、次のようなフィールドを提供しています。 - transcription: 音声認識言語を設定 - keywordBoosting: 入力された単語の認識率を高める設定 - forbidden: 禁止語を設定 - semanticEpd: 音声認識結果生成基準を設定 - translationEpd: 翻訳時の Target言語、レスポンス受信方法などを設定 ### リクエストボディ Config JSONのリクエストボディの説明は次の通りです。 #### Transcription Transcriptionの説明は次の通りです。 | フィールド | タイプ | 必須の有無 | 説明 | | --- | --- | --- | --- | | `language` | String | Required | 音声認識対象の言語コード - `ko` \| `en` \| `ja` - `ko`: 韓国語 - `en`: 英語 - `ja`: 日本語 | 参考 transcriptionは必ず入力フィールドではありませんが、明確な音声認識のために設定することをお勧めします。 #### useDomainBoostings useDomainBoostingsフィールドの詳細は次の通りです。 | フィールド | タイプ | 必須の有無 | 説明 | | --- | --- | --- | --- | | `useDomainBoostings` | Boolean | Optional | ストリーミング認識ドメインで作成したキーワードブースト IDを有効化 - `true` \| `false` (デフォルト) - `true`: キーワードブースト IDを使用 - `keywordBoosting.boostingIDs`に使用するブースト IDの指定が必要で、このとき`keywordBoosting.boostings`で登録したキーワードは適用不可 (重複適用不可、単一使用が必須) - `false`: キーワードブースト IDを使用しない - `keywordBoosting.boostingIDs`を入力するとエラーを返す | #### useDomainForbiddens useDomainForbiddensフィールドの詳細は次の通りです。 | フィールド | タイプ | 必須の有無 | 説明 | | --- | --- | --- | --- | | `useDomainForbiddens` | Boolean | Optional | ストリーミング認識ドメインで作成した禁止語フィルタリング IDを有効化 - `true` \| `false` (デフォルト) - `true`: 禁止語フィルタリング IDを使用 - `forbidden.forbiddenIDs`に使用する禁止語 IDの指定が必要で、このとき`forbidden.forbiddens`で登録したキーワードは適用不可 (重複適用不可、単一使用が必須) - `false`: 禁止語フィルタリング IDを使用しない | #### Keyword Boosting Keyword Boostingフィールドの詳細は次の通りです。 | フィールド | タイプ | 必須の有無 | 説明 | | --- | --- | --- | --- | | `keywordBoosting` | Object | Optional | キーワードブースト情報 - あらかじめ登録したキーワードの認識率を高める | | `keywordBoosting.boostings` | Array | Optional | キーワードブースト単語の詳細情報: [boostings](/docs/ja/ai-application-service-clovaspeech-grpc#boostings) | | `keywordBoosting.boostingIDs` | Array | Conditional | ストリーミング認識ドメインで作成したキーワードブーストグループ IDリスト - `useDomainBoostings`が`true`の場合にのみ使用可能 - 複数の IDを指定でき、指定したグループのキーワードがすべて適用される - `useDomainBoostings`が`false`(デフォルト)の状態で入力時、`INVALID_ARGUMENT`エラーを返す (`keywordBoosting: "Invalid boostingID"`) - 直接入力方式である`boostings`と併用できない | #### boostings `boostings`の説明は次の通りです。 | フィールド | タイプ | 必須の有無 | 説明 | | --- | --- | --- | --- | | `words` | String | Optional | キーワードブースト単語リスト - 複数入力時、コンマ「,」で区切る - 例) `"words": "test,test1,test2"` - 単語の前後にスペース(space)を置く | | `weight` | Float | Optional | キーワードブーストの重み - `0`~`5.0` - 重みが`0`の場合、ブーストを適用しない - すべてのキーワードにおける重みは同一 | #### Forbidden Forbiddenフィールドの詳細は次の通りです。 | フィールド | タイプ | 必須の有無 | 説明 | | --- | --- | --- | --- | | `forbidden` | Object | Optional | 禁止ワード情報 - あらかじめ登録したキーワードの認識率を下げる | | `forbidden.forbiddens` | String | Optional | 禁止語リスト - 複数入力時、コンマ「,」で区切る - 例) `"forbiddens": "禁止語1, 禁止語2"` - 単語の前後にスペース(space)を置く - 禁止語タグ: `<forbidden>禁止語</forbidden>` - 認識結果の`text`キーの値にのみ追加 - 追加されたタグは認識結果の`position`、`periodPosition`、`alignInfo`には影響なし | | `forbidden.forbiddenIDs` | Array | Conditional | ストリーミング認識ドメインで作成した禁止語フィルタリンググループ IDリスト - `useDomainForbiddens`が`true`の場合にのみ使用可能 - 複数の IDを指定でき、指定したグループの禁止語がすべて適用される - 直接入力方式である`forbiddens`と併用不可 | #### SemanticEPD Semantic EPDフフィールドの詳細は次の通りです。 | フィールド | タイプ | 必須の有無 | 説明 | | --- | --- | --- | --- | | `semanticEpd` | Object | Optional | 音声認識結果の生成基準設定情報 | | `semanticEpd.skipEmptyText` | Boolean | Optional | 認識結果がない結果値を転送するかどうか。この設定を trueに設定した場合、認識された音節がない認識結果は転送しません。 - `true` \| `false` (デフォルト) - `true`: 転送しない - `false`: 転送 | | `semanticEpd.useWordEpd` | Boolean | Optional | 単語(word)で終了する認識結果を生成するかどうか。この設定を trueに設定した場合、認識結果が単語で終了するように認識結果を生成します。 - `true` \| `false` (デフォルト) - `true`: 生成 - `false`: 生成しない | | `semanticEpd.usePeriodEpd` | Boolean | Optional | 句読点で終了する認識結果を生成するかどうか。この設定を trueに設定した場合、認識結果が句読点で終了するように認識結果を生成します。 - `true` \| `false` (デフォルト) - `true`: 生成 - `false`: 生成しない - 句読点認識精度向上のため、`usePeriodEpd`が`true`の場合、`useWordEpd`も`true`に設定 | | `semanticEpd.gapThreshold` | Integer | Optional | 認識結果生成基準の無音発生時間(ms、milliseconds)。`gapThreshold`以上の無音が発生すると認識結果を生成します。 - デフォルトは`0`です。ユーザーが別途設定しない場合、または`0`以下の値に設定した場合には使用されず、ms秒単位で設定できます。 | | `semanticEpd.durationThreshold` | Integer | Optional | 認識結果生成基準の持続時間(ms、milliseconds)。認識結果の持続時間が`durationThreshold`の値より小さくなるように認識結果を生成します。 - デフォルトは`0`です。ユーザーが別途設定しない場合、または`0`以下の値に設定した場合には、デフォルトが適用されます。適切な長さの認識結果を生成するため、ms単位で直接設定することをお勧めします。 | | `semanticEpd.syllableThreshold` | Integer | Optional | 認識結果生成基準とする音節数。認識結果を構成する音節の数が`syllableThreshold`の値より小さくなるように認識結果を生成されます。 - 空白(`" "`)と句点(`"."`)も1つの音節として処理 - デフォルトは`0`です。ユーザーが別途設定しない場合、または`0`以下の値を設定した場合には使用しない | #### Translation Translationフィールドの詳細は次の通りです。 | フィールド | タイプ | 必須の有無 | 説明 | | --- | --- | --- | --- | | `translation.targets` | Array | Required | ソース言語の言語コードを入力 - サポートする言語コードの説明は、[Papago Translationの翻訳サポート言語](https://api.ncloud-docs.com/docs/ja/ai-naver-papagonmt-translation)を参照 | | `translation.mergedResult` | Boolean | Optional | 認識結果と翻訳結果を1つのレスポンスで受信する設定 - `true` \| `false` (デフォルト) - trueに設定すると認識結果を生成する semanticEPDの EPD設定で翻訳結果を生成します。 - この場合、Translation EPDの一部設定値(usePeriodEpd、gapThreshold、durationThreshold、syllableThreshold)は無視され、翻訳結果の生成に影響を与えません。 | | `translation.gapThreshold` | Integer | Optional | 認識結果生成基準の無音発生時間(ms、milliseconds)。`gapThreshold`以上の無音が発生すると認識結果を生成します。 - デフォルトは`2000`です。`0`以下の値に設定した場合に使用され、ms秒単位で設定できます。 | | `translation.durationThreshold` | Integer | Optional | 認識結果生成基準の持続時間(ms、milliseconds)。認識結果の持続時間が`durationThreshold`の値より小さくなるように認識結果を生成します。 - デフォルトは`20000`です。`0`以下の値に設定するとデフォルトに設定されます。適切な長さの認識結果を生成するため、ms単位で直接設定することをお勧めします。 | | `translation.honorific` | Boolean | Optional | 敬語を適用するか - `true` \| `false`(デフォルト) - `true`: 敬語を適用 - `false`: 敬語を適用しない - 英語⇒韓国語、日本語⇒韓国語、中国語(簡体字/繁体字)⇒韓国語、韓国語⇒日本語、英語⇒日本語、中国語(簡体字/繁体字)⇒日本語 | | `translation.glossaryKey` | String | Optional | 用語集 ID - 用語集データに基づいて置換翻訳を適用 - 韓国語⇔英語、日本語、中国語(簡体字/繁体字)、フランス語 \| 英語⇔日本語、中国語(簡体字/繁体字)、ベトナム語、タイ語、インドネシア語、フランス語\| 日本語⇔中国語(簡体字/繁体字) - 用語集の用語には`honorific`(敬語)を適用しない | ### リクエスト例 Config JSONのリクエストのサンプルコードは次の通りです。 ``` #Semantic EPD { "semanticEpd": { "skipEmptyText": false, "useWordEpd": false, "usePeriodEpd": true, "gapThreshold": 2000, "durationThreshold": 20000, "syllableThreshold": 0 } } #Translation Info / EPD { "translation": { "targets": ["en"], "mergedResult": False, "gapThreshold": 2000, "durationThreshold": 20000, "honorific": False, "glossaryKey": string } } #useDomainBoostings # 注意: キーワードブースト ID(boostingKey)と単語の直接登録(boostings)は併用できません。2つの方法のうち、いずれか1つを選んでリクエストしてください。2つのフィールドを同時に送信すると、リクエストは失敗します。 "useDomainBoostings": true, "keywordBoosting": { "boostingIDs": [ "test", "test123" ] }, #useDomainForbiddens "useDomainForbiddens": true, "forbidden": { "forbiddenIDs": [ "lzforb", "word222" #KeywordBoosting { "keywordBoosting": { "boostings": [ { "words": "test,test1,test2", "weight": 1 }, { "words": "テスト,テスト1,テスト2", "weight": 0.5 } ], }, #Forbidden "forbidden": { "forbiddens": "禁止語1,禁止語2", } } ``` ### レスポンスボディ Config JSONのレスポンスボディの説明は次の通りです。 | フィールド | タイプ | 必須の有無 | 説明 | | --- | --- | --- | --- | | `uid` | String | - | UID | | `responseType` | Array | - | レスポンスタイプ - `transcription` \| `keywordBoosting` \| `Forbidden` \| `semanticEpd` | | `config` | Object | - | Config JSON情報 | | `config.status` | String | - | Config JSONのリクエスト状態 - `Success` \| `Failure` \| `${message}` - `Success`: リクエスト成功(gRPCに設定保存完了) - `Failure`: リクエスト失敗([エラーメッセージ](/docs/ja/ai-application-service-clovaspeech-grpc#%EC%98%A4%EB%A5%98%EB%A9%94%EC%8B%9C%EC%A7%80))を参照 - `${message}`: `top_level_key`は省略可能 | | `config.keywordBoosting` | Object | - | キーワードブースト情報 | | `config.keywordBoosting.status` | String | - | キーワードブーストのリクエスト状態 - `Success` \| `Failure` \| `${message}` - `Success`: リクエスト成功(gRPCに設定保存完了) - `Failure`: リクエスト失敗([エラーメッセージ](/docs/ja/ai-application-service-clovaspeech-grpc#%EC%98%A4%EB%A5%98%EB%A9%94%EC%8B%9C%EC%A7%80))を参照 - `${message}`: `top_level_key`は省略可能 | | `config.forbidden` | Object | - | 要注意キーワード情報 | | `config.forbidden.status` | String | - | 要注意キーワードのリクエスト状態 - `Success` \| `Failure` \| `${message}` - `Success`: リクエスト成功(gRPCに設定保存完了) - `Failure`: リクエスト失敗([エラーメッセージ](/docs/ja/ai-application-service-clovaspeech-grpc#%EC%98%A4%EB%A5%98%EB%A9%94%EC%8B%9C%EC%A7%80))を参照 - `${message}`: `top_level_key`は省略可能 | | `config.semanticEpd` | Object | - | Semantic EPD情報 | | `config.semanticEpd.status` | String | - | Semantic EPDのリクエスト状態 - `Success` \| `Failure` \| `${message}` - `Success`: リクエスト成功(gRPCに設定保存完了) - `Failure`: リクエスト失敗([エラーメッセージ](/docs/ja/ai-application-service-clovaspeech-grpc#%EC%98%A4%EB%A5%98%EB%A9%94%EC%8B%9C%EC%A7%80))を参照 - `${message}`: `top_level_key`は省略可能 | #### エラーメッセージ リクエスト失敗時に表示されるエラーメッセージの説明は次の通りです。 | エラーメッセージ | 関連フィールド | 説明 | | --- | --- | --- | | `Unknown key: ${top_level_key}-${unknown_key}` | 共通 | サーバがサポートしていないサブレベルキー(Sub Level Key)を保有 | | `Invalid type: ${top_level_key}-${invalid_type_key}` | 共通 | サーバがサポートしていないサブレベルバリュータイプ(Sub Level Value Type)を保有 | | `Invalid language code: ${invalid_language_code}` | `transcription` | `language`が事前に定義されていない言語コード | | `Not Authorized` | `transcription` | `language`が許可されていない言語コード | | `Targets are empty` | `translation` | configリクエスト jsonに targetsが設定されていない場合 | | `Invalid language code: ${source}:${targets}` | `translation` | サポートしていない言語コードか、sourceと targetが同一の場合 | | `Internal system error` | `keywordBoosting` | サーバ内部問題が発生 | | `Invalid request json format` | - | 無効な JSON形式 | | `Required key is not provided` | - | サーバに定義された必須キー値を含まない | | `No more slot` | - | 現在サーバに空きリソースがない | | `ConfigRequest did not complete` | - | Config JSONリクエストの処理が完了していない状態でサーバに認識をリクエスト | | `Lifespan expired` | - | gRPCサービスの有効期限切れ | | `Failed to received request msg` | - | サーバがリクエストメッセージを正常に受信できない | | `Model server is not working` | - | サーバ内部エラー | | `Internal server error` | - | サーバ内部エラー | | `RESOURCE_EXHAUSTED` | - | gRPC接続に空きリソースがない - 基準: ドメインごとに15個を超過 | ### レスポンス例 Config JSONのレスポンスのサンプルコードは次の通りです。 #### 成功 呼び出しに成功した場合のレスポンスのサンプルコードは次の通りです。 ``` { "uid": "{uid}", "responseType": [ "config" ], "config": { "status": "Success", "keywordBoosting": { "status": "Success" }, "forbidden" : { "status": "Success" } } ``` #### 失敗 リクエストで`hobidden`を入力して呼び出しが失敗した場合のレスポンスのサンプルコードは次の通りです。 ``` { "uid": "{uid}", "responseType": [ "config" ] "config": { "status": "Unknown key: hobidden" } } ``` ## 4. 認識(Recognize) Config JSONで必要な設定を行った後、`recognize`を通じて音声認識 APIを呼び出し、リアルタイムで音声データを処理して認識します。Protocにて生成したコードにある`NestRequest`と認証メタデータを`stub`のメソッドである`recognize`を通じて音声認識 APIを呼び出す仕組みです。 ### リクエストボディ Recognizeのリクエストボディの説明は次の通りです。 | フィールド | タイプ | 必須の有無 | 説明 | | --- | --- | --- | --- | | `epFlag` | Boolean | Optional | 一時停止または最終認識リクエスト時のバッファおよび結果を返すタイミング - `true` \| `false` (デフォルト) - `true`: 認識リクエストバッファを直ちに返した後、結果を返す - `false`: 10秒間追加リクエストがない場合、バッファを自動的に返した後、結果を返す | | `seqId` | Integer | Conditional | 認識リクエスト ID - `epFlag`が`true`の場合、結果確認用途に使用 - `seqId`設定後に転送しないと結果値は `0` - `0`以外の値に設定して転送することを推奨 | ### レスポンスボディ Recognizeのレスポンスボディの説明は次の通りです。 | フィールド | タイプ | 必須の有無 | 説明 | | --- | --- | --- | --- | | `uid` | String | - | UID | | `responseType` | Array | - | レスポンスタイプ - `transcription` \| `keywordBoosting` \| `Forbidden` \| `semanticEpd` \| `recognize` | | `config` | Object | - | Config JSONフィールド情報 | | `config.text` | String | - | 認識結果のテキスト | | `config.position` | Integer | - | テキスト全体における、`text`として渡されたテキストの位置 | | `config.periodPositions` | Array | - | テキスト全体における`.`(句読点)の位置 - `text`に`.`がない場合、空白 | | `config.periodAlignIndices` | Array | - | `.`の`alignInfos`インデックス情報 - `text`に`.`がない場合、空白 | | `config.epFlag` | Boolean | Optional | リクエストにて`epFlag`を`true`に設定して送信した音源に関する認識結果を含むか - `true` \| `false` - `true`: 含む - `false`: 含まない | | `config.seqId` | Integer | - | 認識結果の最終リクエストかどうか - `true` \| `false` - `true`: 最終認識リクエストの`seqId`を返す - `false`: `0`を返す | | `config.epdType` | String | - | 認識結果生成における EPD基準 - `gap` \| `endPoint` \| `durationThreshold` \| `period` \| `syllableThreshold` \| `unvoice` - `gap`: 無音 - `endPoint`: 最後の音声データチャンク - `durationThreshold`: 再生時間 - `period`: 句読点 - `syllableThreshold`: 音節数 - `unvoice`: `unvoiceTime`(サーバ設定)で処理 | | `config.startTimestamp` | Integer | - | 認識結果の開始時刻(ms) | | `config.endTimestamp` | Integer | - | 認識結果の終了時刻(ms) | | `config.confidence` | Float | - | 認識結果の信頼度 - 認識結果のすべての音節信頼度(`alignInfos.confidence`)の幾何平均値 | | `config.alignInfos` | Array | - | 認識結果構成音節の Align情報: [aligninfos](/docs/ja/ai-application-service-clovaspeech-grpc#aligninfos) | | `recognize` | Object | - | 認識(Recognize)情報 | | `recognize.status` | String | - | 認識(Recognize)の状態 - レスポンス失敗の場合、[エラーメッセージ](/docs/ja/ai-application-service-clovaspeech-grpc#%EC%98%A4%EB%A5%98%EB%A9%94%EC%8B%9C%EC%A7%80)を参照 | | `recognize.epFlag` | Object | - | `epFlag`情報 | | `recognize.epFlag.status` | String | - | `epFlag`の状態 - 認識(Recognize)リクエスト JSONにおいて`extraContents`が無効な形式である場合、`epFlag.status`または`seqId.status`に失敗の詳細な理由が表示 - レスポンス失敗の場合、[エラーメッセージ](/docs/ja/ai-application-service-clovaspeech-grpc#%EC%98%A4%EB%A5%98%EB%A9%94%EC%8B%9C%EC%A7%80)を参照 | | `recognize.seqId` | Object | - | `seqId`情報 | | `recognize.seqId.status` | String | - | `seqId`の状態 - 認識(Recognize)リクエスト JSONにおいて `extraContents`が無効な形式である場合、`epFlag.status`または`seqId.status`に失敗の詳細な理由が表示 - レスポンス失敗の場合、[エラーメッセージ](/docs/ja/ai-application-service-clovaspeech-grpc#%EC%98%A4%EB%A5%98%EB%A9%94%EC%8B%9C%EC%A7%80)を参照 | 参考 `text`と`position`を使用して、full textを構成する例は次の通りです。 | 渡された順序 | 認識結果 | full text | | --- | --- | --- | | 1 | {text: "ABC", position: 0, ...} | "ABC" | | 2 | {text: "DEFG", position: 3, ...} | "ABCDEFG" | #### `alignInfos` `alignInfos`の説明は次の通りです。 | フィールド | タイプ | 必須の有無 | 説明 | | --- | --- | --- | --- | | `word` | String | - | 構成音節 | | `start` | Integer | - | 構成音節の開始時刻(ms) | | `end` | Integer | - | 構成音節の終了時刻(ms) | | `confidence` | Float | - | 構成音節の信頼度 - 0~1.0 | #### エラーメッセージ Recognizeリクエスト失敗時に表示されるエラーメッセージの説明は次の通りです。 | エラーメッセージ | 関連フィールド | 説明 | | --- | --- | --- | | `Invalid Type` | `recognize.status` | `epFlag`または`seqId`タイプと、事前に定義されたタイプが一致しない | | `Required key is not provided` | `recognize.status` | `extraContents`の`epFlag`の値が渡されていない | | `Invalid request json format` | `recognize.status` | `extraContents`が JSON形式ではない | | `Unknown key` | `recognize.status` | `extraContents`にプロトコルにない keyを作成 | | `ConfigRequest is already called` | `recognize.status` | サーバに Configを重複してリクエスト | | `Lifespan expired` | `recognize.status` | gRPCサービス使用時間の期限切れ - 基準: | | 時間 | | | | `Failed to received request msg` | `recognize.status` | サーバがリクエストメッセージを正常に受信できない | | `Model server is not working` | `recognize.status` | サーバ内部問題が発生 | | `Internal server error` | `recognize.status` | サーバ内部問題が発生 | | `Failed to translation: ${message}` | - | 翻訳機能関連のエラー - [Text Translationエラーメッセージを参照](/docs/ja/ai-naver-papagonmt) | | `Invalid format` | `recognize.status` | 無効なオーディオ形式が転送される | | `Not found` | `epFlag.status` | `epFlag`の値が入力されていない | | `Invalid type` | `epFlag.status`, `seqId.status` | 事前に定義されたタイプと一致しない | | `Invalid format` | `audio.status` | `audio`フィールドが、事前に定義されたタイプと一致しない | ### レスポンス例 レスポンスのサンプルコードは次の通りです。 #### 成功 呼び出しに成功した場合のレスポンスのサンプルコードは次の通りです。 - レスポンス成功および`"responseType": [ "transcription" ]`の場合 ``` { "uid": "{uid}" "responseType": [ "transcription" ] "transcription": { "text": "これはテキストです。", "position": 0, "periodPositions": [3], "periodAlignIndices": [3], "epFlag": false, "seqId": 0, "epdType": "durationThreshold", "startTimestamp": 190, "endTimestamp": 840, "confidence": 0.997389124199423, "alignInfos": [ {"word":"これは","start":190,"end":340,"confidence":0.9988637124943075}, {"word":"テキスト","start":341,"end":447,"confidence":0.9990018488549978}, {"word":"です","start":448,"end":580,"confidence":0.9912501264550316}, {"word":".","start":581,"end":700,"confidence":0.9994397226648595}, {"word":" ","start":701,"end":840,"confidence":0.9984142043105126} ] } } ``` #### 失敗 呼び出しに失敗した場合のレスポンスのサンプルコードは次の通りです。 ``` { "uid": string, # required "responseType": [ "recognize" ], # required "recognize": { # required "status": string, # required "epFlag": { # optional "status": string }, "seqId": { # optional "status": string }, "audio": { # op "status": } } } ``` ## 5. その他の API 現在有効化状態の Stub呼び出し数と、ドメインの許可された最大 Stub数などを照会します。 ``` curl --location 'https://clovaspeech-gw.ncloud.com:50051/api/v1/${domainId}/active-calls' \ --header 'Authorization: Bearer ${API_KEY}' ``` ## レスポンス レスポンス形式を説明します。 ### レスポンスボディ レスポンスボディの説明は次の通りです。 | フィールド | タイプ | 必須の有無 | 説明 | | --- | --- | --- | --- | | `activeCalls` | Integer | - | 現在有効化状態の Stub呼び出し数 - 0~999 | | `maxCalls` | Integer | - | ドメインに許可された最大 Stub数 - 0~999 | | `timestamp` | String | - | データ生成時間 - ISO 8601形式 | ### レスポンス例 ``` { "activeCalls": 3, "maxCalls": 15, "timestamp": "2025-04-25T12:09:27.382+09:00" } ```