feat: update device interaction views and modification log doc
All checks were successful
Build and Deploy LTY / build-and-deploy (push) Successful in 9m16s

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
pmc 2026-04-29 17:14:51 +08:00
parent 6c1cfde379
commit a13a081105
2 changed files with 43 additions and 0 deletions

View File

@ -1435,7 +1435,11 @@ class VolcEngineTokenViewSet(viewsets.ViewSet):
'id': chat_msg.id,
'sender': sender,
'message': full_text[:2048],
# ISO8601 带时区(兼容旧客户端)
'timestamp': chat_msg.timestamp.isoformat(),
# Unix 秒级时间戳(无时区歧义):客户端优先用此字段比较
# 解决 Unity Mono DateTime.TryParse 处理 ISO8601+timezone 不稳定导致的双倒
'timestamp_unix': int(chat_msg.timestamp.timestamp()),
'source_client': 'unknown',
}
}

View File

@ -23,6 +23,45 @@
<!-- 新的修改记录添加在此处下方,最新的在最前面 -->
### [2026-04-29] strategy B group_send 推回消息体新增 timestamp_unix 字段
配套手机端记录:`LTY_App_Project_URP/docs/修改记录.md` 同日"修复 B' 双倒真正根因:时间戳时区解析"条目。
手机端实测 B' 方案出现 UI 双倒,根因定位为:服务端 `chat_msg.timestamp.isoformat()` 输出 UTC 带时区的 ISO8601`+00:00`),客户端 Unity Mono `DateTime.TryParse` 对此处理不稳定,可能丢失时区信息导致与本地时间戳比较时差 8 小时 → 替换匹配窗口15s永远不命中 → 走"作为新消息插入"兜底分支 → 双倒。
服务端最稳妥的修复方式:在 group_send payload 多附一个无时区歧义的 unix 秒级时间戳,让客户端优先使用。
#### 修改strategy B 落库后 group_send payload 新增 timestamp_unix
- **文件路径**: `device_interaction/views.py`
- **修改类型**: 增强
- **修改内容**:
- `conversation_status` action 内字幕落库分支(约 L1438 附近)的 `channel_layer.group_send` payload 新增字段:
```python
'timestamp_unix': int(chat_msg.timestamp.timestamp()),
```
- 保留原 `timestamp` 字段ISO8601兼容老客户端不破坏现有约定
- **修改原因**:
- Unix 秒级时间戳是绝对值,跨语言跨时区零歧义
- 客户端 `DateTimeOffset.FromUnixTimeSeconds(...).LocalDateTime` 转换可靠
- 服务端代价极小(一次 `.timestamp()` 调用),收益是消除一类隐性双倒 bug
#### 客户端配套改动(仅记录依赖关系)
- `Assets/Scripts/AI/ChatLogManager.cs``ServerPersistedData` 结构体新增 `long timestamp_unix` 字段
- `OnServerChatPersisted` 时间戳解析改为:优先 `timestamp_unix` > 0 → fallback `DateTimeOffset.TryParse(timestamp)` → fallback `DateTime.Now`
- `LoadChatHistoryFromServer` 同步改用 `DateTimeOffset.TryParse`GET 接口暂未提供 unix 字段)
#### 验证
服务端部署后,客户端 Console 应能在 `[匹配诊断]` 日志中看到 delta 缩小到秒级(之前是 ~28800s。修复确认后客户端会删除诊断日志。
#### 待跟进
- `aiapp/views.py``RTCChatHistoryAPIView.get` 也可在响应里加 `timestamp_unix` 字段进一步收紧(非必须,因为 GET 路径双倒不直接受影响 —— 走的是覆盖式拉取)
---
### [2026-04-29] 手机端聊天记录切换服务端字幕落库B' 方案 服务端部分)
配套手机端方案文档:`LTY_App_Project_URP/docs/手机端聊天记录_切换服务端字幕落库方案.md`。手机端已实施 B'(本地 ASR 实时显示 + 服务端 webhook 静默替换服务端需要补三件事strategy B 落库后 group_send 推回客户端、DeviceConsumer 加 handler、RTCChatHistoryAPIView 灰度期去重 + since_id 增量拉取。