diff --git a/apps/api/src/services/telegram_gateway.py b/apps/api/src/services/telegram_gateway.py index aded4358..8887dd29 100644 --- a/apps/api/src/services/telegram_gateway.py +++ b/apps/api/src/services/telegram_gateway.py @@ -3456,10 +3456,27 @@ class TelegramGateway: try: service = get_approval_service() + # approval_id 可能是 INC-xxx (incident_id) 格式,需查出真正的 UUID + # 2026-04-06 Claude Code: decision_manager 傳入的是 incident.incident_id + approval_uuid: UUID | None = None + try: + approval_uuid = UUID(approval_id) + except ValueError: + # 非 UUID 格式,嘗試用 incident_id 查出 pending approval + pending_list = await service.get_all_approvals(incident_id=approval_id) + if pending_list: + approval_uuid = UUID(pending_list[0].id) if isinstance(pending_list[0].id, str) else pending_list[0].id + else: + logger.warning( + "telegram_approval_not_found_by_incident", + approval_id=approval_id, + ) + return + if action == "approve": # 2026-03-29 ogt: 正確呼叫 sign_approval (返回 tuple) approval, message, execution_triggered = await service.sign_approval( - approval_id=UUID(approval_id), + approval_id=approval_uuid, signer_id=f"tg_{user_id}", signer_name=username, comment="Telegram 簽核 (Long Polling)", @@ -3473,19 +3490,11 @@ class TelegramGateway: status=approval.status.value, execution_triggered=execution_triggered, ) - print(f"\n{'='*60}") - print("✅ 統帥已授權執行!") - print(f"簽核單: {approval_id}") - print(f"簽核者: @{username} (ID: {user_id})") - print(f"狀態: {approval.status.value}") - print(f"執行觸發: {execution_triggered}") - print(f"時間: {datetime.now(UTC).isoformat()}") - print(f"{'='*60}\n") elif action == "reject": # 2026-03-29 ogt: 正確呼叫 reject_approval (返回 tuple) approval, message = await service.reject_approval( - approval_id=UUID(approval_id), + approval_id=approval_uuid, rejector_id=f"tg_{user_id}", rejector_name=username, reason="Telegram 拒絕 (Long Polling)", @@ -3497,11 +3506,6 @@ class TelegramGateway: approval_id=approval_id, user_id=user_id, ) - print(f"\n{'='*60}") - print("❌ 統帥已拒絕執行!") - print(f"簽核單: {approval_id}") - print(f"拒絕者: @{username}") - print(f"{'='*60}\n") elif action == "tune": # 自動調優已在 handle_callback 中處理