Небольшому бизнесу — кофейне, пекарне, цветочному, магазину одежды — часто не нужен отдельный сайт: покупатели и так в Telegram. Нужен бот, в котором можно выбрать товар, положить в корзину, оформить доставку и оплатить, а владелец видит заказы и ведёт их до выдачи.
Это демонстрационный проект — готовое решение, которое под конкретный магазин настраивается за день: свой каталог, условия доставки, оплата и контакты. В демо — магазин свежей обжарки кофе.
Написал бота на Python и aiogram 3 с базой на SQLAlchemy.
Покупатель листает каталог по разделам, открывает карточку с ценой и остатком и добавляет товар кнопками плюс и минус — прямо в карточке или в корзине. Положить больше, чем есть на складе, нельзя, а в корзине видно, сколько осталось до бесплатной доставки. Оформление идёт по шагам: имя, телефон кнопкой «Отправить номер», курьер или самовывоз, адрес, способ оплаты, итоговая проверка. Оплата — картой через Telegram Payments (ЮKassa, Сбер и другие провайдеры) или при получении.
Владелец получает уведомление о каждом новом и оплаченном заказе с кнопками действий. В админке — заказы и выручка за день, список заказов в работе, карточка заказа и смена статуса: подтвердить, отправить, выдать или отменить. Покупатель сразу получает сообщение о новом статусе. Все заказы выгружаются в Excel с фильтрами и итоговой выручкой.
Под капотом — то, на чём магазины обычно теряют деньги: суммы хранятся в копейках, в заказе фиксируются цены на момент покупки, остатки проверяются повторно при оформлении, отмена возвращает товар на склад, а перед списанием бот проверяет, что заказ ещё не оплачен и сумма не изменилась. Логика вынесена отдельно от Telegram и покрыта 28 автотестами, один из которых проводит полную покупку через настоящие обработчики бота.
Готовый магазин в Telegram: от выбора товара до оплаты и выдачи — без сайта и без ручной переписки с каждым покупателем. Владелец ведёт заказы в том же Telegram и в любой момент выгружает их в Excel.
Код открыт; чтобы запустить свой магазин, достаточно токена бота, своего каталога и при желании токена платёжного провайдера.