45 lines
4.2 KiB
Markdown
45 lines
4.2 KiB
Markdown
# 设备直连聊天简化与验证记录
|
||||
|
|
|
|||
|
|
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)。真实初始化密钥仅在桌面私有交接文件中,不放本记录或公开仓库。
|