訊息
等 session.ready 後再推裸 PCM。控制訊息只有 finalize / stop / ping。
用戶端 → 伺服器
| 訊息 | 載荷 | 說明 |
|---|---|---|
session.finalize | — | 把正在說的這一段立刻收尾,並推出 final。 |
session.stop | — | 正常結束這條串流。 |
session.ping | — | 保活。伺服器回 session.pong。 |
音訊框架是裸 pcm_s16le、16 kHz、單聲道,單框不超過 64 KB。沒有框頭、沒有序號、不用記帳位移——按順序送位元組,剩下的伺服器處理。
伺服器 → 用戶端
所有伺服器訊息都是帶 type 的 JSON 文字框架。sessionId 只在 session.ready 上,不會出現在每條轉錄或譯文裡。segmentId 是不透明 id,不要解析前綴。
| 訊息 | 載荷 | 說明 |
|---|---|---|
session.ready | sessionId, audio, limits, store, region | 串流已經開始。可以送音訊了。 |
transcript.partial | text, language?, pending?, tail?, paragraphs?, tailTranslation? | 預覽快照。逐句模式的 paragraphs 為 {speaker?, pieces: [{text, confirmed}], translation?},tail/tailTranslation 為未完句;pending 為平鋪相容欄位。每次替換快照,按段顯示譯文,不疊加彙總的 translation.partial;僅 transcript.final 可作為最終結果儲存。 |
transcript.final | segmentId, text, startMs?, endMs?, speaker?, language? | 已落定的段落,時間在有效音訊時鐘上。 |
translation.partial | text, sourceText | 還不穩定的譯文預覽。 |
translation.final | segmentId, text, sourceText, sourceLanguage, targetLanguage, enhanced? | 已落定的譯文。開了 aiEnhance 時,同一個 segmentId 會再推一次,並帶 enhanced: true。 |
digest.update | sections[] | 滾動紀要:{ title, points[], confirmed }。每次推送替換上一份。 |
usage.update | effectiveSamples, discardedSamples, effectiveSeconds, discardedSeconds, priceCentsPerHour, accruedCents, collectedCents, uncollectedCents, balanceCents | 每 15 秒一次,結束時再來一次。 |
session.error | code, message, retryable, scope | 可恢復或致命的錯誤。 |
session.ended | reason, enhancement, storage, billing | 伺服器結束了這條串流。儲存和精修各自有狀態。 |
session.pong | — | 對 session.ping 的回覆。 |