Разработка
КЕЙС: Интеграция CRM-системы X-Прокат с сайтом аренды автомобилей VroomClub
Сайт получил устойчивую связку с CRM: автопарк, статусы, цены и доступность синхронизируются автоматически, а заявки с форм уходят в X-Прокат как готовые сделки. Данные, интерфейс и продажи связаны в единую систему без ручного обновления.
Время работы
1 месяц
ГОД
2026
О клиенте
(01)
VroomClub – сайт аренды премиальных автомобилей, где автопарк является основным коммерческим активом. Для такого проекта критично, чтобы пользователь видел актуальные автомобили, понятные цены, действующие статусы, доступные предложения и мог быстро оставить заявку по выбранной машине.
До интеграции сайт работал как витрина, а CRM X-Прокат жила отдельным контуром. Это создавало риск рассинхронизации: менеджеры работают в CRM, пользователь смотрит сайт, а данные между этими точками требуют постоянной ручной поддержки. Для прокатного бизнеса это слабое место: статус автомобиля может измениться быстро, а заявка должна попадать в работу без потери контекста.
Задача проекта заключалась в том, чтобы связать сайт и CRM в единую операционную систему: CRM хранит актуальные данные об автопарке, WordPress показывает их пользователю, а формы сайта возвращают лиды обратно в CRM уже в формате сделки.
С чем обратился клиент
Клиенту требовалась полноценная интеграция сайта с X-Прокат, а не разовая выгрузка данных. Важно было, чтобы сайт автоматически получал сведения об автомобилях, корректно отображал доступность, учитывал цены и статусы, поддерживал фильтрацию, слайдеры и новые интерфейсные блоки.
Отдельный блок задачи – передача заявок с сайта в CRM. Менеджер должен получать не абстрактное сообщение “перезвонить клиенту”, а структурированную заявку: имя, телефон, выбранный автомобиль, дату начала аренды, срок, город доставки, UTM-метки и комментарий по условиям.
Ключевой запрос клиента
- Сделать сайт не статичным каталогом, а рабочим интерфейсом продаж, связанным с CRM.
- Автопарк, фильтрация, Stories, слайдеры и заявки должны опираться на актуальные данные.
- Контент-менеджеры и менеджеры продаж не должны вручную дублировать одни и те же действия в разных системах.
Стартовая точка
На старте сайт уже имел структуру автопарка на WordPress: кастомные типы записей, мета-поля, таксономии, карточки автомобилей и пользовательские сценарии выбора. Но эти данные требовалось связать с внешней CRM, которая выступает источником актуального состояния автопарка.
Основная сложность была в том, что X-Прокат работает через JSON-RPC API, а сайт построен на WordPress. Между ними нужно было создать слой синхронизации, который умеет получать данные, нормализовать их, связывать записи по идентификаторам, кешировать результат и отдавать его во фронтенд без лишней нагрузки.
Если бы сайт при каждом открытии страницы обращался напрямую к CRM, скорость и стабильность просели бы сразу. Поэтому интеграция проектировалась как постоянный обмен данными с фоновым обновлением и локальным кешем.
Цель проекта
(01)
Целью было создать устойчивую двустороннюю интеграцию между WordPress и CRM X-Прокат: сайт автоматически получает данные об автомобилях, а заявки пользователей отправляются обратно в CRM как готовые сделки.
Внутри этой цели было несколько практических задач: синхронизировать автопарк, учитывать доступность машин, ускорить работу фильтрации, правильно сортировать автомобили на главной и в каталоге, передавать лиды в CRM, сохранить UTM-метки и реализовать динамический блок Stories, который показывает доступные машины, акции и новинки.
Общая архитектура решения
Решение построено как гибридная модель. CRM X-Прокат выступает источником истины по автопарку, WordPress остается слоем представления и управления контентом, а между ними работает промежуточный слой синхронизации: cron, кеш, маппинг полей и обработка API-ответов.
Такой подход позволяет сайту оставаться быстрым и стабильным даже при временной недоступности внешнего API. Пользователь продолжает видеть актуальную витрину на основе локально сохраненных и закешированных данных, а система при следующем успешном цикле синхронизации обновляет состояние автопарка.
- CRM X-Прокат хранит актуальные статусы, цены, технические параметры и служебные данные автомобилей.
- WordPress хранит карточки автомобилей, SEO-структуру, визуальный контент, таксономии и пользовательский интерфейс.
- Слой синхронизации связывает внешний ExternalCode с внутренними постами, обновляет мета-поля и формирует кеш для фронтенда.
- Формы сайта отправляют данные обратно в CRM, чтобы заявка сразу попадала в работу менеджеров.
Реализация
(01)
Этап 1. Подключение к API X-Прокат и получение данных автопарка
Базовой точкой входа стал JSON-RPC API CRM X-Прокат. В отличие от типичного REST API, здесь используется строго структурированный формат запросов: API-ключ, версия API, имя метода и JSON-тело. Для получения списка автомобилей был реализован серверный POST-запрос с методом GetAutos.
На первом этапе был собран прямой вызов API через stream context. Это позволило быстро проверить контракт интеграции, структуру ответа и состав данных, которые CRM возвращает по автопарку: технические характеристики, цены, статусы, служебные поля, идентификаторы.
После проверки гипотезы production-реализация была переведена на WordPress HTTP API через wp_remote_post. Это дало более предсказуемую обработку ошибок, встроенную работу с таймаутами и корректную интеграцию с инфраструктурой WordPress.
Что важно с технической стороны
- Интеграция не привязана к ручному импорту файлов.
- Получение автопарка идет через серверный API-запрос.
- Сайт получает данные в контролируемом формате и дальше сам приводит их к внутренней модели.

Скриншот: привязка автомобиля к внешнему идентификатору и настройкам интеграции в X-Прокат.
(02)
Этап 2. Синхронизация, нормализация и маппинг данных
Ключевым решением стало внедрение фоновой синхронизации. Постоянные синхронные запросы к CRM при каждом визите пользователя создали бы лишнюю нагрузку и зависимость сайта от внешнего сервиса. Поэтому был реализован кастомный cron-ивент с интервалом один час.
Во время выполнения cron-задачи сайт обращается к API, получает актуальный список автомобилей, после чего данные проходят этап нормализации. В первую очередь приводятся статусы автомобилей: строковое значение из CRM очищается, приводится к нижнему регистру и используется для определения бизнес-логики доступности.
Отдельно введено понятие приоритета. Автомобили со статусом “парковка” получают повышенный приоритет отображения. Это решение работает уже на уровне бизнеса: доступные к аренде машины поднимаются выше в списках, а пользователь быстрее видит то, что реально можно забронировать.
Связка между CRM и WordPress построена через ExternalCode. Он жестко связывает запись из X-Прокат с конкретным автомобилем на сайте. После сопоставления данные записываются в мета-поля WordPress: статус, приоритет, цена, год выпуска и при необходимости полный JSON-объект для отладки.
Дополнительно был реализован transient-кеш, где хранится индекс автомобилей с ключевыми параметрами. Это ускоряет работу фронтенда и фильтрации, потому что интерфейс не обращается к базе или внешнему API при каждом действии пользователя.
(03)
Этап 3. Динамическая фильтрация автопарка по синхронизированным данным
На пользовательском уровне интеграция проявляется через фильтрацию автомобилей. Это важный блок для сайта аренды: пользователь сравнивает машины по марке, категории, цвету, мощности, стоимости и доступности. Если фильтр работает с устаревшими данными, он приводит к слабым заявкам и лишней нагрузке на менеджеров.
Фильтрация реализована на JavaScript с использованием AJAX. При изменении параметров формируется GET-запрос к admin-ajax.php, где передаются активные значения: категории, марки, цвета, мощность, ценовые диапазоны и другие параметры. Сервер возвращает уже отрендеренный HTML, который подменяет содержимое контейнера автопарка без перезагрузки страницы.
По UX это дает SPA-подобное поведение внутри классического WordPress-проекта: пользователь меняет фильтр и сразу видит обновленную выдачу. При этом состояние фильтра синхронизируется, выбранные параметры можно очистить, URL обновляется, а обработчики событий повторно инициализируются после перерисовки DOM.
Дополнительно система адаптирована под разные географические сегменты, например Москва и Дубай. Для них предусмотрены отдельные AJAX-эндпоинты и параметры запроса, что позволяет масштабировать проект под новые регионы без дублирования общей логики.

Скриншот: интерфейс автопарка и динамические блоки на сайте VroomClub после внедрения логики отображения.
(04)
Этап 4. Сортировка автомобилей и отображение на главной странице
Интеграция затронула не только страницу автопарка. Данные из CRM также используются на главной странице, где автомобили выводятся в категорийных слайдерах и промо-блоках. Здесь важно, чтобы сайт показывал в приоритете машины, которые реально доступны для аренды.
Для этого была реализована серверная выборка постов с кастомной сортировкой. Система учитывает локальные параметры WordPress, например цену, и данные из CRM: статус доступности и приоритет. В результате доступные автомобили поднимаются выше, а сайт помогает пользователю быстрее перейти к подходящей машине.
Это решение напрямую влияет на конверсию. Когда пользователь видит доступные предложения в первых позициях, снижается риск заявки на автомобиль, который сейчас не готов к аренде. Для менеджеров это означает меньше уточнений, для клиента – более понятный путь к бронированию.
(05)
Этап 5. Передача заявок с сайта в CRM как готовых сделок
Следующим этапом стала обратная интеграция: сайт начал не только получать данные из CRM, но и отправлять в X-Прокат пользовательские заявки. Это замкнуло систему в двусторонний контур: CRM обновляет сайт, сайт генерирует лиды и возвращает их в CRM.
Технически отправка заявок реализована через Contact Form 7. В качестве триггера используется хук wpcf7_mail_sent. Он срабатывает после успешной валидации и отправки формы, поэтому в CRM не уходят невалидные или прерванные обращения.
Из объекта WPCF7_Submission извлекаются имя клиента, номер телефона, дата начала аренды, длительность, город доставки и название выбранного автомобиля. Телефон очищается от лишних символов и приводится к формату, который ожидает CRM. Это снижает риск ошибок при создании сделки.
Payload для X-Прокат формируется как структурированный объект сделки. Базовые данные идут в ClientName и ClientPhone, а дополнительная информация собирается в ClientComment: автомобиль, даты, срок, место доставки. В блок Fields передаются условия договора: название автомобиля и рассчитанные временные интервалы аренды.
Отдельно реализована передача UTM-меток. Это важно для маркетинга: CRM получает не только заявку, но и источник трафика, кампанию, ключевые слова и другие параметры. Дальше можно анализировать эффективность каналов уже на уровне реальных сделок.
На фронтенде добавлен слой передачи контекста выбранного объекта. При клике на кнопку название автомобиля, яхты или другого объекта извлекается из DOM, сохраняется в localStorage и передается в скрытое поле формы. Это защищает от ситуации, когда пользователь открывает модальное окно, а заявка уходит без названия выбранного объекта.

Скриншот: заявка из сайта в CRM X-Прокат с выбранным автомобилем, датами, сроком аренды и городом доставки.
(06)
Этап 6. Логирование и контроль обмена данными
Для production-среды важно видеть, что именно сайт отправляет в CRM и какой ответ получает обратно. Поэтому была реализована система логирования: payload и ответ X-Прокат записываются в файл внутри wp-content.
Это lightweight-логирование без внедрения отдельной системы мониторинга, но его достаточно для оперативной диагностики. Если API меняет поведение, CRM возвращает ошибку или заявка приходит с некорректной структурой, техническая команда может быстро увидеть причину и исправить интеграцию.
При временных ошибках на стороне CRM пользовательский сценарий не ломается. Отправка заявки встроена так, чтобы фронтенд оставался понятным для клиента, а технические ошибки фиксировались для команды.
(07)
Этап 7. Stories как динамический слой поверх автопарка
Отдельным функциональным блоком стала система Stories по логике Instagram, но адаптированная под задачи автопроката. В стандартной реализации сторис часто выступают как декоративный элемент. Здесь они стали динамическим интерфейсом, который показывает актуальные подборки автомобилей на основе CRM и данных сайта.
Решение оформлено как изолированный WordPress-плагин. Он не создает отдельный кастомный post type и не дублирует данные, а работает поверх существующей модели cars_park. Это принципиально важно: система сохраняет единый источник данных и не создает параллельную базу автомобилей.
Было реализовано три сценария отображения: “Доступные сегодня”, “Акции” и “Новинки”. Каждый блок формируется по своей логике, но отдается фронтенду в едином формате.
Stories: “Доступные сегодня”
Блок “Доступные сегодня” напрямую опирается на transient-кеш с индексом автомобилей из CRM. Плагин фильтрует записи по статусу “парковка”, который был нормализован на этапе синхронизации. Поэтому в этой подборке показываются только машины, доступные к аренде сейчас.
Если кеш временно недоступен, предусмотрен fallback через мета-поле crm_priority. Это сохраняет работоспособность интерфейса даже при нестандартных сценариях.

Скриншот: Stories “Доступные сегодня” с автомобилем, который подтягивается из актуальных данных автопарка.
Stories: “Акции”
Категория “Акции” формируется на основе локальных ACF-полей WordPress. Плагин проходит по автопарку и выбирает автомобили с активным флагом скидки is_sale и заполненным значением sale_size. Контент-менеджеры могут управлять акциями через админку без участия разработчиков.
Такой подход разделяет зоны ответственности: CRM отвечает за фактическое состояние автопарка, WordPress – за маркетинговые акции и визуальное представление.

Скриншот: Stories “Акции” с отображением скидки и переходом к карточке автомобиля.
Stories: “Новинки”
Блок “Новинки” реализован через date-based фильтрацию. В выборку попадают автомобили, опубликованные в заданном временном окне, в текущей реализации – за последние 3 месяца. Для корректной работы используется date_query WordPress с учетом таймзоны.
Для пользователя это быстрый способ увидеть новые поступления, а для бизнеса – отдельная точка продвижения свежих автомобилей без ручного создания подборок.

Скриншот: Stories “Новинки” с карточкой нового автомобиля и CTA для перехода.
REST API и фронтенд Stories
Данные для Stories отдаются через собственный REST API namespace wp-stories/v1. Для каждой категории предусмотрен отдельный endpoint: /cars/available, /cars/sales и /cars/new. Ответ содержит мета-информацию подборки и массив элементов сторис.
Фронтенд реализован как viewer с привычным мобильным UX. Через шорткод [wp_stories] на страницу выводятся “кружки” категорий. При клике открывается полноэкранный просмотр с использованием Swiper: прогресс-бары, тайминги, пауза, последовательное воспроизведение и переходы между историями.
В каждый элемент встроен продуктовый слой. Машина может отображаться с CTA-кнопкой и панелью перехода на карточку. Так Stories становятся не просто контентным блоком, а дополнительным маршрутом к заявке.
Производительность и отказоустойчивость
Архитектура интеграции построена так, чтобы сайт не зависел от внешнего API в режиме “каждый клик – запрос в CRM”. Основная нагрузка вынесена в фоновые процессы, а фронтенд работает с уже подготовленными данными.
- Cron обновляет данные автопарка по расписанию.
- Transient-кеш ускоряет доступ к ключевым параметрам автомобилей.
- ExternalCode обеспечивает стабильную связку CRM и WordPress.
- Fallback-логика защищает интерфейс при временной недоступности кеша или API.
- Логирование позволяет быстро диагностировать сбои обмена данными.
В результате сайт работает как коммерческий интерфейс с живыми данными, но без лишней нагрузки на внешнюю CRM и без просадки пользовательского опыта.
Что получил клиент
На выходе VroomClub получил не набор разрозненных доработок, а единую экосистему управления автопарком и заявками. CRM стала источником актуальных данных, WordPress – витриной и точкой взаимодействия с пользователем, а интеграционный слой связал эти части в устойчивую систему.
- Автомобили на сайте синхронизируются с CRM по статусам, ценам и ключевым параметрам.
- Доступные машины получают приоритет в отображении, что помогает пользователю быстрее выбрать актуальный вариант.
- Фильтрация работает без перезагрузки страницы и учитывает синхронизированные параметры.
- Заявки с сайта попадают в X-Прокат как структурированные сделки с автомобилем, датами, сроком аренды, городом доставки и UTM-метками.
- Stories показывают динамические подборки: доступные сегодня, акции и новинки.
- Сайт сохраняет работоспособность при временных сбоях внешнего API за счет кеширования и фоновой синхронизации.
Итог
Главный результат проекта – сайт перестал быть отдельной витриной и стал частью операционного контура VroomClub. Пользователь видит актуальные предложения, интерфейс учитывает доступность автомобилей, а менеджер получает заявку в CRM уже в понятной структуре.
Для бизнеса это снижает ручную нагрузку, уменьшает риск ошибок, повышает качество обработки лидов и делает сайт более управляемым. Для пользователя – ускоряет путь от выбора автомобиля до заявки. Для маркетинга – дает возможность отслеживать источники обращений и связывать рекламный трафик с реальными сделками.
Такие интеграции особенно важны для проектов, где сайт должен жить в одной логике с внутренними процессами компании. Когда автопарк, интерфейс и CRM работают синхронно, сайт становится не просто точкой контакта, а полноценным инструментом продаж.
Хватит искать команду своей мечты! Мы тут, оставляйте заявку!
Или свяжитесь любым другим удобным способом
Заполняйте форму и мы с вами свяжемся!
Отзыв клиента
География наших клиентов
- Беларусь
- Россия
- Польша
- Литва
- Германия
- Эстония
- Индонезия
- США
- ОАЭ
- Испания
- Франция
- Тайланд
Следующий кейс