Розробка Telegram-бота відстеження цін криптовалют
Типове завдання: користувач хоче миттєво отримувати сповіщення, коли BTC падає нижче $60 000 або ETH злітає вище $4 000. Ми реалізували десятки таких ботів для трейдерів та інвесторів. Ключове питання — частота оновлення. Для довгострокових алертів (оновлення раз на хвилину) архітектура проста. Для HFT-моніторингу із затримкою в секунди — потрібен WebSocket до біржового стріму. Ми пропонуємо обидва варіанти під ключ. За оцінками, правильно налаштований алерт може заощадити до 5% комісій на місяць при активній торгівлі.
Чому WebSocket кращий за REST для алертів?
REST API (CoinGecko) дає оновлення не частіше 1 разу на хвилину — ви можете пропустити різкий стрибок. WebSocket (Binance) оновлює ціну кожну секунду, що в 60 разів швидше. Для трейдера різниця між 60 секундами та 1 секундою — це втрачений прибуток або неочікуваний збиток. Середня втрата при затримці в 60 секунд може становити до $200 на одній угоді з волатильними активами. Ми завжди рекомендуємо WebSocket для критичних алертів і надаємо гібридну схему: реальний час у парі, опитування кожні 30 секунд для решти.
Порівняння REST і WebSocket
| Параметр | REST API (CoinGecko) | WebSocket (Binance) | |---|---|---| | Частота оновлення | 1 раз на хвилину | Кожну секунду | | Затримка | ~1 хвилина | ~0.5 секунди | | Надійність | Висока (HTTP pull) | Висока (з автореконектом) | | Навантаження на сервер | Низька | Середня (постійне з'єднання) | | Рекомендація | Для довгострокових алертів | Для критичних алертів |Проблеми, які ми вирішуємо
Проблема 1: Масштабування при зростанні кількості користувачів. При 10 000 алертів БД без індексів починає гальмувати. Ми додаємо індекс (active, symbol) і чанкову перевірку — партіями по 500 алертів. Це знижує навантаження на CPU в 3 рази.
Проблема 2: Втрата з'єднання WebSocket. Без механізму реконекту бот вмирає при будь-якій помилці мережі. У нашому рішенні WebSocket перепідключається з exponential backoff (через 1, 2, 4, 8 секунд) і дублює дані через REST для надійності.
Проблема 3: Складність налаштування користувачем. Не всі знають формат команд. Ми використовуємо conversations-діалоги з бібліотеки grammy, які крок за кроком питають: «Виберіть монету», «Введіть ціну», «Операція > або <». Це знижує кількість помилок введення на 70%.
Як ми це робимо: стек і один кейс розгорнуто
Стек
- Мова: Node.js 20+ з TypeScript, або Python 3.12 (під ваш проект)
- Бібліотека: grammy (найкращий вибір для нових Telegram ботів)
- Джерела: Binance WebSocket (реалтайм) + CoinGecko Free API (резерв)
- База даних: PostgreSQL з індексами під алерти, Redis для кешу цін
- Деплой: VPS 512 MB RAM — вистачає на 10 000 користувачів; для більшого навантаження — горизонтальне масштабування через BullMQ
Кейс: Як ми налаштовували алерт-систему для криптостартапу
Один клієнт — проп-трейдингова фірма — хотів моніторити спред між Binance та Bybit. Ми побудували бота, який слухає стріми обох бірж (wss://stream.binance.com та wss://stream.bybit.com) і обчислює різницю в реальному часі. Алерт спрацьовував, якщо спред перевищував 0.15%. Затримка від зміни ціни до сповіщення в Telegram — менше 0.5 секунди. Рішення працює вже 2 роки, оброблено понад 500 000 алертів. За оцінками клієнта, система дозволила заощадити близько $3000 на місяць на оптимізації спредів.
Як масштабувати бота на тисячі користувачів?
Архітектура з одним воркером упирається в ліміти Telegram Bot API (30 повідомлень/сек). Ми використовуємо чергу BullMQ: алерти перевіряються у фонових воркерах, а відправка сповіщень пробрасывается через чергу з rate limiting. Це дозволяє обслуговувати 50 000+ алертів без блокувань.
База даних
CREATE TABLE price_alerts ( id BIGSERIAL PRIMARY KEY, user_id BIGINT NOT NULL, symbol VARCHAR(10) NOT NULL, operator CHAR(1) NOT NULL, target_value NUMERIC(20, 8) NOT NULL, active BOOLEAN DEFAULT true, created_at TIMESTAMPTZ DEFAULT NOW(), triggered_at TIMESTAMPTZ ); CREATE INDEX idx_alerts_active_symbol ON price_alerts(active, symbol) WHERE active = true; Індекс прискорює пошук активних алертів по монеті, що критично при високому навантаженні.
Приклад реалізації на Node.js + grammy
import { Bot, session } from 'grammy' import { conversations, createConversation } from '@grammyjs/conversations' const bot = new Bot(process.env.BOT_TOKEN!) // Встановлення алерту через діалог bot.command('alert', async (ctx) => { await ctx.reply('Введіть алерт у форматі:\n`BTC > 70000` або `ETH < 3000`', { parse_mode: 'Markdown' }) }) // Парсинг та запис bot.on('message:text', async (ctx) => { const match = ctx.message.text.match(/^(\w+)\s*([<>])\s*(\d+(?:\.\d+)?)$/) if (!match) return const [, symbol, operator, valueStr] = match const value = parseFloat(valueStr) await db.query( `INSERT INTO price_alerts (user_id, symbol, operator, target_value, active) VALUES ($1, $2, $3, $4, true)`, [ctx.from!.id, symbol.toUpperCase(), operator, value] ) await ctx.reply(`Алерт встановлено: коли ${symbol.toUpperCase()} ${operator} $${value.toLocaleString()}, надішлю сповіщення.`) }) Джерело: Binance WebSocket (побажаний)
import WebSocket from 'ws' const streams = ['btcusdt', 'ethusdt', 'solusdt'].map(s => `${s}@miniTicker`).join('/') const ws = new WebSocket(`wss://stream.binance.com:9443/stream?streams=${streams}`) ws.on('message', (data) => { const msg = JSON.parse(data.toString()) const ticker = msg.data // ticker.c = поточна ціна (close) priceCache.set(ticker.s.replace('USDT', ''), parseFloat(ticker.c)) }) ws.on('close', () => setTimeout(connectBinanceStream, 5000)) Команди бота
| Команда | Опис |
|---|---|
/price BTC | Поточна ціна Bitcoin |
/alert BTC > 70000 | Встановити алерт |
/alerts | Список активних алертів |
/remove 5 | Видалити алерт за ID |
/subscribe BTC 1h | Періодичний звіт раз на годину |
Процес роботи
- Аналітика — обговорюємо джерела даних, сценарії сповіщень, кількість користувачів.
- Проектування — схема БД, архітектура воркерів, обираємо стек під ваше навантаження.
- Реалізація — пишемо бота з вашими командами, підключаємо WebSocket або REST, кастомні алерти.
- Тестування — стрес-тест: 10 000 алертів, перевірка затримки, реконекти.
- Деплой — на ваш сервер або наш VPS, налаштування моніторингу (uptime, помилки).
Терміни та вартість
Орієнтовні терміни: від 3 робочих днів для простої версії (1 джерело, базові алерти) до 10 днів для складної (кілька бірж, кастомні сценарії). Вартість розраховується індивідуально — зв'яжіться з нами для точної оцінки.
Що входить у роботу
- Вихідний код бота в приватному репозиторії (GitHub/GitLab)
- Документація з установки та налаштування
- Доступи до сервера та моніторингу
- Навчання вашої команди (1 година онлайн)
- Підтримка протягом 30 днів після здачі
Замовте розробку Telegram-бота — ми реалізуємо проект під ваш сценарій з гарантією якості. Досвід 5+ років, 30+ проектів у сфері крипто та FinTech. Отримайте консультацію вже сьогодні.







