Вебапп в мессенджере: как сделать Mini App из сайта для Telegram и MAX

У вас уже есть сайт, личный кабинет или веб-сервис, и хочется, чтобы клиенты пользовались им прямо в Telegram или MAX. Разбираем, как сделать mini app из сайта: что переиспользуется без изменений, как адаптировать интерфейс под окно мессенджера, чем заменить логин и пароль и какие подводные камни встречаются при переносе. Вебапп в мессенджере — это не копия сайта, а его версия под другой контекст.

Почему нельзя просто вставить ссылку на сайт

Технически можно указать адрес существующего сайта как адрес мини-приложения, и он откроется. Но выглядеть это будет как сайт в рамке:

  • шапка с меню и подвал съедают и без того небольшое окно;
  • пользователь видит форму входа, хотя мессенджер уже знает, кто он;
  • баннер про cookies и всплывающие окна закрывают контент;
  • ссылки уводят во внешний браузер или открывают страницы, не рассчитанные на это окно;
  • тяжелая главная страница долго грузится по мобильному интернету;
  • своя кнопка «Назад» на сайте конфликтует с системной кнопкой мессенджера.

Пользователь закрывает такое приложение через несколько секунд. Поэтому задача — не «завернуть» сайт, а собрать из его частей отдельный вебапп в мессенджере со своими экранами и логикой входа.

Что можно переиспользовать

Хорошая новость: самая дорогая часть системы обычно остается как есть. Чем лучше на сайте отделены интерфейс и логика, тем дешевле перенос:

Часть системыПереиспользуетсяЧто меняется
Бэкенд и APIДаДобавляется вход через мессенджер
База данныхДаСвязь аккаунта с ID пользователя в мессенджере
Бизнес-логикаДаНичего: цены, расчеты, статусы те же
Интеграции с CRM, 1СДаНовый источник заказов в отчетах
Компоненты интерфейсаЧастичноНовые экраны под узкое окно
НавигацияНетПод системные кнопки мессенджера
АвторизацияНетВход по подписанным данным мессенджера
ОплатаЧастичноС учетом правил платформы

Если сайт — одностраничное приложение поверх API, перенос во многом сводится к новым экранам и слою авторизации. Если это классическая CMS, где страницы собираются на сервере вместе с данными, сначала придется выделить API, и это основная часть работы.

Верстка под окно мессенджера

Интерфейс мини-приложения проектируется под телефон в первую очередь, даже если на сайте основной трафик с десктопа. Что меняется по сравнению с мобильной версией сайта:

  • Высота окна плавает. Окно может быть развернуто не полностью, менять размер жестом и сжиматься при открытии клавиатуры. Telegram сообщает актуальную высоту и дает CSS-переменные для нее — верстку строят на них, а не на высоте экрана устройства.
  • Цвета темы. Фон и текст лучше брать из темы мессенджера, а фирменный цвет оставить для акцентов. Тогда приложение не будет «светить» белым экраном у пользователя с темной темой.
  • Системные кнопки. Главное действие — «Оформить», «Записаться», «Отправить» — выносится на основную кнопку платформы внизу экрана, а шаг назад — на системную кнопку «Назад».
  • Нет шапки и подвала. Логотип, меню и контакты убираются: человек и так знает, куда зашел.
  • Нет наведения курсором. Подсказки по наведению и выпадающие меню заменяются явными элементами, области нажатия — крупнее.
  • Безопасные зоны в полноэкранном режиме: контент не должен уходить под вырез камеры и элементы клиента.

Вход через мессенджер вместо логина и пароля

Главное, что дает перенос, — исчезает форма входа. При открытии мини-приложения мессенджер передает данные пользователя, подписанные платформой. Сервер проверяет подпись — в Telegram это HMAC на основе токена бота, в MAX схема проверки уточняется по документации платформы — и только после этого считает пользователя авторизованным. Значению ID, которое фронтенд прислал «как есть», доверять нельзя. Как устроена эта проверка в Telegram, подробно описано в статье о разработке Telegram Mini App.

Отдельный вопрос — существующие клиенты сайта. У них уже есть аккаунты с историей заказов, и их нужно связать с аккаунтом в мессенджере. Варианты:

  1. Запросить телефон системным диалогом мессенджера и сопоставить с аккаунтом — если телефон на сайте был подтвержден.
  2. Отправить одноразовый код на email или телефон из аккаунта и ввести его в мини-приложении.
  3. Дать кнопку «Подключить Telegram» в личном кабинете сайта, которая ведет в бота со специальной ссылкой.

Новых пользователей проще: аккаунт создается при первом открытии, а недостающие данные запрашиваются, когда они действительно нужны, например при первом заказе.

Что придется переписать

Кроме экранов входа и навигации, при переносе обычно переделывают:

  • Сессии. Авторизация на cookies может не работать в веб-версии Telegram: там мини-приложение открывается во фрейме, и браузер ограничивает такие cookies. Надежнее передавать токен в заголовке запроса.
  • Хранение состояния. Корзину, черновики и настройки лучше держать на сервере с привязкой к пользователю, а не только в локальном хранилище браузера.
  • Формы. Имя и телефон подставляются из мессенджера, капча не нужна — пользователь уже авторизован.
  • Оплату. Физические товары и услуги в Telegram оплачивают через платежных провайдеров, а цифровые товары и услуги внутри Telegram — в Telegram Stars. Если сайт продает подписку на цифровой контент, модель оплаты придется пересмотреть. Для MAX правила уточняются по документации платформы.
  • Уведомления. Письма и SMS дополняются сообщениями бота — это основной канал связи с пользователем мини-приложения.
  • Внешние ссылки и файлы. Переходы на сторонние сайты и скачивание документов открывают через методы платформы, иначе поведение будет разным на разных устройствах.

Telegram и MAX: одна кодовая база, два адаптера

Если нужны оба мессенджера, мы обычно делаем общий интерфейс и бэкенд, а все, что зависит от платформы, выносим в тонкий слой: инициализацию, проверку подписи на сервере, системные кнопки, тему, оплату, отправку уведомлений. Под каждую платформу пишется свой адаптер, остальной код общий.

У MAX есть платформа для ботов и мини-приложений, HTTP API с авторизацией токеном бота и получение событий через webhook или long polling. Набор методов для мини-приложений, требования к публикации и модерации уточняются по документации платформы на момент разработки — на это стоит заложить время в план. Ботов в каждом мессенджере будет по одному, но данные клиентов и заказы останутся в общей базе. Особенности MAX разобраны в статье о разработке мини-приложения для MAX.

Подводные камни и чек-лист переноса

Что чаще всего всплывает уже после запуска:

  • аналитика смешивает трафик сайта и мини-приложения — нужен отдельный источник или метка;
  • адреса мини-приложения попадают в поиск и дублируют страницы сайта — их стоит закрыть от индексации;
  • старые ссылки внутри контента ведут на полные версии страниц сайта;
  • в мини-приложении всплывают окна, рассчитанные на сайт: чат поддержки, подписка, cookies;
  • один и тот же клиент оказывается двумя аккаунтами, потому что связывание с сайтом не продумали заранее.

Мы начинаем перенос с короткого аудита: есть ли API, как устроена авторизация, какие сценарии клиенты реально используют с телефона. Часто оказывается, что в мини-приложение нужно перенести три-четыре ключевых сценария, а не весь сайт. Если сайт при этом остается главным источником поискового трафика, пригодится статья о SEO при разработке сайта.

Короткий чек-лист перед стартом:

  • выбраны сценарии, которые переносим;
  • у бэкенда есть API или понятен план его выделения;
  • решено, как связываем аккаунты сайта и мессенджера;
  • сессии не зависят от cookies;
  • модель оплаты проверена на соответствие правилам платформы;
  • мини-приложение закрыто от индексации, аналитика разделена.

Частые вопросы

Можно ли вообще не переделывать сайт?

Открыть сайт внутри мессенджера можно, но удобным приложением он от этого не станет. Минимум — новые экраны ключевых сценариев и вход через мессенджер; бэкенд при этом обычно не трогают.

Сколько времени занимает перенос?

Зависит от того, есть ли у сайта API. Если есть, первую версию с одним-двумя сценариями можно запустить от 2 недель; если API нужно выделять, срок считаем после аудита.

Сохранятся ли аккаунты и история заказов клиентов?

Да, если продумать связывание: клиент один раз подтверждает телефон или email, и мини-приложение показывает его прежние заказы.

Сколько стоит сделать Mini App из сайта?

Мини-приложения у нас — от 30 000 ₽. При переносе часть работы уже сделана, поэтому итог зависит в основном от числа сценариев и состояния API; предварительная оценка бесплатна.

Обсудим проект

Нужна похожая разработка?

Расскажите о задаче — уточним детали, предложим формат запуска и подготовим предварительную оценку. Это бесплатно.

Написать напрямую

Источники