fix: add email alerts for transcription module errors
This commit is contained in:
@@ -23,8 +23,38 @@ from utils.texts import (
|
|||||||
# 🔌 Импортируем централизованную функцию сбора статистики из main
|
# 🔌 Импортируем централизованную функцию сбора статистики из main
|
||||||
from utils.stats_logger import log_menu_stats
|
from utils.stats_logger import log_menu_stats
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
# =========================================================
|
||||||
router = Router()
|
# СИСТЕМА ОТПРАВКИ ОШИБОК НА ПОЧТУ
|
||||||
|
# =========================================================
|
||||||
|
global _last_transcription_email_time
|
||||||
|
_last_transcription_email_time = 0.0
|
||||||
|
|
||||||
|
def _transcription_log_and_notify_email(action: str, error_details: str):
|
||||||
|
global _last_transcription_email_time
|
||||||
|
current_time = time.time()
|
||||||
|
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
|
if current_time - _last_transcription_email_time < 10.0:
|
||||||
|
return
|
||||||
|
_last_transcription_email_time = current_time
|
||||||
|
|
||||||
|
try:
|
||||||
|
import smtplib
|
||||||
|
from email.mime.text import MIMEText
|
||||||
|
msg = MIMEMultipart()
|
||||||
|
msg['From'] = str(getattr(config.config, 'DEFAULT_EMAIL_FROM', 'bot@noreply.com'))
|
||||||
|
to_emails = getattr(config.config, 'ALERTS_SUPPORT_EMAILS', ['admin@example.com'])
|
||||||
|
msg['To'] = ', '.join(to_emails) if isinstance(to_emails, list) else str(to_emails)
|
||||||
|
msg['Subject'] = f'TrueConf Bot Error: Транскрипция - {action}'
|
||||||
|
body = f'Обнаружена ошибка в транскрипции.\nВремя: {timestamp}\nДействие: {action}\nДетали:\n{error_details}'
|
||||||
|
msg.attach(MIMEText(body, 'plain', 'utf-8'))
|
||||||
|
with smtplib.SMTP(getattr(config.config, 'SMTP_SERVER', 'localhost'), int(getattr(config.config, 'SMTP_PORT', 25))) as server:
|
||||||
|
server.send_message(msg)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
import time
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
# ✅ Полный список разрешенных расширений (Аудио, Видео, Проф. форматы)
|
# ✅ Полный список разрешенных расширений (Аудио, Видео, Проф. форматы)
|
||||||
ALLOWED_EXTENSIONS = [
|
ALLOWED_EXTENSIONS = [
|
||||||
@@ -50,6 +80,7 @@ def get_user_email_sync(login: str) -> str:
|
|||||||
return str(entries[0].mail.value)
|
return str(entries[0].mail.value)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Ошибка поиска email в AD: {e}")
|
logger.error(f"Ошибка поиска email в AD: {e}")
|
||||||
|
_transcription_log_and_notify_email("Поиск email в AD", str(e))
|
||||||
return DEFAULT_REQUESTER
|
return DEFAULT_REQUESTER
|
||||||
|
|
||||||
@router.message()
|
@router.message()
|
||||||
@@ -114,13 +145,16 @@ async def transcription_handler(msg: Message):
|
|||||||
log_menu_stats(user_id, "Speech-to-Text", f"Отправка встречи на расшифровку ({ext})")
|
log_menu_stats(user_id, "Speech-to-Text", f"Отправка встречи на расшифровку ({ext})")
|
||||||
await msg.answer(transcription_success_received(user_email), parse_mode="html")
|
await msg.answer(transcription_success_received(user_email), parse_mode="html")
|
||||||
else:
|
else:
|
||||||
|
_transcription_log_and_notify_email(f"API транскрипции вернул статус {response.status_code}", str(response.text[:500]))
|
||||||
await msg.answer(system_error_text(EMOJI_DIGITS), parse_mode="html")
|
await msg.answer(system_error_text(EMOJI_DIGITS), parse_mode="html")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Transcription Upload Error: {e}")
|
logger.error(f"Transcription Upload Error: {e}")
|
||||||
|
_transcription_log_and_notify_email("Загрузка/отправка файла на транскрипцию", str(e))
|
||||||
await msg.answer(system_error_text(EMOJI_DIGITS), parse_mode="html")
|
await msg.answer(system_error_text(EMOJI_DIGITS), parse_mode="html")
|
||||||
return
|
return
|
||||||
|
|
||||||
# --- ЗАГЛУШКА НА НЕИЗВЕСТНЫЙ ТЕКСТ / СТАНДАРТНАЯ ОШИБКА ВВОДА ---
|
# --- ЗАГЛУШКА НА НЕИЗВЕСТНЫЙ ТЕКСТ / СТАНДАРТНАЯ ОШИБКА ВВОДА ---
|
||||||
await msg.answer(UNKNOWN_MAIN_CMD_TEXT, parse_mode="html")
|
await msg.answer(UNKNOWN_MAIN_CMD_TEXT, parse_mode="html")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user