Skip to content

APIリファレンス

本ドキュメントでは、Volcano Engine リアルタイム会話型AIのコアAPIであるStartVoiceChatUpdateVoiceChatStopVoiceChatおよび関連する設定パラメータについて説明します。

API概要

API説明
StartVoiceChatAI音声セッションを開始し、指定したルームにAIエージェントを作成します
StopVoiceChat音声セッションを停止し、AIエージェントのリソースを解放します
UpdateVoiceChat進行中の音声セッションを更新します(割り込み、カスタムアナウンスなど)

すべてのAPIはAccessKeyによるV4署名が必要です。詳細は認証プロキシサービスをご参照ください。

StartVoiceChat

AI音声セッションを開始し、指定したルームにAIエージェントを作成します。

リクエストエンドポイントPOST https://rtc.volcengineapi.com?Action=StartVoiceChat&Version=2024-12-01

リクエストパラメータ

パラメータ必須説明
AppIdstring必須RTCアプリケーションID
RoomIdstring必須ルームID
TaskIdstring必須セッション識別用のタスクID
AgentConfigobject必須エージェント設定、詳細はAgentConfig参照
Configobject必須セッション設定(ASR、TTS、LLMパラメータ含む)、詳細はConfig参照

AgentConfig

エージェント設定:

パラメータ必須説明
TargetUserIdstring[]必須対象ユーザーIDリスト(クライアントユーザーID)
UserIdstring必須エージェントユーザーID(AIボット識別子)
WelcomeMessagestring任意セッション開始時に自動再生されるウェルカムメッセージ
EnableConversationStateCallbackboolean任意聞き取り・思考・発話状態のコールバックを有効化するか
AnsModenumber任意AIノイズリダクションモード(0:オフ、1:低、2:中、3:高、推奨3)
VoicePrintobject任意ボイスプリント認識設定:Mode(0:オフ、1:オン)、IdList(ボイスプリントIDリスト)

Config

セッション設定:

パラメータ説明
ASRConfigobject音声認識設定、詳細はASRConfig参照
TTSConfigobject音声合成設定、詳細はTTSConfig参照
LLMConfigobject大規模言語モデル設定、詳細はLLMConfig参照
InterruptModenumber割り込みモード(0:意味的割り込み、1:手動割り込み)

レスポンス

json
{
  "ResponseMetadata": {
    "RequestId": "20250104123456789abcdef01234567",
    "Action": "StartVoiceChat",
    "Version": "2024-12-01",
    "Service": "rtc",
    "Region": "cn-north-1"
  },
  "Result": {}
}

成功時はResultが空オブジェクトです。失敗時はResponseMetadata.Errorにエラー情報が含まれます。

注意

StartVoiceChatは既存のルーム内でAIエージェントを開始するために使用します。

公式ドキュメント:StartVoiceChat

StopVoiceChat

音声セッションを停止し、AIエージェントのリソースを解放します。

リクエストエンドポイントPOST https://rtc.volcengineapi.com?Action=StopVoiceChat&Version=2024-12-01

リクエストパラメータ

パラメータ必須説明
AppIdstring必須RTCアプリケーションID(StartVoiceChatと同じ)
RoomIdstring必須ルームID(StartVoiceChatと同じ)
TaskIdstring必須タスクID(StartVoiceChatと同じ)

レスポンス

json
{
  "ResponseMetadata": {
    "RequestId": "20250104123456789abcdef01234567",
    "Action": "StopVoiceChat",
    "Version": "2024-12-01"
  },
  "Result": {}
}

成功時はResultが空オブジェクトです。失敗時はResponseMetadata.Errorにエラー情報が含まれます。

公式ドキュメント:StopVoiceChat

UpdateVoiceChat

進行中の音声セッションを更新します。割り込み、関数呼び出し、カスタムアナウンスに対応しています。

リクエストエンドポイントPOST https://rtc.volcengineapi.com?Action=UpdateVoiceChat&Version=2024-12-01

リクエストパラメータ

パラメータ必須説明
AppIdstring必須RTCアプリケーションID
RoomIdstring必須ルームID
TaskIdstring必須タスクID
Commandstring必須コマンドタイプ
Messagestring任意アナウンステキスト(最大200文字)
InterruptModenumber任意アナウンスの優先度

コマンドタイプ

コマンド説明
Interrupt現在のエージェント出力を割り込み
ExternalTextToSpeechカスタムテキスト読み上げ再生
FunctionCallResult関数呼び出し結果を返す

InterruptModeの優先度

ExternalTextToSpeechでアナウンスの優先度を指定します:

説明
1高優先度:現在の対話を停止して即時再生
2中優先度:現在の対話終了後に再生
3低優先度:対話中の場合は破棄

エージェントを割り込む

json
{
  "AppId": "your-app-id",
  "RoomId": "room-uuid",
  "TaskId": "task-id",
  "Command": "Interrupt"
}

カスタムアナウンス

json
{
  "AppId": "your-app-id",
  "RoomId": "room-uuid",
  "TaskId": "task-id",
  "Command": "ExternalTextToSpeech",
  "Message": "You have a new message",
  "InterruptMode": 1
}

レスポンス

json
{
  "ResponseMetadata": {
    "RequestId": "20250104123456789abcdef01234567",
    "Action": "UpdateVoiceChat",
    "Version": "2024-12-01"
  },
  "Result": {}
}

成功時はResultが空オブジェクトです。失敗時はResponseMetadata.Errorにエラー情報が含まれます。

公式ドキュメント:UpdateVoiceChat

設定詳細

以下はStartVoiceChatConfigパラメータで使用される設定です。

ASRConfig

音声認識設定:

パラメータ必須説明
Providerstring必須サービスプロバイダー、固定値volcano
ProviderParamsobject必須プロバイダー固有のパラメータ
VADConfigobject任意音声活動検出設定
VolumeGainnumber任意音量ゲイン(0.0~1.0)、デフォルト0.5
TurnDetectionModenumber任意ターン検出モード
InterruptConfigobject任意割り込み設定

ProviderParams

パラメータ説明
AppIdstringASRアプリケーションID
Modestring認識モード:smallmodelまたはbigmodel
Clusterstringサービスクラスター、デフォルトvolcengine_streaming_common
contextstringホットワードコンテキスト(JSON形式)
boosting_table_idstringホットワードテーブルID
correct_table_idstring補正テーブルID

VADConfig(音声活動検出):

パラメータ説明
SilenceTimenumber無音時間閾値(ms)、デフォルト600
SpeechTimenumber発話時間閾値(ms)
PrefixTimenumberプレフィックス時間(ms)
SuffixTimenumberサフィックス時間(ms)
Sensitivitynumber感度
AIVADbooleanAI VADを有効化

InterruptConfig

パラメータ説明
InterruptSpeechDurationnumber割り込み発話時間(ms)、デフォルト400
InterruptKeywordsstring[]意味的割り込みキーワードリスト

設定例

json
{
  "Provider": "volcano",
  "ProviderParams": {
    "AppId": "your-asr-app-id",
    "Mode": "smallmodel",
    "Cluster": "volcengine_streaming_common"
  },
  "VADConfig": {
    "SilenceTime": 600
  },
  "VolumeGain": 0.5,
  "TurnDetectionMode": 0,
  "InterruptConfig": {
    "InterruptSpeechDuration": 400,
    "InterruptKeywords": ["stop", "wait"]
  }
}

TTSConfig

音声合成設定:

パラメータ必須説明
Providerstring必須サービスプロバイダー、固定値volcano
ProviderParamsobject必須プロバイダー固有のパラメータ
IgnoreBracketTextnumber[]任意無視する括弧タイプ

ProviderParams

パラメータ説明
appobjectアプリケーション設定
audioobjectオーディオ設定
ResourceIdstringTTSリソースID
Additionsobject追加設定

app設定

パラメータ説明
appidstringTTSアプリケーションID
tokenstringTTSアプリケーショントークン
clusterstringサービスクラスター、デフォルトvolcano_tts

audio設定

パラメータはTTSモードにより若干異なります:

パラメータ説明適用モード
voice_typestring音声タイプ全モード
volume_rationumber音量(0.5~2.0)全モード
speed_rationumber話速(0.5~2.0)standard
pitch_rationumberピッチ(0.5~2.0)standard
speech_rationumber話速(0.5~2.0)bigtts
pitch_ratenumberピッチレートbigtts
speech_ratenumber話速bidirection
emotionstring感情:happysadangryneutral感情対応音声
emotion_strengthnumber感情強度(0.0~1.0)感情対応時

TTSモード

  • standard:標準モード、speed_ratiopitch_ratioを使用
  • bigtts:大規模モデルTTS、speech_ratiopitch_rateを使用
  • bidirection:双方向ストリーミング、speech_rateを使用、Additions設定に対応

代表的な音声

音声ID説明
BV033_streaming女性、穏やか
BV001_streaming男性、魅力的
BV700_streaming女性、甘い
BV406_streaming男性、落ち着いた

詳細:Volcano Engine TTS音声リスト

設定例

json
{
  "Provider": "volcano",
  "ProviderParams": {
    "app": {
      "appid": "your-tts-app-id",
      "token": "your-tts-token",
      "cluster": "volcano_tts"
    },
    "audio": {
      "voice_type": "BV033_streaming",
      "speed_ratio": 1.2,
      "pitch_ratio": 1.1,
      "volume_ratio": 1.0,
      "emotion": "happy",
      "emotion_strength": 0.8
    },
    "ResourceId": "your-resource-id"
  }
}

LLMConfig

大規模言語モデル設定:

パラメータ必須説明
Modestring必須モード:ArkV3(Ark)、CustomLLM(カスタム)
UrlstringCustomLLMのみCustomLLMコールバックURL
APIKeystring任意API認証キー
EndPointIdstringArkV3のみArkモデルエンドポイントID
ModelNamestring任意モデル名
SystemMessagesstring[]任意システムプロンプト
UserPromptsobject[]任意事前設定された会話履歴
Temperaturenumber任意サンプリング温度(0.0~1.0)、デフォルト0.5
TopPnumber任意Top-pサンプリング(0.0~1.0)、デフォルト0.9
MaxTokensnumber任意最大トークン数、デフォルト256
HistoryLengthnumber任意保存する履歴ターン数、デフォルト15
EnableRoundIdboolean任意ラウンドIDを有効化
VisionConfigobject任意ビジョン理解設定:Enable(boolean)、SnapshotConfig(object)
Customstring任意カスタムパラメータ(JSON文字列)、CustomLLMに渡される

UserPrompts(事前設定された会話履歴):

json
[
  { "Role": "assistant", "Content": "Hello! How can I help you?" },
  { "Role": "user", "Content": "Hello" }
]

CustomLLMモード例

json
{
  "Mode": "CustomLLM",
  "Url": "https://your-server.com/chat-stream",
  "APIKey": "your-api-key",
  "ModelName": "qwen-flash",
  "Temperature": 0.5,
  "TopP": 0.9,
  "MaxTokens": 256,
  "HistoryLength": 15,
  "EnableRoundId": true,
  "VisionConfig": {
    "Enable": false
  },
  "UserPrompts": [
    { "Role": "assistant", "Content": "Hi, I'm your assistant. Nice to meet you!" }
  ]
}

ArkV3モード例

json
{
  "Mode": "ArkV3",
  "EndPointId": "your-endpoint-id",
  "Temperature": 0.7,
  "MaxTokens": 512
}

CustomLLMコールバック

CustomLLMモード使用時、Volcano Engineはユーザーの音声認識結果をカスタムサービスに送信します。

コールバックフロー

ユーザー音声 → Volcano Engine ASR → CustomLLMサービス → Volcano Engine TTS → ユーザー

リクエスト形式

Volcano EngineからCustomLLMサービスへのリクエスト:

http
POST /chat-stream HTTP/1.1
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{
  "messages": [
    {"role": "system", "content": "You are an intelligent assistant"},
    {"role": "user", "content": "Hello"}
  ],
  "stream": true,
  "temperature": 0.7,
  "max_tokens": 256,
  "device_id": "custom-device-id"
}

リクエストフィールド

フィールド説明
messagesOpenAI形式の会話履歴
stream固定値true、ストリーミング応答を要求
temperatureサンプリング温度
max_tokens最大生成長
device_idカスタムパラメータ、LLMConfig.Customから渡される

レスポンス形式

レスポンスはOpenAI SSE形式に準拠する必要があります:

data: {"id":"resp-1","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}],"model":"qwen-flash","created":1704355200}

data: {"id":"resp-1","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}],"model":"qwen-flash","created":1704355200}

data: {"id":"resp-1","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":"stop"}],"model":"qwen-flash","created":1704355200}

data: [DONE]

レスポンス要件

  • SSEストリーミングレスポンスであること
  • Content-Typeはtext/event-stream
  • 各行はdata: で始まること
  • 最終行はdata: [DONE]であること

公式ドキュメント:CustomLLM連携

RTCトークン

クライアントはRTCルームに参加するためにトークンが必要です。トークンはサーバー側でAppKeyを用いて生成します。

トークン構造

Token = Version + AppId + Base64(Message + Signature)
  • Version:固定値001
  • AppId:24文字のアプリケーション識別子
  • Message:バイナリエンコードされたペイロード(RoomId、UserId、有効期限、権限)
  • Signature:AppKeyを用いたHMAC-SHA256署名

トークン権限

権限名説明
PrivPublishStreamオーディオ/ビデオのパブリッシュ
PrivSubscribeStreamストリームのサブスクライブ

有効期限

デフォルトの有効期限は24時間(86,400秒)です。有効期限切れ後は再生成が必要です。

typescript
import { AccessToken } from './rtctoken'

const token = new AccessToken(appId, appKey, roomId, userId)
const expireAt = Math.floor(Date.now() / 1000) + 24 * 3600
token.addPrivilege('PrivPublishStream', expireAt)
token.addPrivilege('PrivSubscribeStream', expireAt)
token.expireTime(expireAt)
const tokenString = token.serialize()

トークン生成ライブラリについてはインストールとテスト - RTCトークンの生成をご参照ください。

エラーコード

レスポンス形式

json
{
  "ResponseMetadata": {
    "RequestId": "xxx",
    "Action": "StartVoiceChat",
    "Error": {
      "Code": "InvalidParameter",
      "Message": "Parameter AppId must not be empty"
    }
  }
}

共通エラーコード

エラーコードHTTPステータス説明
MissingParameter400必須パラメータが不足
InvalidParameter400パラメータ形式が不正
MissingRequestInfo400リクエスト情報が不足
InvalidTimestamp400タイムスタンプが無効または期限切れ
InvalidAuthorization400Authorizationヘッダーが無効
InvalidCredential400認証情報の形式が不正
InvalidAccessKey401AccessKeyが無効
SignatureDoesNotMatch401署名検証失敗
InvalidSecretToken401STSトークンが無効または期限切れ
AccessDenied403IAM権限が不足
ServiceNotFound404サービスが見つからない
InvalidActionOrVersion404APIアクションまたはバージョンが無効
FlowLimitExceeded429レート制限超過
InternalError500内部エラー
InternalServiceError502ゲートウェイエラー
ServiceUnavailableTemp503サービス一時的に利用不可
InternalServiceTimeout504サービスタイムアウト

業務エラーコード

エラーコード説明
RoomNotExistルームが存在しない
TaskNotExistタスクが存在しない
InvalidTokenRTCトークンが無効または期限切れ

公式ドキュメント:共通エラーコード

関連リソース