H-264: 补齐接通后失败收敛

Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
2026-08-18 11:44:40 +08:00
co-authored by multica-agent
parent a1a1212858
commit 31e4591854
+4 -1
View File
@@ -153,6 +153,7 @@ stateDiagram-v2
ringing --> failed
answered --> media_active
answered --> ending
answered --> failed
media_active --> ending
media_active --> failed
ending --> ended
@@ -163,6 +164,8 @@ stateDiagram-v2
允许供应商跳过中间事件向前推进,例如 `requested → answered`;`ended/failed/cancelled` 是终态,迟到的 `ringing/answered` 不得令其回退。回调顺序不等于事实顺序:优先使用供应商序号/发生时间和允许迁移表;仍冲突时保留原始事件并调用 `GetCall`,以追加 correction/audit 的方式收敛。账单修正也只追加 adjustment。
线路已接通但尚未收到 `media_started` 即失败时,call 收敛到 `failed`;该终态迁移的唯一获胜者写 outbox,执行幂等 `Hangup`、单次释放 PG 槽位并调用 `GetUsage` 对账。重复 `failed` 或迟到的 `media_started/answered` 只入 inbox/audit 并返回 2xx,不重复挂断、释放槽位或结算,也不回退终态。
实时会话子状态 `listening → thinking → speaking` 主要驻留内存。只将回合边界、稳定转写、工具副作用、generation、延迟和用量落 PG。
### 4.1 正常通话与用户打断
@@ -265,7 +268,7 @@ PoC 只呼叫已同意的内部号码;参考音频、录音和转写在验收
按以下顺序拆任务即可,不需要先搭建额外基础设施:
1. **线路契约与 mock**:实现 capabilities、幂等发起/挂断/停播、验签、防重放、乱序/重复事件、查询恢复和用量取整契约测试。
1. **线路契约与 mock**:实现 capabilities、幂等发起/挂断/停播、验签、防重放、乱序/重复事件、查询恢复和用量取整契约测试;覆盖无 `media_started` 的 `requested → ringing → answered → failed`,断言终态收敛、槽位只释放一次且仍执行计费/对账,再注入重复 `failed` 和迟到事件验证不重复副作用。
2. **调度与持久化**:实现 PG call/task/slot/inbox/outbox、单调状态机、租户/线路硬并发门禁、恢复和 adjustment;Redis 只做可丢快路径。
3. **媒体与打断**:用固定 G.711 8 kHz 样本验证连续重采样、上下行隔离/AEC、20 ms 帧、generation 丢弃和 StopPlayback。
4. **模型编排**:接入主模型和唯一备选,验证流式、取消、工具幂等、有界超时、一次切换与已批准结束语。