本文介绍扣子编程智能语音信令事件中的上行事件。智能体进房后才能发送上行事件,具体请参见集成音视频 Realtime Web SDK。
说明
事件类型:session.update
事件说明:此事件可更新房间内的配置项。
事件结构:
|
参数 |
类型 |
是否必选 |
说明 |
|---|---|---|---|
|
id |
String |
必选 |
客户端自行生成的事件 ID,方便定位问题。 |
|
event_type |
String |
必选 |
必填 |
|
data |
Object |
可选 |
事件数据,包含会话配置的详细信息。 |
|
data.speech_rate |
Integer |
可选 |
模型回复的语速,取值范围 [-50, 100],默认为 0。-50 表示 0.5 倍速,100 表示 2 倍速。 |
|
data.loudness_rate |
Integer |
可选 |
输出音频的音量,取值范围 [-50, 100],默认为 0。-50 表示 0.5 倍音量,100 表示 2 倍音量。 |
|
data.longest_silence_ms |
Integer |
可选 |
当智能体处于长时间沉默状态时,房间将自动解散。此时间以毫秒(ms)为单位计量,默认时长为 180,000 毫秒。 |
|
data.event_subscriptions |
Array |
可选 |
需要订阅下行事件的事件类型列表。不设置或者设置为空为订阅所有下行事件。 |
|
data.chat_config |
Object |
可选 |
会话配置。 |
|
data.chat_config.meta_data |
Map<String, String> |
可选 |
附加信息,通常用于封装一些业务相关的字段。查看对话消息详情时,系统会透传此附加信息。自定义键值对,应指定为 Map 对象格式。长度为 16 对键值对,其中键(key)的长度范围为 1~64 个字符,值(value)的长度范围为 1~512 个字符。 |
|
data.chat_config.custom_variables |
Map<String, String> |
可选 |
智能体中定义的变量。在智能体 prompt 中设置变量 {{key}} 后,可以通过该参数传入变量值,同时支持 Jinja2 语法。变量名只支持英文字母和下划线。 |
|
data.chat_config.extra_params |
Map<String, String> |
可选 |
附加参数,通常用于特殊场景下指定一些必要参数供模型判断,例如指定经纬度,并询问智能体此位置的天气。自定义键值对格式,其中键(key)仅支持设置为:
|
|
data.chat_config.plugin_interrupt_mode |
String |
可选 |
端插件执行模式,可选值有
|
|
data.chat_config.allow_voice_interrupt |
Boolean |
可选 |
是否打开语音打断功能,默认为 |
|
data.chat_config.interrupt_config |
Object |
可选 |
语音打断配置,仅在 allow_voice_interrupt 为 |
|
data.chat_config.interrupt_config.mode |
String |
必选 |
语音打断模式,可选值有
|
|
data.chat_config.interrupt_config.keywords |
Array |
可选 |
关键词列表,每个关键词长度不超过8个字,最多10个关键词,仅在 |
|
data.chat_config.parameters |
Map<String, Any> |
可选 |
设置对话流的自定义输入参数的值并传递给对话流,具体用法和示例代码可参考为自定义参数赋值。 |
|
data.turn_detection |
Object |
可选 |
声音检测配置。 |
|
data.turn_detection.type |
String |
可选 |
语音检测模式,默认为
详细的检测逻辑请参见如何设置扣子的语音检测模式?。 |
|
data.turn_detection.prefix_padding_ms |
Integer |
可选 |
VAD 检测到语音之前要包含的音频量,单位为 ms。默认为 600ms。 |
|
data.turn_detection.silence_duration_ms |
Integer |
可选 |
|
|
data.turn_detection.semantic_vad_config |
Object |
可选 |
|
|
data.turn_detection.semantic_vad_config.silence_threshold_ms |
Integer |
可选 |
当用户暂停说话时,持续静音多久后,触发语义判停检测。单位为 ms。默认为 300ms。 |
|
data.turn_detection.semantic_vad_config.semantic_unfinished_wait_time_ms |
Integer |
可选 |
当语义检测判断该语句未结束时,持续静音多久后,扣子编程认定语音结束。单位为 ms。默认为 500ms。取值范围为 100~2000。 |
|
data.asr_config.stream_mode |
String |
可选 |
ASR 识别的模式。
|
|
data.asr_config.context |
String |
可选 |
上下文,限制 800 tokens,超出后自动截断。 |
|
data.asr_config.enable_itn |
Boolean |
可选 |
将语音转为文本时,是否开启文本规范化(ITN)处理,将识别结果转换为更符合书面表达习惯的格式以提升可读性。默认为
|
|
data.asr_config.enable_punc |
Boolean |
可选 |
将语音转为文本时,是否给文本加上标点符号。默认为 |
|
data.asr_config.enable_ddc |
Boolean |
可选 |
将语音转为文本时,是否启用顺滑,默认为
|
|
data.asr_config.enable_nostream |
Boolean |
可选 |
是否开启二次识别模式:
|
|
data.asr_config.enable_emotion |
Boolean |
可选 |
识别说话人的情绪。仅在
|
|
data.asr_config.enable_gender |
Boolean |
可选 |
是否开启识别说话人的性别(male/female),仅在 |
|
data.asr_config.sensitive_words_filter |
Object |
可选 |
敏感词过滤功能,支持以下 3 种过滤方式:
|
|
data.asr_config.sensitive_words_filter.system_reserved_filter |
Boolean |
可选 |
是否过滤系统自带的敏感词,并将匹配到的敏感词替换为 |
|
data.asr_config.sensitive_words_filter.filter_with_empty |
Array |
可选 |
自定义需替换为空的敏感词列表。 |
|
data.asr_config.sensitive_words_filter.filter_with_signed |
Array |
可选 |
自定义需替换为 |
|
data.voice_print_config |
Object |
可选 |
声纹识别配置。 |
|
data.voice_print_config.group_id |
String |
可选 |
声纹组 ID。语音通话时,扣子编程会在该声纹组内进行查找匹配对应的声纹,当声纹匹配度高于 |
|
data.voice_print_config.score |
Integer |
可选 |
声纹匹配的命中阈值,即声音匹配度的最低标准。当声音匹配度达到或超过该阈值时,扣子编程才会认定声纹匹配成功。你可以根据应用的安全性要求进行自定义设置。如果匹配了多轮声纹,扣子编程会取相似度最高的一个。 |
|
data.voice_print_config.reuse_voice_info |
Boolean |
可选 |
当本轮对话未命中任何声纹时,是否沿用历史声纹信息。
|
|
data.voice_id |
String |
可选 |
音色 ID。 |
|
data.tts_config |
Object |
可选 |
配置语音合成的相关参数,用于控制合成语音的整体风格与情感表达,包括辅助信息(如情绪、方言、语气等)、多情感音色的情感类型及强度等。 |
|
data.tts_config.context_texts |
String |
可选 |
语音合成的辅助信息,用于控制合成语音的整体情绪(如悲伤、生气)、方言(如四川话、北京话)、语气(如撒娇、暧昧、吵架、夹子音)、语速(快慢)及音调(高低)等。默认为空。 |
|
data.tts_config.emotion |
String |
可选 |
设置多情感音色的情感类型,仅当
|
|
data.tts_config.emotion_scale |
Float |
可选 |
情感值用于量化情感的强度。数值越高,情感表达越强烈,例如: “开心” 的情感值 5 比 1 更显兴奋。 |
|
data.voice_processing_config |
Object |
可选 |
语音降噪配置。默认不启用降噪。 说明 仅扣子企业旗舰版支持该配置。 |
|
data.voice_processing_config.enable_ans |
Boolean |
可选 |
主动噪声抑制。自动识别并过滤掉背景环境中的各种噪音(如键盘声、空调声、街道嘈杂声),让说话者的声音更清晰。 |
|
data.voice_processing_config.enable_pdns |
Boolean |
可选 |
声纹降噪。专门针对特定说话人的声音进行优化,能更精准地保留目标人声。
|
|
data.voice_print_config.feature_id |
String |
可选 |
目标说话人的声纹 ID。当你选择开启 |
事件示例:
{
"id": "7446668538246561828",
"event_type": "session.update",
"data": {
"voice_id": "7426720361733046281", // 音色 ID
"speech_rate": 0, // [-50, 100]
"longest_silence_ms": 180000,
"event_subscriptions": ["error"],
"chat_config": {
"meta_data": {
"a": "123"
},
"custom_variables": {
"a": "123"
},
"extra_params": {
"a": "123"
},
"plugin_interrupt_mode": "nonblocking", // 控制收到端插件执行中断信号后,没有提交端执行请求时的模型
// 端插件的执行模型,默认不阻塞,blocking/nonblocking,阻塞的场景如果不提交端执行请求就会让语音链路一直block住
"allow_voice_interrupt": true,
"interrupt_config": {
"mode": "keyword_prefix",
"keywords": ["扣子"]
},
"parameters": {
"a": 123,
"b": "abc"
}
},
"turn_detection": {
"type": "server_vad", // server_vad/client_vad
"prefix_padding_ms": 600,
"silence_duration_ms": 500
},
"asr_config": {
"hot_words": ["扣子"],
"enable_itn": true,
"enable_punc": true,
"enable_ddc": true
}
}
}
事件类型:conversation.chat.submit_tool_outputs
事件说明:你可以将需要客户端执行的操作定义为插件,对话中如果触发这个插件,会收到一个 event_type = “conversation.chat.requires_action” 的下行事件,此时需要执行客户端的操作后,通过此上行事件来提交插件执行后的结果。作用等同于提交工具执行结果 API。
事件结构:
|
参数 |
类型 |
是否必选 |
说明 |
|
|---|---|---|---|---|
|
id |
String |
必选 |
事件 ID,也就是事件的唯一标识。由客户端生成,在故障排查场景下用于定位具体的事件,便于排查问题。 |
|
|
event_type |
String |
必选 |
固定为 conversation.chat.submit_tool_outputs。 |
|
|
data |
chat_id |
String |
必选 |
对话 ID。 |
|
tool_outputs |
JSON Array |
必选 |
工具执行结果。具体的结构定义可参考提交工具执行结果 API。 |
|
|
tool_outputs.tool_call_id |
String |
必选 |
上报运行结果的 ID。你可以在端插件请求事件的 tool_calls 字段下查看此 ID。 |
|
|
tool_outputs.output |
String |
必选 |
工具的执行结果。 |
|
事件示例:
{
"id": "7446668538246561829",
"event_type": "conversation.chat.submit_tool_outputs",
"data": {
"chat_id": "7446675275930271785",
"tool_outputs": [
{
"tool_call_id": "BUJJRUUVEhJGERVeEkRDFV5HEkJAXktLQBZeEEAXREpLSxZFR****=",
"output": "{\"url\":\"https://lf3-bot-platform-tos-sign.coze.cn/bot-studio-bot-platform/bot_files/323733792754532/image/jpeg/7446661351415529491/blob****\"}"
}
]
}
}
事件类型:conversation.chat.cancel
事件说明:发送此事件可取消正在进行的对话。
事件结构:
|
参数 |
类型 |
是否必选 |
说明 |
|---|---|---|---|
|
id |
string |
必选 |
客户端自行生成的事件 ID,方便定位问题。 |
|
event_type |
string |
必选 |
固定为conversation.chat.cancel。 |
事件示例:
{
"id": "7446668538246561827",
"event_type": "conversation.chat.cancel",
"data": {}
}
事件类型:conversation.message.create
事件说明:
事件结构:
|
参数 |
类型 |
是否必选 |
说明 |
|
|---|---|---|---|---|
|
id |
string |
必 |
客户端自行生成的事件 ID,方便定位问题。 |
|
|
event_type |
string |
必选 |
固定为conversation.message.create。 |
|
|
data |
role |
string |
必选 |
发送这条消息的实体。取值:
|
|
content_type |
string |
必选 |
消息内容的类型,支持设置为:
|
|
|
content |
string |
必选 |
消息的内容,支持纯文本、多模态(文本、图片、文件混合输入)、卡片等多种类型的内容。参考 object_string object。 |
|
事件示例:
{
"id": "7446668538246561826",
"event_type": "conversation.message.create",
"data": {
"role": "user", // user/assistant
"content_type":"object_string", // text/object_string
"content": "[{\"type\":\"text\",\"text\":\"帮我看看这个PDF里有什么内容?\"},{\"type\":\"file\",\"file_url\":\"https://lf3-appstore-sign.oceancloudapi.com/ocean-cloud-tos/eaafba63-0d96-4ea6-b60c-fbadcf2c25e9.?lk3s=edeb9e45&x-expires=1718296132&x-signature=YtlsUsvSeLJi6x31I%2F4S9X53Y6Y%3D\"}]"
}
}
事件类型:client.vad
事件说明:客户端侧的 VAD 检测结果,仅在turn_detection.type="client_vad"时生效。
事件结构:
|
参数 |
类型 |
是否必选 |
说明 |
|
|---|---|---|---|---|
|
id |
string |
必选 |
客户端自行生成的事件 ID,方便定位问题。 |
|
|
event_type |
string |
必选 |
固定为client.vad。 |
|
|
data |
vad |
boolean |
必选 |
客户端自行检测的 vad 值,只需在变化时上传。 |
事件示例:
{
"id": "74466685382465618283",
"event_type": "client.vad",
"data": {
"vad": true/false
}
}
事件类型:session.pre_answer.update
事件说明:此事件可更新房间内的安抚配置,若更新成功,会收到下行事件 “session.pre_answer.updated”,否则,会收到下行事件 “error”。
事件结构:
|
参数 |
类型 |
是否必选 |
说明 |
|---|---|---|---|
|
id |
String |
必选 |
客户端自行生成的事件 ID,方便定位问题。 |
|
event_type |
String |
必选 |
固定为 |
|
data |
Object |
必选 |
事件数据,包含安抚配置的详细信息。 |
|
data.pre_answer |
Object |
必选 |
安抚配置。 |
|
data.pre_answer.type |
String |
必选 |
安抚生成类型,可选类型有
|
|
data.pre_answer.file_id |
String |
可选 |
仅在 |
|
data.pre_answer.pre_answer_list |
Array |
可选 |
仅在 |
|
data.pre_answer.bot_id |
String |
可选 |
仅在 |
|
data.trigger |
Object |
可选 |
触发相关配置。 |
|
data.trigger.type |
String |
必选 |
安抚策略的触发类型,可选类型有
|
|
data.trigger.time_after |
Integer |
可选 |
仅在 |
事件示例:
{
"id": "7446668538246561822",
"event_type": "session.pre_answer.update",
"data": {
"pre_answer": {
"type": "none",
"file_id": "",
"pre_answer_list": [""],
"bot_id": ""
},
"trigger": {
"type": "mandatory",
"time_after": 1500
}
}
}
mode.updatemode.updated 下行事件,否则,会收到下行事件 “error”。|
参数 |
类型 |
是否必选 |
说明 |
|---|---|---|---|
|
id |
String |
必选 |
客户端自行生成的事件 ID,方便定位问题。 |
|
event_type |
String |
必选 |
固定为 |
|
data |
Object |
必选 |
事件数据,包含房间模式和对话设置。 |
|
data.mode |
String |
必选 |
房间模式。 |
|
data.mode.chat |
Object |
可选 |
对话模式下的设置,仅当 |
|
data.chat.user_language |
String |
可选 |
用户说话的语种,默认为
例如,如果输入音频是德语,则此参数传入de-DE |
{
"id": "",
"event_type": "mode.update",
"data": {
"mode": "chat",
"chat": {
"user_language": "common"
}
}
}
input_text.generate_audio|
参数 |
类型 |
是否必选 |
说明 |
|---|---|---|---|
|
id |
String |
必选 |
客户端自行生成的事件 ID,方便定位问题。 |
|
event_type |
String |
必选 |
固定为 |
|
data |
Object |
必选 |
事件数据。 |
|
data.mode |
String |
必选 |
消息内容的类型,支持设置为:
|
|
data.text |
string |
可选 |
当 |
{
"id": "744666853824656xxxx",
"event_type": "input_text.generate_audio",
"data": {
"mode": "text",
"text": "亲,你怎么不说话了。"
}
}
事件类型:input_audio_buffer.start
事件说明:发送此事件表示用户开始说话。仅在按键说话模式下生效。
事件结构:
|
参数 |
类型 |
是否必选 |
说明 |
|---|---|---|---|
|
id |
string |
必选 |
客户端自行生成的事件 ID,方便定位问题。 |
|
event_type |
string |
必选 |
固定为 |
事件示例:
{
"id": "7446668538246561827",
"event_type": "input_audio_buffer.start",
"data": {}
}
事件类型:input_audio_buffer.complete
事件说明:发送此事件表示用户结束说话。仅在按键说话模式下生效。
事件结构:
|
参数 |
类型 |
是否必选 |
说明 |
|---|---|---|---|
|
id |
string |
必选 |
客户端自行生成的事件 ID,方便定位问题。 |
|
event_type |
string |
必选 |
固定为 |
事件示例:
{
"id": "7446668538246561827",
"event_type": "input_audio_buffer.complete",
"data": {}
}