Mini Apps
Мини-приложения — это веб-страницы, которые открываются прямо внутри Telefon с доступом к Telefon API.
Когда использовать
- Магазин с корзиной и оплатой
- Форма заказа / заявка
- Калькулятор / конвертер
- Список товаров с фильтрами
- Бронирование
- Игры
Запуск Mini App
Бот шлёт inline-кнопку с web_app:
{
"chat_id": 12345,
"text": "Откройте магазин:",
"reply_markup": {
"inline_keyboard": [[
{"text": "🛍 Открыть", "web_app": {"url": "https://shop.example.com"}}
]]
}
}
При тапе откроется ваш URL внутри Telefon с доступом к JS API.
Привязка к боту
В настройках бота → секция Mini App → введите URL и текст кнопки меню. Эта кнопка будет видна в шапке чата с ботом.
JS API внутри мини-аппы
<script src="https://telefon.chat/web-app.js"></script>
<script>
const tg = window.Telefon.WebApp;
tg.ready();
// Данные пользователя
console.log(tg.initData);
console.log(tg.initDataUnsafe.user);
// Главная кнопка снизу
tg.MainButton.setText('Заказать').show();
tg.MainButton.onClick(() => {
tg.sendData(JSON.stringify({order: 'pizza'}));
tg.close();
});
// Тема
tg.setHeaderColor('#0a84ff');
if (tg.colorScheme === 'dark') {
document.body.classList.add('dark');
}
</script>
Получение данных в боте
После tg.sendData(...):
{
"update_id": 123,
"message": {
"web_app_data": {
"data": "{\"order\": \"pizza\"}",
"button_text": "Заказать"
},
...
}
}
Проверка подлинности initData
initData содержит подписанные данные пользователя. Проверять обязательно:
import hashlib, hmac
from urllib.parse import parse_qsl
def verify_init_data(init_data: str, bot_token: str) -> bool:
parsed = dict(parse_qsl(init_data))
received_hash = parsed.pop('hash')
sorted_pairs = sorted(parsed.items())
data_check_string = '\n'.join(f'{k}={v}' for k, v in sorted_pairs)
secret_key = hmac.new(b'WebAppData', bot_token.encode(), hashlib.sha256).digest()
expected_hash = hmac.new(secret_key, data_check_string.encode(), hashlib.sha256).hexdigest()
return hmac.compare_digest(expected_hash, received_hash)
Direct Link
Прямая ссылка на Mini App с параметром:
https://telefon.chat/<BOT_USERNAME>?startapp=PARAMETER
Параметр PARAMETER приходит в initData как start_param. Удобно для deep-linking — например, ссылка на конкретный товар.
Готовые шаблоны
- Открытые мини-приложения на GitHub — большинство совместимы с нашей платформой.
- React-обёртка для удобного использования API доступна как npm-пакет в виде хуков (
useWebApp,useMainButtonи т.д.).