Files
story/docs/voice-chat-delivery.md
T

59 lines
6.4 KiB
Markdown
Raw Normal View History

# 聊天接入阶段交付
时间:2026-09-14。此文档记录实际完成项,不表示已通过供应商/真机完整聊天验收。
## 当前版本:简化直连聊天
用户要求简化后,当前已上线 `0.88.0-rc.direct1`。以下新记录优先于本文旧版阶段记录。
- 设备业务接口缩减为 `POST /api/v1/device/chat/start` 和 `POST /api/v1/device/chat/end`;自动保活复用 start,不再调用 warmup/prepare/events/command-acks,也不上传字幕。
- 火山原生字幕入口:`POST /callbacks/v1/volcengine/chat?session_id=...`,会话独立签名、去重、授权检查和迟到回调隔离。现有小程序记录页沿用,不需要另改记录 API。
- 不再要求 H01–H12 profile 发布或人工远端停止证明才能开始下一通;本地 SDK 停止和火山远端状态仍区分保存,不伪造供应商证明。
- 沿用服务器现有豆包 S2S 参数文件。平台已授权记忆放进本次上下文,原生共享记忆库关闭;本版不是火山自动长期记忆同步。
- Go 全包测试通过;独立临时数据库的 callmemory/onboarding/httpapi 测试通过。真实 C 适配器 ASan/UBSan 测试通过:开始取参数、无字幕上传、结束重试不变、失败恢复、权限拒绝、租约过期、迟到响应不恢复音频。SDK 敏感日志检查通过。
- 发布时发现 callbacks 不挂载设备启动参数文件,已移除该服务不需要的配置项;最终 API、worker、callbacks 健康,三个公网接口拒绝未授权请求。完整发布清单及源码归档重新校验通过。
- 已烧录 app 分区,大小 3700048 字节,SHA-256 `0afece4ff2484cba17065d7c2350aff7b98fae94a32cb70b75df2f438facf6c5`,ELF 前缀 `61ceb73ac`。保留 NVS、Wi-Fi、绑定代次 9。
- 已完成真实火山设备注册:`SDK_REGISTER / SUCCESS_OBSERVED / 0`;设备初始化配置确认已到达后端,状态 `REGISTERED_OBSERVED`。这是真实设备注册,不是模拟结果,但仍不等于实际对话和字幕回调验收。
- 最终固件启动观察 55 秒:只有主动 USB 复位一次,没有额外重启;联网、注册、激活结果、初始化确认均返回 HTTP 200;启动任务栈余量 11880 字节。
- 刷机前应用备份:`firmware/echoear-platform-agent/.tmp-call-device/before-direct-chat-app.bin`(完整 5 MiB),前 3705696 字节哈希与上一版稳定程序一致。
- 已请用户轻触屏幕试聊并挂断;实际声音和火山字幕回传结果待确认。
## 以下为旧版阶段记录
## 已更新
- 后端已上线版本:`0.87.1-rc.call2`,部署目录 `/opt/data-terminal-cloud/releases/0.87.1-rc.call2`,数据库 schema 63,未新增迁移;发布后 API、worker、callbacks 健康检查通过,公网版本接口确认一致。
- 新接口:设备 `voice-runtime`,小程序 `memories/calls/query`、`memories/calls/turns`。
- 已有通话 prepare/heartbeat 增加最新 `voice_chat` 授权快照检查;没有更改任何用户的实际授权。
- 小程序源代码:`C:\Users\19926\WeChatProjects\peibanzhushou`。新聊天记录与旧版记录分别查看,列表分页、详情分页、隐藏页面后的迟到响应隔离。不代表已上传微信体验版或正式版。
- 固件新增 CALL-MEMORY-1.1 适配、RTC 构建、设备级凭据保存、许可/结果上报、首通事件、心跳、本地音频门控、文字事件重试、重启结束补偿。
## 验证
- Go 全包测试通过;使用独立临时数据库的 `callmemory`、`onboarding`、`httpapi` 集成测试通过。
- 小程序 31 项测试通过,8 个 WXML 和 9 个 WXSS 原生编译通过。
- 对真实 `call_client.c` 执行主机 ASan/UBSan 测试:租约过期、真实观察事件顺序、失败重试正文与 ID 不变、撤销保存后的内容清除、缓存上限、超大 JSON 缺口、迟到心跳不可恢复、结束清理。
- 供应商 SDK 的日志扫描覆盖包含 verbose 在内的日志等级,不输出会话正文、配置、Device Secret 或动态注册解密内容。
- 线上新增接口匿名请求被拒绝;API/worker/callbacks 健康检查通过;签名读取确认原设备仍处于绑定状态。
## 硬件升级与回退
- 设备:EchoEar ECHOEAR-S3 V1.2,COM6,MAC `b4:3a:45:16:34:a8`。
- 更新仅写应用分区 `0x10000`;未擦除 NVS、Wi-Fi、出厂身份、模型、屏幕资源或现有绑定。
- 已读取应用分区完整备份:`firmware/echoear-platform-agent/.tmp-call-device/before-call-app.bin`,5 MiB。
- 备份前 3146016 字节 SHA-256 与原稳定版本一致:`68f1dd9f8314079695e47c8940b05f95fb849339bcaf14955a496437143d9199`。
- 第一版 RTC 固件的真机验证发现 Wi-Fi DMA 内存不足触发重启;立即恢复上述原固件,25 秒观察中只有主动复位,无额外重启。
- 随后修改 station 模式静态 RX/TX 各 6 帧、动态 RX 16、缓存 TX 8、接收 BA 窗口 6;Wi-Fi 初始化失败改为错误返回,不再触发 abort 重启;纯 BLE 出厂身份可以直接进入正常联网流程,不依赖旧 UUID 凭据。
- 调整后的固件实测 55 秒:只有主动 USB 复位一次,无额外重启;启动登记及语音配置接口返回 200,warmup 返回预期的 `PROVIDER_PROFILE_UNVERIFIED`。内部空闲 RAM 77647 字节,启动任务剩余栈 11864 字节。
- 最后增加上传前权限字段:warmup/heartbeat 明确返回 `transcript_upload_allowed`,缺失或拒绝即禁止设备发送正文。
- 最终固件已写入并通过 esptool 内容校验:3705696 字节,SHA-256 `738edc55f481bd419d380d2519169bb7e9a82a2f57d547ca86918257424bb712`;ELF 前缀 `65b26cf6b`。公网签名查询确认设备仍已绑定。
- 最终固件再次观察 55 秒:仅主动 USB 复位一次,无额外重启;启动登记和语音配置同步均为 HTTP 200;warmup 明确返回 HTTP 409 / `PROVIDER_PROFILE_UNVERIFIED`,启动栈余量 11888 字节。尚未进入真实 RTC 通话,以上稳定性结论仅覆盖启动与配置检查。
## 未完成的验收/功能
当前线上没有已验证发布的 RTC profile,因此不会消耗供应商注册许可或开启聊天麦克风。
以下仍是阻塞/后续项:真实 profile 与 H01–H12 验证、供应商远端停止自动核对、连续多通实测、长字幕分片和修订、打断与播放完成的逐句证据。
不能将“固件编译成功/平台接口可用”说成“已与豆包完成实际对话并上传聊天记录”。
接口与实际通信步骤见 [voice-chat-flow.md](voice-chat-flow.md)。