From d4128293c1cb50337689b85ec6e63ef6b0abd110 Mon Sep 17 00:00:00 2001 From: luozheng <1732036298@qq.com> Date: Fri, 21 Nov 2025 10:46:37 +0800 Subject: [PATCH] =?utf8?q?=E5=8D=8F=E8=AE=AE=E6=96=87=E6=A1=A3=E6=9B=B4?= =?utf8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- ...45\345\217\243\346\226\207\346\241\243.md" | 247 +++++++++++++++++- 1 file changed, 240 insertions(+), 7 deletions(-) diff --git "a/code/sdk/zhihui/leiniao/\350\256\276\345\244\207API\346\216\245\345\217\243\346\226\207\346\241\243.md" "b/code/sdk/zhihui/leiniao/\350\256\276\345\244\207API\346\216\245\345\217\243\346\226\207\346\241\243.md" index e5b4ff193..268e598b5 100644 --- "a/code/sdk/zhihui/leiniao/\350\256\276\345\244\207API\346\216\245\345\217\243\346\226\207\346\241\243.md" +++ "b/code/sdk/zhihui/leiniao/\350\256\276\345\244\207API\346\216\245\345\217\243\346\226\207\346\241\243.md" @@ -1460,7 +1460,7 @@ WebSocket连接需要设备Token认证,有以下两种方式传递Token: ### 客户端业务消息 -客户端可以通过WebSocket连接发送业务消息给服务端,目前支持心跳、语音对话分片传输、语音对话打断、语音选择故事和随机故事请求。 +客户端可以通过WebSocket连接发送业务消息给服务端,目前支持心跳、对话会话开始、对话会话结束、语音对话分片传输、语音对话打断、语音选择故事和随机故事请求。 #### 心跳请求 (Ping) **命令描述**:客户端发送心跳请求,保持WebSocket连接活跃 @@ -1509,6 +1509,143 @@ WebSocket连接需要设备Token认证,有以下两种方式传递Token: - 如果长时间未收到Pong响应,说明连接可能异常,建议重新连接 - 心跳间隔建议设置为30秒,过于频繁会增加服务器负载 +#### 对话会话开始 (ChatSessionStart) +**命令描述**:客户端发送对话会话开始请求,用于开始一个新的对话会话 +**协议说明**: +- 用户长按对话按键开始对话时,客户端发送此命令 +- 服务端收到请求后会生成16位UUID作为sessionId并返回 +- 后续的语音对话请求需要携带此sessionId + +**消息格式**: +```json +{ + "deviceId": "设备ID", + "timestamp": 1640995200, + "messageId": "消息ID", + "command": "ChatSessionStart", + "data": { + "chatId": "请求ID,用于标识本次请求" + } +} +``` + +**消息示例**: +```json +{ + "deviceId": "DEVICE_001", + "timestamp": 1640995200, + "messageId": "session_start_001", + "command": "ChatSessionStart", + "data": { + "chatId": "chat_12345" + } +} +``` + +**data字段说明**: + +| 字段名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| chatId | String | 是 | 请求ID,用于标识本次请求,建议使用UUID | + +**服务端响应**: +服务端收到会话开始请求后,会通过WebSocket推送ChatSessionStartAck响应: + +```json +{ + "deviceId": "DEVICE_001", + "timestamp": 1640995201, + "messageId": "session_start_ack_001", + "command": "ChatSessionStartAck", + "data": { + "sessionId": "a1b2c3d4e5f67890", + "chatId": "chat_12345" + } +} +``` + +**服务端响应data字段说明**: + +| 字段名 | 类型 | 描述 | +|--------|------|------| +| sessionId | String | 对话会话ID,16位UUID,由服务端生成 | +| chatId | String | 请求ID,与请求中的chatId对应 | + +**协议说明**: +- 客户端收到sessionId后,应在后续的VoiceChatRequest请求中携带此sessionId +- sessionId用于标识一个完整的对话会话,一个会话可以包含多次对话请求 +- 会话结束后需要调用ChatSessionEnd命令结束会话 + + +#### 对话会话结束 (ChatSessionEnd) +**命令描述**:客户端发送对话会话结束请求,用于结束当前的对话会话 +**协议说明**: +- 用户长按对话按键结束对话时,客户端发送此命令 +- 会话结束后,该sessionId将不再有效 + +**消息格式**: +```json +{ + "deviceId": "设备ID", + "timestamp": 1640995200, + "messageId": "消息ID", + "command": "ChatSessionEnd", + "data": { + "sessionId": "对话会话ID", + "chatId": "请求ID,用于标识本次请求" + } +} +``` + +**消息示例**: +```json +{ + "deviceId": "DEVICE_001", + "timestamp": 1640995300, + "messageId": "session_end_001", + "command": "ChatSessionEnd", + "data": { + "sessionId": "a1b2c3d4e5f67890", + "chatId": "chat_67890" + } +} +``` + +**data字段说明**: + +| 字段名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| sessionId | String | 是 | 对话会话ID,与ChatSessionStartAck返回的sessionId一致 | +| chatId | String | 是 | 请求ID,用于标识本次请求,建议使用UUID | + +**服务端响应**: +服务端收到会话结束请求后,会通过WebSocket推送ChatSessionEndAck响应: + +```json +{ + "deviceId": "DEVICE_001", + "timestamp": 1640995301, + "messageId": "session_end_ack_001", + "command": "ChatSessionEndAck", + "data": { + "sessionId": "a1b2c3d4e5f67890", + "chatId": "chat_67890" + } +} +``` + +**服务端响应data字段说明**: + +| 字段名 | 类型 | 描述 | +|--------|------|------| +| sessionId | String | 对话会话ID,与请求中的sessionId对应 | +| chatId | String | 请求ID,与请求中的chatId对应 | + +**协议说明**: +- 会话结束后,该sessionId将不再有效,后续的VoiceChatRequest不应再使用此sessionId +- 如果需要继续对话,需要重新调用ChatSessionStart获取新的sessionId +- 会话结束会清理服务端的会话缓存,释放相关资源 + #### 语音对话分片传输 (VoiceChatRequest) **命令描述**:客户端发送语音对话请求,支持大音频文件的分片传输 **协议说明**: @@ -1526,6 +1663,7 @@ WebSocket连接需要设备Token认证,有以下两种方式传递Token: "data": { "audioBase64": "音频数据Base64编码(分片)", "chatId": "对话ID,用于标识本次对话", + "sessionId": "对话会话ID", "finished": false } } @@ -1542,6 +1680,7 @@ WebSocket连接需要设备Token认证,有以下两种方式传递Token: "data": { "audioBase64": "UklGRiQAAABXQVZFZm10IBAAAAABAAEA...", "chatId": "chat_12345", + "sessionId": "a1b2c3d4e5f67890", "finished": false } } @@ -1555,6 +1694,7 @@ WebSocket连接需要设备Token认证,有以下两种方式传递Token: "data": { "audioBase64": "AAEAAQABAAEAAQABAAEAAQABAAEAAQAB...", "chatId": "chat_12345", + "sessionId": "a1b2c3d4e5f67890", "finished": false } } @@ -1568,6 +1708,7 @@ WebSocket连接需要设备Token认证,有以下两种方式传递Token: "data": { "audioBase64": "BAAEAAQABAAEAAQABAAEAAQABAAEAAAA...", "chatId": "chat_12345", + "sessionId": "a1b2c3d4e5f67890", "finished": true } } @@ -1575,18 +1716,24 @@ WebSocket连接需要设备Token认证,有以下两种方式传递Token: **data字段说明**: -| 字段名 | 类型 | 描述 | -|--------|------|------| -| audioBase64 | String | 音频数据Base64编码,单个分片不超过8KB原始数据 | -| chatId | String | 对话ID,用于标识本次对话,建议使用UUID | -| finished | Boolean | 是否为最后一个分片,true表示传输完成 | +| 字段名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| audioBase64 | String | 否 | 音频数据Base64编码,单个分片不超过8KB原始数据 | +| chatId | String | 是 | 对话ID,用于标识本次对话,建议使用UUID | +| sessionId | String | 是 | 对话会话ID,由ChatSessionStartAck返回,用于标识对话会话 | +| finished | Boolean | 是 | 是否为最后一个分片,true表示传输完成 | **分片传输规则**: 1. 原始音频数据按8KB分片 2. 每个分片转换为Base64编码后发送 -3. 所有分片使用相同的chatId +3. 所有分片使用相同的chatId和sessionId 4. 只有最后一个分片设置finished=true +**sessionId使用说明**: +- sessionId必须通过ChatSessionStart命令获取 +- 同一个会话中的所有对话请求应使用相同的sessionId +- 会话结束后,该sessionId将不再有效,需要重新获取 + **服务端响应**: 服务端收到完整音频后,会通过WebSocket推送VoiceChatResponse消息: @@ -3358,6 +3505,92 @@ WebSocket连接需要设备Token认证,有以下两种方式传递Token: **服务端处理说明**: - 服务端收到BluetoothStatusReport命令后,更新设备缓存中的蓝牙连接信息,并返回BluetoothStatusReportAck应答给设备端 +#### 20. 对话会话开始应答 (ChatSessionStartAck) +**命令描述**:服务端对对话会话开始请求的应答,返回生成的sessionId + +**消息格式**: +```json +{ + "deviceId": "设备ID", + "timestamp": 1640995201, + "messageId": "消息ID", + "command": "ChatSessionStartAck", + "data": { + "sessionId": "对话会话ID", + "chatId": "请求ID" + } +} +``` + +**消息示例**: +```json +{ + "deviceId": "DEVICE_001", + "timestamp": 1640995201, + "messageId": "session_start_ack_001", + "command": "ChatSessionStartAck", + "data": { + "sessionId": "a1b2c3d4e5f67890", + "chatId": "chat_12345" + } +} +``` + +**data字段说明**: + +| 字段名 | 类型 | 描述 | +|--------|------|------| +| sessionId | String | 对话会话ID,16位UUID,由服务端生成 | +| chatId | String | 请求ID,与请求中的chatId对应 | + +**协议说明**: +- 客户端收到此应答后,应保存sessionId并在后续的VoiceChatRequest中使用 +- 会话结束后需要调用ChatSessionEnd命令结束会话 + + +#### 21.对话会话结束应答 (ChatSessionEndAck) +**命令描述**:服务端对对话会话结束请求的应答,确认会话已结束 + +**消息格式**: +```json +{ + "deviceId": "设备ID", + "timestamp": 1640995301, + "messageId": "消息ID", + "command": "ChatSessionEndAck", + "data": { + "sessionId": "对话会话ID", + "chatId": "请求ID" + } +} +``` + +**消息示例**: +```json +{ + "deviceId": "DEVICE_001", + "timestamp": 1640995301, + "messageId": "session_end_ack_001", + "command": "ChatSessionEndAck", + "data": { + "sessionId": "a1b2c3d4e5f67890", + "chatId": "chat_67890" + } +} +``` + +**data字段说明**: + +| 字段名 | 类型 | 描述 | +|--------|------|------| +| sessionId | String | 对话会话ID,与请求中的sessionId对应 | +| chatId | String | 请求ID,与请求中的chatId对应 | + +**协议说明**: +- 客户端收到此应答后,应停止使用该sessionId +- 会话结束后,该sessionId将不再有效 +- 如果需要继续对话,需要重新调用ChatSessionStart获取新的sessionId + ## 7. 表情管理接口 -- 2.17.1