Розробка Telegram-бота для керування портфелем
Telegram — основна платформа крипто-спільноти, але трейдери втрачають до 2 годин на день на перемикання між біржами, DeFi-протоколами та гаманцями. У результаті упускаються угоди, а через затримки реакцій на ліквідації виникають збитки до 15% портфеля. Ми створюємо ботів, які об'єднують все в одному інтерфейсі: баланси, позиції, сповіщення та угоди. Замовте розробку під ключ — отримайте готове рішення з гарантією безпеки. Впровадження бота окупається за 2-3 місяці завдяки автоматизації рутинних операцій.
Чому варто довірити розробку нам?
Наш досвід — понад 5 років у Web3, 30+ реалізованих проєктів у DeFi та NFT. Використовуємо лише перевірені інструменти: Solidity 0.8.x для контрактів, Foundry для тестування, Slither для аналізу. Кожен бот проходить аудит безпеки. У середньому наші рішення обробляють на 40% більше запитів завдяки оптимізації пулу з'єднань.
Які завдання вирішує бот?
- Моніторинг портфеля в реальному часі — затримка сповіщень менше 1 секунди, підтримка 10+ мереж (Ethereum, Polygon, Arbitrum, Solana).
- Price alerts — налаштовувані сповіщення про досягнення цільових цін, ліквідації та зміни в пулах ліквідності.
- Свопи через DEX-агрегатори — виконання угод через 1inch або Paraswap без виходу з Telegram.
- Мультичейн підтримка — єдина панель для активів у різних блокчейнах.
Архітектура
Варіанти зберігання гаманця
Watch-only режим. Користувач додає публічну адресу, бот лише читає дані. Жодного ризику для коштів. Підходить для моніторингу.
Вбудований гаманець. Бот генерує key pair, encrypted private key зберігається в базі даних. Користувач встановлює пароль/PIN, який використовується для розшифровки при підписі. Найзручніший варіант для торгівлі, але потребує безпечного зберігання.
Connect існуючого гаманця. Через WalletConnect v2 користувач підключає MetaMask — транзакції підписуються в гаманці. Безпечно, але менш зручно (потрібен мобільний гаманець поруч).
Стек
Telegram Bot API (telegraf.js)
↓
Bot Server (Node.js + TypeScript)
├── Portfolio Service (баланси через Alchemy/DeBank API)
├── DeFi Service (позиції: AAVE, Compound, Uniswap)
├── Wallet Service (генерація, шифрування ключів)
├── Trading Service (свопи через 1inch/Paraswap API)
└── Alert Service (price alerts, liquidation warnings)
↓
PostgreSQL + Redis (sessions, cache)
Порівняння підходів до зберігання ключів
| Підхід | Безпека | Зручність | Швидкість угод |
|---|---|---|---|
| Watch-only | Висока (немає ключів) | Низька (лише читання) | Не застосовно |
| Вбудований | Середня (потребує шифрування) | Висока | Миттєва |
| WalletConnect | Висока (підпис на пристрої) | Середня (потрібен гаманець) | Залежить від мережі |
Як влаштована архітектура бота?
Бот побудований на мікросервісній моделі. Кожен сервіс відповідає за своє завдання: фетчинг балансів, аналіз DeFi-позицій, виконання свопів та моніторинг алертів. Асинхронна черга через Redis забезпечує затримку сповіщень менше 1 секунди. У середньому бот обробляє до 5000 запитів на хвилину — це в 3 рази швидше, ніж аналоги на Python.
Безпека зберігання ключів
Якщо бот зберігає private keys користувачів — це критична відповідальність:
- Шифрування AES-256-GCM з ключем = KDF(user_pin + server_secret)
- Server secret зберігається в AWS Secrets Manager (не в коді)
- PIN ніколи не зберігається, лише перевіряється через спробу розшифровки
- Автоматичний logout після N хвилин неактивності
- Ліміти на транзакції (максимальна сума на добу)
- Whitelist адрес-отримувачів
Рекомендації з безпеки: OpenZeppelin рекомендує emergency pause та обмеження експозиції для контрактів, що зберігають кошти користувачів.
Чому безпека ключів — головний пріоритет?
Фінансові втрати від злому можуть сягати 10-20% портфеля користувача. Ми застосовуємо формальну верифікацію критичних модулів та multi-sig для операцій адміністратора. Бот проходить зовнішній аудит коду перед деплоєм.
Як ми реалізуємо функціональність?
import { Telegraf, Context } from "telegraf";
import { message } from "telegraf/filters";
const bot = new Telegraf(process.env.BOT_TOKEN!);
bot.command("portfolio", async (ctx) => {
const userId = ctx.from.id;
const user = await userService.getUser(userId);
if (!user?.watchAddress) {
return ctx.reply("Додайте адресу гаманця: /add_wallet 0x...");
}
await ctx.reply("Завантажую портфоліо...");
const portfolio = await portfolioService.getPortfolio(user.watchAddress);
const message = formatPortfolioMessage(portfolio);
await ctx.reply(message, { parse_mode: "HTML" });
});
function formatPortfolioMessage(portfolio: Portfolio): string {
const totalUSD = portfolio.tokens.reduce((sum, t) => sum + t.valueUSD, 0);
let msg = `<b>Портфоліо</b> — $${totalUSD.toFixed(2)}\n\n`;
for (const token of portfolio.tokens.sort((a, b) => b.valueUSD - a.valueUSD)) {
const pct = ((token.valueUSD / totalUSD) * 100).toFixed(1);
msg += `${token.symbol}: ${token.balance.toFixed(4)} ($${token.valueUSD.toFixed(2)}, ${pct}%)\n`;
}
if (portfolio.defiPositions.length > 0) {
msg += `\n<b>DeFi позиції:</b>\n`;
for (const pos of portfolio.defiPositions) {
msg += `${pos.protocol}: $${pos.valueUSD.toFixed(2)} (${pos.type})\n`;
}
}
return msg;
}
Price alerts
interface PriceAlert {
userId: number;
token: string;
targetPrice: number;
direction: 'above' | 'below';
isTriggered: boolean;
}
// Worker який перевіряє алерти кожну хвилину
async function checkAlerts() {
const activeAlerts = await db.alerts.findActive();
const tokens = [...new Set(activeAlerts.map(a => a.token))];
const prices = await priceService.getPrices(tokens);
for (const alert of activeAlerts) {
const currentPrice = prices[alert.token];
const triggered =
(alert.direction === 'above' && currentPrice >= alert.targetPrice) ||
(alert.direction === 'below' && currentPrice <= alert.targetPrice);
if (triggered) {
await bot.telegram.sendMessage(
alert.userId,
`🔔 ${alert.token} досяг $${currentPrice.toFixed(2)} (ціль: $${alert.targetPrice})`
);
await db.alerts.markTriggered(alert.id);
}
}
}
Inline-клавіатури для навігації
Зручний UX для бота — inline кнопки замість команд:
bot.command("start", async (ctx) => {
await ctx.reply("Головне меню", {
reply_markup: {
inline_keyboard: [
[
{ text: "📊 Портфоліо", callback_data: "portfolio" },
{ text: "💰 Баланси", callback_data: "balances" },
],
[
{ text: "🔄 Своп", callback_data: "swap" },
{ text: "🔔 Алерти", callback_data: "alerts" },
],
[
{ text: "⚙️ Налаштування", callback_data: "settings" },
],
],
},
});
});
Процес роботи
- Аналітика — вивчаємо ваші вимоги, інтеграції, обсяг користувачів.
- Проектування — архітектура, вибір стеку, схема бази даних.
- Реалізація — написання коду, інтеграція API, налаштування оповіщень.
- Тестування — unit-тести, інтеграційні тести, security review (включаючи формальну верифікацію для критичних модулів).
- Деплой — на ваш сервер або хмару (AWS, DigitalOcean).
- Підтримка — місяць безкоштовної підтримки після запуску.
Що входить у роботу?
- Архітектурний документ з обґрунтуванням рішень.
- Вихідний код у приватному репозиторії.
- Документація з API та розгортання.
- Інструкція з експлуатації для вашої команди.
- Навчання адміністраторів (2-3 години).
- Гарантія усунення критичних помилок протягом 30 днів.
Дані для портфоліо
| Джерело | Що дає |
|---|---|
| Alchemy Token API | ERC-20 баланси за адресою |
| DeBank API | DeFi позиції (AAVE, Compound, Uniswap LP) |
| CoinGecko API | Ціни токенів |
| 1inch API | Котирування свопів |
| Etherscan API | Історія транзакцій |
Терміни та вартість
Базовий моніторинг-бот (watch-only, баланси, DeFi позиції, price alerts) — 2-3 тижні. Версія з вбудованим гаманцем та свопами — 4-6 тижнів з урахуванням security review. Вартість розраховується індивідуально — зв'яжіться з нами для оцінки вашого проєкту.







