fix: add email alerts for transcription module errors

This commit is contained in:
Денис Кривоченко
2026-07-31 00:37:09 +07:00
parent 4a464911d6
commit 613102d0c9
+36 -2
View File
@@ -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")