2026'da Telegram Mini App Nasıl Geliştirilir: Prototipten Günlük 60.000 Kullanıcıya
The Open Squad deneyiminden Telegram Mini App geliştirmeye dair tam rehber. Stack (Next.js, FastAPI, TON SDK), initData kimlik doğrulama, Stars ve USDT ödemeleri, dağıtım ve ölçekleme.
Telegram Mini Apps deneysel bir özellikten gerçek bir dağıtım platformuna büyüdü: her ay 200 milyon kullanıcı onları açıyor ve mesajlaşma uygulaması içinde ürün göndermenin en hızlı büyüyen yolu. The Open Earn'i 2024 başında başlattık ve 18 ay içinde 60.000 günlük aktif kullanıcıya ve 500.000+ tamamlanmış göreve büyüttük. Bu rehber, yaptıklarımız ve kendimize ilk gün söyleyeceklerimiz.
Mini App vs normal bot: hangisini ne zaman seçmeli
Telegram Bot, mesajlar üzerine bir sohbet arayüzüdür. Telegram Mini App ise Telegram içinde açılan ve mesajlaşma uygulamasının API'sine erişimi olan tam bir web uygulamasıdır.
Normal bot şu durumlarda yeterlidir:
- Akış doğrusal: komutlar → yanıtlar (escrow bot, bildirim botu)
- UI karmaşıklığı minimal
- Prototip hızı önemli
Mini App şu durumlarda gereklidir:
- Navigasyon, form, listelerle karmaşık UI
- Gerçek zamanlı etkileşim
- Telegram Payments veya Stars üzerinden ödemeler
- Ürün katalogları, kullanıcı profilleri, feed
The Open Earn'de ikisini de çalıştırıyoruz: bildirimler ve onboarding için bir bot, ana arayüz (bakiye, çekme, istatistikler) için bir Mini App.
Stack: gerçekten kullandıklarımız
The Open Earn'in üretim stack'i, pazarlama gevezeliği yok:
Frontend (Mini App):
- Next.js 16 (App Router, SSR) — hızlı ilk render ve landing'de SEO için
- React 19 + TypeScript
- @twa-dev/sdk — Telegram Web Apps SDK etrafında bir wrapper (tema, viewport, events)
- TonConnect SDK — kullanıcının TON cüzdanını bağlamak için
Backend:
- Python 3.12 + FastAPI — API sunucusu
- aiogram 3.x — bot
- PostgreSQL 16 — birincil depolama
- Redis — oturum önbelleği, rate limiting, worker'lar için pub/sub
- Celery — arka plan işleri (ödemeler, görev doğrulama)
Altyapı:
- Bir dedicated sunucu (8 GB RAM, 4 vCPU)
- Reverse proxy olarak nginx
- Node süreçleri için PM2, Python için systemd
- SSL için Let's Encrypt
Bu 50–100K DAU'ya kadar idare ediyor. Sadece 60K'yı geçtiğimizde yükseltmek zorunda kaldık — Postgres'i bir managed instance'a taşıdık.
Kimlik Doğrulama: initData ve sunucu tarafı doğrulama
En yaygın acemi hatası: Telegram.WebApp.initDataUnsafe'e güvenmek. Bu DevTools'ta sahteleştirilebilir.
Doğru akış:
- Mini App, başlatıldığında JS SDK aracılığıyla Telegram'dan
initData(raw string) alır - Bunu backend'inize
Authorization: TelegramInitData ...ile gönderir - Backend, bot token ile anahtarlanmış HMAC-SHA256 ile imzayı doğrular
- Geçerli imzada —
user.id'yi çıkarın ve bir oturum tokeni verin
Python'da doğrulama:
import hmac, hashlib
from urllib.parse import parse_qs
def validate_init_data(init_data: str, bot_token: str) -> dict:
parsed = parse_qs(init_data)
received_hash = parsed.pop("hash")[0]
data_check = "\n".join(f"{k}={v[0]}" for k, v in sorted(parsed.items()))
secret = hmac.new(b"WebAppData", bot_token.encode(), hashlib.sha256).digest()
expected = hmac.new(secret, data_check.encode(), hashlib.sha256).hexdigest()
if not hmac.compare_digest(expected, received_hash):
raise ValueError("Invalid signature")
return parsed
Ayrıca auth_date'i kontrol edin — 24 saatten eski oturumları bırakın (replay koruması).
Ödemeler: Stars, TON, USDT
2026'da Telegram ekosistemi içinde para almanın üç gerçek yolu:
1. Telegram Stars (dijital ürünler için) — currency: "XTR" ile Bot API: sendInvoice aracılığıyla. Yalnızca soyut satın alımlar. Telegram ~%30 alır.
2. TON doğrudan — TonConnect aracılığıyla: kullanıcı bir cüzdan bağlar ve işlemi imzalar. Ücretler bir sentin küçük bir kısmı.
3. TON üzerinde USDT (Jetton) — TON ile aynı ama bir stablecoin olarak. B2B ve sabit fiyatlı faturalama için kullanışlı.
The Open Earn'de TonConnect aracılığıyla USDT olarak kazanç ödüyoruz — kullanıcılar dolar tutarı görür, dalgalanan TON fiyatı değil. Minimum çekme: $1.
Dağıtım ve ölçekleme
İlk 10K DAU için en basit üretim düzeni:
[Cloudflare] → [nginx] → [Next.js on :3000] → [FastAPI on :8000] → [Postgres]
↓
[Redis]
30K DAU'da bizim için bozulan ne ve nasıl düzelttik:
- Postgres connection pool tükendi — pgbouncer eklendi ve read/write ayrıldı
- Redis OOM zirvelerde —
maxmemoryartırıldı,allkeys-lru'ya geçildi - Bot webhook latency — ağır kontroller Celery'e taşındı
- Static asset CDN — Cloudflare R2'ye gönderildi
Önemli olan tek kural: ölç, tahmin etme. Hatalar için Sentry, metrikler için Grafana + Prometheus, ilk gün.
Farklı yapacağımız şeyler
İlk günden tekrar başlasaydık:
- Baştan 2 servise böl — public API (Mini App) ve private (admin/workers). Birleştirmek sonradan ayırmaktan ucuzdur.
- İlk günden feature flags gönder (Unleash, GrowthBook) — büyüme sırasında A/B testleri için yararlı olurdu.
- Basit formlar için özel bir REST katmanı yerine Next.js Server Actions kullan. Daha az kod.
- İlk gün güzel animasyonları atla — kullanıcılar işlev için gelir, parlatma için değil. Parlatma product-market fit sonrası mantıklı.
- İlk günden i18n inşa et — 12 dilde çeviriler trafiğimizi 4× artırdı, ama onları sonradan eklemek acı vericiydi.
Sırada ne var
2026'da Mini Apps artık "Telegram'ın deneyi" değil — gerçek bir dağıtım kanalı. Ürününüz mesajlaşma uygulamasının aktif kitlesiyle örtüşüyorsa, en azından bir prototip değer. Başlangıç stack'i küçük, risk yerel mobil uygulamadan daha düşük.
Bunun üretimde nasıl göründüğünü görmek istiyorsanız — The Open Earn açın veya doğrudan bot'a atlayın.