На прошлой неделе мне написал владелец компании по производству промышленных смазочных материалов. Ситуация знакомая до боли: у него интернет-магазин на WooCommerce, розница работает нормально, но он хочет запустить оптовое направление через тот же сайт. И дальше начинается классическая история — он пошёл искать решения, нашёл десяток B2B-плагинов, каждый стоит от двухсот до четырёхсот долларов в год, и ни один не закрывает все потребности целиком. Один делает группы клиентов, другой — оптовые цены, третий — скрытый каталог, четвёртый — запросы коммерческих предложений. И чтобы собрать полноценный оптовый портал, нужно купить три-четыре плагина, которые между собой не всегда дружат, обновляются в разное время, а поддержка каждого — это отдельная переписка с отдельной командой разработчиков из разных часовых поясов.
Я слышу эту историю раз в две-три недели. И каждый раз думаю о том, насколько рынок B2B-решений для WooCommerce фрагментирован и неудобен. Не потому, что разработчики плохие — они, как правило, делают свою узкую задачу хорошо. А потому, что бизнесу нужен не набор отдельных инструментов, а единая система, которая понимает логику оптовой торговли целиком. От момента, когда потенциальный дилер заходит на сайт и видит кнопку «Стать оптовым клиентом», до момента, когда бухгалтерия выгружает его заказ в 1С и формирует счёт-фактуру. Это один непрерывный процесс, и он не должен зависеть от того, договорятся ли между собой четыре независимых плагина.
Именно поэтому мы сделали B2B-модуль частью COS WP Woo — не как отдельный плагин, а как интегрированную подсистему, которая знает всё о своём окружении. Она знает про 1С-интеграцию, про поиск, про каталог, про пользователей. И когда вы настраиваете группу «Дилеры» с особым ценообразованием и ограниченной видимостью каталога, вам не нужно думать о том, как это «подружить» с остальным магазином — оно уже подружено, потому что это один продукт.
Но давайте я расскажу по порядку, как это работает на практике. Не в теории, не в маркетинговых обещаниях, а в реальных сценариях, с которыми мы сталкиваемся у клиентов каждый день.
Анатомия оптового клиента: почему группы — это не просто «скидка для избранных»
Когда люди думают о B2B в интернет-магазине, первая мысль обычно такая: «Ну, нужно просто дать оптовикам скидку побольше». И это — самое опасное упрощение, которое можно себе позволить. Потому что разница между розничным и оптовым клиентом — это не размер скидки. Это принципиально другая модель взаимодействия.
Розничный покупатель зашёл, выбрал, оплатил картой, получил посылку. Всё. Оптовый клиент — это компания с юридическим лицом, с несколькими сотрудниками, которые могут делать заказы, с договором, с отсрочкой платежа, с индивидуальными ценами, которые зависят от объёма закупок за прошлый квартал, от категории товара, от региона доставки. У оптового клиента может быть кредитный лимит, предоплатный баланс, история переговоров по ценам, персональные коммерческие предложения. И всё это должно работать одновременно, не мешая рознице и не превращая административную панель в хаос.
Мы начали с самого фундамента — групп клиентов. Но не тех примитивных групп, которые встречаются в большинстве B2B-плагинов, где группа — это просто ярлык с процентной скидкой. Наши группы — это полноценные сущности с наследованием свойств, приоритетами и гибкой настройкой по каждому параметру отдельно. Что это значит на практике? Допустим, у вас есть три уровня оптовых клиентов: «Дилер», «Дистрибьютор» и «VIP-партнёр». Дилер получает базовую скидку пять процентов на весь каталог, видит только товары, разрешённые для оптовой продажи, и может оплачивать заказы по счёту. Дистрибьютор наследует все настройки дилера, но получает дополнительную скидку — итого десять процентов, видит расширенный каталог, включая товары под заказ, и может использовать отсрочку платежа до тридцати дней. VIP-партнёр наследует от дистрибьютора, получает пятнадцать процентов и персональное ценообразование по отдельным товарным группам.
Наследование здесь — ключевое слово. Вы не настраиваете каждую группу с нуля. Вы строите иерархию, и каждый следующий уровень добавляет или переопределяет только то, что отличается. Изменили базовую скидку для дилеров — она автоматически каскадом обновится у дистрибьюторов и VIP-партнёров, если они не переопределили её явно. Это экономит часы работы при управлении десятками клиентских групп, а у некоторых наших клиентов их именно столько — отдельные группы по регионам, по типам продукции, по каналам сбыта.
И вот тут начинается самое интересное — привязка пользователей к группам. Казалось бы, что тут сложного? Назначил группу пользователю и забыл. Но в реальности у одного клиента может быть несколько контактных лиц, каждый со своим аккаунтом. Закупщик, менеджер, бухгалтер, руководитель — и каждому нужен разный уровень доступа. Закупщик может формировать корзину, но не может подтверждать заказ. Бухгалтер может видеть историю заказов и скачивать документы, но не может менять состав заказа. Руководитель видит всё и управляет всеми подчинёнными аккаунтами. Это уже не про группы — это про субаккаунты, и я расскажу об этом подробнее чуть позже. Но важно понимать, что группы — это фундамент, на котором строится вся остальная B2B-логика.
Ещё один момент, который часто упускают — модерация. В рознице регистрация мгновенная: ввёл email, придумал пароль, готово. В B2B так не работает. Когда компания подаёт заявку на оптовое сотрудничество, она заполняет расширенную форму: ИНН, КПП, юридическое название, фактический и юридический адрес, контактное лицо, телефон, желаемые условия. Эта заявка попадает в модерацию — менеджер проверяет данные, может запросить дополнительные документы, и только после одобрения клиент получает доступ к оптовому каталогу и ценам. Мы реализовали кастомные поля регистрации, которые полностью настраиваются из админки — вы сами решаете, какие данные запрашивать, какие поля обязательные, какие опциональные. И эти данные потом привязаны к аккаунту клиента, доступны менеджерам и могут автоматически подтягиваться в документы — счета, договоры, коммерческие предложения.
Честно говоря, когда мы только начинали проектировать этот модуль, я думал, что группы клиентов — это самая простая часть. Оказалось, что это один из самых нагруженных логикой компонентов, потому что именно группа определяет, что видит клиент, сколько он платит, как он платит, и что он вообще может делать в магазине. Всё остальное — ценообразование, видимость, ограничения — строится поверх групп.
Цена — это не число, а стратегия: многоуровневое ценообразование для оптовиков
Я люблю задавать клиентам один вопрос: «Как у вас формируются оптовые цены?» И в девяти случаях из десяти получаю ответ, который начинается просто, а потом усложняется до бесконечности. «Ну, мы даём скидку от объёма. Десять штук — пять процентов, сто штук — пятнадцать, а если берут тысячу — тогда двадцать пять. Но это не для всех товаров одинаково. На масла одна сетка, на фильтры — другая. А для дилеров из Сибири ещё отдельные условия, потому что логистика дороже. И ещё есть сезонные акции, когда на определённые группы товаров мы даём дополнительные десять процентов сверху. А для клиента «Газпромнефть» вообще индивидуальный прайс, который мы пересчитываем каждый квартал.»
Вот это и есть реальное B2B-ценообразование. Не «скидка 10%», а многомерная матрица, где цена зависит от клиента, от группы клиента, от товара, от категории товара, от количества в заказе, от общего объёма закупок за период, от региона и ещё от десятка параметров, которые бизнес добавляет по мере роста. И любой инструмент, который претендует на работу с оптовыми ценами, должен эту матрицу поддерживать — не в теории, а в удобном интерфейсе, где менеджер может настроить всё это без программиста.
В нашем модуле ценообразование работает на нескольких уровнях, и это не метафора — это буквально уровни приоритетов, которые система проверяет сверху вниз, пока не найдёт подходящее правило.
Первый уровень — групповые цены. Для каждой группы клиентов вы можете задать фиксированную цену или процентную скидку на конкретный товар. Например, товар «Масло гидравлическое HLP-46» стоит в рознице 5 000 рублей за канистру. Для группы «Дилеры» вы ставите цену 4 250 рублей, для «Дистрибьюторов» — 3 800, для «VIP» — 3 500. Эти цены задаются в карточке товара или массово через таблицу прайсов. Когда клиент из группы «Дилеры» заходит на страницу товара, он видит свою цену — 4 250 рублей. Розничный покупатель видит 5 000. Никакой магии, просто чистая подмена на уровне WooCommerce-хуков, которая работает везде — в каталоге, в карточке товара, в корзине, в чекауте, в письмах.
Второй уровень — многоуровневые цены, или tiered pricing. Вот тут начинается настоящее веселье. Для каждого товара (или категории товаров) вы можете задать сетку цен в зависимости от количества. Десять канистр — скидка пять процентов от групповой цены. Пятьдесят канистр — десять процентов. Сто — пятнадцать. Пятьсот — двадцать. И эти сетки тоже привязаны к группам. У дилеров одна сетка объёмных скидок, у дистрибьюторов — другая, более агрессивная. На странице товара клиент видит таблицу с ценовыми порогами — прозрачно, понятно, стимулирует увеличивать объём заказа. В корзине цена автоматически пересчитывается при изменении количества.
Третий уровень — индивидуальные цены. Для отдельных клиентов вы можете задать персональные цены на конкретные товары, которые перекрывают групповые. Это для тех самых ситуаций «у нас с ними особый договор». Менеджер заходит в профиль клиента, видит все активные цены — групповые и индивидуальные — и может добавить или изменить цену для любого товара. Индивидуальные цены имеют наивысший приоритет и перекрывают всё остальное.
Я сталкивался с ситуацией, когда клиент попросил настроить ценообразование, где итоговая цена вычислялась через пять уровней правил: базовая цена из 1С, минус групповая скидка, минус объёмная скидка, плюс наценка за срочность доставки, минус накопительная скидка за объём закупок в текущем квартале. И всё это должно было корректно отображаться на каждом этапе — от каталога до итогового счёта. Мы справились, но я тогда понял, что ценообразование в B2B — это не фича, это отдельная дисциплина, которая требует архитектурного подхода. Нельзя просто прикрутить фильтр к цене товара — нужно перестроить весь pipeline расчёта цены, чтобы он учитывал все уровни и при этом оставался быстрым. Потому что если страница каталога с тремя сотнями товаров будет грузиться десять секунд, пока система вычисляет индивидуальную цену для каждого — никакие скидки не спасут.
Отдельная тема — синхронизация цен с 1С. Многие наши клиенты ведут ценообразование в 1С:Управление Торговлей, и сайт должен отражать актуальные цены из учётной системы. Модуль 1С-интеграции знает про B2B-группы и умеет сопоставлять виды цен в 1С с группами клиентов в WooCommerce. Когда в 1С меняется «Дилерская цена» на товар, эти изменения автоматически приходят на сайт через OData-синхронизацию. Менеджеру не нужно вручную обновлять прайсы в двух местах — достаточно сделать это в 1С, и через несколько минут сайт покажет актуальные данные.
А знаете, что меня раздражает в большинстве B2B-плагинов? Они показывают оптовую цену только после авторизации. То есть потенциальный дилер заходит на сайт, видит розничные цены и думает: «Дорого, пойду в другое место.» Он даже не узнает, что для оптовиков условия совсем другие, потому что ему нужно сначала зарегистрироваться, дождаться модерации, залогиниться — и только тогда увидеть свои цены. Мы решили эту проблему иначе: для не авторизованных пользователей можно показывать подсказку «Оптовая цена доступна после регистрации» или даже диапазон — «от 3 500 руб. при покупке от 100 шт.» Это работает как магнит для лидов и значительно повышает конверсию в регистрацию оптовых клиентов.
Скрытый каталог и правила видимости: кто что видит и почему это важнее, чем кажется
Вот типичная ситуация: компания продаёт промышленное оборудование. В каталоге есть стандартные позиции, которые видны всем, — они индексируются поисковиками, привлекают органический трафик, работают на узнаваемость бренда. Но есть и специализированные товары — скажем, комплектующие для нефтегазовой отрасли или химические реагенты с ограниченным оборотом. Эти товары не должны быть видны широкой публике. Они предназначены только для сертифицированных дилеров, которые прошли верификацию и подписали соответствующие документы. Показывать их розничным клиентам — это не просто бессмысленно, а иногда даже противоречит регуляторным требованиям.
Скрытый каталог — это не просто «убрать из выдачи». Это целая система правил видимости, которая определяет, кто какие товары видит, кто видит цены, кто может добавлять в корзину, а кто — только смотреть. И эта система должна быть достаточно гибкой, чтобы покрыть все сценарии, которые встречаются в реальном бизнесе.
Давайте я опишу несколько реальных конфигураций, которые мы настраивали клиентам. Первый вариант — классический скрытый каталог: часть товаров полностью невидима для не авторизованных пользователей и для розничных клиентов. Они не отображаются в поиске, не показываются в категориях, не индексируются поисковиками. Только клиенты из определённых групп видят эти товары после входа в аккаунт. Второй вариант — товар виден всем, но цена скрыта. Вместо цены отображается кнопка «Запросить цену» или текст «Цена по запросу». Это часто используется для товаров с высокой стоимостью или с ценой, которая зависит от конфигурации. Третий вариант — товар виден, цена видна, но кнопка «Купить» доступна только авторизованным оптовым клиентам. Розничные покупатели могут посмотреть ассортимент и характеристики, но для покупки им нужно подать заявку на оптовое сотрудничество. Четвёртый вариант — полный магазин за логином. Весь каталог закрыт для не авторизованных пользователей. Заходишь на сайт — видишь лендинг с предложением стать клиентом, и только после авторизации открывается каталог с ценами. Это подходит для компаний, которые работают исключительно в B2B и не занимаются розницей.
Правила видимости можно комбинировать на разных уровнях: для отдельного товара, для категории, для тега, для группы клиентов. И они работают каскадно — если вы скрыли целую категорию для розничных клиентов, все товары в ней автоматически становятся невидимыми, даже если для отдельных товаров правила не заданы. Но вы можете явно переопределить правило для конкретного товара — например, сделать один товар из скрытой категории видимым для всех, если это демонстрационный образец.
Я долго думал о том, почему многие B2B-магазины так плохо справляются с видимостью. И пришёл к выводу, что проблема не в технической сложности, а в подходе. Большинство решений делают видимость бинарной: товар либо виден, либо нет. А в реальности это спектр: виден ли товар, видна ли цена, видна ли кнопка покупки, видна ли кнопка «Запросить цену», видно ли количество на складе. Каждый из этих элементов может управляться отдельно для каждой группы клиентов. И когда вы можете настроить это гранулярно, вы получаете инструмент, который точно отражает вашу бизнес-модель, а не заставляет бизнес подстраиваться под ограничения софта.
Есть ещё один аспект, о котором редко говорят, — производительность. Когда у вас шестнадцать тысяч товаров и двадцать групп клиентов с разными правилами видимости, проверка «имеет ли этот пользователь право видеть этот товар» должна быть молниеносной. Нельзя на каждый товар в каталоге делать отдельный запрос к базе данных. Мы решили это через предварительное кеширование правил видимости — при входе клиента в аккаунт система один раз вычисляет полный набор его прав и хранит в сессии. Все последующие проверки работают за микросекунды. При изменении правил кеш инвалидируется автоматически. Звучит просто, но на проде с двумя тысячами посетителей в день это критически важно — каждая лишняя миллисекунда на проверку умножается на тысячи товаров и тысячи запросов.
От корзины до счёта: workflow запроса коммерческого предложения
А теперь давайте поговорим о том, что отличает настоящий B2B-портал от «магазина со скидками для оптовиков». Это процесс закупки. В рознице всё просто: добавил в корзину, оплатил, жди доставку. В B2B покупка — это переговоры. Клиент формирует запрос, менеджер его рассматривает, может предложить альтернативу, скорректировать цены с учётом объёма, предложить дополнительную скидку за срочность или за предоплату. Потом клиент подтверждает, формируется счёт, оплата идёт по безналу, и только потом начинается отгрузка. Попробуйте уложить это в стандартный чекаут WooCommerce — ничего не получится.
Мы реализовали полный workflow запроса коммерческого предложения, который на английском называют Request for Quote — RFQ. Как это работает с точки зрения клиента: он заходит на сайт, выбирает товары, добавляет их в корзину. Но вместо кнопки «Оформить заказ» он видит кнопку «Запросить коммерческое предложение». Нажимает, добавляет комментарий — «нужна доставка до склада в Челябинске, по возможности в течение недели, готовы рассмотреть аналоги если по каким-то позициям будет задержка» — и отправляет запрос. Менеджер получает уведомление, открывает запрос в админке WooCommerce и видит всё: список товаров, количества, текущие цены для этого клиента, историю предыдущих заказов, баланс кредитного лимита, комментарий клиента.
Дальше начинается самое интересное — диалоги. Мы сделали систему разговоров (conversations), которая привязана к каждому запросу. Менеджер может написать клиенту: «По позиции 3 (масло HLP-46) — на складе сейчас 80 канистр, остальные 20 будут через 5 дней. Могу зарезервировать всю партию сейчас с доставкой в два этапа, или дождаться полной комплектации. По цене — при заказе всей партии сразу могу дать дополнительные 3%». Клиент получает это сообщение в личном кабинете на сайте и по email, отвечает, менеджер корректирует предложение. Вся переписка сохраняется в истории запроса — через полгода можно поднять и посмотреть, о чём договаривались.
Когда стороны пришли к согласию, менеджер формирует финальное предложение — с подтверждёнными ценами, количествами, условиями доставки и оплаты. Система автоматически генерирует PDF-коммерческое предложение — с логотипом компании, реквизитами, списком товаров, ценами, итоговой суммой, условиями. Этот PDF клиент может скачать из личного кабинета, переслать руководству на согласование, приложить к тендерной документации. И когда предложение утверждено, оно конвертируется в заказ WooCommerce одной кнопкой — все позиции, цены, адреса автоматически подтягиваются, ничего не нужно вводить заново.
Знаете, что мне больше всего нравится в этом процессе? Он оцифровывает то, что раньше происходило в email, в WhatsApp, в телефонных звонках. Менеджер получает запрос в мессенджер, пересылает коллеге в отдел закупок, тот проверяет остатки, отвечает менеджеру, менеджер формирует КП в Excel, отправляет клиенту на email, клиент правит, отправляет обратно... К концу этой цепочки никто не помнит, какая версия актуальная, а половина информации потерялась между пересылками. С нашим workflow всё в одном месте: запрос, обсуждение, предложение, документ, заказ. Один клик — и вся история перед глазами.
Отдельно стоит сказать про автогенерацию PDF. Мы много времени потратили на то, чтобы сделать эти документы не просто функциональными, а профессионально выглядящими. Логотип компании, шапка с реквизитами, аккуратная таблица товаров с артикулами и единицами измерения, итоговая сумма с НДС и без, блок с условиями оплаты и доставки, место для подписи и печати. Это не «распечатка из интернет-магазина» — это полноценный деловой документ, который не стыдно отправить крупному заказчику. Шаблон PDF настраивается из админки, и вы можете адаптировать его под свой фирменный стиль.
Кстати, один из наших клиентов — производитель гидравлических масел — рассказал мне, как RFQ-модуль изменил работу его отдела продаж. Раньше менеджер тратил в среднем сорок минут на обработку одного оптового запроса: принять заявку, проверить остатки, посчитать цену с учётом скидок, сформировать КП, отправить, подождать ответа, скорректировать, отправить заново. Теперь — пятнадцать минут. Причём большая часть этого времени — это не рутинные операции, а живое общение с клиентом через систему диалогов, обсуждение конкретных позиций, подбор аналогов. Рутину система взяла на себя: расчёт цен, проверку остатков, формирование документов.
Субаккаунты, кошельки и закупочные листы: когда B2B — это не один человек, а целая компания
Есть одна вещь, которую розничные интернет-магазины вообще не понимают, а B2B-порталы обязаны учитывать: клиент — это не человек, это организация. У организации несколько сотрудников, и каждому нужен свой уровень доступа к магазину. Закупщик формирует заявки, руководитель их утверждает, бухгалтер скачивает документы и следит за оплатами, логист отслеживает доставку. Если у всех один логин — это хаос и проблемы с безопасностью. Если для каждого отдельная регистрация — тогда они не связаны между собой, и менеджер не понимает, что Иванов, Петров и Сидоров — это одна компания «ГидроТех».
Субаккаунты решают эту проблему элегантно. Главный аккаунт компании — обычно это руководитель или ответственный за закупки — создаёт дочерние аккаунты для своих сотрудников. Каждому субаккаунту назначаются права: может ли он создавать заказы, может ли подтверждать заказы выше определённой суммы, может ли видеть заказы других сотрудников компании, может ли управлять закупочными листами. Все субаккаунты наследуют группу, цены и правила видимости от главного аккаунта. Заказы, сделанные субаккаунтами, видны в общей истории компании. Это как корпоративный аккаунт — одна компания, несколько пользователей, прозрачная история.
Я помню, как один клиент рассказывал мне про свою головную боль до внедрения субаккаунтов. У него был крупный дилер с пятью закупщиками в разных городах. Каждый закупщик регистрировался отдельно, каждому вручную назначали группу «Дилер», каждому выставляли индивидуальные цены. Когда один закупщик уходил и приходил новый — начиналась суматоха с передачей аккаунта, сменой паролей, проверкой, все ли настройки на месте. А потом руководитель этого дилера спрашивал: «Покажите мне всю историю закупок нашей компании за этот год» — и менеджер начинал собирать информацию из пяти отдельных аккаунтов вручную. С субаккаунтами всё это исчезло — руководитель дилера сам управляет своими сотрудниками, видит общую статистику, и если кто-то увольняется — просто деактивирует его субаккаунт. Три секунды вместо часа переписки.
Теперь про B2B-кошелёк. Эта функция появилась по просьбе клиентов, которые работают с постоянными оптовиками на условиях предоплаты. Логика простая: дилер вносит на баланс определённую сумму — скажем, пятьсот тысяч рублей — и потом списывает с неё заказы. Не нужно каждый раз формировать отдельный счёт, ждать оплату, проверять поступление. Деньги уже на балансе — оформил заказ, сумма списалась, товар пошёл на отгрузку. Для клиента это удобно — ускоряет процесс закупки. Для продавца — гарантия оплаты и предсказуемый денежный поток. В личном кабинете клиент видит текущий баланс, историю пополнений и списаний, может скачать выписку за период. Менеджер может пополнить баланс вручную или настроить автоматическое пополнение при поступлении платежа.
Закупочные листы — ещё одна функция, которая кажется мелочью, пока вы не поработаете с B2B-клиентами, которые делают регулярные заказы. Допустим, автосервис каждый месяц заказывает одни и те же расходники: десять канистр моторного масла 5W-30, пять канистр трансмиссионного, двадцать масляных фильтров, десять воздушных. Каждый раз заново искать эти товары в каталоге, добавлять в корзину, вводить количества — это пять-десять минут ручной работы. С закупочным листом — одно нажатие кнопки. Клиент один раз создаёт список «Ежемесячные расходники», добавляет туда все нужные товары с количествами, и потом одним кликом отправляет весь список в корзину. Можно создать несколько списков — «Для СТО на Ленина», «Для филиала в Копейске», «Срочный запас» — и использовать их по необходимости.
Но вот что делает закупочные листы по-настоящему полезными — это интеграция с остальной системой. Цены в закупочном листе всегда актуальны — если групповая цена изменилась, список покажет новую цену. Если товар закончился на складе, список покажет это. Если появилась сезонная скидка — цена в списке обновится автоматически. Закупочный лист — это не статический набор товаров, а живой инструмент, который всегда отражает текущее состояние каталога.
И раз уж мы заговорили про оплату — давайте про B2B-платёжные методы. В рознице всё просто: карта, электронный кошелёк, может быть наложенный платёж. В B2B главный способ оплаты — выставление счёта на юридическое лицо. Клиент оформляет заказ, система автоматически формирует счёт с реквизитами обеих сторон — продавца и покупателя. Счёт доступен в личном кабинете и отправляется на email. Клиент оплачивает безналичным переводом, менеджер подтверждает поступление — заказ идёт в работу. Второй способ — Purchase Order, когда клиент указывает номер своего внутреннего заказа-наряда, и оплата происходит по условиям договора — с отсрочкой тридцать, шестьдесят или девяносто дней. Третий — оплата с B2B-кошелька, о котором я уже рассказывал. Все три способа работают в стандартном чекауте WooCommerce — клиент выбирает подходящий при оформлении заказа, и система автоматически применяет соответствующую логику.
Правила и ограничения: заставить систему работать по вашим бизнес-процессам
Знаете, в чём принципиальная разница между розничным и оптовым магазином с точки зрения бизнес-логики? В рознице правила простые и одинаковые для всех: минимальный заказ — один товар, оплата — любым способом, доставка — куда скажете. В B2B правила — это часть бизнес-модели, и они разные для разных клиентов.
Дилеру нельзя заказывать меньше десяти единиц одного товара — иначе не окупается логистика. Дистрибьютор может заказывать только полными палетами. VIP-клиент может заказывать любое количество, но у него минимальная сумма заказа — пятьдесят тысяч рублей. Новый клиент, который ещё не подтвердил свой статус, может оплачивать только по предоплате. Клиент с просроченной задолженностью временно ограничен — может просматривать каталог, но не может оформлять заказы. Клиент из определённого региона не может заказывать товары с ограниченным оборотом.
Все эти правила и ограничения должны работать автоматически, без ручного контроля менеджера. И они должны быть понятны клиенту — если он пытается оформить заказ на восемь канистр при минимуме в десять, он должен видеть чёткое сообщение: «Минимальное количество для этого товара — 10 шт.» А не загадочную ошибку «невозможно оформить заказ».
Мы реализовали систему правил, которая покрывает основные сценарии B2B-ограничений. Минимальный объём заказа — по количеству товаров, по сумме, по весу. Шаг количества — если товар продаётся только упаковками по шесть штук, клиент не может заказать пять или семь. Ограничения по способам оплаты — для определённых групп доступны только определённые платёжные методы. Ограничения по способам доставки — крупногабаритные заказы только транспортной компанией, не курьером. Обязательные поля — при заказе определённых товаров клиент должен указать дополнительную информацию, например номер лицензии или назначение использования.
Эти правила привязываются к группам клиентов, к категориям товаров или к конкретным товарам. И они проверяются на каждом этапе: при добавлении в корзину, при переходе к чекауту, при оформлении заказа. Если правило нарушено — клиент получает понятное сообщение и подсказку, как исправить ситуацию.
Я часто слышу возражение: «Зачем такие сложности? Пусть менеджер проверяет каждый заказ вручную.» И это работает, когда у вас пять оптовых клиентов и десять заказов в неделю. Но когда клиентов пятьдесят, а заказов — двадцать в день, ручная проверка превращается в бутылочное горлышко. Менеджер тратит время на проверку тривиальных правил вместо того, чтобы заниматься продажами. А если менеджер заболел или в отпуске — правила просто перестают работать, и вы рискуете отгрузить товар клиенту с просроченной задолженностью или принять заказ ниже минимальной суммы.
Автоматизация правил — это не про замену менеджера. Это про то, чтобы освободить менеджера от рутины и дать ему возможность заниматься тем, что действительно требует человеческого участия: переговорами, подбором товаров, построением отношений с клиентами. Пусть система проверяет минимальные количества и доступные способы оплаты — менеджер в это время будет обсуждать с клиентом условия на следующий квартал.
Отдельно хочу сказать про регистрационные правила. Я уже упоминал кастомные поля при регистрации оптовика — ИНН, КПП, юридический адрес. Но дело не только в полях. Важен весь процесс: клиент заполняет форму, заявка попадает в очередь на модерацию, менеджер получает уведомление, проверяет данные — возможно, пробивает ИНН в базе ФНС, проверяет компанию на наличие задолженностей и судебных исков, — и принимает решение: одобрить, отклонить или запросить дополнительную информацию. При одобрении клиент автоматически получает назначенную группу, видит свои цены и каталог. При отклонении — получает email с объяснением причины. Всё это настраивается, шаблоны писем можно редактировать, статусы заявок видны в общем списке.
Почему это важно? Потому что первое впечатление от B2B-портала складывается именно в момент регистрации. Если потенциальный дилер заполнил форму и трое суток не получил ответа — он уже ушёл к конкуренту. Если он получил одобрение через два часа с персональным приветствием и инструкцией по первому заказу — он ваш. Скорость и качество обработки заявок напрямую влияют на конверсию из «заинтересовался» в «стал клиентом».
Почему один модуль лучше четырёх плагинов: экономика и здравый смысл
Давайте посчитаем. Типичный набор B2B-плагинов для WooCommerce: плагин для групп клиентов и ролей — от 79 до 149 долларов в год. Плагин для оптового ценообразования — от 99 до 199 долларов. Плагин для RFQ (запрос коммерческого предложения) — от 79 до 149 долларов. Плагин для ограничения видимости каталога — от 49 до 99 долларов. Итого за минимальный набор из четырёх плагинов — от 306 до 596 долларов в год. И это без субаккаунтов (ещё 79-149), без tiered pricing (ещё 99), без B2B-регистрации с модерацией (ещё 79). Если взять всё, что нужно для полноценного B2B-портала, — легко выходит за 800 долларов в год. Каждый год.
Но деньги — это полбеды. Настоящая проблема — совместимость. Каждый из этих плагинов имеет свою логику определения цены, свой способ проверки доступа, свои хуки и фильтры. Когда вы ставите четыре плагина рядом, они начинают конфликтовать. Плагин ценообразования считает, что цена для дилера — 4 250 рублей, а плагин групп накладывает сверху свою скидку и получается 3 825. Плагин видимости скрывает товар, а плагин RFQ всё равно показывает его в запросе. Вы тратите время на отладку конфликтов, пишете в поддержку каждого плагина, получаете стандартный ответ «это не наш баг, обратитесь к разработчику другого плагина», и в итоге нанимаете фрилансера за отдельные деньги, чтобы он написал кастомный код, который склеит всё это вместе.
А потом один из плагинов обновляется, и всё ломается заново.
Мне могут возразить: «Но ведь модульность — это хорошо! Я покупаю только то, что мне нужно.» И я соглашусь — модульность хороша, когда модули спроектированы для совместной работы. Как детали конструктора, которые идеально стыкуются. Но когда модули — это независимые продукты от разных команд, которые даже не знают о существовании друг друга, модульность превращается в головную боль.
В нашем подходе модули — это части одного продукта. B2B-группы, ценообразование, видимость, ограничения, RFQ, субаккаунты, кошельки — всё это один PHP-нэймспейс, один набор таблиц в базе данных, один API, одна административная панель. Когда вы настраиваете групповую цену — система ценообразования знает о группах. Когда вы скрываете товар для розничных клиентов — поиск тоже его не показывает. Когда клиент формирует RFQ — система подставляет его групповые цены с учётом объёмных скидок. Всё работает как единый механизм, потому что оно и есть единый механизм.
И ещё один аргумент, который важен для тех, кто уже работает с 1С. Наш B2B-модуль спроектирован с учётом 1С-интеграции изначально. Группы клиентов сопоставляются с видами цен в 1С. Оптовые цены синхронизируются через OData. Заказы выгружаются в 1С с правильной аналитикой — по группе клиента, по типу оплаты, по источнику заказа. Попробуйте настроить такую интеграцию с четырьмя независимыми плагинами — вам понадобится не один фрилансер, а целая команда разработчиков. И каждое обновление любого из плагинов потенциально сломает интеграцию.
Я не говорю, что наше решение — единственно правильное. На рынке есть отличные специализированные B2B-плагины, которые делают свою конкретную задачу лучше, чем кто-либо. Но если вам нужен полноценный B2B-портал — с группами, ценами, видимостью, запросами предложений, субаккаунтами, интеграцией с 1С — собирать его из отдельных плагинов-запчастей значит обрекать себя на бесконечную борьбу с совместимостью, обновлениями и поддержкой.
Знаете, я иногда сравниваю это с ремонтом квартиры. Можно купить отдельно плитку, отдельно затирку, отдельно клей, отдельно инструменты — и самому разбираться, какая затирка подходит к какой плитке, какой клей держит на каком основании. А можно взять готовый комплект от одного производителя, где всё подобрано и протестировано вместе. Первый путь дешевле, если знаешь что делаешь. Но если ошибёшься — переделывать дороже, чем было бы купить комплект сразу.
Вернусь к тому человеку, который позвонил мне на прошлой неделе — владельцу компании по производству смазочных материалов. Мы настроили ему полный B2B-портал за две недели. Три группы клиентов с наследованием, многоуровневое ценообразование с привязкой к 1С, скрытый каталог для специализированных продуктов, RFQ-workflow с генерацией PDF-коммерческих предложений, субаккаунты для крупных дилеров, B2B-кошелёк для постоянных клиентов с предоплатой. Одна админка, один набор настроек, один канал поддержки. Через месяц после запуска его менеджеры обрабатывали вдвое больше оптовых заявок при том же штате — потому что система взяла на себя рутину.
Он потом написал мне: «Я два года пытался собрать это из отдельных плагинов. Потратил больше, чем стоило ваше решение, и так и не довёл до рабочего состояния.» Мне не хочется превращать это в рекламный отзыв, но факт остаётся фактом: интегрированное решение для B2B — это не просто удобство, это экономическая необходимость для компаний, которые серьёзно относятся к оптовому каналу продаж.
А что если вы только начинаете думать о B2B и не уверены, что вам нужен полный набор функций? Начните с малого. Настройте одну группу оптовых клиентов с базовыми ценами. Включите модерацию регистрации. Посмотрите, как пойдёт. По мере роста подключайте tiered pricing, RFQ, субаккаунты — каждый модуль включается переключателем в настройках, без дополнительных плагинов, без дополнительных оплат. Вы растёте — система растёт вместе с вами. И в какой-то момент вы оглянетесь и увидите полноценный оптовый портал, который построился естественно, шаг за шагом, без стресса и переделок.
Попробуйте COS WP Woo — 14 дней бесплатно. Установите плагин, активируйте B2B-модуль и настройте первую группу оптовых клиентов за пятнадцать минут. Без привязки карты, без ограничений функционала. Все возможности, о которых мы говорили — группы, цены, скрытый каталог, RFQ, субаккаунты, интеграция с 1С — доступны с первого дня. Если за две недели вы не увидите разницу — просто деактивируйте плагин. Но я уверен, что увидите.
