Каталог внутри 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 и бота, подключить безопасную авторизацию, корзину, заказ, оплату и админку или синхронизацию товаров.