Разработка Telegram Mini App с криптофункциональностью
Telegram Mini App — это WebView внутри Telegram, который открывается через кнопку бота или ссылку tg://resolve?domain=BotName&appname=appname. Для крипто-приложений это интересная ниша: ~900 млн пользователей Telegram, встроенный мессенджер для коммуникации, TON-экосистема с нативным кошельком. Но WebView — это не нативное приложение, и разрыв ощущается на каждом шаге интеграции с блокчейном.
TON Connect: авторизация через кошелёк
Для TON-экосистемы — TON Connect 2.0. Пользователь подключает Tonkeeper, MyTonWallet или встроенный кошелёк Telegram (W5). Mini App получает адрес кошелька и может запрашивать подписи транзакций.
import TonConnect from '@tonconnect/sdk';
const connector = new TonConnect({
manifestUrl: 'https://your-app.com/tonconnect-manifest.json'
});
// Подключение кошелька
async function connectWallet() {
const walletsList = await connector.getWallets();
// Для Telegram Mini App используем встроенный wallet
const telegramWallet = walletsList.find(w => w.appName === 'telegram-wallet');
if (telegramWallet) {
// Открывает встроенный кошелёк Telegram
connector.connect({ jsBridgeKey: telegramWallet.jsBridgeKey });
} else {
// QR или deep link для внешних кошельков
const universalLink = connector.connect({ universalLink: walletsList[0].universalUrl });
window.Telegram.WebApp.openLink(universalLink);
}
}
connector.onStatusChange(wallet => {
if (wallet) {
console.log('Connected:', wallet.account.address);
}
});
Для EVM-сетей (Ethereum, Polygon, BSC) — WalletConnect, хотя в контексте Telegram Mini App интеграция сложнее: QR-код внутри WebView, Deep Link ведёт из Telegram в MetaMask и обратно. Работает, но UX хуже чем в нативном приложении.
Telegram Wallet: встроенный кошелёк
С 2023 года у Telegram есть встроенный кошелёк (@wallet бот) с поддержкой TON и USDT (TON). В Mini App он доступен через window.Telegram.WebApp.openInvoice() для приёма платежей в USDT без внешних кошельков. Это самый простой способ принять крипто-оплату в Mini App — пользователь платит прямо из Telegram без установки дополнительных приложений.
// Создание инвойса для оплаты в Stars или TON
const tg = window.Telegram.WebApp;
async function createCryptoInvoice(amount, description) {
// На сервере создаём инвойс через Telegram Payments API или @wallet API
const invoiceLink = await fetch('/api/create-invoice', {
method: 'POST',
body: JSON.stringify({ amount, description, currency: 'XTR' }) // XTR = Telegram Stars
}).then(r => r.json()).then(d => d.link);
tg.openInvoice(invoiceLink, (status) => {
if (status === 'paid') {
// Успешная оплата
handlePaymentSuccess();
}
});
}
Telegram Stars (XTR) — внутренняя валюта Telegram с августа 2024. Принимается для цифровых товаров и услуг внутри Mini Apps. Конвертируется в деньги через Telegram Fragment.
DeFi в Mini App: ограничения WebView
Главное ограничение — Mini App работает в WebView внутри Telegram, а не в браузере. window.ethereum не injected автоматически. MetaMask не инжектирует провайдер в WebView Telegram.
Решения:
- TON-only функциональность через TON Connect — работает нативно
- Серверная Web3-логика — клиент не работает с блокчейном напрямую, все on-chain операции через ваш бэкенд
- Iframe с Metamask Snaps — экспериментально, не для продакшена
Практически для DeFi-приложений на EVM в Telegram Mini App лучшая архитектура — кастодиальные кошельки или MPC (Multi-Party Computation) через Privy или Dynamic. Пользователь авторизуется через Telegram initData, получает кошелёк от сервиса, все транзакции подписываются серверными компонентами.
Верификация initData
Любой запрос от Mini App к вашему бэкенду должен быть верифицирован через Telegram initData:
import hmac
import hashlib
from urllib.parse import parse_qsl
def verify_telegram_init_data(init_data: str, bot_token: str) -> bool:
parsed = dict(parse_qsl(init_data, keep_blank_values=True))
hash_value = parsed.pop('hash', '')
data_check = '\n'.join(f'{k}={v}' for k, v in sorted(parsed.items()))
secret_key = hmac.new(b'WebAppData', bot_token.encode(), hashlib.sha256).digest()
expected = hmac.new(secret_key, data_check.encode(), hashlib.sha256).hexdigest()
return hmac.compare_digest(hash_value, expected)
Без этой проверки любой может отправить POST-запрос с произвольным user_id и получить чужой крипто-баланс.
Уведомления через бота
Одно из главных преимуществ Telegram Mini App — мгновенные уведомления через бота без APNs/FCM. Транзакция подтверждена — бот отправляет сообщение. Аномальная активность — пуш в Telegram. Реализуется через bot.sendMessage(chatId, text) из python-telegram-bot или grammy (Node.js).
Технический стек
Фронтенд Mini App: React или Vue + Vite, CSS через Tailwind или нативный CSS с учётом цветовой темы Telegram (tg.themeParams). Тёмная тема поддерживается через tg.colorScheme. Адаптация под мобильный viewport — tg.viewportHeight, tg.viewportStableHeight.
Бэкенд: любой язык. Node.js с grammy или telegraf, Python с aiogram — популярные выборы для Telegram-ботов.
Сроки
3–5 недель для Mini App с TON Connect, крипто-оплатой, DeFi-функциональностью через серверный слой и нотификациями через бота. Стоимость рассчитывается индивидуально после анализа требований.







