diff --git a/apiApp/routers/ai_conclusion_router.py b/apiApp/routers/ai_conclusion_router.py index eb5341c..f10bef5 100644 --- a/apiApp/routers/ai_conclusion_router.py +++ b/apiApp/routers/ai_conclusion_router.py @@ -228,15 +228,39 @@ async def mark_recognition_failed(request: RecognitionFailedRequest, db: Session """ audio = db.query(Audio).filter(Audio.filename == request.filename).first() if not audio: + logger.warning(f"⚠️ Попытка пометить failed для несуществующего аудио: {request.filename}, error={request.error}") raise HTTPException(status_code=404, detail=f"Файл не найден: {request.filename}") audio.recognition_status = "failed" audio.recognition_last_error = request.error db.commit() + logger.warning(f"❌ Распознавание помечено failed для {request.filename}. Причина: {request.error}") + + # Отправляем вебхук об ошибке в Calls_WEB_Client_main, чтобы синхронизировать pipeline_status + try: + if (audio.sourse or "").lower() != "external": + failed_webhook_payload = { + "audio_id": str(audio.id), + "filename": request.filename, + "status": "failed", + "error": request.error + } + webhook_url = f"{CALLS_WEB_CLIENT_URL}/api/transcription/failed" + logger.info(f"📤 Отправка failed-webhook в Calls_WEB_Client_main: {webhook_url}") + requests.post( + webhook_url, + json=failed_webhook_payload, + headers={"X-Webhook-Key": WEBHOOK_API_KEY}, + timeout=10 + ) + except Exception as e: + logger.error(f"❌ Ошибка отправки failed-webhook в Calls_WEB: {e}") + return AiConclusionResponse( success=True, message="Recognition marked as failed", audio_id=str(audio.id), filename=audio.filename ) +