and 日程提醒\r
Server->>Device: WebSocket推送<br/>{"command": "ScheduleReminder", "data": {"scheduleName": "...", "reminderContent": "..."}}\r
Device->>Device: 播放提醒内容\r
+ and 哄睡模式询问\r
+ Device->>Device: 识别到哄睡意图\r
+ Device->>Server: WebSocket发送<br/>{"command": "SleepModeInquire", "data": {"intention": "START_SLEEP_MODE", "chatId": "..."}}\r
+ Server->>Server: 生成询问内容\r
+ Server->>Device: WebSocket推送<br/>{"command": "SleepModeInquireAck", "data": {"textContent": "...", "audioUrl": "...", ...}}\r
+ Server->>Device: WebSocket二进制消息<br/>流式发送音频数据\r
+ Device->>Device: 播放询问音频等待用户确认\r
end\r
\r
else Token验证失败\r
}\r
```\r
\r
+#### 哄睡模式询问请求 (SleepModeInquire)\r
+**命令描述**:客户端发送哄睡模式询问请求,用于在识别到哄睡意图后获取二次确认的询问内容\r
+**协议说明**:\r
+- 当语音对话识别到哄睡意图(StartSleepMode)后,设备发送此命令获取询问内容\r
+- 服务端会返回SleepModeInquireAck响应,包含询问的文本和音频\r
+- 设备播放询问内容后,等待用户确认是否真的要进入哄睡模式\r
+- 也支持退出哄睡时的询问场景(EXIT_SLEEP_MODE)\r
+\r
+**消息格式**:\r
+```json\r
+{\r
+ "deviceId": "设备ID",\r
+ "timestamp": 1640995200,\r
+ "messageId": "消息ID",\r
+ "command": "SleepModeInquire",\r
+ "data": {\r
+ "intention": "用户意图",\r
+ "chatId": "对话ID,用于标识本次询问"\r
+ }\r
+}\r
+```\r
+\r
+**消息示例**:\r
+```json\r
+{\r
+ "deviceId": "DEVICE_001",\r
+ "timestamp": 1640995200,\r
+ "messageId": "sleep_inquire_001",\r
+ "command": "SleepModeInquire",\r
+ "data": {\r
+ "intention": "START_SLEEP_MODE",\r
+ "chatId": "chat_12345"\r
+ }\r
+}\r
+```\r
+\r
+**data字段说明**:\r
+\r
+| 字段名 | 类型 | 描述 |\r
+|--------|------|------|\r
+| intention | String | 用户意图,取值:START_SLEEP_MODE(开启哄睡)或 EXIT_SLEEP_MODE(退出哄睡) |\r
+| chatId | String | 对话ID,用于标识本次询问,建议使用UUID |\r
+\r
+**使用场景**:\r
+1. **开启哄睡前确认**:语音对话识别到StartSleepMode意图后,发送此命令获取确认询问\r
+2. **退出哄睡确认**:用户想要退出哄睡模式时,发送此命令获取退出确认询问\r
+\r
+**服务端响应**:\r
+服务端收到哄睡询问请求后,会通过WebSocket推送SleepModeInquireAck消息:\r
+\r
+```json\r
+{\r
+ "deviceId": "DEVICE_001",\r
+ "timestamp": 1640995201,\r
+ "messageId": "sleep_inquire_ack_001",\r
+ "command": "SleepModeInquireAck",\r
+ "data": {\r
+ "intention": "START_SLEEP_MODE",\r
+ "textContent": "你想听故事吗?如果想听,请告诉我你想听什么类型的故事",\r
+ "audioUrl": "https://example.com/audio/sleep_inquire.mp3",\r
+ "audioDuration": 3000,\r
+ "chatId": "chat_12345"\r
+ }\r
+}\r
+```\r
+\r
+**服务端响应data字段说明**:\r
+\r
+| 字段名 | 类型 | 描述 |\r
+|--------|------|------|\r
+| intention | String | 用户意图,与请求中的意图对应 |\r
+| textContent | String | 询问的文本内容 |\r
+| audioUrl | String | 询问音频文件URL |\r
+| audioDuration | Integer | 音频时长,单位:毫秒 |\r
+| chatId | String | 对话ID,与请求中的chatId对应 |\r
+\r
+**音频流传输说明**:\r
+- 除了返回audioUrl外,服务端还会通过WebSocket二进制消息流式发送音频数据\r
+- 音频数据分块发送,每块不超过20KB\r
+- 发送间隔由服务端配置控制\r
+- 设备可以边接收边播放,实现流畅的播放体验\r
+\r
### 客户端应答消息 (ACK Messages)\r
\r
客户端在收到服务端推送的某些命令后,需要发送应答消息(ACK)来确认命令的接收和执行状态。所有 ACK 消息遵循统一的消息格式。\r
\r
**data字段说明**:与语音选择故事响应相同\r
\r
-#### 5. 角色切换 (CharacterChange)\r
+#### 5. 哄睡模式询问响应 (SleepModeInquireAck)\r
+**命令描述**:服务端推送哄睡模式询问响应,返回询问的文本和音频内容\r
+**协议说明**:\r
+- 服务端收到客户端的SleepModeInquire请求后,返回此响应\r
+- 响应包含询问的文本内容和音频URL\r
+- 除了audioUrl外,服务端还会通过WebSocket二进制消息流式发送音频数据\r
+- 音频数据分块发送,每块不超过20KB,间隔发送\r
+\r
+**消息示例**:\r
+```json\r
+{\r
+ "deviceId": "DEVICE_001",\r
+ "timestamp": 1640995201,\r
+ "messageId": "sleep_inquire_ack_001",\r
+ "command": "SleepModeInquireAck",\r
+ "data": {\r
+ "intention": "START_SLEEP_MODE",\r
+ "textContent": "你想听故事吗?如果想听,请告诉我你想听什么类型的故事",\r
+ "audioUrl": "https://example.com/audio/sleep_inquire.mp3",\r
+ "audioDuration": 3000,\r
+ "chatId": "chat_12345"\r
+ }\r
+}\r
+```\r
+\r
+**data字段说明**:\r
+\r
+| 字段名 | 类型 | 描述 |\r
+|--------|------|------|\r
+| intention | String | 用户意图,与请求中的意图对应,取值:START_SLEEP_MODE 或 EXIT_SLEEP_MODE |\r
+| textContent | String | 询问的文本内容 |\r
+| audioUrl | String | 询问音频文件URL |\r
+| audioDuration | Integer | 音频时长,单位:毫秒 |\r
+| chatId | String | 对话ID,与请求中的chatId对应 |\r
+\r
+**音频流传输说明**:\r
+- 在返回此消息后,服务端会立即通过WebSocket二进制消息发送音频流数据\r
+- 音频数据按chatId进行标识,设备端需要根据chatId匹配音频数据\r
+- 音频数据分块传输,每块不超过20KB\r
+- 块与块之间有时间间隔,由服务端配置控制\r
+- 设备端可以边接收边播放,实现流畅的播放体验\r
+- 传输完成后不会有结束标记,设备应根据音频长度或播放完成来判断\r
+\r
+**使用流程**:\r
+1. 设备发送SleepModeInquire请求\r
+2. 服务端返回SleepModeInquireAck响应(包含文本和audioUrl)\r
+3. 服务端开始发送音频二进制数据流\r
+4. 设备接收并播放音频\r
+5. 用户听到询问后,通过语音回复确认\r
+\r
+#### 6. 角色切换 (CharacterChange)\r
**命令描述**:通知设备切换到指定角色\r
**消息示例**:\r
```json\r