diff --git a/apps/api/src/services/telegram_gateway.py b/apps/api/src/services/telegram_gateway.py
index 8e0164fba..5ae30e265 100644
--- a/apps/api/src/services/telegram_gateway.py
+++ b/apps/api/src/services/telegram_gateway.py
@@ -1821,9 +1821,13 @@ class TelegramGateway:
# 2026-04-01 Claude Code (ADR-050 P2)
await self._answer_callback(callback_query_id, action, text="📊 歷史統計傳送中...")
await self._send_incident_history(incident_id)
+ elif action == "reanalyze":
+ # ADR-050 P2: 觸發重診
+ # 2026-04-01 Claude Code (ADR-050 P2): reanalyze button handler
+ await self._answer_callback(callback_query_id, action, text="🔄 重診排程中...")
+ await self._send_reanalyze_result(incident_id)
else:
- # reanalyze: 開發中
- await self._answer_callback(callback_query_id, action, text="🔄 功能開發中")
+ await self._answer_callback(callback_query_id, action, text="⚠️ 未知操作")
return {
"action": action,
@@ -2345,6 +2349,49 @@ class TelegramGateway:
logger.warning("send_incident_history_failed", incident_id=incident_id, error=str(e))
await self.send_notification(f"⚠️ 無法取得歷史統計: {html.escape(str(e)[:100])}")
+ async def _send_reanalyze_result(self, incident_id: str) -> None:
+ """
+ ADR-050 P2: 觸發重診並傳送結果訊息
+
+ 呼叫 IncidentService.trigger_reanalysis(),以新訊息回報排程結果。
+ 不修改原始簽核卡片,避免干擾授權流程。
+
+ 2026-04-01 Claude Code (ADR-050 P2): reanalyze button handler
+ """
+ from src.services.incident_service import get_incident_service
+
+ try:
+ service = get_incident_service()
+ result = await service.trigger_reanalysis(incident_id)
+
+ if result["already_analyzing"]:
+ msg = (
+ f"⏳ 重診進行中\n\n"
+ f"🔖 {html.escape(incident_id)}\n\n"
+ f"{html.escape(result['message'])}"
+ )
+ elif result["triggered"]:
+ msg = (
+ f"🔄 重診已排程\n\n"
+ f"🔖 {html.escape(incident_id)}\n\n"
+ f"✅ {html.escape(result['message'])}\n"
+ f"AI 分析結果將自動更新事件狀態。"
+ )
+ else:
+ msg = (
+ f"⚠️ 重診失敗\n\n"
+ f"🔖 {html.escape(incident_id)}\n\n"
+ f"{html.escape(result['message'])}"
+ )
+
+ await self.send_notification(msg)
+
+ except Exception as e:
+ logger.warning("send_reanalyze_result_failed", incident_id=incident_id, error=str(e))
+ await self.send_notification(
+ f"⚠️ 重診觸發失敗: {html.escape(str(e)[:100])}"
+ )
+
async def send_notification(
self,
text: str,