From 31e4591854689f40e61724da202396b270e3ceb7 Mon Sep 17 00:00:00 2001 From: Rogee Date: Tue, 18 Aug 2026 11:44:40 +0800 Subject: [PATCH] =?UTF-8?q?H-264:=20=E8=A1=A5=E9=BD=90=E6=8E=A5=E9=80=9A?= =?UTF-8?q?=E5=90=8E=E5=A4=B1=E8=B4=A5=E6=94=B6=E6=95=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: multica-agent --- docs/architecture/public-model-outbound.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/architecture/public-model-outbound.md b/docs/architecture/public-model-outbound.md index e4b5936..6694ac3 100644 --- a/docs/architecture/public-model-outbound.md +++ b/docs/architecture/public-model-outbound.md @@ -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. **模型编排**:接入主模型和唯一备选,验证流式、取消、工具幂等、有界超时、一次切换与已批准结束语。