概览
一次握手,一条 WebSocket。音频以裸 PCM 进去,JSON 出来。这一页就是全部协议。
每个会话只有三步。握手选节点、查余额、签发一个短期 token;WebSocket 负责音频和结果;关闭连接即结束这条流。
这是一条纯实时管道。除非你传 store: true,否则什么都不留——连接一断,音频和转写在我们这边就没有了。
快速开始跑通一条流所需的全部内容:一次 HTTP 请求拿到节点和 token,一条 WebSocket,裸 PCM 上去、JSON 回来。认证握手用控制台创建的 API Key 认证,Key 只在创建时显示一次。WebSocket 本身用握手返回的短期 token 认证,永远不用 Key。连接POST 流的配置,拿回节点 URL、会话 ID 和 token。WebSocket向返回的 url 建立 WebSocket。token 走 subprotocol 传递,因为浏览器无法在 WebSocket 握手时设置 header。消息等 session.ready 后再推裸 PCM。控制消息只有 finalize / stop / ping。转录语言提示、自动识别,以及段落何时落定。翻译每条流一个语言对,方向按每个段落判定。说话人在握手时开启说话人分割,之后每个落定的段落都会连同时间戳一起带回说话人标签。术语表把识别结果偏向你的术语,并固定人名、产品名的译法。AI 译文优化第二轮模型调用结合上下文重写译文。实时纪要会话还在进行,纪要就已经在一段段生成。时间戳transcript.final 和 translation.final 上的 startMs / endMs 是相对本条流音频起点的毫秒偏移,从你发的第一个字节算起。开了 store: true 时,它们就是你能下载到的那份录音里的位置。录音以 store: true 跑过的流,音频和转写会保留 30 天,用签名 URL 获取。断线连接关闭就意味着这条流结束了。没有续连:重新调用 connect 即开始一条新流。你的客户端手上已经有收到的文本,服务端从未保存过。错误码HTTP 错误返回带 code 字段的 JSON。只重试标记为 retryable 的。定价整个 API 一个价,每条会话按有效音频时长向上取整到整分钟计费。