diff --git a/apps/api/src/services/drift_narrator_service.py b/apps/api/src/services/drift_narrator_service.py index 8bfc6634..5db010d4 100644 --- a/apps/api/src/services/drift_narrator_service.py +++ b/apps/api/src/services/drift_narrator_service.py @@ -165,7 +165,25 @@ class DriftNarratorService: text, _provider, success = await openclaw.call(prompt) if success and text and text.strip(): - return text.strip() + # 2026-04-17 ogt + Claude Sonnet 4.6: 修復 JSON 裸奔問題 + # 根因:openclaw.call() 經 NEMOTRON 路由後強制回傳 JSON(NEMOTRON_SYSTEM_PROMPT 要求) + # 但此處需要純文字敘述 → JSON 被直接吐到 Telegram
 區塊
+                # 修復:嘗試解析 JSON,優先取 description;否則視為純文字使用
+                import json as _json
+                _raw = text.strip()
+                try:
+                    _parsed = _json.loads(_raw)
+                    if isinstance(_parsed, dict):
+                        narrative = (
+                            _parsed.get("description")
+                            or _parsed.get("action_title")
+                            or _parsed.get("reasoning")
+                            or _raw
+                        )
+                        return str(narrative).strip()
+                except (_json.JSONDecodeError, ValueError):
+                    pass
+                return _raw
 
             logger.warning("drift_narrator_openclaw_failed", provider=_provider)