Каталог внутри Telegram можно реализовать простыми кнопками бота или полноценным Mini App. Выбор зависит от количества товаров, фильтров, вариантов, корзины и оплаты. Для коммерческого каталога обычно удобнее Mini App, а бот берет на себя вход, уведомления и возврат пользователя к заказу.
Клиентская часть показывает каталог, но цены, остатки, права и итог заказа проверяет backend. Telegram initData валидируется на сервере, токен бота не попадает в браузер, а создание заказа выполняется идемпотентно с повторной проверкой стоимости.
Что проверить в первую очередь
Сначала зафиксируйте точный сценарий, время ошибки и последнее известное рабочее состояние. Не меняйте несколько настроек одновременно: один контролируемый шаг должен подтверждать или исключать одну гипотезу. Перед работой с данными и конфигурацией подготовьте резервную копию и понятный способ отката.
- Опишите категории, варианты, остатки, фильтры, корзину, доставку и оплату.
- Выберите источник товаров и ответственного за актуальность цен.
- Определите путь пользователя: бот → Mini App → заказ → статус/уведомление.
- Проверьте требования платежного провайдера, чеков и обработки персональных данных.
Почему возникает проблема
Внешний симптом обычно появляется на границе нескольких компонентов: интерфейса, backend, базы, фоновой очереди или внешнего сервиса. Поэтому важно найти первое место, где состояние становится неверным, а не исправлять последнее сообщение об ошибке.
- Проект пытаются построить только inline-кнопками при большом ассортименте.
- Frontend доверяет user id и цене из URL без проверки initData.
- Корзина хранится только в браузере и теряется при закрытии Telegram.
- Каталог не имеет стабильных SKU/variant id и создает неверные позиции.
- Оплата считается заказом до подтвержденного серверного события.
Пошаговая диагностика
Диагностику проводите на тестовой записи или отдельном окружении. В журналах скрывайте токены, пароли и персональные данные. Для каждого шага сохраняйте измеримый результат: идентификатор события, код ответа, версию записи, состояние процесса или контрольную сумму.
- Соберите прототип основного пути на реальном iOS/Android/Desktop Telegram.
- Проверьте initData подпись, auth_date и подмену user id.
- Пройдите изменение цены/остатка между добавлением в корзину и оформлением.
- Повторите нажатие «Заказать» и webhook оплаты.
- Проверьте deep link и восстановление незавершенной корзины.
Архитектура Mini App каталога
Mini App — это веб-интерфейс внутри Telegram, а не доверенная серверная среда. Все бизнес-решения остаются на backend.
- Бот открывает Mini App с согласованным start_param/deep link.
- Backend проверяет initData HMAC и создает короткую серверную сессию.
- Каталог API возвращает опубликованные товары и доступные варианты.
- Корзина привязана к пользователю/анонимной сессии и пересчитывается на сервере.
- Заказ, платеж и уведомление связаны стабильными order/payment id.
Как исправить проблему
Исправление лучше разбить на небольшие обратимые изменения. Сначала устраните подтвержденную причину, затем повторите исходный сценарий и проверьте соседние функции. Массовую обработку данных запускайте на ограниченной выборке с отчетом и только после сверки расширяйте на весь объем.
- Создайте отдельные модели product, variant, price, stock, cart и order.
- Валидируйте initData только на backend с ограничением возраста.
- Пересчитывайте итог, скидку и наличие в транзакции оформления.
- Сделайте идемпотентное создание заказа и обработку платежных webhooks.
- Добавьте админку или надежную синхронизацию источника товаров.
Безопасный порядок внедрения
- Сохраните затрагиваемые данные, конфигурацию и текущие журналы, заранее проверив способ отката.
- Повторите проблему на тестовом объекте без реальных списаний, рассылок и изменений клиентских данных.
- Внесите одно логическое изменение и зафиксируйте его в системе контроля версий или журнале работ.
- Не отключайте авторизацию, валидацию, шифрование и другие защитные механизмы ради быстрого исчезновения ошибки.
- После выкладки контролируйте логи, метрики и полный пользовательский сценарий, а не только один успешный запрос.
Как проверить результат
Разовый успешный тест недостаточен. Повторите операцию, проверьте крайние значения, параллельные действия и восстановление после перезапуска или временного сбоя. Для важного сценария сохраните автоматический тест либо короткий регрессионный чек-лист.
- Подмена user id, цены и variant в запросе не меняет серверный итог.
- Корзина восстанавливается после закрытия Mini App.
- Двойное нажатие не создает два заказа или списания.
- Статус оплаты и заказа обновляется по подтвержденному событию и приходит пользователю.
Типичные ошибки при исправлении
- Размещать bot token или секрет платежей в JavaScript.
- Считать initDataUnsafe проверенной идентичностью.
- Хранить цену только в payload кнопки/клиента.
- Создавать заказ только по факту возврата пользователя со страницы оплаты.
Как предотвратить повторение
Профилактика строится вокруг явных контрактов, повторяемых релизов и наблюдаемости. Система должна не только работать сейчас, но и позволять быстро увидеть нарушение инварианта при следующем обновлении, росте нагрузки или сбое внешнего сервиса.
- Версионируйте API и проверку Telegram initData.
- Пишите сценарии на изменение цены, отсутствие остатка и повтор webhook.
- Мониторьте ошибки Mini App по версиям Telegram и платформам.
- Держите каталог и заказ независимыми от доступности отправки уведомления ботом.
Что подготовить для технического разбора
- Описание ожидаемого и фактического поведения, а также точную последовательность действий.
- Время проблемы, идентификатор тестового объекта и версии затронутых компонентов.
- Фрагменты журналов до и после ошибки без секретов и персональных данных.
- Перечень последних изменений и уже выполненных проверок.
- Безопасный доступ к тестовой среде или способ воспроизвести сбой без влияния на клиентов.
Частые вопросы
Можно ли сделать каталог только ботом?
Да для небольшого ассортимента и простого выбора. При фильтрах, карточках, вариантах и корзине Mini App обычно удобнее и быстрее для пользователя.
Нужно ли регистрировать пользователя отдельно?
Telegram дает идентификатор в подписанных initData, но backend обязан проверить подпись. Дополнительные контакты запрашиваются только когда нужны заказу.
Когда нужна помощь специалиста
Если нужен каталог в Telegram, я могу спроектировать Mini App и бота, подключить безопасную авторизацию, корзину, заказ, оплату и админку или синхронизацию товаров.