Telegram Mini Apps: полный обзор платформы

Как устроены Telegram Mini Apps: бот, страница, подписанные данные пользователя и оплата в Stars; 8 сфер, плюсы и минусы, сравнение с ботом, сайтом и мобильным приложением, правила безопасности и примеры кода.

Стек и технологии Обновлено

Коротко

Telegram Mini App — обычная веб-страница, которая открывается внутри Telegram как полноценный интерфейс: каталоги, запись, личные кабинеты, игры и оплата — без установки и без регистрации, потому что Telegram уже знает пользователя. Её делают на любых веб-технологиях, а Telegram добавляет мост JavaScript к своему интерфейсу — главную кнопку, тему, вибрацию, хранилище, платежи. Главное правило безопасности: данные пользователя приходят подписанными Telegram и проверяются только на сервере. Цифровые товары внутри Telegram оплачиваются в Telegram Stars, физические товары и услуги — через платёжные сервисы. Цена — зависимость от платформы: её правила, её модерация и отсутствие в поиске.

Telegram Mini Apps коротко: паспорт платформы

Главные факты о платформе одной таблицей.

Что это
Веб-приложение, которое открывается внутри Telegram через бота
С какого года
2022 (Bot API 6.0); полноэкранный режим и ярлыки на рабочий стол — с 2024-го
Аудитория
Telegram — больше миллиарда пользователей в месяц
Технологии
Любой веб-стек: HTML, CSS, JavaScript или TypeScript, React, Vue
Мост к Telegram
Telegram.WebApp из telegram-web-app.js или пакет @telegram-apps/sdk
Вход
Без пароля: Telegram передаёт подписанные данные пользователя — initData
Интерфейс
Главная и дополнительная кнопки, кнопка «Назад», цвета темы, вибрация, полный экран
Хранилище
CloudStorage в аккаунте пользователя; хранилище на устройстве и защищённое
Платежи
Цифровые товары — Telegram Stars; физические товары и услуги — платёжные сервисы
Запуск
Кнопка меню, кнопка в сообщении, прямая ссылка t.me/bot/app, меню вложений
Где работает
Telegram на iOS, Android, компьютере и в браузере

Как устроено Mini App

Четыре части — и на третьей совершается большинство ошибок безопасности.

  1. Бот

    Создаётся в BotFather; даёт Mini App имя, ссылку и место в меню.

  2. Веб-страница

    Ваш интерфейс по HTTPS — любой стек, обычно React или простой HTML с небольшим JavaScript.

  3. Подписанные данные

    Telegram передаёт initData с подписью; сервер проверяет её, прежде чем поверить пользователю.

  4. Ваш бэкенд

    Заказы, платежи, уведомления и общие данные с сайтом и CRM.

Для чего применяют Mini Apps: 8 сфер

Там, где аудитория уже живёт в Telegram, а окна чата мало.

  1. 01

    Магазины и каталоги

    Смотреть, фильтровать, собирать корзину и платить, не выходя из мессенджера.

    корзинаплатежи

  2. 02

    Запись

    Услуги, специалисты и свободное время с напоминаниями от бота.

    календарь

  3. 03

    Личные кабинеты

    Заказы, бонусы и документы — вход без пароля.

    initData

  4. 04

    Программы лояльности

    Карта с кодом вместо пластика, баллы и предложения.

    QR

  5. 05

    Платный контент

    Курсы, подписки и цифровые товары за Telegram Stars.

    Stars

  6. 06

    Игры

    Простые игры с отправкой друзьям и рейтингами.

    шеринг

  7. 07

    Внутренние инструменты

    Формы и дашборды для сотрудников, которые и так работают в Telegram.

    сотрудники

  8. 08

    Сообщества и события

    Регистрация, билеты и расписание для аудитории канала.

    билеты

Плюсы и минусы Telegram Mini Apps

Mini App убирает главные барьеры перед первой покупкой — и ставит продукт на чужую платформу.

Плюсы · 8

  • Без установки

    Открывается по ссылке или кнопке за секунду.

  • Без регистрации

    Пользователь уже известен — никаких форм и паролей перед первым действием.

  • Аудитория уже там

    Каналы, чаты и боты приводят людей прямо в приложение.

  • Уведомления через бота

    Статус заказа и напоминания приходят сообщениями, которые действительно читают.

  • Веб-технологии

    Те же навыки и код, что для сайта; обновления без проверки магазинами приложений.

  • Оплата в два касания

    Stars для цифровых товаров и платёжные сервисы для физических.

  • Все платформы сразу

    iOS, Android и компьютер из одной кодовой базы.

  • Ощущение родного

    Тема, кнопки и вибрация Telegram делают приложение встроенным.

Минусы · 8

  • Зависимость от платформы

    Правила, комиссии и изменения API Telegram касаются вашего продукта.

  • Нет в поиске

    Поисковики не индексируют Mini Apps — чтобы вас находили, всё равно нужен сайт.

  • Только пользователи Telegram

    Клиенты, которые не пользуются Telegram, не охвачены.

  • Stars для цифровых товаров

    Оплата картой за цифровые товары внутри Telegram не допускается.

  • Разные движки браузера

    Клиенты iOS, Android и компьютера отрисовывают немного по-разному — проверять на всех.

  • Частые ошибки безопасности

    Доверие к данным пользователя в браузере позволяет кому угодно выдать себя за другого.

  • Маленький экран

    Интерфейс живёт в панели телефона — сложные экраны нужно упрощать.

  • Риск блокировок

    В некоторых странах доступ к Telegram ограничен — аудитория от этого зависит.

Mini App и другие: сравнение с ботом, сайтом и мобильным приложением

Четыре способа дойти до клиента рядом друг с другом.

КритерийMini AppЧат-ботСайтМобильное приложение
Установка нет нет нет из магазина
Регистрация нет, через Telegram нет форма форма или сервис
Интерфейс полноценный кнопки и сообщения полноценный самый богатый
Находят в поиске нет нет да в магазинах
Уведомления через бота сообщения почта и push push
Стоимость разработки средняя низкая средняя высокая
Лучше всего для аудитории, которая живёт в Telegram простых сценариев поиска и доверия продуктов на каждый день

Безопасность Mini App: 6 правил

  1. 01

    Проверять initData на сервере

    Только проверка подписи на вашем сервере доказывает, кто пользователь.

  2. 02

    initDataUnsafe — только для показа

    Годится для приветствия, но не для доступа и цен.

  3. 03

    Проверять возраст данных

    auth_date ограничивает, сколько работает перехваченная подпись.

  4. 04

    Цены — на сервере

    Браузер присылает, что выбрано, а сумму считает бэкенд.

  5. 05

    Оплату подтверждает бот

    Доступ открывается после successful_payment, пришедшего боту, а не после ответа в браузере.

  6. 06

    Токен бота — в секрете

    Он живёт в окружении сервера; у кого токен, тот управляет ботом.

Когда Mini App оправдан, а когда нет

Десять типичных ситуаций с вердиктом.

  • Аудитория уже приходит из Telegram-каналов

    Лучший выбор

    Самый короткий путь от поста до покупки.

  • Запись и повторные заказы

    Лучший выбор

    Без регистрации и с напоминаниями от бота.

  • Платные курсы и цифровой контент

    Лучший выбор

    Stars и доступ в два касания.

  • Карта лояльности

    Лучший выбор

    Всегда под рукой в мессенджере.

  • Приложение вместо мобильного на старте

    Лучший выбор

    Проверить спрос до трат на нативные приложения.

  • Интернет-магазин

    Подходит

    Как дополнительный канал рядом с сайтом, с общими остатками.

  • B2B-сервис

    Подходит

    Если команды клиентов работают в Telegram.

  • Единственный канал бизнеса

    Другой язык

    Без сайта бизнес не находят в поиске, и он зависит от одной платформы.

  • Аудитория вне Telegram

    Другой язык

    Сайт или мобильное приложение.

  • Сложный инструмент для многочасовой работы

    Другой язык

    Веб-приложение в браузере удобнее.

Как выглядит Mini App: 3 примера

Страница с темой и главной кнопкой Telegram, серверная проверка подписи и счёт в Stars. Страница запущена в Chromium с настоящим скриптом Telegram, код на PHP проверен на PHP 8.5.

Страница Mini App

Тема пользователя, приветствие и главная кнопка, которая ведёт к оплате.

index.html
<!-- Mini App — обычная веб-страница, которая открывается внутри Telegram -->
<script src="https://telegram.org/js/telegram-web-app.js"></script>
<style>
  /* Telegram передаёт тему пользователя CSS-переменными */
  body { background: var(--tg-theme-bg-color, #fff); color: var(--tg-theme-text-color, #000); }
</style>

<h1>Премиум-курс</h1>
<p id="hello"></p>

<script>
  const app = Telegram.WebApp;
  app.ready(); // интерфейс готов: Telegram убирает свою заставку

  const name = app.initDataUnsafe.user?.first_name ?? 'гость';
  document.getElementById('hello').textContent = `Привет, ${name}!`;

  // главная кнопка живёт в интерфейсе самого Telegram, внизу экрана
  app.MainButton.setText('Купить за 50 ⭐').show().onClick(async () => {
    // initData уходит на сервер: он проверяет подпись и создаёт счёт
    const res = await fetch('/api/invoice', { method: 'POST', body: app.initData });
    const { link } = await res.json();
    app.openInvoice(link, (status) => {
      if (status === 'paid') app.showAlert('Спасибо! Доступ открыт.');
    });
  });
</script>

Проверка подписи на сервере

Настоящие данные проходят; изменённое имя, токен чужого бота и старые данные отклоняются.

verify.php
<?php
declare(strict_types=1);

// initData подписан Telegram: проверяем на сервере и не верим браузеру
function verifyInitData(string $initData, string $botToken, int $maxAge = 3600): ?array
{
    parse_str($initData, $fields);
    $hash = $fields['hash'] ?? '';
    unset($fields['hash']);

    ksort($fields);
    $check = implode("\n", array_map(fn($k, $v) => "$k=$v", array_keys($fields), $fields));

    $secret = hash_hmac('sha256', $botToken, 'WebAppData', true);
    if (!hash_equals(hash_hmac('sha256', $check, $secret), $hash)) {
        return null;                                   // подделанные или повреждённые данные
    }
    if (time() - (int) ($fields['auth_date'] ?? 0) > $maxAge) {
        return null;                                   // данные слишком старые
    }
    return json_decode($fields['user'] ?? 'null', true);
}

Счёт в Telegram Stars

Сервер создаёт ссылку на оплату, а страница открывает её через openInvoice.

invoice.php
<?php
declare(strict_types=1);

// счёт в Telegram Stars: цифровые товары внутри Telegram оплачиваются только так
function createStarsInvoice(string $botToken, string $title, int $stars, string $payload): string
{
    $api = getenv('TG_API') ?: 'https://api.telegram.org';
    $request = [
        'title'          => $title,
        'description'    => "Доступ: $title",
        'payload'        => $payload,              // номер вашего заказа, вернётся после оплаты
        'currency'       => 'XTR',                 // XTR = Telegram Stars
        'prices'         => [['label' => $title, 'amount' => $stars]],
        'provider_token' => '',                    // для Stars — пустой
    ];
    $context = stream_context_create(['http' => [
        'method'  => 'POST',
        'header'  => 'Content-Type: application/json',
        'content' => json_encode($request),
    ]]);
    $response = json_decode(file_get_contents("$api/bot$botToken/createInvoiceLink", false, $context), true);
    if (!($response['ok'] ?? false)) {
        throw new RuntimeException($response['description'] ?? 'Telegram API error');
    }
    return $response['result'];                    // ссылка для Telegram.WebApp.openInvoice()
}

Вопросы о Telegram Mini Apps

Что такое Telegram Mini App?

Веб-приложение, которое открывается внутри Telegram через бота, — полноценный интерфейс без установки и регистрации.

На чём пишут Mini App?

На любом веб-стеке: обычно React с TypeScript или простой HTML; бэкенд — на любом языке.

Как работает оплата?

Цифровые товары — только в Telegram Stars; физические товары и услуги — через подключённые платёжные сервисы.

Находят ли Mini App в поиске?

Нет. Поисковики их не индексируют — чтобы вас находили, нужен сайт.

Откуда приложение знает пользователя?

Telegram передаёт подписанные данные; сервер проверяет подпись токеном бота и верит только проверенным.

Может ли Mini App делить данные с нашим сайтом?

Да, через общий бэкенд: заказы, остатки и клиенты общие.

Работает ли Mini App на компьютере?

Да, в Telegram Desktop и веб-версии, а также на iOS и Android.

Mini App или обычный бот?

Для кнопок и сообщений хватит бота; для каталога, календаря или корзины нужен Mini App.

Форма

Разработка
Mini Apps

Делаю Telegram Mini Apps и ботов: интерфейс на React и TypeScript, бэкенд, который проверяет каждую подпись, платежи и общие данные с вашим сайтом. Расскажите об идее — отвечу в течение рабочего дня.

Или пишите на [email protected]