return ERRCODE_SUCC;
}
+/* AT^LN_WS_SEND_SLEEP_MODE_INQUIRE - 发送睡眠模式询问请求 */
+static uint32_t ln_ws_send_sleep_mode_inquire_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+ LN_UNUSED(strCommonCmd);
+
+ const char *intention = "询问睡眠模式"; // 默认意图
+
+ // 解析参数
+ if (para != NULL && paraLen > 0) {
+ uint8_t argv[LN_MAX_ARGC][LN_MAX_ARGV_LEN] = {0};
+ uint32_t argc = 0;
+
+ if (ConvertCmdToParam(para, paraLen, argv, &argc) == LN_SUCCESS) {
+ if (argc >= 1) {
+ intention = (const char *)argv[0];
+ }
+ }
+ }
+
+ printf("[LN][WS_SEND_SLEEP_MODE_INQUIRE] Sending sleep mode inquire with intention: %s\n", intention);
+
+ int ret = ln_ws_send_sleep_mode_inquire(intention);
+ if (ret != 0)
+ {
+ printf("[LN][WS_SEND_SLEEP_MODE_INQUIRE] failed: %d\n", ret);
+ return ERRCODE_FAIL;
+ }
+ printf("[LN][WS_SEND_SLEEP_MODE_INQUIRE] success\n");
+ return ERRCODE_SUCC;
+}
+
/* AT^LN_WS_SLEEP */
static uint32_t ln_ws_sleep_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
{
printf("[LN][WS_AUDIO_INIT] Initializing WebSocket audio...\n");
- //ln_ws_audio_init();
+ ln_ws_audio_init();
printf("[LN][WS_AUDIO_INIT] WebSocket audio initialized successfully\n");
return ERRCODE_SUCC;
{(char *)"AT^LN_WS_END_AUDIO_CHAT", ln_ws_end_audio_chat_at, (char *)"结束音频聊天: AT^LN_WS_END_AUDIO_CHAT"},
{(char *)"AT^LN_WS_SEND_RANDOM_STORY", ln_ws_send_random_story_at, (char *)"发送随机故事请求: AT^LN_WS_SEND_RANDOM_STORY[=storyTheme]"},
{(char *)"AT^LN_WS_SEND_VOICE_CHAT_INTERRUPT", ln_ws_send_voice_chat_interrupt_at, (char *)"发送语音聊天打断请求: AT^LN_WS_SEND_VOICE_CHAT_INTERRUPT[=reason]"},
+ {(char *)"AT^LN_WS_SEND_SLEEP_MODE_INQUIRE", ln_ws_send_sleep_mode_inquire_at, (char *)"发送睡眠模式询问请求: AT^LN_WS_SEND_SLEEP_MODE_INQUIRE[=<intention>]"},
{(char *)"AT^LN_WS_AUDIO_INIT", ln_ws_audio_init_at, (char *)"初始化WebSocket音频: AT^LN_WS_AUDIO_INIT"},
{(char *)"AT^LN_WS_AUDIO_DEINIT", ln_ws_audio_deinit_at, (char *)"反初始化WebSocket音频: AT^LN_WS_AUDIO_DEINIT"},
return WS_CMD_SLEEP_MODE_START;
} else if (strcmp(command_str, "SleepModeEnd") == 0) {
return WS_CMD_SLEEP_MODE_END;
+ } else if (strcmp(command_str, "SleepModeInquire") == 0) {
+ return WS_CMD_SLEEP_MODE_INQUIRE;
} else if (strcmp(command_str, "DeviceBind") == 0) {
return WS_CMD_DEVICE_BIND;
} else if (strcmp(command_str, "DeviceUnbind") == 0) {
// "errorCode": null
// }
// }
-
+// {
+// "deviceId": "DEVICE_001",
+// "timestamp": 1640995200,
+// "messageId": "sleep_inquire_001",
+// "command": "SleepModeInquire",
+// "data": {
+// "intention": "START_SLEEP_MODE",
+// "chatId": "chat_12345"
+// }
+// }
// {"deviceId":"860132063148589","timestamp":1760408698,"messageId":"1edfb1fc9d904ceb8ca5579241aee1ee","command":"VoiceChatResponse","data":{"finished":false,"chatId":"chat_1760408691_1125307275","data":{"audioDuration":1583,"audioUrl":"http://ambybox-api.test.leiniao.com/ambybox-device-api/file/933515348189_20251014102458_1760408698051.mp3","textContent":"有什么想聊聊的吗?","intention":"None","npcEmotion":"winking"}}}
static int ln_ws_parse_data_message(const char *json_str, ws_data_msg_t *data_msg)
{
data_msg->text_content, data_msg->audio_url);
}
+ // 解析SleepModeInquire特定字段
+ if (data_msg->command == WS_CMD_SLEEP_MODE_INQUIRE) {
+ cJSON *data_obj = cJSON_GetObjectItem(root, "data");
+ if (data_obj && cJSON_IsObject(data_obj)) {
+ // 解析intention字段,存储到text_content中
+ cJSON *intention = cJSON_GetObjectItem(data_obj, "intention");
+ if (intention && cJSON_IsString(intention) && intention->valuestring) {
+ strncpy(data_msg->text_content, intention->valuestring, sizeof(data_msg->text_content) - 1);
+ data_msg->text_content[sizeof(data_msg->text_content) - 1] = '\0';
+ }
+
+ // 解析chatId字段
+ cJSON *chat_id = cJSON_GetObjectItem(data_obj, "chatId");
+ if (chat_id && cJSON_IsString(chat_id) && chat_id->valuestring) {
+ strncpy(data_msg->chat_id, chat_id->valuestring, sizeof(data_msg->chat_id) - 1);
+ data_msg->chat_id[sizeof(data_msg->chat_id) - 1] = '\0';
+ }
+ }
+
+ LN_WS_DEBUG("SleepModeInquire parsed: intention=%s, chatId=%s\n",
+ data_msg->text_content, data_msg->chat_id);
+ }
+
// 保存原始JSON字符串
data_msg->raw_json = (char*)malloc(strlen(json_str) + 1);
if (data_msg->raw_json) {
return ret;
}
+
+
+// {
+// "deviceId": "设备ID",
+// "timestamp": 1640995200,
+// "messageId": "消息ID",
+// "command": "SleepModeInquire",
+// "data": {
+// "intention": "用户意图",
+// "chatId": "对话ID,用于标识本次询问"
+// }
+// }
+
+/* 发送睡眠模式询问请求 */
+int ln_ws_send_sleep_mode_inquire(const char *intention)
+{
+ // 检查音频是否已初始化
+ if (!g_audio_initialized) {
+ LN_WS_ERROR("Audio not initialized, please call ln_ws_audio_init() first\n");
+ return -1;
+ }
+
+ if (!intention) {
+ LN_WS_ERROR("Invalid intention parameter\n");
+ return -1;
+ }
+
+ if (g_ws_connected != WS_STATE_CONNECTED) {
+ LN_WS_WARN("Cannot send sleep mode inquire, connection state: %d\n", g_ws_connected);
+ return -1;
+ }
+
+ // 生成聊天ID
+ char chat_id[64];
+ generate_chat_id(chat_id, sizeof(chat_id));
+
+ // 生成消息ID
+ char message_id[128];
+ generate_message_id(message_id, sizeof(message_id), chat_id, 1);
+
+ // 构建JSON消息
+ cJSON *json = cJSON_CreateObject();
+ if (!json) {
+ LN_WS_ERROR("Failed to create JSON object\n");
+ return -1;
+ }
+
+ // 添加基本字段
+ cJSON_AddStringToObject(json, "deviceId", uapi_ln_get_device_id());
+ cJSON_AddNumberToObject(json, "timestamp", (double)time(NULL));
+ cJSON_AddStringToObject(json, "messageId", message_id);
+ cJSON_AddStringToObject(json, "command", "SleepModeInquire");
+
+ // 添加data字段
+ cJSON *data = cJSON_CreateObject();
+ if (!data) {
+ LN_WS_ERROR("Failed to create data JSON object\n");
+ cJSON_Delete(json);
+ return -1;
+ }
+
+ cJSON_AddStringToObject(data, "intention", intention);
+ cJSON_AddStringToObject(data, "chatId", chat_id);
+ cJSON_AddItemToObject(json, "data", data);
+
+ // 转换为字符串
+ char *json_string = cJSON_Print(json);
+ if (!json_string) {
+ LN_WS_ERROR("Failed to convert JSON to string\n");
+ cJSON_Delete(json);
+ return -1;
+ }
+
+ LN_WS_INFO("Sending SleepModeInquire: %s\n", json_string);
+
+ // 发送消息
+ int ret = uapi_ws_send_text(json_string);
+
+ // 清理资源
+ cJSON_free(json_string);
+ cJSON_Delete(json);
+
+ if (ret == 0) {
+ LN_WS_DEBUG("SleepModeInquire sent successfully\n");
+ } else {
+ LN_WS_ERROR("Failed to send SleepModeInquire\n");
+ }
+
+ return ret;
+}
\ No newline at end of file