Есть класс бизнесов, где цену нельзя положить в прайс. Она собирается из десятка переменных, зависит от параметров, которые клиент сам не всегда знает, и меняется вместе с тарифами поставщиков. Производитель с конфигурацией под заказ, дистрибутор с ценой от объёма и условий договора, транспортная компания — устроены одинаково: посчитать умеют несколько человек в компании, и каждый расчёт стоит звонка.
Пока цена живёт в голове менеджера, сайт не приносит заявки. Он приносит запросы «перезвоните, обсудим», а это другая воронка — длиннее, дороже и с большим отвалом.
Ниже — как мы вынесли такой расчёт в интерфейс. Проект — калькулятор авиаперевозок для транспортной компании «Норд Вил», но выводы про расчётные интерфейсы переносятся на конфигураторы и B2B-кабинеты один в один.
Клиент: ТК «Норд Вил» (nordw.ru) — транспортная компания, авиаперевозки и автоперевозки сборных грузов по России.
Что сделали: онлайн-калькулятор авиаперевозок с расчётом «от двери до двери», сравнением авиакомпаний и передачей заявок в Битрикс24 и 1С.
Стек: Laravel, админ-панель на Orchid, SPA-фронтенд, публичное API.
Смотреть вживую: nordw.ru/tools/calculation/#avia
С чего начали: входящих заявок на авиа не было вообще
Это не фигура речи и не «было мало». До запуска калькулятора «Норд Вил» не получал с сайта ни одной заявки на авиаперевозку. Направление жило целиком на телефоне: клиент звонил, менеджер уточнял параметры груза, уходил считать, перезванивал. Посчитать авиаперевозку в компании умели единицы — это отдельная компетенция, а не «посмотреть в прайс».
Параллельно была вторая, менее очевидная потеря. У компании уже есть база клиентов на автоперевозках сборных грузов по РФ. Значительная часть этих клиентов просто не знала, что «Норд Вил» возит ещё и самолётами. Когда у них появлялся срочный груз, они шли к конкурентам — не потому что там дешевле, а потому что не рассматривали своего же перевозчика как вариант.
Задача, с которой к нам пришли, звучала просто: сделать на сайте инструмент, который считает авиаперевозку сам. Дальше начинается предметная область.
Почему авиа нельзя посчитать так же, как авто
В автоперевозке цена — это в основном маршрут и объём. В авиа так не работает, и именно поэтому у большинства транспортных компаний на сайте либо нет калькулятора, либо стоит форма «оставьте телефон, мы посчитаем».
Что на самом деле входит в стоимость одной авиаотправки:
- тариф авиакомпании — не одна цифра, а сетка: своя ставка на каждое направление, на каждый тип тарифа (GENERAL, EXPRESS, COURIER и специальные — PHARMA, DGR, LIVE, FRESH и другие) и на каждый весовой порог;
- оплачиваемый вес — авиакомпания берёт деньги не за фактический вес, а за больший из фактического и объёмного. Лёгкий, но габаритный груз оплачивается по объёму, и разница бывает кратной;
- топливный сбор — считается от веса;
- оформление авианакладной;
- терминальное оформление в аэропорту вылета и в аэропорту прилёта — две разные позиции;
- сопровождение в аэропорту силами «Норд Вил»;
- наземные плечи — забор груза по адресу в городе отправления и доставка по адресу в городе прилёта, по тарифам автоперевозок;
- автоплечо до Москвы — для части городов перелёт стыкуется с автодоставкой, и это звено тоже попадает в цену;
- страхование от объявленной стоимости и жёсткая упаковка, если груз того требует.
Десяток переменных, каждая со своей логикой. Менеджер, который держит это в голове, — ценный сотрудник, и таких в компании было мало. Наша работа состояла в том, чтобы вынести эту компетенцию из головы менеджера в интерфейс, которым может пользоваться человек с улицы.
Три способа задать груз: калькулятор внутри калькулятора
Первое, обо что спотыкается любой расчётный интерфейс в логистике, — пользователь не знает объём своего груза. Он знает, что у него «шесть коробок вот такого размера». Требовать от него кубометры — значит потерять его на первом же поле.
Поэтому в калькуляторе три режима ввода, и переключаются они на лету:
Простой. Общий вес и общий объём одной строкой. Для тех, кто возит регулярно и цифры знает.
По точным габаритам. Включается переключатель «Рассчитать с точными габаритами» — и вместо объёма появляются поля «Длина × Ширина × Высота». Система считает объём места, умножает на количество мест и тут же показывает результат прямо в строке: 1,0 × 1,0 × 1,0 = 1 м³.
По однотипным местам. Вес и объём одного места плюс количество таких мест. Итог система считает сама. Это типовой сценарий: партия одинаковых коробок.
Строки грузовых мест добавляются и удаляются кнопкой «+ Добавить грузовое место» — для сборной отправки из разных по характеристикам мест. Общий объём и оплачиваемый вес пересчитываются при каждом изменении.
Смысл всей конструкции в одном: пользователь не обязан знать объём заранее. Он вводит то, что может измерить рулеткой, — остальное считает система. Это снимает главный барьер к заполнению формы.
Мы показываем не расчёт, а рынок
Калькулятор не выдаёт одну цену. Он считает стоимость по всем авиакомпаниям и всем подходящим тарифам сразу и показывает варианты списком. Для отправки Москва — Казань выдача выглядит так: «Аэрофлот, GENERAL, SVO → KZN», «S7, BIG, DME → KZN», «Аэрофлот, EXPRESS», «Аэрофлот, COURIER» — с ценой, минимальным весом по тарифу и аэропортами вылета и прилёта у каждой строки.
Здесь мы сознательно пошли против рыночной практики. Конкуренты чаще всего не показывают, какая авиакомпания повезёт груз, — цена есть, перевозчика нет. Мы решили открыть всё: клиент видит, за что платит и кто повезёт. Гипотеза была в том, что прозрачность в B2B продаёт лучше, чем управление ожиданиями, — и что человек, который сам выбрал перевозчика, доходит до сделки охотнее, чем тот, кому вариант назначили.
По умолчанию выбран самый дешёвый вариант. Но выбор остаётся за клиентом: кому-то важнее срок, кому-то — конкретный аэропорт вылета, у кого-то корпоративное соглашение с определённой авиакомпанией.
Детализация: чтобы не отвечать на вопрос «почему так дорого»
Каждый вариант раскрывается в полную детализацию — что именно входит в цену:
Позиции, которые считаются от веса, показаны со ставкой за килограмм — клиенту сразу видно, что именно вырастет, если груз окажется тяжелее.
Это не украшение интерфейса, а инструмент снятия возражений. В логистике непрозрачная цена читается как завышенная — клиент не понимает, где перевозка, а где наценка, и по умолчанию подозревает второе. Когда цена разложена по позициям и рядом стоит ставка за килограмм, разговор «почему так дорого» либо не начинается, либо начинается уже предметно.
«От двери до двери» одним числом
Калькулятор считает не перелёт, а перевозку. Клиент выбирает, что делает с грузом на каждом конце: «привезу в аэропорт или на терминал» либо «забрать по адресу», «заберу из аэропорта» либо «доставить по адресу». Наземные плечи считаются по тарифам автоперевозок «Норд Вил» и попадают в ту же итоговую сумму.
Для части городов в схему добавляется ещё одно звено: перелёт стыкуется с автодоставкой до Москвы. Это плечо тоже входит в расчёт — клиент видит финальную цифру, а не «авиа, а потом отдельно посчитаем машину».
Для «Норд Вил» это ещё и деньги: последняя миля остаётся у компании, а не уходит локальному перевозчику в городе прилёта.
Первую версию мы сделали неудобной. И переделали
Это самая полезная часть кейса, поэтому расскажем честно.
В первой версии расчёт запускался кнопкой «Рассчитать стоимость», а результаты выводились под формой. Логика была стандартная и на бумаге безупречная: ввёл данные — нажал — получил.
На практике получилось так. Пользователь заполнял форму, жал кнопку, скроллил вниз к результатам, смотрел цену, решал попробовать другой объём — скроллил обратно вверх, менял поле, снова жал кнопку, снова скроллил вниз. А сравнение вариантов — это не разовое действие, это как раз то, ради чего люди приходят в калькулятор. Каждая итерация стоила два скролла и клик.
Что изменили:
Убрали кнопку. Расчёт пересчитывается при любом изменении в форме. Да, это заметно больше нагрузки на бэкенд — мы сознательно разменяли серверные ресурсы на клики пользователя и закрыли вопрос кешированием расчётов.
Перенесли результаты вправо от формы. Блок «Предварительная стоимость услуг» стоит рядом с полями и обновляется на глазах. Ничего не нужно искать — итоговая сумма и оплачиваемый вес всегда в поле зрения.
Ограничили выдачу пятью лучшими предложениями по цене. Полный список вариантов — это не помощь, а работа, которую перекладывают на клиента. Пять — достаточно, чтобы увидеть разброс, и мало, чтобы не устать.
Добавили подсказку, чего не хватает. Пока форма заполнена не до конца, справа вместо цены стоит чек-лист: «Для расчёта стоимости укажите: Откуда ✓, Куда, Вес ✓, Объём ✓, Тип груза». Пользователь видит, какие два поля отделяют его от цифры.
Общий вывод, который мы забрали с проекта: в расчётных интерфейсах кнопка «Рассчитать» — почти всегда лишняя сущность. Она есть не потому, что нужна пользователю, а потому что так проще разработчику. Как только расчёт становится непрерывным, инструмент перестаёт быть формой и превращается в то, с чем играют, — а именно это и приводит к заявке.
Тарифы меняются, разработчики не нужны
Авиакомпании присылают тарифные письма регулярно — с периодом действия, списком пунктов продаж и матрицей ставок на несколько сотен строк: IATA-коды аэропортов вылета и прилёта, названия городов, тип воздушной линии, колонки по каждому типу тарифа и весовому порогу. Обновлять это руками через разработчиков — дорого и медленно, а значит, калькулятор быстро начал бы врать.
Поэтому в админке есть раздел «Загрузка тарифов»: ответственный сотрудник загружает xls-файл прайса по шаблону, система привязывает строки к городам и проверяет на дубли. Правка кода не нужна.
Через админ-панель управляются и все остальные сущности расчёта: авиакомпании, аэропорты, маршруты, типы грузов, типы тарифов и их связка, коэффициенты, значения по умолчанию, типы услуг. То есть модель расчёта настраивается бизнесом, а не переписывается разработчиком при каждом изменении на рынке.
Скидки на направления
Отдельный инструмент для коммерции. В админке заводится строка: город вылета, город прилёта, процент скидки, признак активности. Дальше калькулятор всё делает сам — на нужном направлении применяет скидку к стоимости перелёта, показывает старую цену зачёркнутой и выводит над списком плашку «Скидка 10%! На направление Москва — Астрахань». Сортировка по «самому дешёвому» учитывает уже цену со скидкой.
Это даёт отделу продаж рабочий рычаг: можно догружать обратные рейсы, разгонять приоритетные направления или отвечать на активность конкурента — без задачи в агентство и без релиза.
Заявка не теряется
Каждая заявка с калькулятора уходит по трём адресам одновременно: создаётся лид в Битрикс24 с UTM-метками и данными сквозной аналитики, передаётся в 1С и падает менеджеру на почту письмом с полным содержимым — параметры груза, выбранная авиакомпания, тариф, вся детализация стоимости. Рассылка идёт через Юнисендер Go.
В админке заявки лежат в разделе «Авиаперевозки → Заявки» в табличном виде: дата, откуда, куда, имя, телефон, сумма. Типов заявок три, и это не техническая деталь, а осознанное решение:
- выбран конкретный вариант доставки — с полной детализацией расчёта;
- нет маршрута между городами — клиент искал направление, которого в системе нет;
- нет тарифа под заданные параметры — груз не попал ни в один тариф.
Второй и третий типы обычно просто теряются: пользователь видит «ничего не найдено» и уходит. Мы превратили их в лиды — менеджер видит, что человек искал, и может предложить решение вручную. Заодно это бесплатная аналитика спроса: список направлений, которых нет в системе, — это готовый список того, что стоит добавить.
Разграничение доступа и страницы направлений
В админ-панели заведена отдельная роль «Менеджер по авиа»: сотрудник с этой ролью видит и правит только блок «Авиаперевозки», остальные разделы сайта для него закрыты. Это позволило отдать управление тарифами, скидками и заявками профильному человеку, не выдавая ему доступ ко всей системе.
Дополнительно сделаны SEO-страницы направлений вида nordw.ru/destinations/moskva-nizhniy-novgorod/ со встроенным калькулятором. Человек, который ищет «авиадоставка Москва Нижний Новгород», попадает сразу на страницу своего направления и считает цену, не разбираясь в структуре сайта.
Как это устроено технически
Бэкенд — Laravel, админ-панель — Orchid. Фронтенд калькулятора — SPA, чтобы пересчёт при каждом изменении формы шёл без перезагрузок. Расчёты кешируются: непрерывный пересчёт по всем авиакомпаниям — нагрузка, которую нужно было закрыть до продакшена.
Интеграции: Битрикс24 (лиды, UTM, сквозная аналитика), 1С (передача заявок и обмен тарифными данными), публичное API для встраивания расчёта на страницы направлений. Уведомления — Юнисендер Go, аналитика — Яндекс.Метрика плюс сквозная.
Интерфейс спроектирован в Figma — с макетами и интерактивным прототипом, на котором обкатывались режимы ввода груза до начала разработки.
Результат
Главное — входящие заявки на авиаперевозки появились. До запуска их не было ни одной; теперь они идут с сайта стабильно.
Дальше — то, чего в задаче не было, но что оказалось не менее ценным:
- Калькулятором пользуются сами менеджеры отдела продаж. Он стал внутренним инструментом быстрого расчёта — и, что важнее, инструментом кросс-сейла. Менеджер на разговоре с клиентом по автоперевозкам за минуту показывает цену авиадоставки. Та самая база, которая не знала про авиа, теперь узнаёт о ней в разговоре, а не постфактум.
- Видно, откуда приходят заявки. UTM-метки и сквозная аналитика показывают, какие каналы приносят не клики, а реальные перевозки.
- Компания управляет тарифами, наценкой и скидками сама — без задач в агентство и без релизов.
- Клиент видит рынок, а не одно предложение — с перевозчиком, детализацией и итоговой ценой «от двери до двери».
Чем это отличается от того, что стоит на рынке
Калькуляторы авиаперевозок на сайтах транспортных компаний обычно делают одно из двух: считают по одному внутреннему тарифу без указания перевозчика либо просят оставить телефон. Здесь клиент получает прозрачное сравнение авиакомпаний с полной стоимостью «от двери до двери», видит перевозчика и разложенную по позициям цену, а заявка автоматически уходит в Битрикс24 и 1С с готовым расчётом.
Сочетание из четырёх вещей — сравнение перевозчиков, честная детализация, наземные плечи в одной сумме и управление тарифами силами бизнеса — на рынке встречается редко. Обычно есть одно, максимум два.
Кому это применимо, кроме логистики
Мы делали калькулятор авиаперевозок, но задача была не про самолёты. Задача была: сложная цена, которую умеют считать несколько человек, мешает продавать через сайт. Она устроена одинаково в нескольких типах бизнеса.
Производитель с конфигурацией под заказ. Цена зависит от материала, размеров, тиража, обработки, доставки. Клиент знает габариты изделия, но не знает, как они превращаются в рубли. Тот же паттерн: три режима ввода параметров, непрерывный пересчёт, детализация по позициям, заявка в CRM с готовой спецификацией.
Дистрибутор или оптовик. Цена зависит от объёма, категории клиента, условий договора и логистики. Здесь калькулятор чаще живёт не на публичном сайте, а внутри кабинета дилера — но механика расчёта и требование «менять цены без разработчиков» те же самые.
Ритейл со сложной доставкой или монтажом. Габаритный товар, подъём на этаж, сборка, вывоз упаковки — всё это в корзине превращается в тот же самый расчёт «от двери до двери», который клиент хочет увидеть до оформления, а не после.
Общее во всех трёх случаях — три вещи. Первая: модель ценообразования должна настраиваться бизнесом через админку, иначе инструмент устареет за квартал. Вторая: расчёт должен быть непрерывным, без кнопки. Третья: даже неуспешный расчёт — «нет такого варианта» — обязан становиться лидом, а не тупиком.
Нужен такой же расчётный инструмент?
Мы проектируем и запускаем калькуляторы, конфигураторы и B2B-кабинеты, которые считают сложную цену без участия менеджера и приводят заявку в CRM с готовым расчётом: настраиваемая модель ценообразования, интеграция с Битрикс24 и 1С, управление ценами и скидками силами вашей команды.
ADN agency — 23 года на рынке, 430+ проектов, NPS 83%. Расскажите задачу — предложим решение.