From 27b4d2a76a0860b286af4443cb585864a0526ade Mon Sep 17 00:00:00 2001 From: OG T Date: Wed, 1 Apr 2026 22:50:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(telegram):=20strip=20=20?= =?UTF-8?q?=E4=BD=94=E4=BD=8D=E7=AC=A6=E9=98=B2=E6=AD=A2=20HTML=20parse=20?= =?UTF-8?q?=E9=8C=AF=E8=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OpenClaw 生成的 kubectl_command 含 <受影響服務名稱> 在 Telegram HTML parse mode 下造成 'Can't parse entities' 用 regex strip 所有 <...> 佔位符 Co-Authored-By: Claude Sonnet 4.6 --- apps/api/src/services/decision_manager.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/api/src/services/decision_manager.py b/apps/api/src/services/decision_manager.py index c6dcace02..fd922cd09 100644 --- a/apps/api/src/services/decision_manager.py +++ b/apps/api/src/services/decision_manager.py @@ -97,11 +97,16 @@ async def _push_decision_to_telegram( gateway = get_telegram_gateway() # 從 proposal_data 提取資料 + import re as _re + def _strip_placeholders(s: str) -> str: + """移除 佔位符,避免 Telegram HTML parse 錯誤""" + return _re.sub(r'<[^>]+>', '', s).strip() + target = incident.affected_services[0] if incident.affected_services else "unknown" risk_level = proposal_data.get("risk_level", "medium") - action = proposal_data.get("action", proposal_data.get("kubectl_command", "")) + action = _strip_placeholders(proposal_data.get("action", proposal_data.get("kubectl_command", ""))) description = proposal_data.get("description", "") - reasoning = proposal_data.get("reasoning", "") + reasoning = _strip_placeholders(proposal_data.get("reasoning", "")) confidence = proposal_data.get("confidence", 0.0) # 🔴 預設 0.0 表示未經 AI 分析 source = proposal_data.get("source", "unknown") ai_provider = proposal_data.get("provider", "") # 2026-03-29 ogt: AI 模型來源