BYO-VP
BYO-VP
本文说明座席浏览器侧如何把实时音频交给企业自建的 Processor。页名 BYO-VP。协议、采样率和回调在 JS SDK 实时语音流开发指南。
快速阅读
BYO-VP 跑在 WebRTC 座席的实时语音流上。观察点是集成 JS SDK 的座席浏览器:local 是座席麦克风,remote 是通话对端,通常是客户。
情绪识别、关键词识别是这条链上的辅助结果。它们不是 RASR,也不是挂机后的 ASR。座席工作台已有的实时转写事件名是 transcript,不要改叫 RASR,也不要当成 Processor 的返回值。
两种模式:
| mode | 音频是否回灌通话 | 当前限制 |
|---|---|---|
sendonly | 否,只分析 | local、remote 都可以 |
sendrecv | 是,用处理后的音频替换座席麦克风 | 仅 source: "local"。同一 SDK 实例最多一个 |
remote 配 sendrecv 为无效配置,SDK 触发 processorError。
阅读地图
| 要做的事 | 文档 |
|---|---|
| 选模式、确认和 RASR / ASR / transcript 的差别 | 本文 |
填 CTILink.setup()、WebSocket 消息、采样率、错误码 | JS SDK 实时语音流开发指南 |
| 呼入 / 外呼机器人的识别与合成 | BYO-ASR、BYO-TTS |
配置项
一个 Processor 是一条独立 WebSocket。在 CTILink.setup() 的 media.audio.processors 里配置。未配置该项时,SDK 不建立语音流连接。
| 参数 | 必填 | 默认 | 说明 |
|---|---|---|---|
| id | 是 | — | 同一 SDK 实例内唯一 |
| source | 否 | local | local 或 remote |
| mode | 否 | sendonly | sendonly 或 sendrecv |
| transport.protocol | 否 | websocket | 目前仅 websocket |
| transport.url | 是 | — | 仅 wss:// |
可同时配置多个 sendonly。最多一个 sendrecv,且 source 必须是 local。建议单座席 Processor 不超过 5 个。没有 mixed 源;要同时处理两侧时,配两条 sendonly,用同一个 uniqueId 在服务端关联。
常见配法:
| 用途 | source | mode | 回传音频 |
|---|---|---|---|
| 把座席麦克风送到自有服务做分析 | local | sendonly | 否 |
| 把客户侧音频送到自有服务做分析 | remote | sendonly | 否 |
| 实时质检、情绪、关键词 | local 或 remote | sendonly | 否 |
| 座席辅助提示 | remote | sendonly | 否 |
| 变声、美化、降噪、把处理后的座席声音送给对端 | local | sendrecv | 是 |
上表里的分析是 Processor 自己的结果。不要把它记成 RASR、离线 ASR,或座席工作台 transcript 事件。
鉴权由企业的 WebSocket 服务决定。SDK 不规定一种算法。现稿建议的方式是:URL 上的短期 Token、URL 签名、API 网关,或 IP 白名单;并在 SessionStart 里再核对会话信息。
默认音频:sampleRate 16000、channels 1、sampleBits 16、encoding pcm_s16le。载荷是裸 PCM,不含 WAV 头。
生效
- 页面 HTTPS,浏览器已授权麦克风,座席为 WebRTC。
processors已写入CTILink.setup(),地址为wss://。- 座席发起 WebRTC 通话后,SDK 自动建连并发送
SessionStart。开发者不手动创建或关闭 Processor。 - Processor 返回
Session(Ready)后开始收 Uplink。只有local+sendrecv才回 Downlink,并替换送给对端的座席声音。 - 通话结束时 SDK 发送
SessionEnd。连接异常断开后,SDK 会新建 Session,服务端不要沿用旧 Session。
Processor 语音流与 WebRTC 媒体流分开。启用 Processor 不改变浏览器与媒体服务器之间的 WebRTC 编码码率。
验收
- 浏览器里能看到到 Processor 的 WebSocket 长连接。
- 服务端依次收到
SessionStart、持续 Audio、SessionEnd。 sendonly:source对应的一侧有持续 PCM,通话对端声音不被替换。sendrecv:对端听到的是处理后的座席声音;回包为连续 PCM,格式与 Session 一致,无 WAV 头。remote+sendrecv:收到processorError,不建立回灌。- 情绪或关键词结果只出现在 Processor 业务日志中,座席工作台转写事件仍叫
transcript。
Updated about 2 months ago