Магазин кроссовок и стритвира просил витрину в Telegram с честными остатками по каждому размеру.
Продавали через директ - выкладывали модель в канал, дальше начиналась переписка.
Половина этих диалогов сводилась к одному вопросу, есть ли сорок второй.
Продавец лез в таблицу остатков руками, отвечал через час, покупатель к этому времени уже брал в другом месте.
Второй перекос - одну пару продавали дважды. Человек спрашивал про размер и уходил думать, в это время его размер оплачивал кто-то другой, дальше возврат и извинения.
Просили, чтобы наличие размера было видно сразу и чтобы придержать пару можно было прямо в приложении, без устных договорённостей.
Mini App поставил поверх бота, остатки в нём главное.
Карточка модели - фото с нескольких ракурсов, описание, размерная сетка строкой, у каждого размера свой остаток числом.
Размеры, которых нет, остаются в сетке серыми, по ним есть кнопка сообщить о поступлении, то-есть спрос на отсутствующий размер тоже собирается.
Бронь пары на сутки - размер уходит из свободного остатка, у покупателя в карточке тикает таймер, через 24 часа бронь снимается и пара возвращается в продажу.
Бронь снимает планировщик раз в минуту. Если проверять в момент открытия карточки, размер висел бы занятым до следующего посетителя.
Списание остатка идёт одной транзакцией с проверкой количества в самом запросе, поэтому из двух одновременных оплат последней пары пройдёт только первая.
Остатки синхронизируются с Google Таблицей продавца в обе стороны, каждые пять минут - он привык считать там, ломать привычку смысла нет.
Доставка СДЭК - расчёт по городу и выбор пункта выдачи прямо в оформлении.
Оплата картой и СБП.
Стек - Python, aiogram 3, Telegram Mini App, SQLite, VPS.
Уведомления о возврате размера уходят пачками с паузой, иначе на новой поставке бот упирается в лимит Telegram и половина подписчиков остаётся без сообщения.
Вопрос про размер в директе почти исчез, остаток теперь видно в карточке.
Бронью пользуются активно - примерно четверть заказов начинается с неё, до оплаты доходит около половины забронированного, остальное возвращается в продажу само.
Подписка на размер дала побочный эффект, которого не ждали: продавец видит, какие размеры спрашивают чаще всего, и заказывает поставку под них.
Двойных продаж с запуска не было.
Магазину остались исходники, панель управления и та же таблица остатков, в которой он считал раньше.
Через месяц докрутили скрытие моделей, распроданных целиком - витрина перестала показывать то, что уже не купить.