From ccffaa5f3ede23e22062575b46ac9ec6f4e850bb Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 4 May 2026 14:11:32 +0800 Subject: [PATCH] =?UTF-8?q?fix(telegram):=20=E8=A3=9C=20send=5Ftext=20?= =?UTF-8?q?=E5=85=AC=E9=96=8B=E6=96=B9=E6=B3=95=20=E2=80=94=20=E4=BF=AE?= =?UTF-8?q?=E5=BE=A9=20drift=5Fadopt=5Ftelegram=5Ffailed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit drift_adopt_service / drift_remediator / runbook_generator / signoz_webhook 均呼叫 tg.send_text(),但 TelegramGateway 缺少此公開方法, 導致每次呼叫拋出 AttributeError。 新增 send_text() 委派至 _send_request('sendMessage'), 預設 chat_id = alert_chat_id(SRE 群組),支援 HTML parse_mode。 不動任何呼叫方,不改 dedup / nonce 邏輯。 Co-Authored-By: Claude Sonnet 4.6 --- apps/api/src/services/telegram_gateway.py | 35 +++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/apps/api/src/services/telegram_gateway.py b/apps/api/src/services/telegram_gateway.py index 17e3fcd2..bcb6ba98 100644 --- a/apps/api/src/services/telegram_gateway.py +++ b/apps/api/src/services/telegram_gateway.py @@ -4961,6 +4961,41 @@ class TelegramGateway: payload["reply_markup"] = reply_markup return await self._send_request("sendMessage", payload) + # ========================================================================= + # 2026-05-04 Claude Sonnet 4.6: send_text 公開 wrapper(修復 drift_adopt_telegram_failed) + # ========================================================================= + + async def send_text( + self, + text: str, + chat_id: int | str | None = None, + parse_mode: str = "HTML", + disable_web_page_preview: bool = True, + ) -> dict: + """ + 公開 send_text wrapper — 委派至 _send_request('sendMessage', ...) + + 給 drift_adopt_service / drift_remediator / runbook_generator / + signoz_webhook 等服務使用的通用純文字送出方法。 + 預設送往 alert_chat_id(SRE 群組)。 + + Args: + text: 訊息內容(最多 4096 字元) + chat_id: 目標 chat ID,None 時使用 alert_chat_id + parse_mode: 解析模式(預設 HTML) + disable_web_page_preview: 是否關閉網頁預覽 + + Returns: + dict: Telegram API 回應 + """ + payload: dict = { + "chat_id": chat_id or self.alert_chat_id, + "text": text[:4096], + "parse_mode": parse_mode, + "disable_web_page_preview": disable_web_page_preview, + } + return await self._send_request("sendMessage", payload) + # ========================================================================= # 2026-04-24 Claude Sonnet 4.6 (ADR-095 WS4): Hermes NL 回覆 # =========================================================================