Який бот вам потрібен: command bot, Mini App чи conversational?
Вибір архітектури мобільного Telegram-бота починається зі сценарію. Простий command bot з меню і кнопками — достатньо InlineKeyboardMarkup і FSM на aiogram або python-telegram-bot. Conversational bot з NLP вимагає інтеграції з Dialogflow, Rasa або GPT API для генерації відповідей. Повноцінний Mini App — це web-застосунок на React, Vue або чистий HTML/CSS всередині WebView Telegram, з можливістю кастомізованого інтерфейсу та складної логіки. Ми за 5 років розробили понад 30 різноманітних ботів — від простих розсилок до маркетплейсів. Наш досвід дозволяє точно визначити оптимальну архітектуру для вашого завдання, скорочуючи витрати за рахунок готових модулів та перевірених рішень.
| Тип бота | Складність | Терміни | Приклади |
|---|---|---|---|
| Command bot | Низька | 1–2 тижні | Підтримка замовлень, FAQ-бот |
| Conversational | Середня | 2–4 тижні | Консультант, допомога у підборі |
| Mini App | Висока | 4–8 тижнів | Маркетплейс, повноцінний каталог |
Ми розробляємо всі три типи. Найчастіше замовляють саме Mini App з авторизацією через Telegram — це дає безшовний UX без введення логіна/пароля. За нашою статистикою, Mini App конвертує в 5 разів більше цільових дій порівняно з command bot для складних сценаріїв. Для оцінки вашого проекту зв'яжіться з нами — ми запропонуємо оптимальне рішення без зайвих витрат.
Чому webhooks виграють у polling для продакшену?
Telegram Bot API надає два способи отримання оновлень: getUpdates (long polling) і webhooks. Long polling зручний на локальній машині — достатньо ngrok для тесту. Але в бою він забиває чергу повідомленнями: при кожному рестарті бот обробить тисячі накопичених апдейтів, що може заблокувати сервер. Webhook же працює за подією: Telegram сам надсилає POST на ваш HTTPS-ендпоінт, бот відповідає миттєво. Плюс — ви менше витрачаєте мережевий трафік і CPU. За нашою практикою, webhooks забезпечують в 3 рази меншу затримку порівняно з polling при високому навантаженні.
| Критерій | Long polling | Webhook |
|---|---|---|
| Затримка | 200-500 мс | 50-100 мс |
| Навантаження на сервер | Висока (постійні запити) | Низька (тільки події) |
| Простота налаштування | Легка (ngrok) | Потрібен HTTPS |
Обов'язкові умови для webhook:
- Валідний TLS-сертифікат (Let's Encrypt або платний)
- Порт 443, 80, 88, 8443 (нестандартні порти не підтримуються)
- URL має бути унікальним (часто використовують
/{BOT_TOKEN}для ізоляції)
Ось приклад реєстрації webhook на aiogram 3.x:
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 критичний при рестарті: без нього бот обробить всі повідомлення з черги, створюючи флуд.
Як уникнути обмеження callback_data в 64 байти?
Кожна InlineKeyboardButton містить callback_data до 64 байт. Для простих дій (так/ні) — достатньо. Але для складних діалогів (наприклад, багатоетапне бронювання квитків) цих байт не вистачає.
Рішення — зберігати стан у Redis з коротким ідентифікатором:
import uuid, redis, json
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))
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-стан. Redis сам очищує застарілі записи по TTL. Цей підхід перевірено на десятках проектів — гарантуємо стабільність і продуктивність.
Як верифікувати initData Telegram Mini App?
Зауважимо: коли бот запущений як Mini App, window.Telegram.WebApp передає initData — рядок з HMAC-підписом. Сервер зобов'язаний провалідувати підпис перед довірою даним користувача (telegram_id, username). Інакше будь-хто може підробити запит від іншого користувача.
Алгоритм верифікації (кроки):
- Отримати секретний ключ: HMAC-SHA256 від
WebAppData(як message) і bot_token (як key). - Розібрати
initDataпо&, відсортувати параметри (крім hash) за ключами. - Склеїти в
data_check_stringчерез\nякkey=value. - Обчислити HMAC-SHA256 від
data_check_stringсекретним ключем. - Порівняти результат з хешем з initData.
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()
params = parse_qs(init_data)
data_check_string = "\n".join(
f"{k}={v}" for k, v in sorted(params.items()) if k != "hash"
)
computed_hash = hmac.new(secret_key, data_check_string.encode(), hashlib.sha256).hexdigest()
provided_hash = params.get("hash", [""])[0]
return hmac.compare_digest(computed_hash, provided_hash)
Алгоритм засновано на HMAC. Після верифікації можна використовувати telegram_id для зв'язку з вашою CRM, наприклад, прив'язувати до замовлення або підписки. Зверніться до нас за проектуванням і налагодженням — ми гарантуємо коректну реалізацію.
Що входить у розробку Telegram-бота під ключ?
Ми пропонуємо повний цикл від ідеї до деплою в App Store / Google Play. У роботу включено:
- Аналіз сценаріїв і прототипування
- Вибір стеку: aiogram, grammy, react-telegram-web-app
- Реалізація backend: API, Redis, PostgreSQL (або MongoDB)
- Дизайн Mini App з адаптацією під тему Telegram (світла/темна)
- Інтеграція платежів через Telegram Stars (або зовнішні платіжні шлюзи)
- Налаштування webhook з моніторингом (uptime, алерти)
- Тестування: unit-тести, e2e-тести на Telegram Bot API
- Налагодження та публікація: подання на верифікацію, робота з App Store Review Guidelines
Після здачі ми надаємо документацію по API, доступ до сервера і тиждень авторського супроводу.
Ми працюємо з ботами різної складності більше 5 років. За цей час запустили понад 30 проектів — від простих розсилок до маркетплейсів з сотнями товарів через Telegram Mini App. Кожен проект забезпечено гарантією якості та технічною підтримкою.
Як замовити розробку?
Якщо у вас є ідея — пишіть. Ми оцінимо проект, запропонуємо архітектуру і назвемо терміни. Орієнтуйтеся на наступні діапазони:
- Command bot: від 1 до 2 тижнів
- Conversational bot з NLP: від 2 до 4 тижнів
- Mini App: від 4 до 8 тижнів
Вартість розраховується індивідуально, залежить від складності сценаріїв та інтеграцій. Зв'яжіться з нами, і ми підготуємо ТЗ і точний кошторис. Отримайте консультацію безкоштовно.







