уточнение диагностики отправки сообщения
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2025-09-29 23:11:00 +03:00
parent a5d3b82092
commit 9a98cffe48
3 changed files with 240 additions and 27 deletions
+14 -12
View File
@@ -762,13 +762,15 @@ def send_direct_message(user_id, message_text):
# Определяем тип ошибки для более информативного ответа
if e.error_code == 403:
return False, "Пользователь заблокировал бота или не начал с ним диалог"
return False, f"Пользователь {user_id} заблокировал бота или не начал с ним диалог. Попросите пользователя отправить команду /start боту."
elif e.error_code == 400:
return False, "Неверный ID пользователя"
return False, f"Неверный ID пользователя: {user_id}. Проверьте правильность ID."
elif e.error_code == 429:
return False, "Превышен лимит отправки сообщений"
return False, f"Превышен лимит отправки сообщений для пользователя {user_id}. Попробуйте позже."
elif e.error_code == 404:
return False, f"Пользователь {user_id} не найден. Проверьте правильность ID."
else:
return False, f"Ошибка Telegram: {e.description}"
return False, f"Ошибка Telegram API (код {e.error_code}): {e.description}"
except Exception as e:
error_msg = f"Неожиданная ошибка при отправке сообщения: {e}"
@@ -1285,42 +1287,42 @@ def send_message_api():
if api_token != WEBHOOK_SECRET:
logger.warning("Неверный API токен!")
log_event("security", "system", message="Попытка доступа к API с неверным токеном")
return {"success": False, "error": "Unauthorized"}, 401
return {"success": False, "error": "Unauthorized", "error_code": "INVALID_TOKEN"}, 401
try:
data = request.get_json()
if not data:
return {"success": False, "error": "Отсутствуют данные"}, 400
return {"success": False, "error": "Отсутствуют данные", "error_code": "NO_DATA"}, 400
user_id = data.get('user_id')
message_text = data.get('message')
if not user_id:
return {"success": False, "error": "Не указан user_id"}, 400
return {"success": False, "error": "Не указан user_id", "error_code": "NO_USER_ID"}, 400
if not message_text:
return {"success": False, "error": "Не указан текст сообщения"}, 400
return {"success": False, "error": "Не указан текст сообщения", "error_code": "NO_MESSAGE"}, 400
# Проверяем, что user_id является числом
try:
user_id = int(user_id)
except (ValueError, TypeError):
return {"success": False, "error": "user_id должен быть числом"}, 400
return {"success": False, "error": "user_id должен быть числом", "error_code": "INVALID_USER_ID"}, 400
# Отправляем сообщение
success, result_message = send_direct_message(user_id, message_text)
if success:
return {"success": True, "message": result_message}, 200
return {"success": True, "message": result_message, "user_id": user_id}, 200
else:
return {"success": False, "error": result_message}, 400
return {"success": False, "error": result_message, "user_id": user_id, "error_code": "TELEGRAM_ERROR"}, 400
except Exception as e:
error_msg = f"Ошибка в API отправки сообщений: {e}"
logger.error(error_msg)
log_event("error", "system", message=error_msg)
return {"success": False, "error": "Внутренняя ошибка сервера"}, 500
return {"success": False, "error": "Внутренняя ошибка сервера", "error_code": "INTERNAL_ERROR"}, 500
if __name__ == '__main__':
# Логируем запуск бота