voiceConsult
所有的音频对话、上行事件和下行事件都在websocket建立的基础上进行的
语音对话
通过websocket和云端建立连接,进行音频收发
1、获取Token 2、建立websocket
1、获取Token的时候,必须使用已经注册的botId,保证不与其他botId重复 2、建立连接时请保证accessToken在有效时间内 3、如果使用同一个botId创建两个webSocket连接则会出现设备互踢报错 互踢标识:"eventType":"REPEAT_CLIENT_SESSION" 4、重新建立webSocket连接的时候需要重新获取Token 5、上行事件uid参数请传递真实的用户pin等信息,或者不传递,禁止所有设备使用相同固定值(例如123456等),影响记忆功能的使用
输入音频
确定音频传输为二进制/文本(binary/text)
1、确定是否二进制传输如果需要按照binary使用,在ws建连时传入 &needAudioBinary=true 或 CLIENT_VOICE_CHAT_UPDATE 事件中传入 audio.binary=true 2、默认的音频传输为text message,采用base64编码 3、使用二进制传输后,二进制通道仅用于音频文件输入输出,代替了上行事件-流式上传音频和下行事件-增量流式音频,其他事件正常用text消息交互
1、使用二进制格式,传入音频时使用webSocket send(bytes: byteString) 2、{"code":400,"msg":"audio binary not support."}:未启用二进制格式,但在WebSocket消息中传入bytes类型消息
输入音频格式为opus
1、通过 CLIENT_VOICE_CHAT_UPDATE 设置: audio.input.codec 为opus audio.input.sampleRate 为16k(请使用真实采样率) 2、标准opus对接 audio.input.frameSize 不用设置 3、多个固定长度opus帧拼接 audio.input.frameSize请设置为每帧的字节长度
1、CLIENT_VOICE_CHAT_UPDATE 每个连接只用发送一次,否则会导致对话被打断 2、输入音频拼接不能超过300ms 3、均匀发送音频包,间隔应该是音频时长,否则会回复延时异常 4、默认websocket链接支持的音频格式是pcm,如果想要使用opus格式,需要发送**更新语音对话配置** 上行事件进行更新 5、下发的opus裸流是单声道
输入音频格式为pcm
1、默认的编码为pcm,采样率16k,可以联系产品经理调整 或者通过CLIENT_VOICE_CHAT_UPDATE事件设置 2、audio.input.codec为pcm;audio.input.sampleRate 为16k(请使用真实采样率)
1、pcm每次发送不能超过300ms 2、均匀发送音频包,间隔应该是音频时长,否则会回复延时异常
输出音频
1、默认TTS输出格式为Mp3,长度为480ms,不支持切分音频 2、输入格式支持opus和pcm,可以联系产品经理进行修改 3、或者通过CLIENT_VOICE_CHAT_UPDATE 设置 audio.output.codec 为mp3、pcm、opus audio.output.sampleRate 默认为16k audio.output.frameSizeMs 输出音频的帧时长,mp3格式不支持切分,pcm数值范围【60-120】,opus只能设置60
1、确保端上解码和配置的音频格式相匹配 2、确保端上内存空间足够,否则不要使用mp3格式,如果内存不够缓存音频片段,会导致丢包
心跳机制
建立webSocket请求后,需要发送PING事件,建议30s间隔发送一次,确保与服务端保持活跃
如果长时间没有收到【心跳响应】(zh-cn/realtimeVoiceChat/outputData)说明websocket断链,需要进行重新连接
服务端反馈
服务端成功反馈
连接建立成功后:会收到CFG_BOT_EVENT 更新对话配置成功后:会收到SERVER_VOICE_CHAT_UPDATED
1、设备建立WebSocket连接后快速断开,会收到REPEAT_CLIENT_SESSION事件
对话命中审核
输入音频命中审核后,会收到AGENT事件,事件中finishReason为audit,还会收到eventType为USER_AUDIT_FAIL的事件
对话识别结果为空
如果识别结果为空,会接收到“EMPTY_CONTENT”事件
交互模式
手动模式
1、在连接的时候设置手动模式needManualCall 2、音频发送结束必须发送CLIENT_AUDIO_FINISH 3、需要提前打断tts播放,需要发送CLIENT_INTERRUPT
新一轮对话开始时,如果tts还在输出,必须CLIENT_INTERRUPT打断,否则轮次判定异常
自由对话
1、默认支持自由对话模式,云端支持VAD+ASR 2、设备端收音必须支持音频输出回采,支持AEC 3、打断逻辑:端上接收云端发送的CALL_AGENT_INTERRUPTED事件进行打断处理
收到CALL_AGENT_INTERRUPTED事件后,设备端应该打断现在的TTS音频流播放;准备播放新的TTS音频流