fix(telegram): 修正 approval_id UUID 轉換錯誤 — 支援 INC-xxx 格式
All checks were successful
CD Pipeline / build-and-deploy (push) Successful in 12m24s
All checks were successful
CD Pipeline / build-and-deploy (push) Successful in 12m24s
_execute_approval_action 用 UUID(approval_id) 但 approval_id 是 INC-xxx, 導致 'badly formed hexadecimal UUID string' 錯誤,簽核無法執行。 修正: 先嘗試 UUID 轉換,失敗則用 incident_id 查出對應的 pending approval UUID。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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 中處理
|
||||
|
||||
Reference in New Issue
Block a user