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
Четыре части — и на третьей совершается большинство ошибок безопасности.
-
Бот
Создаётся в BotFather; даёт Mini App имя, ссылку и место в меню.
-
Веб-страница
Ваш интерфейс по HTTPS — любой стек, обычно React или простой HTML с небольшим JavaScript.
-
Подписанные данные
Telegram передаёт
initDataс подписью; сервер проверяет её, прежде чем поверить пользователю. -
Ваш бэкенд
Заказы, платежи, уведомления и общие данные с сайтом и CRM.
Для чего применяют Mini Apps: 8 сфер
Там, где аудитория уже живёт в Telegram, а окна чата мало.
-
01
Магазины и каталоги
Смотреть, фильтровать, собирать корзину и платить, не выходя из мессенджера.
-
02
Запись
Услуги, специалисты и свободное время с напоминаниями от бота.
-
03
Личные кабинеты
Заказы, бонусы и документы — вход без пароля.
-
04
Программы лояльности
Карта с кодом вместо пластика, баллы и предложения.
-
05
Платный контент
Курсы, подписки и цифровые товары за Telegram Stars.
-
06
Игры
Простые игры с отправкой друзьям и рейтингами.
-
07
Внутренние инструменты
Формы и дашборды для сотрудников, которые и так работают в Telegram.
-
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 правил
-
01
Проверять initData на сервере
Только проверка подписи на вашем сервере доказывает, кто пользователь.
-
02
initDataUnsafe — только для показа
Годится для приветствия, но не для доступа и цен.
-
03
Проверять возраст данных
auth_dateограничивает, сколько работает перехваченная подпись. -
04
Цены — на сервере
Браузер присылает, что выбрано, а сумму считает бэкенд.
-
05
Оплату подтверждает бот
Доступ открывается после
successful_payment, пришедшего боту, а не после ответа в браузере. -
06
Токен бота — в секрете
Он живёт в окружении сервера; у кого токен, тот управляет ботом.
Когда Mini App оправдан, а когда нет
Десять типичных ситуаций с вердиктом.
-
Аудитория уже приходит из Telegram-каналов
Лучший выборСамый короткий путь от поста до покупки.
-
Запись и повторные заказы
Лучший выборБез регистрации и с напоминаниями от бота.
-
Платные курсы и цифровой контент
Лучший выборStars и доступ в два касания.
-
Карта лояльности
Лучший выборВсегда под рукой в мессенджере.
-
Приложение вместо мобильного на старте
Лучший выборПроверить спрос до трат на нативные приложения.
-
Интернет-магазин
ПодходитКак дополнительный канал рядом с сайтом, с общими остатками.
-
B2B-сервис
ПодходитЕсли команды клиентов работают в Telegram.
-
Единственный канал бизнеса
Другой языкБез сайта бизнес не находят в поиске, и он зависит от одной платформы.
-
Аудитория вне Telegram
Другой языкСайт или мобильное приложение.
-
Сложный инструмент для многочасовой работы
Другой языкВеб-приложение в браузере удобнее.
Как выглядит Mini App: 3 примера
Страница с темой и главной кнопкой Telegram, серверная проверка подписи и счёт в Stars. Страница запущена в Chromium с настоящим скриптом Telegram, код на PHP проверен на PHP 8.5.
Страница Mini App
Тема пользователя, приветствие и главная кнопка, которая ведёт к оплате.
<!-- 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>
Проверка подписи на сервере
Настоящие данные проходят; изменённое имя, токен чужого бота и старые данные отклоняются.
<?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.
<?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, бэкенд, который проверяет каждую подпись, платежи и общие данные с вашим сайтом. Расскажите об идее — отвечу в течение рабочего дня.