From 659c470eba542383987aad227b7f918100f131fa Mon Sep 17 00:00:00 2001
From: wangzhibo <wangzhibo@shsening.com>
Date: 星期五, 11 九月 2026 15:09:05 +0800
Subject: [PATCH] 小智终端 5种 场景模式 OK

---
 xiaozhi-esp32-server/main/xiaozhi-server/config/manage_api_client.py |   46 +++++++++++++++++++++++++++++++++++-----------
 1 files changed, 35 insertions(+), 11 deletions(-)

diff --git a/xiaozhi-esp32-server/main/xiaozhi-server/config/manage_api_client.py b/xiaozhi-esp32-server/main/xiaozhi-server/config/manage_api_client.py
index 8eb2da2..002c5cb 100644
--- a/xiaozhi-esp32-server/main/xiaozhi-server/config/manage_api_client.py
+++ b/xiaozhi-esp32-server/main/xiaozhi-server/config/manage_api_client.py
@@ -221,31 +221,55 @@
 
 
 async def report(
-    mac_address: str, session_id: str, chat_type: int, content: str, audio, report_time
+    mac_address: str, session_id: str, chat_type: int, content: str, audio, report_time,
+    task_instance_id: str = None, step_index: int = None,
 ) -> Optional[Dict]:
     """寮傛鑱婂ぉ璁板綍涓婃姤"""
     if not content or not ManageApiClient._instance:
         return None
     try:
+        payload = {
+            "macAddress": mac_address,
+            "sessionId": session_id,
+            "chatType": chat_type,
+            "content": content,
+            "reportTime": report_time,
+            "audioBase64": (
+                base64.b64encode(audio).decode("utf-8") if audio else None
+            ),
+        }
+        if task_instance_id:
+            payload["taskInstanceId"] = task_instance_id
+        if step_index is not None:
+            payload["stepIndex"] = step_index
         return await ManageApiClient._instance._execute_async_request(
             "POST",
             f"/agent/chat-history/report",
-            json={
-                "macAddress": mac_address,
-                "sessionId": session_id,
-                "chatType": chat_type,
-                "content": content,
-                "reportTime": report_time,
-                "audioBase64": (
-                    base64.b64encode(audio).decode("utf-8") if audio else None
-                ),
-            },
+            json=payload,
         )
     except Exception as e:
         print(f"TTS涓婃姤澶辫触: {e}")
         return None
 
 
+async def upsert_task_instance(payload: Dict) -> Optional[Dict]:
+    """涓婃姤 TaskSession 鍏ㄦ枃銆傚け璐ヨ繑鍥� None锛屼笉鎶涚粰璇煶鐑矾寰勩�傛湭閰嶇疆绠$悊绔涓烘垚鍔熴��"""
+    if not payload or not ManageApiClient._instance:
+        return {"skipped": True}
+    instance_id = payload.get("task_session_id") or ""
+    if not instance_id:
+        return {"skipped": True}
+    try:
+        return await ManageApiClient._instance._async_request(
+            "PUT",
+            f"/task/instance/{instance_id}",
+            json=payload,
+        )
+    except Exception as e:
+        print(f"TaskInstance 涓婃姤澶辫触: {e}")
+        return None
+
+
 async def lookup_address_book(caller_mac: str, nickname: str) -> Optional[Dict]:
     """鏍规嵁鏄电О鏌ユ壘鐩爣璁惧"""
     if not ManageApiClient._instance:

--
Gitblit v1.9.1