Разработка сайта такси на 1С-Битрикс
Сайт службы такси — это не визитка с номером телефона, а рабочий инструмент, который принимает заказы, рассчитывает стоимость и передаёт данные в диспетчерскую. На 1С-Битрикс такая система собирается из стандартных модулей платформы и нескольких внешних API, при этом вся бизнес-логика остаётся управляемой через административную панель.
Архитектура калькулятора маршрута с тарификацией
Калькулятор стоимости поездки — центральный элемент сайта. Его задача: пользователь вводит две точки, система показывает расстояние, примерное время и цену по выбранному тарифу. Звучит просто, но внутри — цепочка из нескольких компонентов.
Геокодинг и построение маршрута. На фронтенде подключается Yandex.Maps JavaScript API или Google Maps JavaScript API. При вводе адреса срабатывает Suggest API — подсказки адресов. После выбора точек A и B запрос уходит на Yandex Router API (или Google Directions API) для получения маршрута. API возвращает polyline, расстояние в метрах и время в секундах.
Выбор между Яндексом и Google зависит от географии работы. Для России и СНГ Яндекс даёт более точные маршруты с учётом местных дорог. Для международных перевозок — Google Directions.
Тарифная матрица в Highload-блоке. Тарифы хранятся в Highload-блоке TaxiTariffs со следующей структурой:
| Поле HL-блока | Тип | Назначение |
|---|---|---|
| UF_TARIFF_CODE | Строка | Код тарифа (economy, comfort, business, minivan) |
| UF_TARIFF_NAME | Строка | Отображаемое название |
| UF_BASE_PRICE | Число | Подача, руб. |
| UF_PRICE_PER_KM | Число | Стоимость за км |
| UF_PRICE_PER_MIN | Число | Стоимость за минуту |
| UF_MIN_ORDER | Число | Минимальная стоимость заказа |
| UF_NIGHT_COEFF | Число | Коэффициент ночного тарифа |
| UF_ZONE_ID | Привязка | Зона действия (город/пригород/межгород) |
Формула расчёта: max(UF_MIN_ORDER, UF_BASE_PRICE + расстояние_км × UF_PRICE_PER_KM + время_мин × UF_PRICE_PER_MIN) × коэффициент. Коэффициент подтягивается из отдельного HL-блока зон — пригород и межгород дороже.
Серверная валидация. Фронтенд показывает предварительную стоимость, но финальный расчёт обязательно дублируется на сервере. AJAX-контроллер принимает координаты, заново запрашивает расстояние через серверный вызов Router API и считает цену по актуальным данным из HL-блока. Это исключает подмену параметров на клиенте.
Динамическое ценообразование. В HL-блоке TaxiSurge хранятся повышающие коэффициенты по временным слотам и дням недели. Обработчик события OnBeforeOrderAdd проверяет текущее время и применяет коэффициент. Новогодняя ночь, час пик, дождливое утро понедельника — всё это настраивается контент-менеджером без участия разработчика.
Онлайн-заказ и связь с диспетчерской
Форма заказа собирает данные: маршрут, тариф, время подачи (сейчас или к определённому часу), пожелания (детское кресло, кондиционер, тихая поездка). После отправки:
- Создаётся элемент инфоблока
Ordersсо статусом «Новый» - Параллельно отправляется POST-запрос в API диспетчерской системы (Такси-Мастер, Maxoptra, собственная система на WebSocket)
- Запускается агент
CAgent, который через 30 секунд проверяет статус — получен ли ответ от диспетчерской - Клиент получает push-обновление через SSE или polling-запрос каждые 5 секунд
Интеграция с конкретной диспетчерской реализуется через абстрактный класс DispatchConnector с методами sendOrder(), getStatus(), cancelOrder(). Под каждую систему пишется адаптер. При смене диспетчерского ПО меняется только адаптер, остальной код остаётся прежним.
Тарифы по классам
На сайте тарифы отображаются через компонент bitrix:news.list, привязанный к HL-блоку тарифов. Каждый класс — карточка с иконкой автомобиля, списком включённых опций и стартовой стоимостью. Для визуального сравнения используется табличный вывод:
- Эконом — базовые автомобили, минимальная стоимость подачи
- Комфорт — кондиционер, бутилированная вода, автомобили не старше 5 лет
- Бизнес — премиальные модели, встреча с табличкой, Wi-Fi
- Минивэн — перевозка группы до 7 человек, увеличенный багажник
Администратор добавляет и редактирует классы через стандартный интерфейс Битрикс. Если завтра появится тариф «Грузовой» или «Детский» — достаточно создать новый элемент HL-блока.
Мобильная адаптация
Для такси мобильная версия — не дополнение, а основной канал. По статистике отрасли, 75–85% заказов поступают со смартфонов.
Вёрстка строится mobile-first. Калькулятор занимает весь экран: карта сверху, поля ввода адресов снизу — как в привычных приложениях. Используется CSS Grid с breakpoints на 360px, 768px и 1024px. Карта инициализируется с gestureHandling: greedy для удобного масштабирования одним пальцем.
Кнопка «Заказать» фиксируется внизу экрана через position: sticky. Поля адреса при фокусе раскрываются на полный экран — имитация UX нативных приложений.
Дополнительно настраивается PWA-манифест: иконка на домашний экран, splash screen, работа при нестабильном соединении через Service Worker с кэшированием статики.
Интеграция с агрегаторами
Сайт такси может выступать агрегатором или подключаться к существующим. Реализуются два сценария:
Получение заказов от Яндекс.Такси / Uber. Через Partner API агрегатора заказы падают в инфоблок Orders с пометкой источника. Диспетчер видит в едином списке и прямые заказы с сайта, и заказы от агрегаторов.
Сравнение цен. На странице калькулятора можно вывести цены от агрегаторов рядом с собственными тарифами. Запрос к API агрегатора делается асинхронно, результат кэшируется в CStackCacheManager на 60 секунд.
SEO и локальное продвижение
Для такси критична локальная выдача. Настраиваются:
- Микроразметка Schema.org
TaxiServiceс указанием зоны обслуживания - Посадочные страницы под маршруты — «Такси из аэропорта Внуково», «Такси на вокзал» — через инфоблок маршрутов с ЧПУ
- Интеграция с Яндекс.Бизнес и Google Business Profile через API
- Автогенерация
sitemap.xmlмодулем SEO Битрикс
Страницы маршрутов создаются через инфоблок: контент-менеджер добавляет точку А, точку Б, текст — система генерирует URL, title, description по шаблону.
Технические требования к хостингу
Калькулятор генерирует всплески AJAX-запросов. На каждый расчёт — обращение к внешнему API и к базе тарифов. При 50 одновременных пользователях это даёт 100–150 запросов в секунду.
Рекомендуемая конфигурация: VPS с 4 vCPU, 8 ГБ RAM, SSD. PHP 8.1+ с OPcache, Redis для кэширования тарифов и сессий. Nginx как reverse proxy с лимитом rate=10r/s на endpoint калькулятора — защита от перебора.
Ответы Router API кэшируются в Redis с TTL 300 секунд (маршрут не меняется за 5 минут), что снижает количество внешних запросов на 60–70% и ускоряет повторные расчёты.







