49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
import logging
|
|
|
|
import httpx
|
|
|
|
from app.config import settings
|
|
|
|
logger = logging.getLogger("app.services.telegram")
|
|
|
|
|
|
async def notify_new_order(
|
|
order_id: str,
|
|
client_name: str,
|
|
client_phone: str,
|
|
material_name: str,
|
|
total_rub: float,
|
|
comment: str | None = None,
|
|
) -> None:
|
|
"""Send a notification about a new order to Telegram."""
|
|
logger.info("=== Telegram notification ===")
|
|
logger.info("Order: %s, client: %s, phone: %s, material: %s, total: %.2f RUB",
|
|
order_id, client_name, client_phone, material_name, total_rub)
|
|
|
|
if not settings.TELEGRAM_BOT_TOKEN or not settings.TELEGRAM_CHAT_ID:
|
|
logger.warning("Telegram credentials not configured (token=%s, chat_id=%s), skipping",
|
|
"set" if settings.TELEGRAM_BOT_TOKEN else "empty",
|
|
"set" if settings.TELEGRAM_CHAT_ID else "empty")
|
|
return
|
|
|
|
text = (
|
|
f"\U0001f195 Новый заказ #{order_id}\n"
|
|
f"Клиент: {client_name}\n"
|
|
f"Телефон: {client_phone}\n"
|
|
f"Материал: {material_name}\n"
|
|
f"Сумма: {total_rub} \u20bd\n"
|
|
f"Комментарий: {comment or '\u2014'}"
|
|
)
|
|
|
|
url = f"https://api.telegram.org/bot{settings.TELEGRAM_BOT_TOKEN}/sendMessage"
|
|
logger.debug("Sending to Telegram: chat_id=%s, text_length=%d", settings.TELEGRAM_CHAT_ID, len(text))
|
|
|
|
try:
|
|
async with httpx.AsyncClient(timeout=10) as client:
|
|
resp = await client.post(url, json={"chat_id": settings.TELEGRAM_CHAT_ID, "text": text})
|
|
logger.info("Telegram response: status=%d, body=%s", resp.status_code, resp.text[:200])
|
|
if resp.status_code != 200:
|
|
logger.error("Telegram API error: %s", resp.text)
|
|
except Exception:
|
|
logger.exception("Failed to send Telegram notification")
|