This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
# Отправка сообщений через Telegram бота
|
||||
|
||||
## Описание
|
||||
|
||||
В проект добавлена возможность отправки сообщений пользователям Telegram через бота по их ID. Функциональность включает:
|
||||
|
||||
1. **API endpoint** для отправки сообщений из других скриптов
|
||||
2. **Интерфейс в веб-приложении** для отправки сообщений через браузер
|
||||
3. **Обработку ошибок** и логирование всех операций
|
||||
|
||||
## Использование через веб-интерфейс
|
||||
|
||||
В заголовке страницы "Управление постами VK и событиями" добавлены два поля:
|
||||
|
||||
- **ID пользователя** - числовой ID пользователя в Telegram
|
||||
- **Сообщение** - текст сообщения для отправки
|
||||
- **Кнопка "Отправить"** - отправляет сообщение через бота
|
||||
|
||||
### Особенности интерфейса:
|
||||
|
||||
- Поля проверяются на заполненность перед отправкой
|
||||
- ID пользователя проверяется на корректность (должен быть числом)
|
||||
- Поддержка отправки по клавише Enter
|
||||
- Индикатор загрузки во время отправки
|
||||
- Автоматическая очистка полей после успешной отправки
|
||||
|
||||
## Использование через API
|
||||
|
||||
### Endpoint
|
||||
|
||||
```
|
||||
POST /send_message
|
||||
```
|
||||
|
||||
### Параметры запроса
|
||||
|
||||
```json
|
||||
{
|
||||
"user_id": 123456789,
|
||||
"message": "Текст сообщения"
|
||||
}
|
||||
```
|
||||
|
||||
### Ответы
|
||||
|
||||
**Успешная отправка (200):**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "Сообщение отправлено успешно"
|
||||
}
|
||||
```
|
||||
|
||||
**Ошибка (400):**
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"error": "Описание ошибки"
|
||||
}
|
||||
```
|
||||
|
||||
### Пример использования из Python
|
||||
|
||||
```python
|
||||
import requests
|
||||
|
||||
def send_telegram_message(user_id, message):
|
||||
url = "http://localhost:8443/send_message"
|
||||
data = {
|
||||
"user_id": user_id,
|
||||
"message": message
|
||||
}
|
||||
|
||||
response = requests.post(url, json=data)
|
||||
result = response.json()
|
||||
|
||||
if result["success"]:
|
||||
print("Сообщение отправлено успешно!")
|
||||
else:
|
||||
print(f"Ошибка: {result['error']}")
|
||||
```
|
||||
|
||||
### Пример использования из командной строки
|
||||
|
||||
```bash
|
||||
# Используя curl
|
||||
curl -X POST http://localhost:8443/send_message \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"user_id": 123456789, "message": "Привет!"}'
|
||||
|
||||
# Используя примерный скрипт
|
||||
python send_telegram_example.py 123456789 "Привет! Это тестовое сообщение."
|
||||
```
|
||||
|
||||
## Обработка ошибок
|
||||
|
||||
Система обрабатывает следующие типы ошибок:
|
||||
|
||||
1. **403 Forbidden** - Пользователь заблокировал бота или не начал с ним диалог
|
||||
2. **400 Bad Request** - Неверный ID пользователя
|
||||
3. **429 Too Many Requests** - Превышен лимит отправки сообщений
|
||||
4. **Пустое сообщение** - Не указан текст сообщения
|
||||
5. **Неверный формат ID** - user_id не является числом
|
||||
|
||||
Все ошибки логируются в файл логов с указанием типа ошибки и ID пользователя.
|
||||
|
||||
## Логирование
|
||||
|
||||
Все операции отправки сообщений записываются в лог с указанием:
|
||||
|
||||
- Времени операции
|
||||
- ID пользователя
|
||||
- Статуса отправки (успех/ошибка)
|
||||
- Краткого описания ошибки (при наличии)
|
||||
|
||||
Пример записи в логе:
|
||||
```
|
||||
[2024-01-15 10:30:45] [TG_bot] ИНФО: Сообщение отправлено: Привет! Это тестовое сообщение... (Пользователь user_123456789)
|
||||
```
|
||||
|
||||
## Требования
|
||||
|
||||
- Telegram бот должен быть запущен и подключен через webhook
|
||||
- Пользователь должен начать диалог с ботом (отправить команду /start)
|
||||
- Пользователь не должен заблокировать бота
|
||||
|
||||
## Безопасность
|
||||
|
||||
- API endpoint доступен только для POST запросов
|
||||
- Проверка корректности входных данных
|
||||
- Логирование всех попыток отправки для аудита
|
||||
- Обработка ошибок без раскрытия внутренней информации системы
|
||||
Reference in New Issue
Block a user