实时多模态交互协议(WebSocket)

本文介绍实时多模态交互协议WebSocket API。WebSocket协议延迟低、资源占用少,是首选接入方案。

WebSocket是一种支持全双工通信的网络协议。客户端和服务器通过一次握手建立持久连接,双方可以互相主动推送数据,因此在实时性和效率方面具有显著优势。

对于常用编程语言,有许多现成的WebSocket库和示例可供参考,例如:

  • Go:gorilla/websocket

  • PHP:Ratchet

  • Node.js:ws

建议您先了解WebSocket的基本原理和技术细节,再参照本文进行开发。

前提条件

已开通服务并获取API Key。请配置API Key到环境变量,而非硬编码在代码中,防范因代码泄露导致的安全风险。

说明

对于客户端调用的场景,在客户端处理API-KEY有安全风险,建议从服务端用API-KEY获取临时鉴权Token,再把Token下发给客户端使用。具体方法请参考:生成临时 API Key

调用时序图

image

服务地址

wss://dashscope.aliyuncs.com/api-ws/v1/inference

鉴权

需要在发起HTTP请求时,把API-KEY放在HTTP Header里:

"Authorization: your_api_key"

消息类型

二进制消息(Binary Message)

当前二进制消息仅包含音频数据。

上传音频

上传音频时,将原始音频直接转为二进制流即可,无需额外处理。

上传的语音识别音频需满足:16000Hz、16bit、单声道、有符号、little-endian PCM编码。

如果希望减少网络流量和带宽占用,用户可以把pcm音频编码为opus格式,同时设置上传音频格式为raw-opusopus(区别详见参数说明)。

上传音频时,根据Start消息中upstream.mode设值不同,采取的措施也不同:

  • modetap2talkduplex:客户端需持续上传音频,服务端自动检测语音活动。建议每100ms上传3200字节数据,长时间中断上传将触发服务端报错。

  • modepush2talk:客户端无需持续上传音频,但需通过SendSpeechStopSpeech通知服务端音频识别的开始和结束。发送SendSpeech后需立即上传音频,延迟上传将触发服务端报错。

下发音频

服务端将大模型回复发送至TTS生成语音然后下发给客户端:

  • 下发音频为16bit单声道,采样率和编码由Start消息参数定义。

  • 下发速度取决于TTS服务性能,通常快于播放速度。

  • 音频下发前发送RespondingStarted事件;结束后发送RespondingEnded事件。

  • 客户端需在播放完成后需上报LocalRespondingEnded,通知服务端播放结束。

文本消息(Text Message)

文本消息是JSON格式字符串,按传递方向分为两类:

  • 输入消息(Input Message):客户端发送给服务端的指令(directive),表示客户端希望服务端执行特定动作。

  • 输出消息(Output Message):服务端发送给客户端的事件(event),表示服务端动作执行结果或进展。

文本消息标记交互流程的关键节点,控制流程并传输关键信息。通过时序图可了解不同消息的交互时序。

文本消息包含两部分:headerpayload

  • payload:内容随消息类型变化。

  • header:内容固定,包含以下参数:

    参数

    类型

    是否必选

    说明

    task_id

    string

    本次连接唯一标识,用于在工程链路上跟踪任务执行

    streaming

    string

    输入输出类型,对于多模态交互必须为 "duplex" ,表示流式输入,流式输出

    action

    string

    模型输入消息类型:

    • run-task: 任务的第一个输入消息

    • finish-task: 任务的最后一个输入消息

    • continue-task: 任务中其他输入消息

连接保活策略

客户端与服务端之间超过1分钟无消息下发时,连接将超时断开。

若客户端需在无交互时保持连接,应定期发送心跳消息(HeartBeat)。服务端会回应心跳,确保连接活跃,避免超时关闭。

移动端和C++ SDK已内置心跳保活逻辑,用户无需手动发送。

文本消息类型

开始会话

Start - Input Message

请求开始会话消息。服务收到Start消息后,向客户端发送Started消息。

一级参数

二级参数

三级参数

四级参数

类型

是否必选

说明

task_group

任务组名称,固定为"aigc"

task

任务名称,固定为"multimodal-generation"

function

调用功能,固定为"generation"

model

阿里云百炼模型名称,固定为"multimodal-dialog"

input

directive

string

指令名称:Start

workspace_id

string

客户在阿里云百炼业务空间ID(Workspace ID),可在百炼管控台“业务空间详情”中查看,目前仅支持主账号默认工作空间

app_id

string

客户创建的应用ID(APP ID),可在多模态交互管控台“我的应用”页面查看

dialog_id

string

对话ID,默认不填为开启新会话,服务端会自动生成并在事件中下发,格式为"12345678-1234-1234-1234-1234567890ab",共36个字符。当希望继续之前的对话时,把当时服务端下发的dialog_id在这里传入。

parameters

upstream

type

string

上行类型:

AudioOnly 仅语音通话

mode

string

客户端使用的模式,可选项:

  • push2talk: 端侧控制模式,由用户控制开始/结束端侧语音发送和识别,适用于按键说话,松开停止说话的场景。

  • tap2talk: 点击模式,需要客户端持续上传音频数据,由服务端vad检测语音开始和结束,但不支持用户说话打断大模型输出,只能发送打断消息

  • duplex: 双工模式,需要客户端持续上传音频数据,由服务端vad检测语音开始和结束,用户随时可以说话打断大模型输出

默认tap2talk

audio_format

string

音频格式,支持pcm,opus,raw-opus,默认为pcm

注意:opus 和 raw-opus的区别是opus格式的每一包数据都需要额外加ogg封装

sample_rate

int

语音识别的采样率,支持范围:

  • 8000

  • 16000

  • 24000

  • 48000

默认为16000

downstream

voice

string

合成语音的音色,支持范围取决于用户在管控台选择的tts模型

sample_rate

int

合成语音的采样率,支持范围:

  • 8000

  • 16000

  • 24000

  • 48000

默认为24000

audio_format

string

音频格式,支持pcm,opus,mp3,raw-opus,默认为pcm

注意:opus 和 raw-opus的区别是opus格式的每一包数据都有额外ogg封装

frame_size

int

合成音频的帧大小,取值范围:

  • 10

  • 20

  • 40

  • 60

  • 100

  • 120

默认值为60,单位ms

只在合成音频格式为opusraw-opus时生效

volume

int

合成音频的音量,取值范围0-100,默认50

speech_rate

int

合成音频的语速,取值范围50-200,表示默认语速的50%-200%,默认100

pitch_rate

int

合成音频的声调,取值范围50-200,默认100

bit_rate

int

合成音频的比特率,取值范围:6~510kbps,默认值为32,单位kbps,只在合成音频格式为opusraw-opus时生效

intermediate_text

string

控制返回给用户哪些中间文本:

  • transcript:返回用户语音识别结果

  • dialog:返回对话系统回答中间结果

可以设置多种,以逗号分隔,默认为transcript

transmit_rate_limit

int

下发音频发送速率限制,单位:字节每秒

client_info

user_id

string

终端用户ID,客户根据自己业务规则生成,用来针对不同终端用户实现定制化功能。最大长度40个字符。

device

uuid

string

客户端全局唯一的ID,需要用户自己生成,传入SDK。最大长度40个字符。

network

ip

string

调用方公网IP

location

latitude

string

调用方纬度信息,在需要客户端精确位置的业务场景提交

longitude

string

调用方经度信息,在需要客户端精确位置的业务场景提交

city_name

string

调用方所在城市,指明客户端粗略位置

biz_params

user_defined_params

object

其他需要透传给agent的参数

user_defined_tokens

object

透传agent所需鉴权信息

user_prompt_params

object

用于设置用户自定义prompt中的变量

user_query_params

object

用于设置用户自定义query中的变量

示例如下:

{
    "header": {
        "action":"run-task",
        "task_id": "9B32878******************3D053",
        "streaming":"duplex"
    },
    "payload": {
        "task_group":"aigc",
        "task":"multimodal-generation",
        "function":"generation",
        "model":"multimodal-dialog",
        "input":{
          "directive": "Start",
          "workspace_id": "llm-***********",
          "app_id": "****************"
        },
        "parameters":{
          "upstream":{
            "type": "AudioOnly",
            "mode": "duplex"
          },
          "downstream":{
            "voice": "longxiaochun_v2",
            "sample_rate": 24000
          },
          "client_info":{
            "user_id": "bin********207",
            "device":{
              "uuid": "432k*********k449"
            },
            "network":{
              "ip": "10.0.0.9"
            },
            "location":{
              "city_name": "北京市"
            }
          },
          "biz_params":{
            "user_defined_params": {
                "agent_id_xxxxx": {
                    "name": "value"
                }
            },
            "user_prompt_params": {
                "name": "value"
            },
            "user_query_params": {
                "name": "value"
            }
          }
        }
    }
}

Started - Output Message

SDK接收到Started之后,先不可以向服务发送音频,应等待DialogStateChanged消息,确认切换到Listening状态之后才发送音频。

一级参数

二级参数

类型

说明

output

event

string

事件名称:Started

dialog_id

string

对话ID

示例如下:

//Started返回消息样例
{
    "header": {
        "event":"result-generated",
        "task_id": "9B32878******************3D053"
    },
    "payload": {
        "output":{
          "event": "Started",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        },
        "usage":{
          "invoke":0,
          "model_x":0
        }
    }
}

结束会话

Stop - Input Message

一级参数

二级参数

类型

是否必选

说明

input

directive

string

指令名称:Stop

dialog_id

string

对话ID

示例如下:

//Stop请求样例
{
    "header": {
        "action":"finish-task",
        "task_id": "9B32878******************3D053",
        "streaming":"duplex"
    },
    "payload": {
        "input":{
          "directive": "Stop",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        }
    }
}

Stopped - Output Message

一级参数

二级参数

类型

是否必选

说明

output

event

string

事件名称:Stopped

dialog_id

string

对话ID

示例如下:

{
    "header": {
        "event":"result-generated",
        "task_id": "9B32878******************3D053"
    },
    "payload": {
        "output":{
          "event": "Stopped",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        },
        "usage":{
          "invoke":10,
          "model_x":10
        }
    }
}

服务端下发状态切换事件

DialogStateChanged - Output Message

一级参数

二级参数

类型

是否必选

说明

output

event

string

事件名称:DialogStateChanged

state

string

AI交互状态,如:Listening,Thinking, Responding

注意:其中状态Listening 只是表示SDK可以发语音给服务端,不代表端侧是否开麦

dialog_id

string

对话ID

示例如下:

{
    "header": {
        "event":"result-generated",
        "task_id": "9B32878******************3D053"
    },
    "payload": {
        "output":{
          "event": "DialogStateChanged",
          "state": "Listening",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        },
        "usage":{
          "invoke":10,
          "model_x":10
        }
    }
}

请求上传语音

RequestToSpeak - Input Message

当前状态不是Listening,而用户又想说话时,先提交此事件,等待服务端应答。

具体触发此事件的用户行为根据交互类型有所不同,比如用户按下按钮、语音打断(依赖双工模块)等。

一级参数

二级参数

类型

是否必选

说明

input

directive

string

指令名称:RequestToSpeak

dialog_id

string

对话ID

示例如下:

{
    "header": {
        "action":"continue-task",
        "task_id": "9B32878******************3D053",
        "streaming":"duplex"
    },
    "payload": {
        "input":{
          "directive": "RequestToSpeak",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        }
    }
}

RequestAccepted - Output Message 请求被准许

一级参数

二级参数

类型

是否必选

说明

output

event

string

事件名称:RequestAccepted

dialog_id

string

对话ID

示例如下:

{
    "header": {
        "event":"result-generated",
        "task_id": "9B32878******************3D053"
    },
    "payload": {
        "output":{
          "event": "RequestAccepted",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        },
        "usage":{
          "invoke":10,
          "model_x":10
        }
    }
}

上传语音指令

SendSpeech - Input Message

Start消息指定模式为puhs2talk,在Listening状态时,通知服务端开始上传语音,语音数据应紧接着此事件之后发送。

一级参数

二级参数

类型

是否必选

说明

input

directive

string

指令名称:SendSpeech

dialog_id

string

对话ID

示例如下:

{
    "header": {
        "action":"continue-task",
        "task_id": "9B32878******************3D053",
        "streaming":"duplex"
    },
    "payload": {
        "input":{
          "directive": "SendSpeech",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        }
    }
}

StopSpeech - Input Message

Start消息指定模式为puhs2talk的时候,用户必须使用StopSpeech结束语音指令输入。

一级参数

二级参数

类型

是否必选

说明

input

directive

string

指令名称:StopSpeech

dialog_id

string

对话ID

示例如下:

{
    "header": {
        "action":"continue-task",
        "task_id": "9B32878******************3D053",
        "streaming":"duplex"
    },
    "payload": {
        "input":{
          "directive": "StopSpeech",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        }
    }
}

语音识别开始/结束

SpeechStarted - Output Message

当服务端检测到asr语音起点时下发此事件。

一级参数

二级参数

类型

是否必选

说明

output

event

string

事件名称:SpeechStarted

dialog_id

string

对话ID

示例如下:

{
    "header": {
        "event":"result-generated",
        "task_id": "9B32878******************3D053"
    },
    "payload": {
        "output":{
          "event": "SpeechStarted",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        },
        "usage":{
          "invoke":10,
          "model_x":10
        }
    }
}

SpeechEnded - Output Message

当服务端检测到asr语音尾点时下发此事件,如果客户端还在上传音频,则收到此事件后应停止上传音频。

一级参数

二级参数

类型

是否必选

说明

output

event

string

事件名称:SpeechEnded

dialog_id

string

对话ID

示例如下:

{
    "header": {
        "event":"result-generated",
        "task_id": "9B32878******************3D053"
    },
    "payload": {
        "output":{
          "event": "SpeechEnded",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        },
        "usage":{
          "invoke":10,
          "model_x":10
        }
    }
}

指定应答内容

RequestToRespond - Input Message

Listening状态时,通知服务端与用户主动交互,服务端会根据type字段把在text字段中上传的文本直接转换为语音下发,或调用大模型,返回的结果再转换为语音下发。

一级参数

二级参数

类型

是否必选

说明

input

directive

string

指令名称:RequestToRespond

dialog_id

string

对话ID

type

string

服务应该采取的交互类型:

  • transcript:表示直接把文本转语音

  • prompt:表示把文本发送给大模型让其进行回答

text

string

要处理的文本,可以是""空字符串,非null即可

parameters

images

list[]

需要分析的图片信息

biz_params

object

Start消息中biz_params相同,传递对话系统自定义参数。RequestToRespondbiz_params参数只在本次请求中生效。

示例如下:

{
    "header": {
        "action":"continue-task",
        "task_id": "9B32878******************3D053",
        "streaming":"duplex"
    },
    "payload": {
        "input":{
          "directive": "RequestToRespond",
          "dialog_id": "b39398c9dd8147********35cdea81f7",
          "type": "prompt",
          "text": "你好,你有什么想聊的呢"
        },
        "parameters":{
          "images":[{
              "type": "base64",
              "value": "base64String"
          }],
          "biz_params":{
            "user_defined_params":{},
            "videos": [
                  {
                    "action": "connect", //进入视频模式
                    "type": "voicechat_video_channel"
                  },
                  {
                    "action": "exit",  //退出视频模式
                    "type": "voicechat_video_channel"
                  }
                ]
          }
        }
    }
}

AI语音应答状态

RespondingStarted - Output Message

AI语音应答开始,sdk要准备接收服务端下发的语音数据

一级参数

二级参数

类型

是否必选

说明

output

event

string

事件名称:RespondingStarted

dialog_id

string

对话ID

示例如下:

{
    "header": {
        "event":"result-generated",
        "task_id": "9B32878******************3D053"
    },
    "payload": {
        "output":{
          "event": "RespondingStarted",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        },
        "usage":{
          "invoke":10,
          "model_x":10
        }
    }
}

RespondingEnded - Output Message

AI语音应答结束

一级参数

二级参数

类型

是否必选

说明

output

event

string

事件名称:RespondingEnded

dialog_id

string

对话ID

示例如下:

{
    "header": {
        "event":"result-generated",
        "task_id": "9B32878******************3D053"
    },
    "payload": {
        "output":{
          "event": "RespondingEnded",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        },
        "usage":{
          "invoke":10,
          "model_x":10
        }
    }
}

端侧播放事件

LocalRespondingStarted - Input Message

端侧开始播放服务端下发的音频

一级参数

二级参数

类型

是否必选

说明

input

directive

string

指令名称:LocalRespondingStarted

dialog_id

string

对话ID

示例如下:

{
    "header": {
        "action":"continue-task",
        "task_id": "9B32878******************3D053",
        "streaming":"duplex"
    },
    "payload": {
        "input":{
          "directive": "LocalRespondingStarted",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        }
    }
}

LocalRespondingEnded - Input Message

端侧播放服务端下发的音频结束

一级参数

二级参数

类型

是否必选

说明

input

directive

string

指令名称:LocalRespondingEnded

dialog_id

string

对话ID

示例如下:

{
    "header": {
        "action":"continue-task",
        "task_id": "9B32878******************3D053",
        "streaming":"duplex"
    },
    "payload": {
        "input":{
          "directive": "LocalRespondingEnded",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        }
    }
}

文本下发事件

SpeechContent - Output Message

一级参数

二级参数

类型

是否必选

说明

output

event

string

事件名称:SpeechContent

dialog_id

string

对话ID

text

string

用户语音识别出的文本,流式全量输出

finished

bool

输出是否结束

示例如下:

{
    "header": {
        "request_id": "9B32878******************3D053",
        "service_id": "368208df",
        "status_code": 200,
        "status_name": "Success",
        "status_message": "Success.",
        "attributes":{
          "user_id":"1234557879x"
        }
    },
    "payload": {
        "output":{
          "event": "SpeechContent",
          "dialog_id": "b39398c9dd8147********35cdea81f7",
          "text": "一二三",
          "finished": false
        },
        "usage":{
          "invoke":10,
          "model_x":10
        }
    }
}

RespondingContent - Output Message

一级参数

二级参数

类型

是否必选

说明

output

event

string

事件名称如:RequestAccepted

dialog_id

string

对话ID

round_id

string

本轮交互的ID

llm_request_id

string

调用llmrequest_id

text

string

系统对外输出的文本,流式全量输出

spoken

string

合成语音时使用的文本,流式全量输出

finished

bool

输出是否结束

extra_info

object

其他扩展信息,目前支持:

  • commands: 命令字符串

  • agent_info: 智能体信息

  • tool_calls: 插件返回的信息

示例如下:

{
    "header": {
        "event":"result-generated",
        "task_id": "9B32878******************3D053"
    },
    "payload": {
        "output":{
          "event": "RequestAccepted",
          "dialog_id": "b39398c9dd8147********35cdea81f7",
          "text": "您输入了数字序列“12345”。如果您有关于这些数字的问题或者需要我用它们来完成某项任务,请告诉我更多的细节,我会尽力帮助您。",
          "spoken": "您输入了数字序列“12345”。如果您有关于这些数字的问题或者需要我用它们来完成某项任务,请告诉我更多的细节,我会尽力帮助您。",
          "finished": true,
        "extra_info": {
          "commands": "[{\"name\":\"VOLUME_SET\",\"params\":[{\"name\":\"series\",\"normValue\":\"70\",\"value\":\"70\"}]}]",
          "tool_calls": [{
            "id": "",
            "type": "function",
            "function": {
              "name": "function_name",
              "arguments": "{\"id\": \"123\", \"name\": \"test\"}",
              "outputs": "函数调用结果",
              "status": {
                "code": 200,
                "message": "Success."
              }
            }
          }]
        }
        }
    }
}

端侧更新事件

UpdateInfo - Input Message

一级参数

二级参数

三级参数

类型

是否必选

说明

input

directive

string

指令名称:UpdateInfo

dialog_id

string

对话ID

parameters

images

list[]

图片数据

client_info

status

object

客户端当前状态

biz_params

object

Start消息中biz_params相同,传递对话系统自定义参数。UpdateInfo指令中biz_params下面每个子项会全量替换Start指令中biz_params下面的同名项,并在本次连接后续所有对话中生效。

示例如下:

{
    "header": {
        "action":"continue-task",
        "task_id": "9B32878******************3D053",
        "streaming":"duplex"
    },
    "payload": {
        "input":{
          "directive": "UpdateInfo",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        },
        "parameters":{
          "images":[{
              "type": "base64",
              "value": "base64String"
          }],
          "client_info": {
              "status": {
                  "bluetooth_announcement": {
                      "status": "stopped"
                  },
                  "stream_media_playback": {
                      "status": "stopped"
                  },
                  "phone_ringing": {
                      "status": "stopped"
                  },
                  "stream_media_playback_qq": {
                      "status": "stopped"
                  }
              }
          },
          "biz_params":{
          }
        }
    }
}

心跳事件

可以通过定期向服务端发送此消息,避免连接超时断开。建议发送频率50秒一次。服务端会回应相同消息,客户端收到不需要做任何处理,忽略即可。

HeartBeat - Input Message

一级参数

二级参数

三级参数

类型

是否必选

说明

input

directive

string

指令名称:HeartBeat

dialog_id

string

对话id

示例:

{
    "header": {
        "action":"continue-task",
        "task_id": "9B32878******************3D053",
        "streaming":"duplex"
    },
    "payload": {
        "input":{
          "directive": "HeartBeat",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        }
    }
}

HeartBeat - Output Message

一级参数

二级参数

三级参数

类型

是否必选

说明

output

event

string

事件名称:HeartBeat

dialog_id

string

对话id

示例:

{
    "header": {
        "event":"result-generated",
        "task_id": "9B32878******************3D053"
    },
    "payload": {
        "output":{
          "event": "HeartBeat",
          "dialog_id": "b39398c9dd8147********35cdea81f7"
        }
    }
}

错误事件

Error - Output Message

一级参数

二级参数

类型

是否必选

说明

output

error_code

int

错误码

error_name

string

错误名称

error_message

string

错误消息

{
    "header": {
        "event":"result-generated",
        "task_id": "9B32878******************3D053"
    },
    "payload": {
        "output":{
          "event": "Error",
          "dialog_id": "b39398c9dd8147********35cdea81f7",
          "error_code": 500,
          "error_name": "Internal LLm Error", 
          "error_message": "Internal LLm Error"
        }
    }
}

错误码

常见错误码如下

百炼错误

错误码(Code)

错误信息(Message)

说明

403

AccessDenied.Unpurchased

Access to model denied. Please make sure you are eligible for using the model.

用户必须开通百炼服务

403

Model.AccessDenied

只支持从默认业务空间调用

ResponseTimeout

{"header":{"task_id":"899*******499","event":"task-failed","error_code":"ResponseTimeout","error_message":"Response timeout!","attributes":{}},"payload":{}}

百炼网关要求服务端和客户端必须持续通信,如果超过1分钟没有交互则会超时报错。

InternalError

{"header":{"task_id":"899*******499","event":"task-failed","error_code":"InternalError","error_message":"Internal server error!","attributes":{}},"payload":{}}

百炼网关要求服务端和客户端必须持续通信,如果超过1分钟没有交互则会超时报错。

多模态错误

(1)断连错误

出现以下错误时,错误码在headerstatus_code里,会话连接会断开,需要检查出错原因重新建连。

错误码(Code)

错误信息(Message)

说明

421

InvalidParameter

type of directive payload is error, please choose transcript or prompt

参数错误,RequestToRespond请求的参数type错误,只能支持以下两种:

(1)transcript 表示直接把文本转语音

(2)prompt 表示把文本送大模型回答

其他的参数错误 ,status_message 信息都有具体的提示说明。

422

DirectiveNotSupported

不支持的指令,请检查指令名称。

432

AppConfigError

获取到的百炼应用的配置有问题,参考status_message 里的具体信息修改。

433

BillingAuthError

未开通百炼多模态交互服务,或使用了错误账号。

444

ClientAudioTimeout

Waiting for client audio timed out.

服务端长时间收不到客户端的音频输入。

449

TooManyInterrupt

用户短时间内发送过多RequestToRespondRequestToSpeek 打断正常交互,通常是调用程序bug导致。

(2)普通错误

出现以下错误时,错误码在payloaderror_code里,连接不会断开,可以继续发送请求。

错误码(Code)

错误信息(Message)

说明

424

AudioFormatError

输入音频的格式不合规,ASR无法正常解析音频。

425

NoInputAudioError

没有获取到有效的输入音频数据,ASR无法识别。

426

InvalidTtsVoice

tts voice error , need cosyvoice-v2 voice.

参数错误,选择的音色不是cosyvoice-v2支持的音色。

(1)cosyvoice-v2支持的官方音色参考音色列表

(2)复刻音色,确认音色状态为“OK”后才能使用。查询指定音色

tts voice error , need qwen-tts-realtime voice.

参数错误,选择的音色不是qwen-tts-realtime支持的音色。

qwen-tts-realtime支持的官方音色参考实时语音合成-通义千问

451

NoSpeechRecognized

服务没有识别到用户讲话,通常是push2talk模式下,用户发送了SendSpeech后,没有说话就又发送了StopSpeech指令。其他模式下也有极少数情况是由背景噪音引起。

500

InternalSynthesizerError

Internal synthesizer error

tts问题,提供dialogIdvoicechat开发同学进行具体排查。

500

InternalAsrError

Internal asr error

asr问题,提供dialogIdvoicechat开发同学进行具体排查。

500

InternalLLMError

Internal LLM error

llm问题,提供dialogIdvoicechat开发同学进行具体排查。

500

LLMTimeoutError

LLM response timeout

llm问题,提供dialogIdvoicechat开发同学进行具体排查。