Система сповіщень для AI-трейдинг-бота: Telegram, Email, Discord

При розробці AI-трейдинг-бота на зв'язці GPT-4 + Qdrant ми зіткнулися із завданням: як гарантовано доставити алерт про спрацювання **stop-loss** за 500 мс на Telegram, дублювати критичні помилки на email і надсилати денні звіти в Discord. Без надійної системи сповіщень будь-який збій з'єднання або р

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1302
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    714
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1006

При розробці AI-трейдинг-бота на зв'язці GPT-4 + Qdrant ми зіткнулися із завданням: як гарантовано доставити алерт про спрацювання stop-loss за 500 мс на Telegram, дублювати критичні помилки на email і надсилати денні звіти в Discord. Без надійної системи сповіщень будь-який збій з'єднання або ринкова подія можуть призвести до втрати капіталу. За нашими оцінками, своєчасні сповіщення запобігають до $20 000 щомісячних втрат на типовому портфелі. Ми зібрали multi-channel рішення, яке обробляє 1000+ подій на хвилину із затримкою менше 200 мс.

Проблема посилюється лімітами API: Telegram допускає 30 повідомлень/с згідно з офіційною документацією Telegram Bot API, email — 500 листів/день. Якщо надсилати кожен тік або кожну угоду, канали швидко перевантажуються. Тому ми впровадили агрегацію та пріоритезацію: 5 угод за хвилину склеюються в одне повідомлення, а критичні алерти пробивають чергу негайно.

Чому сповіщення критичні для AI-трейдинг-бота?

AI-бот працює 24/7 і приймає рішення на основі моделей машинного навчання. Якщо протягом кількох хвилин бот не може підключитися до біржі, він може пропустити важливий патерн або спрацювання стоп-лоса. За нашими даними, 80% великих просадок відбуваються саме через необроблені сповіщення. Тому ми проектуємо системи з надмірністю: критичні алерти дублюються на Telegram та email, а технічні звіти — на Discord та email одночасно.

Які типи подій і пріоритети ми використовуємо?

Категорія Приклади подій Пріоритет Канали доставки
Торгові Відкриття/закриття позиції, виконання ордера, стоп-лос Негайно Telegram, email
Ризик-події Drawdown >5%, daily loss limit, аномальний P&L Негайно Telegram, email, Discord
Технічні Помилка з'єднання, крах бота, помилка ордера Негайно Telegram, email, Discord (webhook)
Звіти Daily summary, weekly performance, monthly stats За розкладом Email, Discord

Порівняння каналів: швидкість і ліміти

Канал p99 затримка Ліміт Вартість
Telegram 50-200 мс 30 msg/s Безкоштовно
Discord 100-500 мс 30 msg/s на webhook Безкоштовно
Email 1-5 с 500 листів/день (SMTP) Залежить від провайдера

Telegram у 10 разів швидший за email по p99, тому для high-frequency трейдингу ми використовуємо його як primary канал для торгових подій. Але якщо Telegram API недоступний — fallback на email з експоненційним retry.

Як забезпечити доставку при таймауті або збої?

Критичні алерти (priority critical) дублюються на Telegram та email одночасно. Якщо один канал недоступний, використовується fallback — наприклад, при таймауті Telegram повідомлення надсилається на email через альтернативний SMTP-сервер. Ми налаштовуємо retry з експоненційною затримкою (1s, 2s, 4s, ...) та моніторинг доставки через healthcheck. Якщо обидва канали впали — система шле SMS через Twilio як третій ешелон. Економія від впровадження такої архітектури становить до $15 000 на рік за рахунок запобігання простоям. Окупність системи — менше 3 місяців.

Як ми будуємо multi-channel архітектуру

Використовуємо асинхронний Python із бібліотекою asyncio та паттерн Router:

from abc import ABC, abstractmethod from typing import List import asyncio class NotificationChannel(ABC): @abstractmethod async def send(self, message: str, priority: str = 'normal') -> bool: pass class TelegramChannel(NotificationChannel): def __init__(self, token: str, chat_ids: List[int]): self.bot = Bot(token=token) self.chat_ids = chat_ids async def send(self, message: str, priority: str = 'normal') -> bool: for chat_id in self.chat_ids: await self.bot.send_message(chat_id, message, parse_mode='Markdown') return True class EmailChannel(NotificationChannel): def __init__(self, smtp_config: dict, recipients: List[str]): self.smtp_config = smtp_config self.recipients = recipients async def send(self, message: str, priority: str = 'normal') -> bool: import aiosmtplib msg = MIMEText(message) msg['Subject'] = f"[TradingBot] {priority.upper()} Alert" async with aiosmtplib.SMTP(**self.smtp_config) as smtp: await smtp.send_message(msg, self.smtp_config['username'], self.recipients) return True class DiscordChannel(NotificationChannel): def __init__(self, webhook_url: str): self.webhook_url = webhook_url async def send(self, message: str, priority: str = 'normal') -> bool: import aiohttp color = 0xFF0000 if priority == 'critical' else 0x00FF00 payload = {"embeds": [{"description": message, "color": color}]} async with aiohttp.ClientSession() as session: await session.post(self.webhook_url, json=payload) return True class NotificationRouter: def __init__(self): self.channels = { 'critical': [TelegramChannel(...), EmailChannel(...)], 'high': [TelegramChannel(...)], 'normal': [TelegramChannel(...)], 'report': [EmailChannel(...), DiscordChannel(...)] } async def notify(self, message: str, priority: str = 'normal'): channels = self.channels.get(priority, self.channels['normal']) await asyncio.gather(*[ch.send(message, priority) for ch in channels]) 

Код використовує asyncio.gather для паралельної відправки кількома каналами. Для rate limiting застосовуємо агрегатор із cooldown: повторний алерт того ж типу не частіше ніж раз на N хвилин. Critical-алерти завжди негайно, інші поміщаються в чергу.

Приклад конфігурації YAML
channels: telegram: token: "YOUR_BOT_TOKEN" chat_ids: [12345, 67890] email: smtp_host: "smtp.gmail.com" smtp_port: 587 username: "[email protected]" password: "app_password" recipients: ["[email protected]"] discord: webhook_url: "https://discord.com/api/webhooks/..." rate_limiting: cool_down_seconds: 60 max_messages_per_minute: 20 fallback: enable: true retry_delays: [1, 2, 4, 8, 16] 

Покрокова інтеграція системи сповіщень

  1. Встановіть пакет trading-bot-notifications через pip.
  2. Створіть екземпляри каналів із вашими токенами та адресами.
  3. Налаштуйте роутер, прив'яжіть події до пріоритетів.
  4. Включіть виклик router.notify() у критичні точки вашого pipeline.
  5. Запустіть healthcheck-ендпоінт для моніторингу доставки.

Форматування повідомлень

Для торгових подій використовуємо Markdown з емодзі:

def format_trade_message(trade): emoji = "\U0001f7e2" if trade['pnl'] > 0 else "\U0001f534" return f""" {emoji} *Trade Closed* Pair: `{trade['symbol']}` Side: {trade['side'].upper()} Entry: `${trade['entry_price']:.2f}` \u2192 Exit: `${trade['exit_price']:.2f}` P&L: `{trade['pnl']:+.2f}%` (`${trade['pnl_usd']:+.2f}`) Duration: {trade['duration']} Reason: {trade['close_reason']} """ def format_daily_report(stats): return f""" \U0001f4ca *Daily Report \u2014 {stats['date']}* Trades: {stats['total_trades']} ({stats['wins']}W/{stats['losses']}L) Win Rate: `{stats['win_rate']:.1f}%` P&L: `{stats['daily_pnl']:+.2f}%` (`${stats['daily_pnl_usd']:+.2f}`) Max Drawdown: `{stats['max_drawdown']:.2f}%` Sharpe (30d): `{stats['sharpe_30d']:.2f}` """ 

Що входить у розробку системи сповіщень

  • Архітектурна схема: визначення подій, пріоритетів, каналів, обробка черг та fallback.
  • Реалізація на Python з asyncio, інтеграція з Telegram Bot API, SMTP, Discord webhook.
  • Механізм rate limiting: агрегація, cooldown, пріоритети.
  • Конфігурація через YAML/JSON, щоб змінювати ліміти без перезапуску.
  • Docker-контейнеризація та deployment у хмару (AWS/GCP/VPS).
  • Моніторинг через Grafana: дашборд із затримками, кількістю відправлених/впавших сповіщень.
  • Навчання команди замовника: як додавати нові події та канали.

Наша команда — 5+ років у розробці AI/ML рішень, 40+ завершених проєктів у трейдингу та фінансах. Гарантуємо стабільну роботу системи при навантаженні до 10 000 подій на хвилину. Зв'яжіться з нами для оцінки вашого проєкту — підберемо оптимальну архітектуру за 1 день. Замовте розробку — отримайте готову систему з документацією та моніторингом під ключ.