Розробка сайту таксі на 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% і прискорює повторні розрахунки.







