Розробка Telegram-бота для моніторингу криптовалют із алертами

Розробка Telegram-бота відстеження цін криптовалют Типове завдання: користувач хоче миттєво отримувати сповіщення, коли BTC падає нижче $60 000 або ETH злітає вище $4 000. Ми реалізували десятки таких ботів для трейдерів та інвесторів. Ключове питання — частота оновлення. Для довгострокових алерт

Напрямки блокчейн-розробки

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

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

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

Розробка 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 Періодичний звіт раз на годину

Процес роботи

  1. Аналітика — обговорюємо джерела даних, сценарії сповіщень, кількість користувачів.
  2. Проектування — схема БД, архітектура воркерів, обираємо стек під ваше навантаження.
  3. Реалізація — пишемо бота з вашими командами, підключаємо WebSocket або REST, кастомні алерти.
  4. Тестування — стрес-тест: 10 000 алертів, перевірка затримки, реконекти.
  5. Деплой — на ваш сервер або наш VPS, налаштування моніторингу (uptime, помилки).

Терміни та вартість

Орієнтовні терміни: від 3 робочих днів для простої версії (1 джерело, базові алерти) до 10 днів для складної (кілька бірж, кастомні сценарії). Вартість розраховується індивідуально — зв'яжіться з нами для точної оцінки.

Що входить у роботу

  • Вихідний код бота в приватному репозиторії (GitHub/GitLab)
  • Документація з установки та налаштування
  • Доступи до сервера та моніторингу
  • Навчання вашої команди (1 година онлайн)
  • Підтримка протягом 30 днів після здачі

Замовте розробку Telegram-бота — ми реалізуємо проект під ваш сценарій з гарантією якості. Досвід 5+ років, 30+ проектів у сфері крипто та FinTech. Отримайте консультацію вже сьогодні.