"""
Модели данных для отправки простых сообщений в Telegram.
Автор: Сергей Антропов
Сайт: https://devops.org.ru
"""
from typing import Optional
from pydantic import BaseModel, Field
class SendMessageRequest(BaseModel):
"""Запрос на отправку текстового сообщения."""
tg_group: str = Field(..., description="Имя группы Telegram из конфигурации", examples=["monitoring", "alerts", "devops"])
tg_thread_id: int = Field(0, description="ID треда в группе Telegram (0 для основной группы)", examples=[0, 123, 456])
text: str = Field(..., description="Текст сообщения", examples=["Привет! Это тестовое сообщение.", "Важное уведомление\n\nСистема работает нормально."])
parse_mode: Optional[str] = Field("HTML", description="Режим парсинга (HTML, Markdown, MarkdownV2)", examples=["HTML", "Markdown", "MarkdownV2"])
disable_web_page_preview: bool = Field(True, description="Отключить превью ссылок", examples=[True, False])
model_config = {
"json_schema_extra": {
"examples": [
{
"tg_group": "monitoring",
"tg_thread_id": 0,
"text": "Привет! Это тестовое сообщение.",
"parse_mode": "HTML",
"disable_web_page_preview": True
},
{
"tg_group": "alerts",
"tg_thread_id": 123,
"text": "Критическое уведомление\n\nСистема недоступна!\n\nВремя: 2024-02-08 16:49:44",
"parse_mode": "HTML",
"disable_web_page_preview": False
},
{
"tg_group": "monitoring",
"tg_thread_id": 0,
"text": "**Важное уведомление**\n\nСистема работает нормально.\n\n[Подробнее](https://example.com)",
"parse_mode": "Markdown",
"disable_web_page_preview": True
}
]
}
}
class SendPhotoRequest(BaseModel):
"""Запрос на отправку фото."""
tg_group: str = Field(..., description="Имя группы Telegram из конфигурации", examples=["monitoring", "alerts"])
tg_thread_id: int = Field(0, description="ID треда в группе Telegram (0 для основной группы)", examples=[0, 123])
photo: str = Field(..., description="URL фото или путь к файлу (поддерживается автоматическая загрузка с URL)", examples=["https://example.com/image.jpg", "https://grafana.example.com/render/dashboard-solo?panelId=1&width=1000&height=500"])
caption: Optional[str] = Field(None, description="Подпись к фото", examples=["График производительности", "График CPU\n\nВремя: 2024-02-08 16:49:44"])
parse_mode: Optional[str] = Field("HTML", description="Режим парсинга подписи (HTML, Markdown, MarkdownV2)", examples=["HTML", "Markdown"])
model_config = {
"json_schema_extra": {
"examples": [
{
"tg_group": "monitoring",
"tg_thread_id": 0,
"photo": "https://example.com/image.jpg",
"caption": "Описание фото",
"parse_mode": "HTML"
},
{
"tg_group": "alerts",
"tg_thread_id": 123,
"photo": "https://grafana.example.com/render/dashboard-solo?panelId=1&width=1000&height=500",
"caption": "График CPU\n\nВремя: 2024-02-08 16:49:44",
"parse_mode": "HTML"
}
]
}
}
class SendVideoRequest(BaseModel):
"""Запрос на отправку видео."""
tg_group: str = Field(..., description="Имя группы Telegram из конфигурации", examples=["monitoring", "alerts"])
tg_thread_id: int = Field(0, description="ID треда в группе Telegram (0 для основной группы)", examples=[0, 123])
video: str = Field(..., description="URL видео или путь к файлу (поддерживается автоматическая загрузка с URL)", examples=["https://example.com/video.mp4", "https://example.com/recording.webm"])
caption: Optional[str] = Field(None, description="Подпись к видео", examples=["Запись экрана", "Запись работы системы\n\nДлительность: 60 сек"])
parse_mode: Optional[str] = Field("HTML", description="Режим парсинга подписи (HTML, Markdown, MarkdownV2)", examples=["HTML", "Markdown"])
duration: Optional[int] = Field(None, description="Длительность видео в секундах", examples=[60, 120, 300])
width: Optional[int] = Field(None, description="Ширина видео в пикселях", examples=[1280, 1920])
height: Optional[int] = Field(None, description="Высота видео в пикселях", examples=[720, 1080])
model_config = {
"json_schema_extra": {
"examples": [
{
"tg_group": "monitoring",
"tg_thread_id": 0,
"video": "https://example.com/video.mp4",
"caption": "Описание видео",
"parse_mode": "HTML",
"duration": 60,
"width": 1280,
"height": 720
},
{
"tg_group": "alerts",
"tg_thread_id": 123,
"video": "https://example.com/recording.webm",
"caption": "Запись работы системы\n\nДлительность: 60 сек",
"parse_mode": "HTML",
"duration": 60,
"width": 1920,
"height": 1080
}
]
}
}
class SendAudioRequest(BaseModel):
"""Запрос на отправку аудио."""
tg_group: str = Field(..., description="Имя группы Telegram из конфигурации", examples=["monitoring", "alerts"])
tg_thread_id: int = Field(0, description="ID треда в группе Telegram (0 для основной группы)", examples=[0, 123])
audio: str = Field(..., description="URL аудио файла или путь к файлу (поддерживается автоматическая загрузка с URL)", examples=["https://example.com/audio.mp3", "https://example.com/notification.ogg"])
caption: Optional[str] = Field(None, description="Подпись к аудио", examples=["Аудио уведомление", "Аудио запись\n\nДлительность: 3 мин"])
parse_mode: Optional[str] = Field("HTML", description="Режим парсинга подписи (HTML, Markdown, MarkdownV2)", examples=["HTML", "Markdown"])
duration: Optional[int] = Field(None, description="Длительность аудио в секундах", examples=[180, 300])
performer: Optional[str] = Field(None, description="Исполнитель (для музыкальных файлов)", examples=["Artist Name", "System Notification"])
title: Optional[str] = Field(None, description="Название трека (для музыкальных файлов)", examples=["Song Title", "Alert Notification"])
model_config = {
"json_schema_extra": {
"examples": [
{
"tg_group": "monitoring",
"tg_thread_id": 0,
"audio": "https://example.com/audio.mp3",
"caption": "Описание аудио",
"parse_mode": "HTML",
"duration": 180,
"performer": "Artist Name",
"title": "Song Title"
},
{
"tg_group": "alerts",
"tg_thread_id": 123,
"audio": "https://example.com/notification.ogg",
"caption": "Аудио уведомление\n\nСистема работает нормально",
"parse_mode": "HTML",
"duration": 30,
"performer": "System Notification",
"title": "Alert Notification"
}
]
}
}
class SendDocumentRequest(BaseModel):
"""Запрос на отправку документа."""
tg_group: str = Field(..., description="Имя группы Telegram из конфигурации", examples=["monitoring", "alerts"])
tg_thread_id: int = Field(0, description="ID треда в группе Telegram (0 для основной группы)", examples=[0, 123])
document: str = Field(..., description="URL документа или путь к файлу (поддерживается автоматическая загрузка с URL)", examples=["https://example.com/file.pdf", "https://example.com/report.xlsx"])
caption: Optional[str] = Field(None, description="Подпись к документу", examples=["Отчет за неделю", "Отчет\n\nДата: 2024-02-08"])
parse_mode: Optional[str] = Field("HTML", description="Режим парсинга подписи (HTML, Markdown, MarkdownV2)", examples=["HTML", "Markdown"])
filename: Optional[str] = Field(None, description="Имя файла (если не указано, используется имя из URL)", examples=["document.pdf", "report_2024-02-08.xlsx"])
model_config = {
"json_schema_extra": {
"examples": [
{
"tg_group": "monitoring",
"tg_thread_id": 0,
"document": "https://example.com/file.pdf",
"caption": "Описание документа",
"parse_mode": "HTML",
"filename": "document.pdf"
},
{
"tg_group": "alerts",
"tg_thread_id": 123,
"document": "https://example.com/report.xlsx",
"caption": "Отчет за неделю\n\nДата: 2024-02-08",
"parse_mode": "HTML",
"filename": "report_2024-02-08.xlsx"
},
{
"tg_group": "monitoring",
"tg_thread_id": 0,
"document": "https://example.com/logs.txt",
"caption": "Логи системы",
"parse_mode": "HTML",
"filename": "system_logs_2024-02-08.txt"
}
]
}
}