feat: expand companion platform, device controls, and memoir workflows
ci / verify (push) Canceled after 0s
ci / verify (push) Canceled after 0s
Add customer and operator login, BLE provisioning, device fleet controls, call memory, memoir generation, and refreshed family and maintenance portals. Include API contracts, migrations, firmware sources, tests, assets, and deployment documentation.
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
# 设备直连聊天简化与验证记录
|
||||
|
||||
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)。真实初始化密钥仅在桌面私有交接文件中,不放本记录或公开仓库。
|
||||
Reference in New Issue
Block a user