# 设备直连聊天简化与验证记录 2026-09-15,后端版本 `0.93.0-rc.direct1`,已发布到 `https://82.157.201.114`。 ## 本次变更 - 平台仍负责火山设备注册;ble-bind 成功直接下发 5 个专属语音字段,设备保存后本地初始化 SDK。 - 新设备无需 time-challenges、register、voice-runtime、activation-acks 流程。设备通过 RTC/SNTP 取得正确 UTC 时间,现有 HTTPS 请求签名不变。 - chat/start 只需 device_id、session_id;不再检查平台开机登记或本地 SDK 初始化回执。旧固件携带合法 boot_id 仍兼容,旧接口未删除。 - 移除首次成功聊天更新设备状态时对旧初始化回执的依赖,否则新设备会一直停留在 PROVISIONING。状态更新仍要求真实供应商字幕证据和设备结束标识,不伪造 SDK 回执。 - 保留当前绑定、供应商注册结果、老人智能体、配额、同会话续期、结束去重和授权检查。聊天记录仍按 session_id 的回调地址关联。 - 设备交接文档已同步;初始化必需字段由 6 项缩减为 5 项,hardware_revision 无需新设备上报。删除旧 TIME1/CFG1 计算示例,保留 HTTP 签名、UUID/nonce、BLE 和 OTA 校验 C 函数。 ## 本地验证 `go test ./...` 通过;相关包 `go vet` 通过。隔离数据库测试无跳过:callmemory 25 项、onboarding 59 项、devicefleet 3 项,共 87 项(不计子测试)。日志在 `.tmp-direct-no-startup-tests`。随后新增 OpenAPI 格式与必填字段检查也通过。 新增端到端测试使用真实 PostgreSQL、Redis、HTTP 路由和设备签名,供应商边界使用测试替身: 1. 新出厂测试设备从未登记开机,未绑定聊天返回 DEVICE_UNBOUND。 2. HTTP ble-bind 返回完整火山凭据;同请求重试不重复注册供应商。 3. 不传 boot_id、不领初始化配置、不发送初始化回执,chat/start 成功;重试/续期不重复准备供应商任务。 4. 模拟火山签名回调按 session_id 入库;重复回调只保留一条记录。 5. 重复上报 chat/end 成功,首通后设备正常进入 ACTIVE;数据库中仍没有虚构的开机登记/SDK 回执。 6. 解绑后新会话和续期被拒绝,旧会话结束补报仍允许。 7. 供应商未完成注册、旧绑定代次、并发通话、过期租约、已结束会话复活等被拒绝。 C 辅助函数在 Windows 主机使用 GCC 和真实 Mbed TLS 编译运行通过,覆盖 HTTP 签名、随机串格式、UUID、BLE 长度/分片打包及 OTA 分块哈希/大小校验。不使用实物密钥运行这些测试。 ## 线上验证与发布 - 发布前完成平台加密备份,确认没有进行中通话;未迁移数据库、未执行 seed、未改变设备绑定,也未烧录硬件。 - 仅生产业务文件 `internal/callmemory/direct.go` 改变;基于原发布源码构建 API、callbacks、worker,其他生产配置与前端保持不变。 - 服务器拉取构建基础镜像超时,改为本机交叉编译生产源码;第一次运行发现二进制执行权限缺失,自动回退后修复权限,第二次发布成功。 - 当前发布目录 `/opt/data-terminal-cloud/releases/0.93.0-rc.direct1`;三个后端容器均运行新版本,HTTPS readiness=200,PostgreSQL/Redis/对象存储正常。 - 独立联调设备 `KP01-020000260914` 在线上不传 boot_id 请求 chat/start,返回 409 DEVICE_UNBOUND,而非旧参数校验错误。未调用启动接口、未改变绑定、未发起真实通话。 ## 尚未验证/外部问题 - 公网 MQTT 8883 的 TLS 连接仍返回 ECONNRESET;服务器已监听 IPv4/IPv6 8883,本机 TLS 1.3 握手及 IP 证书校验通过。说明服务端 TLS 正常,但公网链路仍需排查云安全组/网络路径,不能断言具体阻断点。 - 真实设备音频采集/播放、真实火山 RTC 通话与真实固件安装未执行。本地供应商模拟回调不等于真实火山端到端验收。 - 因此本次能确认平台协议和覆盖的业务测试通过,不能保证没有其他缺陷,也不能宣称实物 MQTT/OTA 全流程已经打通。 交接主文档:[设备接口文档](embedded-device-business-guide-20260914.md)。真实初始化密钥仅在桌面私有交接文件中,不放本记录或公开仓库。