# Отправка сообщений через Telegram бота ## Описание В проект добавлена возможность отправки сообщений пользователям Telegram через бота по их ID. Функциональность включает: 1. **API endpoint** для отправки сообщений из других скриптов 2. **Интерфейс в веб-приложении** для отправки сообщений через браузер 3. **Обработку ошибок** и логирование всех операций ## Архитектура системы Система состоит из двух основных компонентов: - **Веб-интерфейс** (`db_edit.py`) - работает на порту **5006** (WEBCTRL_PORT) - **Telegram бот** (`tg_mainbot.py`) - работает на порту **5005** (WEBHOOK_PORT) API endpoint `/send_message` находится в Telegram боте, поэтому все запросы должны отправляться на порт **5005**. ### Конфигурация портов Порты настраиваются в файле `.env`: - `WEBHOOK_PORT` - порт для Telegram бота (по умолчанию 5005) - `WEBCTRL_PORT` - порт для веб-интерфейса (по умолчанию 5006) Веб-интерфейс автоматически читает порт бота из переменных окружения и использует его для отправки запросов. ## Использование через веб-интерфейс В заголовке страницы "Управление постами VK и событиями" добавлены два поля: - **ID пользователя** - числовой ID пользователя в Telegram - **Сообщение** - текст сообщения для отправки - **Кнопка "Отправить"** - отправляет сообщение через бота ### Особенности интерфейса: - Поля проверяются на заполненность перед отправкой - ID пользователя проверяется на корректность (должен быть числом) - Поддержка отправки по клавише Enter - Индикатор загрузки во время отправки - Автоматическая очистка полей после успешной отправки ## Использование через API ### Endpoint ``` POST /send_message ``` ### Заголовки запроса ``` Content-Type: application/json X-API-Secret-Token: <секретный_токен> ``` ### Параметры запроса ```json { "user_id": 123456789, "message": "Текст сообщения" } ``` ### Аутентификация API защищен секретным токеном, который передается в заголовке `X-API-Secret-Token`. Токен берется из переменной окружения `WEBHOOK_SECRET`. ### Ответы **Успешная отправка (200):** ```json { "success": true, "message": "Сообщение отправлено успешно" } ``` **Ошибка (400):** ```json { "success": false, "error": "Описание ошибки" } ``` ### Пример использования из Python ```python import requests def send_telegram_message(user_id, message): url = "http://localhost:5005/send_message" data = { "user_id": user_id, "message": message } headers = { 'Content-Type': 'application/json', 'X-API-Secret-Token': 'ваш_секретный_токен' } response = requests.post(url, json=data, headers=headers) result = response.json() if result["success"]: print("Сообщение отправлено успешно!") else: print(f"Ошибка: {result['error']}") ``` ### Пример использования из командной строки ```bash # Используя curl curl -X POST http://localhost:5005/send_message \ -H "Content-Type: application/json" \ -H "X-API-Secret-Token: ваш_секретный_токен" \ -d '{"user_id": 123456789, "message": "Привет!"}' # Используя примерный скрипт python send_telegram_example.py 123456789 "Привет! Это тестовое сообщение." ``` ## Обработка ошибок Система обрабатывает следующие типы ошибок: 1. **401 Unauthorized** - Неверный или отсутствующий API токен 2. **403 Forbidden** - Пользователь заблокировал бота или не начал с ним диалог 3. **400 Bad Request** - Неверный ID пользователя или отсутствующие данные 4. **429 Too Many Requests** - Превышен лимит отправки сообщений 5. **Пустое сообщение** - Не указан текст сообщения 6. **Неверный формат ID** - user_id не является числом Все ошибки логируются в файл логов с указанием типа ошибки и ID пользователя. ## Логирование Все операции отправки сообщений записываются в лог с указанием: - Времени операции - ID пользователя - Статуса отправки (успех/ошибка) - Краткого описания ошибки (при наличии) Пример записи в логе: ``` [2024-01-15 10:30:45] [TG_bot] ИНФО: Сообщение отправлено: Привет! Это тестовое сообщение... (Пользователь user_123456789) ``` ## Требования - Telegram бот должен быть запущен и подключен через webhook - Пользователь должен начать диалог с ботом (отправить команду /start) - Пользователь не должен заблокировать бота ## Безопасность - API endpoint доступен только для POST запросов - Проверка корректности входных данных - Логирование всех попыток отправки для аудита - Обработка ошибок без раскрытия внутренней информации системы