← بلاگ
توسعه5 دقیقه مطالعهتوسط:

چگونه در سال 2026 یک Telegram Mini App بسازیم: از نمونه اولیه تا 60,000 کاربر روزانه

راهنمای کامل توسعه Telegram Mini App از تجربه The Open Squad. استک (Next.js، FastAPI، TON SDK)، احراز هویت initData، پرداخت با Stars و USDT، استقرار و مقیاس‌پذیری.

Telegram Mini Apps از یک ویژگی آزمایشی به یک پلتفرم توزیع واقعی تبدیل شده‌اند: 200 میلیون کاربر هر ماه آن‌ها را باز می‌کنند، و این سریع‌ترین روش رشد برای عرضه محصول درون پیام‌رسان است. ما The Open Earn را در اوایل 2024 راه‌اندازی کردیم و در 18 ماه آن را به 60,000 کاربر فعال روزانه و بیش از 500,000 وظیفه تکمیل‌شده رساندیم. این راهنما چیزی است که ما انجام دادیم و چیزی است که در روز اول به خودمان می‌گفتیم.

Mini App در برابر بات معمولی: چه زمانی کدام را انتخاب کنیم

Telegram Bot یک رابط چت روی پیام‌هاست. Telegram Mini App یک برنامه وب کامل است که داخل Telegram باز می‌شود و به API پیام‌رسان دسترسی دارد.

یک بات معمولی کافی است وقتی:

  • جریان خطی است: دستورات ← پاسخ‌ها (escrow bot، notification bot)
  • پیچیدگی UI حداقل است
  • سرعت نمونه اولیه اهمیت دارد

به یک Mini App نیاز دارید وقتی:

  • UI پیچیده با ناوبری، فرم‌ها، لیست‌ها
  • تعامل در زمان واقعی
  • پرداخت از طریق Telegram Payments یا Stars
  • کاتالوگ محصولات، پروفایل کاربر، فید

در The Open Earn ما هر دو را اجرا می‌کنیم: یک بات برای اعلان‌ها و onboarding، یک Mini App برای رابط اصلی (موجودی، برداشت، آمار).

استک: چیزی که واقعاً استفاده می‌کنیم

استک تولید The Open Earn، بدون پر و بال‌های بازاریابی:

Frontend (Mini App):

  • Next.js 16 (App Router، SSR) — برای رندر اولیه سریع و SEO در صفحه فرود
  • React 19 + TypeScript
  • @twa-dev/sdk — یک wrapper روی Telegram Web Apps SDK (تم، viewport، رویدادها)
  • TonConnect SDK — برای اتصال کیف پول TON کاربر

Backend:

  • Python 3.12 + FastAPI — سرور API
  • aiogram 3.x — بات
  • PostgreSQL 16 — ذخیره‌سازی اصلی
  • Redis — کش جلسه، rate limiting، pub/sub برای workerها
  • Celery — کارهای پس‌زمینه (پرداخت‌ها، تأیید وظیفه)

زیرساخت:

  • یک سرور dedicated (8 GB RAM، 4 vCPU)
  • nginx به‌عنوان reverse proxy
  • PM2 برای فرآیندهای Node، systemd برای Python
  • Let's Encrypt برای SSL

این تا 50–100K DAU را مدیریت می‌کند. ما فقط زمانی مجبور به ارتقا شدیم که از 60K عبور کردیم — Postgres را به یک managed instance منتقل کردیم.

احراز هویت: initData و اعتبارسنجی سمت سرور

رایج‌ترین اشتباه مبتدی‌ها: اعتماد به Telegram.WebApp.initDataUnsafe. این در DevTools قابل جعل است.

جریان درست:

  1. Mini App هنگام راه‌اندازی، initData (raw string) را از Telegram از طریق JS SDK دریافت می‌کند
  2. آن را به backend شما در Authorization: TelegramInitData ... می‌فرستد
  3. backend امضا را با HMAC-SHA256 مبتنی بر bot token اعتبارسنجی می‌کند
  4. در امضای معتبر — user.id را استخراج کرده و یک token جلسه صادر می‌کند

اعتبارسنجی در Python:

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

همچنین auth_date را بررسی کنید — جلسات قدیمی‌تر از 24 ساعت را حذف کنید (محافظت در برابر replay).

پرداخت‌ها: Stars، TON، USDT

سه روش واقعی برای دریافت پول داخل اکوسیستم Telegram در 2026:

1. Telegram Stars (برای کالاهای دیجیتال) — از طریق Bot API: sendInvoice با currency: "XTR". فقط خریدهای ناملموس. Telegram حدود 30% می‌گیرد.

2. TON مستقیم — از طریق TonConnect: کاربر یک کیف پول متصل می‌کند و تراکنش را امضا می‌کند. کارمزد کسری از یک سنت است.

3. USDT روی TON (Jetton) — مانند TON اما به‌عنوان یک stablecoin. برای B2B و صورت‌حساب با قیمت ثابت مفید است.

در The Open Earn ما درآمدها را با USDT از طریق TonConnect پرداخت می‌کنیم — کاربران مبلغ دلاری می‌بینند، نه قیمت متغیر TON. حداقل برداشت: $1.

استقرار و مقیاس‌پذیری

ساده‌ترین چیدمان تولید برای 10K DAU اول:

[Cloudflare] → [nginx] → [Next.js on :3000] → [FastAPI on :8000] → [Postgres]
                                                  ↓
                                              [Redis]

چه چیزی برای ما در 30K DAU خراب شد و چگونه آن را برطرف کردیم:

  • Postgres connection pool تمام شد — pgbouncer اضافه کردیم و read/write را تقسیم کردیم
  • Redis OOM در پیک‌ها — maxmemory را افزایش دادیم، به allkeys-lru تغییر دادیم
  • تأخیر webhook بات — بررسی‌های سنگین را به Celery منتقل کردیم
  • CDN برای دارایی‌های استاتیک — به Cloudflare R2 منتقل کردیم

تنها قانونی که اهمیت دارد: اندازه‌گیری کنید، حدس نزنید. Sentry برای خطاها، Grafana + Prometheus برای متریک‌ها، از روز اول.

چه کارهایی را متفاوت انجام می‌دادیم

اگر دوباره از روز اول شروع می‌کردیم:

  1. از همان ابتدا به 2 سرویس تقسیم می‌کردیم — API عمومی (Mini App) و خصوصی (admin/workers). ادغام کردن ارزان‌تر از جدا کردن بعداً است.
  2. از روز اول feature flags استفاده می‌کردیم (Unleash، GrowthBook) — برای تست‌های A/B در دوره رشد مفید بود.
  3. از Next.js Server Actions استفاده می‌کردیم به‌جای یک لایه REST سفارشی برای فرم‌های ساده. کد کمتر.
  4. انیمیشن‌های زیبا را در روز اول رد می‌کردیم — کاربران برای عملکرد می‌آیند، نه برای جلا. جلا بعد از product-market fit معنا پیدا می‌کند.
  5. i18n را از روز اول می‌ساختیم — ترجمه‌ها به 12 زبان ترافیک ما را 4× افزایش داد، اما اضافه کردن آن‌ها بعداً دردناک بود.

بعد چه می‌شود

Mini Apps در 2026 دیگر "آزمایش Telegram" نیستند — آن‌ها یک کانال توزیع واقعی هستند. اگر محصول شما با مخاطبان فعال پیام‌رسان همپوشانی دارد، حداقل ارزش یک نمونه اولیه را دارد. استک شروع کوچک است، ریسک کمتر از یک اپلیکیشن موبایل بومی است.

اگر می‌خواهید ببینید این در تولید چگونه به نظر می‌رسد — The Open Earn را باز کنید یا مستقیم به بات بپرید.