Telegram Mini App je webová aplikace, která se otevře uvnitř Telegramu, když je uživatel přihlášený a ve správném chatu. V tom spočívá celý slib: žádný nový účet, stahování ani reset hesla. Stavím je stejně jako každý webový produkt pro produkci — Next.js a TypeScript na frontendu, Node.js na backendu — plus několik pravidel specifických pro Telegram. Poslední, kterou jsem dodal pod NDA, byla fintechová Web App a Mini App s virtuálními i fyzickými kartami postavená na Next.js, Expressu a MongoDB.
Začíná to botem. BotFather vytvoří bota i Mini App a uživatel ji otevře tlačítkem nabídky, tlačítkem inline klávesnice nebo přímým odkazem t.me s parametrem startapp. Tak předávám doporučovací kód nebo vedu uživatele rovnou na konkrétní obrazovku. Aplikace běží přes HTTPS na běžném hostingu; při vývoji tunel nasměruje Telegram na localhost, takže testuji na skutečném telefonu, ne jen v desktopovém prohlížeči.
U autentizace nikdy nehledám zkratky. Telegram předá aplikaci initData — ID a jméno uživatele, auth_date a hash. initDataUnsafe znamená přesně to, co napovídá název: hodí se k zobrazení jména, nikdy k tomu, abychom jí důvěřovali. Backend ověří nezměněná initData podpisem HMAC odvozeným z tokenu bota, zkontroluje aktuálnost auth_date a až potom vydá vlastní relaci. Token bota nikdy neopustí server. Ve fintechovém produktu právě tato kontrola rozlišuje „přihlášení přes Telegram“ od „kdokoli s devtools se může vydávat za kohokoli“.
Mini App pak musí působit nativně, ne jako web vložený do webview. Čtu themeParams a CSS proměnné Telegramu, aby aplikace respektovala světlý či tmavý motiv uživatele. Místo vlastních tlačítek používám MainButton a BackButton, u důležitých akcí přidávám haptickou odezvu a respektuji viewport i okraje safe area, aby nic nezakrývala hlavička ani indikátor plochy. Mobile-first tu není slogan — většina relací probíhá na telefonu ovládaném jedním palcem.
Bot a Mini App spolupracují. Bot posílá oznámení, potvrzení a účtenky; Mini App obsluhuje obrazovky s formulářem, seznamem nebo pokladnou. Webhooky míří na backend Node.js, který zůstává jediným zdrojem pravdy o platbách a stavu — klient se ptá, nikdy nerozhoduje. Digitální zboží v Telegramu se platí ve Stars, fyzické zboží a služby mohou projít platebními branami. S klientem to řeším brzy, protože tato volba ovlivňuje celý proces.
Odmítám důvěřovat initDataUnsafe, vměstnat desktopový web do webview, nechat pokladnu pouze na frontendu nebo vytvářet Mini App bez webového vstupu, když firma potřebuje také SEO či interní dashboard. Chcete-li spustit produkt v Telegramu, pošlete mi jedinou akci, kterou má uživatel v chatu dokončit. Odpovím návrhem toku bota, obrazovek Mini App a toho, co zůstane na serveru.
Dejte příštímu produktu někoho, kdo zůstane.
Chcete začít? Napište mi – mohu začít hned a zůstat. Dlouhodobé retainery, ne dvoutýdenní předání. Proberme váš projekt, požadavky a nejlepší cestu vpřed.