2. Флоу покупателя
Путь покупателя — это не один универсальный флоу и не десяток отдельных. Это два capture-флоу (что и как получаем), сходящихся на одном общем хвосте (контакт → оплата → подтверждение → статус). Внутри каждого флоу — ограниченная параметризация под тип бизнеса.
┌─────────────────────────────┐
Flow A — ЗАКАЗ ─────┤ │
(товары, цифра) │ ОБЩИЙ ХВОСТ │
│ контакт/аккаунт → │
Flow B — ЗАПИСЬ ─────┤ оплата/депозит/нет → │──► статус
(услуги, выезд) │ подтверждение │
└─────────────────────────────┘
Почему так: расхождение флоу — в середине (корзина vs слот+мастер), а контакт/оплата/подтверждение/статус/уведомления/история — одинаковые. Дублировать хвост нельзя (две оплаты, два статуса, расщеплённый аккаунт). Поэтому две головы на одном хвосте.
Flow A — Заказ (товары, цифровые товары)
- Смотрит каталог/категории/коллекции.
- Открывает карточку товара.
- Конфигурирует: вариант (цвет/размер), модификаторы (для еды: размер, добавки), количество.
- Кладёт в корзину → корзина накапливает N позиций.
- Получение: доставка на адрес · самовывоз · цифра (мгновенная выдача, шага доставки нет).
- → общий хвост.
Отвечает: StorefrontApiController (каталог, корзина, заказ). Корзина — в Redis, переживает редеплой.
Flow B — Запись (услуги, выезд мастера)
- Смотрит услуги.
- Открывает услугу.
- Выбирает ресурс (мастер/специалист) — опционально.
- Выбирает слот времени — из доступности (платформа считает свободные слоты, удерживает выбранный).
- Где: у бизнеса (клиент приходит) · у клиента (выезд — нужен адрес).
- → общий хвост.
Отвечает: BookingService, AvailabilityService, AppointmentReminderWorker. ⚠️ сейчас: запись живёт через виджет-попап (bp-widget.js); цель — нативный флоу витрины, виджет остаётся только для встройки на чужие сайты.
Общий хвост (один на оба флоу)
- Контакт / аккаунт: телефон/email; узнаём вернувшегося покупателя (cookie/аккаунт), предзаполняем.
- Оплата: онлайн полностью · депозит онлайн + остаток на месте · при получении/на месте · нет (оплата вне сайта).
- Подтверждение: мгновенно · или заявка → бизнес подтверждает.
- Статус: единый экран для заказа и записи; уведомления покупателю и владельцу.
- История — в аккаунте покупателя (единый на все магазины платформы).
Оси вариаций (v1)
Любой бизнес — это набор значений по осям. Тема их не «зашивает» — платформа показывает нужные шаги.
| Ось | Значения (v1) |
|---|---|
| Единица | корзина из N · одна запись |
| Конфигурация | варианты · модификаторы (еда — новое) |
| Получение | доставка · самовывоз · у бизнеса · у клиента · цифра |
| Ресурс | нет · мастер |
| Время | нет · слот |
| Оплата | онлайн · депозит · на месте · нет |
| Подтверждение | мгновенно · заявка→подтверждение |
Явно отложено (не v1): котировка (заявка→цена→акцепт), подписка/рекуррент, аренда с залогом и возвратом, билеты/карта мест, чистый лид без покупки. Каждое — отдельный флоу позже.
Кто владеет каждым шагом
| Шаг | Вид (разметка) | Данные / действие |
|---|---|---|
| Каталог, карточка, услуга | тема | read API |
| Конфигуратор (вариант/модификатор) | тема | цена/наличие — платформа |
| Корзина (страница/drawer) | тема | позиции, итоги, остатки — платформа |
| Выбор мастера/слота | тема | доступность, удержание — платформа |
| Контакт, оплата, подтверждение | платформа (токены + блоки темы) | платформа |
| Статус, аккаунт | платформа (токены темы) | платформа |
Тема делает путь «ощущаемо разным» на ~90% (всё до оплаты — её вёрстка). Хвост — общий по поведению (доверие/конверсия), темизируется по виду.
Что дальше
Какие именно объекты и поля тема видит на каждом шаге — 03. Объектная модель.