📅 11 апреля 2026 ⏱ 13 минут чтения ✍️ Команда Nexora

Введение: Telegram Mini Apps в 2025 году

Telegram Mini Apps (ранее Web Apps) — это полноценные веб-приложения, работающие внутри мессенджера Telegram. Они позволяют создавать интерактивные сервисы, игры, боты с интерфейсом и многое другое, не требуя установки отдельного приложения. В 2025 году экосистема Telegram Mini Apps активно развивается, появляются новые возможности для монетизации и интеграции.

В этом полном гайде мы разберёмся, как создать функциональное Telegram Mini App на React с нуля, интегрировать платежи, получить данные пользователя и развернуть приложение в продакшене.

Подготовка: что нужно знать

Перед началом разработки убедитесь, что у вас есть:

Создание React приложения и установка зависимостей

Начните с создания React приложения через Vite (быстрее чем Create React App):

npm create vite@latest telegram-mini-app -- --template react
cd telegram-mini-app
npm install

Установите необходимые зависимости:

npm install @twa-dev/sdk axios react-router-dom

Зависимости:

Инициализация Telegram Web App SDK

Первый шаг — инициализировать Telegram SDK в вашем приложении. Отредактируйте main.jsx:

import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App'
import './index.css'

// Инициализируем Telegram SDK
const twa = window.Telegram?.WebApp
if (twa) {
  twa.ready()
  // Установим высоту на всю высоту экрана
  twa.expand()
  // Включим back button если это не стартовая страница
  if (window.history.length > 1) {
    twa.BackButton.show()
  }
}

ReactDOM.createRoot(document.getElementById('root')).render(
  
    
  ,
)

Получение данных пользователя из Telegram

Telegram автоматически передаёт информацию о пользователе через startParam:

// src/hooks/useTelegramData.js
import { useEffect, useState } from 'react'

export const useTelegramData = () => {
  const [user, setUser] = useState(null)
  const [loading, setLoading] = useState(true)

  useEffect(() => {
    const twa = window.Telegram?.WebApp

    if (twa) {
      const initData = twa.initData
      const initDataUnsafe = twa.initDataUnsafe

      setUser({
        id: initDataUnsafe?.user?.id,
        firstName: initDataUnsafe?.user?.first_name,
        lastName: initDataUnsafe?.user?.last_name,
        username: initDataUnsafe?.user?.username,
        photoUrl: initDataUnsafe?.user?.photo_url,
        isPremium: initDataUnsafe?.user?.is_premium,
        languageCode: initDataUnsafe?.user?.language_code,
        initData: initData
      })

      setLoading(false)
    }
  }, [])

  return { user, loading }
}

Создание основного компонента приложения

Создайте главный компонент App.jsx:

import { useEffect, useState } from 'react'
import { useTelegramData } from './hooks/useTelegramData'
import './App.css'

function App() {
  const { user, loading } = useTelegramData()
  const [theme, setTheme] = useState('light')

  useEffect(() => {
    // Получаем текущую тему Telegram
    const twa = window.Telegram?.WebApp
    if (twa) {
      setTheme(twa.colorScheme)

      // Слушаем изменение темы
      const handleThemeChange = () => {
        setTheme(twa.colorScheme)
      }

      twa.onEvent('themeChanged', handleThemeChange)
      return () => {
        twa.offEvent('themeChanged', handleThemeChange)
      }
    }
  }, [])

  if (loading) {
    return 
Загрузка...
} return (

Добро пожаловать!

{user &&

Привет, {user.firstName}!

}
{user?.photoUrl && ( {user.firstName} )}

{user?.firstName} {user?.lastName}

{user?.username &&

@{user.username}

} {user?.isPremium && Premium ⭐}
) } function handleAction(action) { const twa = window.Telegram?.WebApp if (twa) { twa.HapticFeedback.impactOccurred('light') if (action === 'buy') { // Запустим платёж (см. следующий раздел) } else if (action === 'share') { // Поделимся приложением } } } export default App

Интеграция платежей Telegram Stars

Telegram Stars — это встроенная система платежей. Вот как её использовать:

// src/services/payments.js
import axios from 'axios'

export const initiateTelegramStarsPayment = async (userId, amount, description) => {
  const twa = window.Telegram?.WebApp

  if (!twa) {
    console.error('Telegram SDK не инициализирован')
    return
  }

  try {
    // Отправляем запрос на backend
    const response = await axios.post('/api/payments/create', {
      user_id: userId,
      amount: amount,
      description: description,
      currency: 'XTR' // Telegram Stars
    })

    const invoiceLink = response.data.invoice_link

    // Открываем платёж через Web App
    twa.openInvoice(invoiceLink, (status) => {
      if (status === 'paid') {
        console.log('Платёж успешен!')
        twa.showAlert('Спасибо за платёж! 🎉')
      } else if (status === 'cancelled') {
        console.log('Платёж отменён пользователем')
      } else if (status === 'failed') {
        console.log('Ошибка при платеже')
      }
    })
  } catch (error) {
    console.error('Ошибка при создании платежа:', error)
    twa.showAlert('Ошибка при обработке платежа')
  }
}

// Альтернативный способ через Bot API
export const openInvoice = (invoiceLink) => {
  const twa = window.Telegram?.WebApp
  if (twa) {
    twa.openInvoice(invoiceLink)
  }
}

Работа с кнопками и уведомлениями

Telegram предоставляет встроенные кнопки и уведомления:

// src/utils/telegramUI.js

export const showConfirmButton = (text, callback) => {
  const twa = window.Telegram?.WebApp
  if (twa) {
    twa.MainButton.setText(text)
    twa.MainButton.onClick(callback)
    twa.MainButton.show()
  }
}

export const hideConfirmButton = () => {
  const twa = window.Telegram?.WebApp
  if (twa) {
    twa.MainButton.hide()
  }
}

export const showAlert = (message) => {
  const twa = window.Telegram?.WebApp
  if (twa) {
    twa.showAlert(message)
  }
}

export const showConfirm = (message) => {
  return new Promise((resolve) => {
    const twa = window.Telegram?.WebApp
    if (twa) {
      twa.showConfirm(message, (isConfirmed) => {
        resolve(isConfirmed)
      })
    }
  })
}

export const showPopup = (title, buttons) => {
  return new Promise((resolve) => {
    const twa = window.Telegram?.WebApp
    if (twa) {
      twa.showPopup({
        title: title,
        buttons: buttons
      }, (buttonId) => {
        resolve(buttonId)
      })
    }
  })
}

export const hapticFeedback = (type = 'light') => {
  const twa = window.Telegram?.WebApp
  if (twa) {
    twa.HapticFeedback.impactOccurred(type)
  }
}

export const openTelegramLink = (username) => {
  const twa = window.Telegram?.WebApp
  if (twa) {
    twa.openTelegramLink(`https://t.me/${username}`)
  }
}

Пример: создание простого игрового приложения

Давайте создадим простую игру-кликер внутри Telegram:

// src/components/ClickerGame.jsx
import { useState, useEffect } from 'react'
import { useTelegramData } from '../hooks/useTelegramData'
import { hapticFeedback, showAlert } from '../utils/telegramUI'
import './ClickerGame.css'

export default function ClickerGame() {
  const { user } = useTelegramData()
  const [clicks, setClicks] = useState(0)
  const [level, setLevel] = useState(1)
  const [multiplier, setMultiplier] = useState(1)
  const [energy, setEnergy] = useState(100)
  const [maxEnergy, setMaxEnergy] = useState(100)

  // Автовосстановление энергии
  useEffect(() => {
    const interval = setInterval(() => {
      setEnergy(prev => Math.min(prev + 1, maxEnergy))
    }, 1000)

    return () => clearInterval(interval)
  }, [maxEnergy])

  const handleClick = () => {
    if (energy < 10) {
      showAlert('Недостаточно энергии!')
      return
    }

    hapticFeedback('light')
    const earnedClicks = 10 * multiplier
    setClicks(prev => prev + earnedClicks)
    setEnergy(prev => prev - 10)

    // Повышаем уровень каждые 1000 клик
    if (clicks > 0 && clicks % 1000 === 0) {
      setLevel(prev => prev + 1)
    }
  }

  const buyUpgrade = (cost, stateName, stateSetter, increase) => {
    if (clicks >= cost) {
      setClicks(prev => prev - cost)
      stateSetter(prev => prev + increase)
      hapticFeedback('medium')
      showAlert('Улучшение куплено!')
    } else {
      showAlert('Недостаточно денег!')
    }
  }

  return (
    

🎮 Telegram Clicker

Уровень: {level}
Энергия: {energy}/{maxEnergy}

Множитель: {multiplier}x

🛍️ Улучшения

) }

Структурирование проекта

Рекомендуемая структура директорий для большого проекта:

src/
├── components/
│   ├── Header.jsx
│   ├── MainButton.jsx
│   ├── GameScreen.jsx
│   └── ProfileScreen.jsx
├── hooks/
│   ├── useTelegramData.js
│   └── useLocalStorage.js
├── services/
│   ├── api.js
│   ├── payments.js
│   └── database.js
├── utils/
│   ├── telegramUI.js
│   ├── validators.js
│   └── constants.js
├── pages/
│   ├── Home.jsx
│   ├── Profile.jsx
│   └── Shop.jsx
├── styles/
│   ├── index.css
│   ├── theme.css
│   └── components.css
├── App.jsx
└── main.jsx

Backend для Telegram Mini App

Вам нужен backend для обработки платежей и сохранения данных. Вот пример на Node.js:

// server.js (Node.js + Express)
import express from 'express'
import axios from 'axios'

const app = express()
app.use(express.json())

const TELEGRAM_BOT_TOKEN = 'your-bot-token'
const TELEGRAM_API = 'https://api.telegram.org'

// Создание счёта для платежа
app.post('/api/payments/create', async (req, res) => {
  const { user_id, amount, description } = req.body

  try {
    const response = await axios.post(
      `${TELEGRAM_API}/bot${TELEGRAM_BOT_TOKEN}/createInvoiceLink`,
      {
        title: description,
        description: `Платёж от пользователя ${user_id}`,
        payload: JSON.stringify({ user_id, timestamp: Date.now() }),
        provider_token: 'YOUR_PROVIDER_TOKEN',
        currency: 'XTR',
        prices: [
          { label: description, amount: amount * 100 }
        ]
      }
    )

    res.json({ invoice_link: response.data.result.invoice_link })
  } catch (error) {
    console.error('Ошибка при создании платежа:', error)
    res.status(500).json({ error: 'Failed to create invoice' })
  }
})

// Обработка webhook от Telegram
app.post('/webhook', express.json(), (req, res) => {
  const { message, pre_checkout_query, successful_payment } = req.body

  if (pre_checkout_query) {
    // Ответьте на pre-checkout запрос
    axios.post(
      `${TELEGRAM_API}/bot${TELEGRAM_BOT_TOKEN}/answerPreCheckoutQuery`,
      {
        pre_checkout_query_id: pre_checkout_query.id,
        ok: true
      }
    )
  }

  if (successful_payment) {
    console.log('Платёж успешен:', successful_payment)
    // Сохраните информацию о платеже в БД
  }

  res.sendStatus(200)
})

app.listen(3000, () => console.log('Server running on port 3000'))

Развёртывание Telegram Mini App

1. Подготовка к продакшену

npm run build

2. Загрузка на сервер

Загрузите содержимое папки dist/ на ваш сервер. Используйте Nginx или Apache для раздачи статических файлов.

3. Регистрация Mini App в Telegram

Отправьте команду боту через BotFather:

/newapp
Укажите название и URL вашего приложения

4. Запуск Mini App из бота

from telegram import Update, InlineKeyboardMarkup, InlineKeyboardButton, WebAppInfo
from telegram.ext import ContextTypes

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    keyboard = [
        [InlineKeyboardButton(
            "🚀 Открыть приложение",
            web_app=WebAppInfo(url="https://your-app.com")
        )]
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)

    await context.bot.send_message(
        chat_id=update.effective_chat.id,
        text="Добро пожаловать! Нажмите кнопку ниже, чтобы открыть приложение.",
        reply_markup=reply_markup
    )

Лучшие практики разработки Telegram Mini App

Заключение

Создание Telegram Mini App на React — это увлекательный способ построить пользовательскую аудиторию и получить доступ к встроенным платежам. В 2025 году это один из самых быстрорастущих способов разработки приложений благодаря огромной аудитории Telegram и простоте интеграции.

Начните с простого приложения, постепенно добавляйте функции, интегрируйте платежи и масштабируйте. Если вам нужна помощь с разработкой сложного Telegram Mini App, команда Nexora имеет опыт создания успешных приложений для этой платформы.

Ключевые поисковые запросы: Telegram Mini App разработка, создание Web App на Telegram, React Telegram App, Telegram платежи, TMA SDK, Telegram Stars интеграция, создание бота с интерфейсом, Web App API Telegram.

Нужна помощь с разработкой Telegram Mini App?

Команда Nexora разрабатывает Telegram Mini Apps с интеграцией платежей и полным функционалом. Получите консультацию по вашему проекту.

Рассчитать стоимость Написать нам