Initial commit: Message Gateway project

- FastAPI приложение для отправки мониторинговых алертов в мессенджеры
- Поддержка Telegram и MAX/VK
- Интеграция с Grafana, Zabbix, AlertManager
- Автоматическое создание тикетов в Jira
- Управление группами мессенджеров через API
- Декораторы для авторизации и скрытия эндпоинтов
- Подробная документация в папке docs/

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
2025-11-12 20:25:11 +03:00
commit b90def35ed
72 changed files with 10609 additions and 0 deletions

54
docs/messaging.md Normal file
View File

@@ -0,0 +1,54 @@
# Отправка сообщений
## Как работает отправка
1. **Получение алерта:**
- Система мониторинга (Grafana, Zabbix, AlertManager) отправляет webhook на эндпоинт Message Gateway
- Message Gateway валидирует данные алерта через Pydantic модели
- Увеличивается счетчик полученных сообщений
2. **Обработка алерта:**
- Проверяются стоп-слова (если алерт заблокирован, сообщение не отправляется)
- Загружается конфигурация группы из `config/groups.json`
- Определяется мессенджер (Telegram, MAX/VK) из конфигурации группы или параметра запроса
3. **Формирование сообщения:**
- Загружается шаблон сообщения из `templates/`
- Шаблон рендерится с данными алерта через Jinja2
- Формируются кнопки для перехода к Grafana/Prometheus/Jira
4. **Создание Jira тикета (опционально):**
- Если Jira включена и выполнены условия, создается тикет в Jira
- Загружается маппинг из `config/jira_mapping.json`
- Находится подходящий маппинг на основе условий алерта
- Создается тикет с описанием из шаблона `jira_common.tmpl`
- Добавляется кнопка для перехода к тикету в Jira
5. **Отправка в мессенджер:**
- Создается клиент мессенджера через `MessengerFactory`
- Проверяется поддержка тредов (для MAX/VK треды не поддерживаются)
- Сообщение отправляется в мессенджер через клиент
- Увеличивается счетчик отправленных сообщений
## Поддержка мессенджеров
### Telegram
- ✅ Полная поддержка текстовых сообщений
- ✅ Поддержка медиа (фото, видео, аудио, документы)
- ✅ Поддержка тредов (threads)
- ✅ Поддержка кнопок (InlineKeyboardMarkup)
- ✅ Поддержка HTML и Markdown форматирования
### MAX/VK
- ✅ Поддержка текстовых сообщений
- ✅ Поддержка медиа (фото, видео, аудио, документы)
- ❌ Треды не поддерживаются (thread_id игнорируется)
- ✅ Поддержка кнопок (в формате VK API)
- ✅ Конвертация HTML в формат VK
**Различия в отправке:**
- Telegram использует Bot API, MAX/VK использует VK API
- Telegram поддерживает треды, MAX/VK - нет
- Формат кнопок различается (Telegram - InlineKeyboardMarkup, MAX/VK - JSON)
- HTML форматирование конвертируется в формат VK для MAX/VK