Telegram Web App (или Telegram Mini Apps) — это веб-приложения, которые функционируют внутри мессенджера Telegram, используя стандартные веб-технологии, такие как HTML, CSS и JavaScript. Они представлены в виде веб-страниц, которые интегрированы с Telegram. Это позволяет пользователям взаимодействовать с ботами, синхронизировать данные и получать удобный доступ к различным сервисам.
Мини-приложения в Telegram делают взаимодействие с цифровыми сервисами проще и добавляют новые возможности мессенджеру. Они могут использоваться для решения различных задач: от покупок и бронирований до игр и розыгрышей. Например, Telegram Web Apps позволяют запускать онлайн-магазины, игровые платформы или сервисы аналитики прямо в чатах.
Идея Telegram Mini Apps зародилась, когда Павел Дуров представил концепцию веб-приложений, работающих внутри Telegram. Изначально называвшиеся WebApps, они стали частью стратегии по превращению Telegram в универсальную платформу. Это позволило разработчикам использовать знакомые веб-технологии для создания сервисов без необходимости разрабатывать отдельные мобильные или десктопные приложения.
Миграция в облако
безопасно и с гарантией результата.
Предоставим грант до 1 000 000 ₽ на облачную
инфраструктуру и возьмем на себя весь процесс.
Возможности Telegram Web App
Telegram Web Apps предоставляют множество преимуществ, и для тех, кто использует продукт, и для тех, кто его создает.
Для пользователей
- Легкость доступа: Запуск Web Apps осуществляется прямо из Telegram, без установки дополнительных программ.
- Интерактивность: От простых форм до сложных игр — Web Apps обеспечивают разнообразные функции.
- Удобство: Интерфейс интегрирован в Telegram, что делает его интуитивно понятным.
- Синхронизация данных: Данные и настройки автоматически синхронизируются между устройствами.
Для разработчиков
- Кроссплатформенность: Web Apps работают на любых устройствах и операционных системах, поддерживающих Telegram.
- Быстрые обновления: Любые изменения, которые происходят на сервере, сразу же отображаются в приложении.
- Простота разработки: Применение типовых веб-решений позволяет оптимизировать временные и материальные затраты.
- Легкое распространение: Нет необходимости публиковать приложение в магазинах, что ускоряет доступ пользователей.
Архитектура Telegram Web App
Чтобы понять, как создать Telegram Web App в Телеграм, важно разобраться в их архитектуре.
Компоненты архитектуры
-
Клиентская часть
-
-
HTML, CSS, JavaScript: Базовые технологии для разработки интерфейса и пользовательского взаимодействия. Web Apps выглядят как обычные веб-страницы и могут включать функциональность, поддерживаемую этими технологиями.
-
WebView: Web Apps загружаются и отображаются в WebView внутри Telegram. Это позволяет им работать на любых устройствах и операционных системах, поддерживающих Telegram.
-
-
Серверная часть
-
-
Серверные технологии: Web Apps могут взаимодействовать с собственными серверными API, написанными на любом языке программирования (например, Node.js, Python, Ruby). Серверная часть отвечает за обработку данных, взаимодействие с базами данных и другими внешними сервисами.
-
Telegram Bot API: Для интеграции с Telegram Web App могут использовать Telegram Bot API. Это позволяет им взаимодействовать с пользователями через ботов, отправлять и получать сообщения, а также выполнять другие действия.
-
-
Взаимодействие с Telegram
-
-
SDK: Специальные SDK, предоставляемые Telegram или сообществом, включающие в себя методы и инструменты для упрощения разработки и интеграции Web App с Telegram.
-
-
Обновления и деплой
-
-
Обновления на сервере: Для обновления Web App необходимо лишь отправить изменения на сервер. Пользователи сразу же получат доступ к обновленной версии при следующем запуске приложения.
-
Контроль версий: Разработчики могут применять системы контроля версий для управления изменениями в коде и обеспечения стабильности приложения.
-
Как работают Web Apps
- Инициализация: Пользователь нажимает кнопку в Telegram, чтобы запустить Web App.
- Загрузка: Telegram загружает приложение через WebView с указанного URL.
- Взаимодействие: Пользователь работает с интерфейсом, который может включать формы, игры или другие элементы.
- Синхронизация: Данные сохраняются и синхронизируются между устройствами.
- Завершение: Пользователь закрывает Web App и возвращается к Telegram.
Примеры использования Telegram Web Apps
Web App в Телеграм находят применение в самых разных областях. Вот несколько примеров:
-
Онлайн-магазины: Бот @DurgerKingBot позволяет добавлять товары в корзину и оплачивать их прямо в Telegram. Это пример, созданный разработчиками Telegram для демонстрации возможностей Web Apps.
-
Розыгрыши: Сервисы вроде @BlessMeBot или @GiveShareBot используют Web Apps для отображения условий розыгрышей в каналах и чатах.
-
Игры: Платформа @Gamee предлагает коллекцию HTML5-игр, где пользователи могут соревноваться с друзьями.
Для вдохновения можно изучить примеры Telegram Web Apps, доступные в Telegram-каналах или в документации.
Зачем создавать свои Web Apps
Создание Mini Apps открывает множество возможностей:
-
Современность: Telegram Web Apps — это новая технология, привлекающая внимание пользователей.
-
Узнаваемость бренда: Уникальные Web Apps помогают продвигать бренд и повышать его популярность.
-
Монетизация: Встроенные покупки, реклама через AdsGram или подписки позволяют зарабатывать. Подробнее о том, как монетизировать свое Telegram-приложение, мы рассказывали, например, в этой статье.
Как создать Web Apps в Telegram: пошаговое руководство
Теперь перейдем к практической части и разработаем Telegram Web App на примере игры-кликера с лидербордом, применяя React для фронтенда и Nest.js для бэкенда.
Шаг 1: Подготовка окружения
Прежде чем начать разработку, необходимо проверить, что на вашем компьютере уже есть Node.js. Если нет, то его необходимо скачать с официального сайта.
Также должен быть глобально установлен Nest.js. Чтобы установить Nest.js, нужно запустить командную строку Windows или другую консоль и ввести команду:
Теперь можно приступать к разработке проекта.
-
Создайте папку на рабочем столе
-
Запустите командную строку Windows или другой терминал.
-
Перейдите в созданную вами папку. Например, если вы создали папку на рабочем столе, то введите команду:
-
Затем введите еще раз команду
cd, но уже с названием созданной вами папки:
-
Чтобы создать Frontend-часть, выполните команду:
frontend в данной команде обозначает название папки. Вы можете дать любое название своей папке, которая будет использоваться для Frontend-части.
-
После выполнения команды вам будет предложено выбрать фреймворк. С помощью стрелок выберите React.
-
Затем нужно выбрать вариант «JavaScript + SWC».
-
В этой же консоли введите команду для создания Backend-части:
backend в данной команде обозначает название папки. Вы можете дать любое название своей папке, которая будет использоваться для Backend-части.
-
В процессе создания вам будет предложено выбрать менеджер пакетов. С помощью стрелок выберите
npm.
-
Откройте главную папку вашего проекта (в моем случае это
mini-app-clicker) в любом удобном для вас редакторе кода. Я рекомендую использовать Visual Studio Code (VS Code).
В редакторе кода главная папка будет иметь следующий вид:

При разработке мы будем неоднократно использовать консоль для той или иной цели, поэтому всегда удостоверяйтесь, что вы находитесь в нужной директории проекта перед вводом той или иной команды.
Шаг 2: Создание Frontend-части
В первую очередь создадим Frontend-часть нашего Mini App. В ней расположим кнопку, на которую мы будем нажимать, прибавление очков, отображение First Name пользователя, а также добавим вкладку с лидербордом.
Перед созданием Frontend-части необходимо выполнить установить зависимости, которые необходимы для запуска нашего визуала.
Откройте консоль и введите команду:
Укажите в ней свое название папки для Frontend’а.
Затем введите:
После выполнения этой команды появится новая папка под названием node_modules, в которой будут все нужные файлы, чтобы запустить проект.

Попробуйте запустить пустой проект с помощью команды:
В случае успеха вам предложат открыть проект по ссылке http://localhost:5173/.
Вы увидите стандартную страницу только что созданного проекта:

Откроем редактор кода повторно. Все необходимые для проекта файлы мы будем создавать в папке src.
С помощью консоли установим библиотеку для работы с Telegram Web App:
Теперь откройте файл main.jsx, чтобы внести в него некоторые изменения. В дальнейшем мы еще раз обратимся к этому файлу.
В окне браузера вы увидите сообщение об ошибке, но на нее можно не обращать внимания — мы сами вызываем ее, чтобы в будущем знать, инициализировалась ли наша библиотека в среде Telegram.

Изменим index.css, удалив лишние стили, которые нам не нужны. Файл будет выглядеть следующим образом:
Установим fontawesome-иконки, которые будут использоваться в нашем проекте. Введите команду:
Теперь откройте файл App.jsx и введите там следующий код:
Добавим стили. Откройте файл App.css и измените его следующим образом:
После этого создадим новую папку Components внутри src. В ней создадим два новых файла, Leaderboard.jsx и Leaderboard.css.
Откройте файл Leaderboard.jsx и напишите там следующий код:
Добавим стили для страницы с лидербордом. Откройте файл Leaderboard.css и измените его следующим образом:
После всех этих изменений у нас будет готова логика кликера, а также заготовка на будущий лидерборд:

Чтобы в браузере ваша страница выглядела в виде телефона, необходимо нажать на F12, а затем нажать на кнопку переключения девайса.

Затем нужно настроить параметры экрана так, чтобы они соответствовали параметрам Mini App. В поле ширина (первая строка) введите значение 360, а в поле высота (вторая строка) — 800. Эти значения будут примерным разрешением для Mini App.

Шаг 3: Создание Backend-части
Теперь приступим к написанию Backend-части.
Так как мы создаем простой тестовый проект, чтобы познакомиться с разработкой Mini App поближе и сделать это быстро, мы будем использовать SQLite3.
Однако, если вы собираетесь делать большой проект, рассчитанный на тысячи пользователей и большую нагрузку, я рекомендую использовать PostgreSQL или другую подобную базу данных.
Откройте консоль и введите команду cd Backend, чтобы переключится на папку с Backend, и затем установите все необходимые зависимости, выполнив следующую команду:

Все необходимые материалы для разработки проекта будем создавать и изменять в папке src.
Создай файл ormconfig.ts и напишите в нем настройки для TypeORM (SQLite3):
Теперь создайте папку с названием users, а в ней файл user.entity.ts. Изменим файл следующим образом:
В этой же папке создайте файл user.service.ts:
Рядом с этими файлами необходимо создать новый файл user.controller.ts:
Теперь подключим всё это в один файл. Создайте user.module.ts и напишите в нем следующее:
Откройте файл app.module.ts, который находится в папке src, и измените его:
Если после внесения всех этих изменений файлы подсвечиваются у вас красным цветом, эта проблема касается проверки форматирования, которую проводит Prettier. Для того чтобы устранить эти проблемы, необходимо выполнить в консоли следующую команду:
На конце команды обязательно должна быть точка.
Запустите Backend с помощью команды:
В первый раз запуск может занять много времени, но если всё пройдет хорошо, то в консоли вы увидите примерно следующее:

Шаг 4: Тестирование запросов
Теперь необходимо протестировать все запросы, чтобы мы точно знали, что наш Backend работает правильно. Лучше всего для тестирования запросов подойдет приложение Postman.
-
Откройте Postman на своем ПК.
-
Создайте новый запрос для создания пользователя, нажав на «+» в верхнем меню.
-
Рядом с полем для ввода URL нажмите на метод запроса и в открывшемся списке выберите POST-запрос, после чего в поле для ввода URL введите:
-
Перейдите во вкладку Body, которая находится под полем для ввода URL. В ней выберите raw, а справа нажмите на Text и выберите метод JSON. В текстовое поле введите:
Тут мы указываем, какие параметры мы передаем в теле запроса, чтобы создать нового пользователя.
-
Перейдите во вкладку Headers. В поле Key необходимо ввести
Content-Type, а в Value —application/json. -
Отправляем наш запрос, нажав на кнопку Send. Если всё успешно, то внизу появится ответ от нашего запроса с ID, firstname и points.

А также справа будет указан код ответа 201.

-
Создайте новый запрос для обновления очков пользователя, нажав на «+» верхнем меню.
-
Выберите метод POST-запрос, после чего в поле для ввода URL введите:
-
Перейдите во вкладку Body. В ней выберите raw и метод JSON. В текстовое поле введите:
-
Перейдите во вкладку Headers. В поле Key необходимо ввести
Content-Type, а в Value —application/json. -
Отправляем наш запрос, нажав на кнопку Send. Если всё успешно, то вы получите ответ с обновленными очками:

-
Создайте новый запрос для получения данных пользователя, нажав на «+» верхнем меню.
-
Выберите метод GET, после чего в поле для ввода URL введите:
Будьте внимательны при отправке этого запроса, ведь после users/ необходимо указать ID человека, который уже создан, иначе вам вернет ошибку 404.
-
Отправляем наш запрос, нажав на кнопку Send. Если всё успешно, то вы получите firstname и points человека:

Также справа будет указан код ответа 200:

-
Создайте новый запрос для получения лидерборда, нажав на «+» верхнем меню.
-
Выберите метод GET, после чего в поле для ввода URL введите:
-
Отправляем наш запрос, нажав на кнопку Send. Если всё успешно, то вы получите список людей.

Попробуйте создать еще несколько людей и выдать им очки. После чего снова отправьте запрос на лидерборд и вы увидите, как меняется список от больших очков к меньшим.
Благодаря данным из Postman в процессе тестирования Backend’а мы можем отследить время выполнения запросов и их вес.
-
Response Time отображает, сколько времени занимает тот или иной процесс. Мы можем проанализировать эти данные и при необходимости оптимизировать запросы, сделав их быстрее.

-
Response Size и Request Size позволяют можно узнать вес запросов, что также позволит оптимизировать их при необходимости.

Шаг 5: Объединение Frontend и Backend
Теперь нужно объединить написанные нами Frontend- и Backend-части.
Откройте файл vite.config.js из Frontend-части и измените его следующим образом, чтобы в будущем при сборке на сервере не возникло ошибок:
Откройте файл main.jsx и измените его следующим образом:
Затем откройте и измените App.jsx:
Внесите изменения в Leaderboard.jsx:
Создайте новую папку API внутри папки src Frontend’а. Внутри API создайте файл Enquiry.jsx. Через него мы будем отправлять запросы на наш Backend.
Места, где должны находится ссылки на запросы мы пока что оставим пустыми, ведь сперва нужно запустить наш Backend на сервере, чтобы знать, куда отправлять запросы.
Шаг 6: Загрузка на GitHub
Создайте два закрытых репозитория на GitHub для Frontend’а и Backend’а, а затем вернитесь к вашему проекту. Далее нужно проделать следующие действия для обеих частей Mini App:
-
Перейдите в нужную директорию
-
Создайте новый репозиторий Git:
-
Добавьте все изменения к коммиту:
-
Создайте коммит:
-
Измените название текущей ветви и установите ее как основную:
-
Добавьте удаленный репозиторий и свяжите его с указанным URL. Вместо ссылки на мой репозиторий, предоставьте ссылку на ваш новый репозиторий.
-
Отправьте изменения на репозитории:
Шаг 7: Загрузка на сервер и завершение настройки Mini App
Когда файлы будут загружены на GitHub, можно приступить к запуску Mini App на сервере. Я буду использовать сервис App Platform от Timeweb Cloud. Если вы еще не зарегистрированы на Timeweb Cloud, то для начала необходимо пройти регистрацию.
Прежде всего, необходимо создать новый проект. Дайте ему наименование, а при необходимости — добавьте описание и изображение.

После того как проект был создан, необходимо создать Apps. Прежде всего мы запустим наш Backend. В процессе создания нужно выбрать тип Backend и платформу Nest.js.

Для загрузки проектов необходимо привязать учетную запись на GitHub. После завершения процесса привязки введите имя репозитория, которое вы использовали при создании. В разделе «Регион» выберите тот, который находится ближе к вам и имеет наименьший пинг.

Выберите минимальную конфигурацию — ее достаточно для нашей задачи. В настройках приложения не нужно вносить изменения.

В описании приложения необходимо указать его наименование, при необходимости — комментарий, а также выберите проект, с которым будет связано ваше приложение.

Затем можно активировать процесс развертывания Nest.js на сервере, нажав на кнопку «Запустить деплой».
Через некоторое время приложение будет запущено, и в случае успешного развертывания проекта в журнале деплоя появится сообщение «Deployment successfully completed». Еще до полного запуска нам будет доступен домен, который уже можно скопировать. Расположен он будет на Дашборде, в окошке справа:

В моем случае я буду отправлять запросы на адрес:
Этот адрес необходимо вставить во все запросы, которые находятся в файле Enquiry.jsx.
После того как вы вставили этот адрес во все запросы, необходимо отправить наше изменения на GitHub, выполнив поочередно команды:
Теперь можно запускать наш Frontend. При создании Apps нужно выбрать Frontend и React.

А далее как с Backend. Выбираете нужный репозиторий, регион, конфигурацию. В настройках приложения ничего не меняете и вносите нужную информацию о приложении, не забыв выбрать проект.
Когда Frontend начнет запускаться, вы получите бесплатный домен. Найти его можно в разделе «Настройки» вашего приложения. Его необходимо скопировать.

Теперь необходимо открыть файл main.ts из Backend’a и изменить его таким образом, чтобы он принимал запросы только от нашей Frontend-части:
Отправьте изменения Backend’a на GitHub.
После того как все необходимые шаги были выполнены, можно приступать к завершающему шагу, после которого можно будет начать тестировать Mini App в Telegram.
Шаг 8: Настройка Telegram-бота для Web App
Пока Frontend и Backend запускаются, необходимо создать и настроить нашего бота, чтобы Mini App открывался внутри Telegram.
Перейдите в BotFather и запустите его. Выполните команду /newbot. Бот предложит вам ввести имя для нового бота, а затем его username. Если вы попытаетесь использовать уже занятый username, бот сообщит о невозможности его использования и предложит вам выбрать другой.
При успешном исходе событий бот ответит следующим образом:

Теперь вы можете настроить созданного бота. Для этого используйте команду /mybots. Бот отобразит список всех созданных ботов. Выберите нужный с помощью инлайн-кнопок. Откроется следующее меню:

Перейдите в «Bot Settings» → «Menu Button» и нажмите на «Configure menu button». BotFather попросит прислать URL, который будет открываться при нажатии на специальную кнопку. Отправьте ему вашу ссылку на Frontend. После отправки он попросит прислать название для этой кнопки. Если вы сделали всё верно, то бот ответит успехом.

Далее нажмите на «Back to Bot» и повторно зайдите в настройки. Теперь необходимо нажать на «Configure Mini App» и в открывшемся меню нажать на инлайн-кнопку «Enable Mini App». Бот снова попросит ссылку.

Снова нажмите на «Back to Bot», зайдите в настройки и опять же кликните по «Configure Mini App». В открывшемся меню нажмите на «Change Mod». Внутри выберите Fullscreen. Благодаря этому приложение будет открываться на весь экран и не будет иметь рамок.
Активировируйте бота, нажав на кнопку «Запустить», чтобы отправилась команда «Start». Бот не будет нам отвечать, но зато слева внизу будет кнопка, активировав которую, мы сможем открыть наш Telegram Mini App.
Сравнение технологий для разработки Mini App
|
Технология |
Плюсы |
Минусы |
|
React |
Большое сообщество, мощные библиотеки (Redux, React Router), быстрая разработка, поддержка компонентного подхода |
Требует настройки для оптимизации (например, Webpack или Vite), может быть избыточной для простых приложений |
|
Vue.js |
Легкость освоения, компактный код, высокая производительность, простая интеграция |
Меньше готовых решений и библиотек, специфичных для Telegram Mini Apps |
|
Angular |
Мощный фреймворк с поддержкой TypeScript, встроенные инструменты для масштабируемых приложений, строгая структура |
Более высокая кривая обучения, избыточная сложность для небольших проектов, больший размер бандла |
|
Bootstrap |
Быстрое создание адаптивных интерфейсов, множество готовых компонентов, кросс-браузерная совместимость |
Ограниченная кастомизация, может увеличивать размер приложения из-за избыточных стилей |
Заключение
-
Telegram Web App — это инновационная технология, позволяющая встраивать в чаты мессенджера мини-приложения, упрощающая доступ к сервисам, таким как онлайн-магазины, игры и аналитика, не покидая приложение, а также обеспечивающая бесшовную синхронизацию данных между устройствами.
-
Разработка возможна с применением веб-технологий (HTML, CSS, JavaScript) и популярных фреймворков, например, React или Angular, с поддержкой API Telegram для взаимодействия с ботами, что позволяет легко интегрировать сложные функции.
-
Для улучшения опыта аудитории необходимо персонализировать контент, анализировать поведение с помощью современных инструментов аналитики и добавлять интерактивные элементы, например, мини-игры или опросы, для повышения вовлеченности.
-
Регулярное обновление, тестирование на реальных устройствах и мониторинг производительности гарантируют стабильность, актуальность и высокий уровень удобства использования, а также помогают быстро адаптироваться к новым требованиям Telegram.
Создание Web Apps в Telegram открывает возможности для монетизации, продвижения бренда и привлечения пользователей. Наш пример игры-кликера демонстрирует, как сделать Web App в Telegram с использованием React и Nest.js, от настройки окружения до запуска в Telegram. Следуя этому руководству, вы сможете создать свой Telegram Mini App и интегрировать его в мессенджер для решения самых разных задач.
