Skip to content

本文介绍如何基于 RTC 实现按键说话。 功能介绍 RTC 支持按键说话与自由对话两种模式,默认采用自由对话模式,两种方式的对比说明如下:

特性

按键说话模式 (client_interrupt)

自由对话模式 (server_vad)

控制方式

用户通过物理按键或屏幕按钮精确控制语音识别的开始和结束。

由云端语音活动检测 (VAD) 算法自动判断用户是否在说话。

核心优势

精准控制:避免背景噪音干扰,只有在用户主动操作时才传输音频,保障了通信的私密性和准确性。

自然流畅:用户无需任何额外操作,像正常交谈一样即可开始和结束对话,提供了“解放双手”的无缝体验。

典型场景

在线游戏:避免键盘、鼠标声干扰团队语音。 智能玩具:故事机等具备实体按键的智能玩具,防止儿童误触发,同时增强互动趣味性。

语音助手:与智能设备进行自然语言交互。 智能客服:在呼叫中心等场景下进行流畅的语音问答。

客户端实现

客户端需要在用户操作按键时,发送说话开始input_audio_buffer.start和结束事件input_audio_buffer.complete给扣子服务端。

客户端实现简单,只需持续采集并上报音频数据流即可,语音的开始和结束由服务端自动判断。

实现方式 步骤一:创建房间时启用按键说话模式 在创建 RTC 房间时,设置语音检测类型为按键说话模式,将 turn_detection.type 设置为 client_interrupt。

curl --location --request POST 'https://api.coze.cn/v1/audio/rooms'
--header 'Authorization: Bearer pat_OYDacMzM3WyOWV3Dtj2bHRMymzxP****'
--header 'Content-Type: application/json'
--data-raw '{ "bot_id":"750346455663573***", "config":{ "turn_detection":{ "type":"client_interrupt" } } }'

步骤二:客户端实现按键说话 时序图

实现方法: 1. 当用户按下按键时,发送 input_audio_buffer.start 事件,通知扣子服务端用户开始说话。 关于 Realtime 信令事件的详细用法请参见信令事件,事件示例如下:

{ "id": "event_id", "event_type": "input_audio_buffer.start", "data": {} }

扣子返回 input_audio_buffer.started 事件,此时服务端开始识别用户说话。 事件示例如下:

{ "id": "event_id", "event_type": "input_audio_buffer.started", "data": {} }

当用户松开按键时,客户端发送 input_audio_buffer.complete 事件,通知扣子服务端语音识别完毕。 事件示例如下:

{ "id": "event_id", "event_type": "input_audio_buffer.complete", "data": {} }

扣子返回input_audio_buffer.completed事件,代表服务端已确认语音识别结束。 事件示例如下:

{ "id": "event_id", "event_type": "input_audio_buffer.completed", "data": {} }

说明 客户端重复发送input_audio_buffer.start或input_audio_buffer.complete 事件,扣子服务端会直接忽略,不会产生重复响应。