Розробка мобільного Telegram-чат-бота
Telegram-бот для мобільного користувача має кілька варіантів: простий command-bot з меню, conversational-бот з NLP або повнофункціональний Mini App з React/Vue інтерфейсом всередині Telegram. Ваш архітектурний вибір визначає весь стек.
Telegram Bot API: Webhooks vs Polling
Два способи отримати оновлення від Telegram: long polling (getUpdates) та webhooks. Для продакшену — тільки webhooks: Telegram відправляє POST на ваш HTTPS-endpoint при кожному повідомленні, і ваш бот відповідає негайно. Long polling — для розробки та локального тестування через ngrok.
Webhook потребує дійсного TLS-сертифіката (Let's Encrypt) та портів 443, 80, 88 або 8443. Telegram перевіряє сертифікат — self-signed не пройде без явної загрузки через setWebhook з параметром certificate.
# aiogram 3.x: реєстрація webhook
from aiogram import Bot, Dispatcher
from aiogram.webhook.aiohttp_server import SimpleRequestHandler
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher()
async def on_startup():
await bot.set_webhook(
url=f"https://yourserver.com/webhook/{BOT_TOKEN}",
drop_pending_updates=True # Ігнорувати накопичені повідомлення при перезавантаженні
)
drop_pending_updates=True — важливий деталь при перезавантаженні бота: без нього він обробляє всі накопичені повідомлення, що створює flood при деплоєнні.
Inline-клавіатури та стан діалогу
Кнопки під повідомленням (InlineKeyboardMarkup) — основний UI Telegram-бота. Кожна кнопка містить callback_data до 64 байт. При складних станах ці 64 байти швидко стають обмеженням.
Рішення: зберігайте стан у Redis з коротким callback_id:
import uuid, redis
r = redis.Redis()
async def create_callback(data: dict) -> str:
callback_id = str(uuid.uuid4())[:8]
r.setex(f"cb:{callback_id}", 3600, json.dumps(data)) # TTL 1 година
return callback_id
async def resolve_callback(callback_id: str) -> dict | None:
raw = r.get(f"cb:{callback_id}")
return json.loads(raw) if raw else None
FSM (Finite State Machine) — стандарт для багатокрокових діалогів: реєстрація, заповнення форм, майстри налаштування. У aiogram — StatesGroup; у python-telegram-bot — ConversationHandler.
Mini App: Повнофункціональний Web UI всередині Telegram
Telegram Mini App — це веб-додаток у WebView всередині Telegram. Об'єкт window.Telegram.WebApp надає:
-
initDataтаinitDataUnsafe— дані про користувача (id, username) -
MainButton— велика кнопка внизу екрана -
sendData()— відправлення даних боту -
openLink(),openTelegramLink()
Для мобільного UX Mini App повинен дотримуватися colorScheme Telegram (темна/світла тема) та використовувати CSS-змінні як --tg-theme-bg-color, --tg-theme-text-color тощо.
const tg = window.Telegram.WebApp;
tg.ready();
tg.expand(); // Розширити на весь екран
// Кнопка дії
tg.MainButton.setText("Підтвердити замовлення");
tg.MainButton.show();
tg.MainButton.onClick(() => {
tg.sendData(JSON.stringify({ action: "confirm", orderId: currentOrderId }));
});
// Кольори з теми Telegram
document.documentElement.style.setProperty(
'--bg', tg.themeParams.bg_color || '#ffffff'
);
Деплойте Mini App як статичні активи на CDN або SSR на вашому сервері. HTTPS є обов'язковим.
Авторизація та верифікація initData
initData — рядок з HMAC-підписом від Telegram. На сервері перевіряйте підпис перед довіранням даним користувача:
import hmac, hashlib
def verify_telegram_init_data(init_data: str, bot_token: str) -> bool:
secret_key = hmac.new(b"WebAppData", bot_token.encode(), hashlib.sha256).digest()
data_check_string = "\n".join(
f"{k}={v}" for k, v in sorted(parse_qs(init_data).items()) if k != "hash"
)
computed_hash = hmac.new(secret_key, data_check_string.encode(), hashlib.sha256).hexdigest()
provided_hash = parse_qs(init_data).get("hash", [""])[0]
return hmac.compare_digest(computed_hash, provided_hash)
Без цієї перевірки будь-хто може підробити Telegram user ID у запитах до вашого API.
Процес розробки
Визначення сценаріїв: command-bot, FSM-діалог або Mini App. Вибір серверного фреймворку (aiogram, grammy, python-telegram-bot). Налаштування webhook з TLS. Реалізація діалогових потоків. Для Mini App: розробка веб-інтерфейсу з підтримкою тем Telegram. Верифікація initData на бекенді. Деплойнення та моніторинг.
Орієнтири за часом
Command-bot з меню та базовим FSM — 1–2 тижні. Mini App з повним UI, автентифікацією та серверним API — 4–8 тижнів.







