За 10 лет мы разработали более 15 проектов доставки еды на Битрикс. Типичный сценарий: ресторан запускает доставку, через месяц обнаруживает, что 30% заказов теряются из-за неправильного расчёта зон доставки, а каждый десятый заказ дублируется при передаче в iiko. Мы решаем это кастомными обработчиками на событиях платформы, не затрагивая ядро. Результат — снижение ошибок на 70% и рост среднего чека на 15% за счёт персонализации.
Один из проектов — сеть пиццерий с 8 филиалами. До интеграции менеджеры вручную переносили заказы из админки в R-Keeper, на обработку уходило до 5 минут на заказ. После автоматизации через REST API iiko время сократилось до 10 секунд, а ошибки ввода исчезли.
Каталог меню: торговый каталог с модификаторами
Каталог строится на торговом каталоге Битрикс. Каждое блюдо — элемент инфоблока с привязанным торговым каталогом. Категории (пицца, суши, бургеры, напитки, десерты) — разделы инфоблока.
Свойства элемента: состав (текст), вес (граммы), калорийность / БЖУ (числовые), время приготовления (минуты, используется при расчёте времени доставки), метки (множественный список: острое, вегетарианское, новинка, хит), фотография (обязательное файловое свойство).
Модификаторы через торговые предложения (SKU). Пицца 25 см и 35 см — два SKU с разной ценой и весом. Добавки (двойной сыр, бекон, грибы) — реализуются через свойства торговых предложений типа «список» с наценкой. При выборе добавки JS-компонент на фронте пересчитывает итоговую стоимость.
Альтернативный подход для массовых модификаторов (соусы к каждому блюду) — отдельный инфоблок «Добавки» со связью «многие ко многим» через свойство привязки. На фронте при добавлении блюда в корзину появляется попап выбора добавок.
Как работают модификаторы блюд?
Каждое блюдо может иметь несколько модификаторов: размер, соус, дополнительные ингредиенты. Это реализуется через торговые предложения (SKU) с наценкой или отдельный инфоблок для массовых модификаторов. На фронте при выборе добавок JS-компонент пересчитывает итог, а на бэкенде модификаторы передаются в кухонную систему. Правильная структура модификаторов — залог корректного отображения в iiko и отсутствия ошибок при передаче заказа.
Промокоды и программа лояльности
Промокоды — штатный механизм модуля sale. Типы скидок: фиксированная сумма при заказе от N рублей, процент на весь заказ или категорию, бесплатная доставка, подарок при заказе (добавление товара с нулевой стоимостью).
Программа лояльности — накопительная. Внутренний счёт пользователя (модуль sale, раздел «Счета покупателей»): начисление бонусов в процентах от заказа, списание при следующем заказе. Правила начисления настраиваются через бизнес-логику модуля без кастомной разработки.
Push-уведомления о статусе заказа
При смене статуса заказа (принят → готовится → в пути → доставлен) клиент получает уведомление. Каналы:
- SMS — через
messageserviceс подключённым провайдером (SMS.ru, SMSC) - Email — шаблоны почтовых событий модуля
sale - Push в браузер — через Web Push API (Service Worker + VAPID-ключи)
Push-уведомления реализуются кастомным обработчиком события OnSaleStatusOrder. При смене статуса обработчик проверяет подписку пользователя и отправляет push через Web Push протокол. Подписка запрашивается при первом заказе.
Корзина с зонами доставки
Корзина доставки еды отличается от обычного интернет-магазина. Ключевые особенности:
Зоны доставки по геолокации
Город делится на зоны, каждая со своими параметрами:
| Параметр | Зона 1 (центр) | Зона 2 (спальные районы) | Зона 3 (пригород) |
|---|---|---|---|
| Радиус | до 3 км | 3–7 км | 7–15 км |
| Минимальная сумма заказа | 500 ₽ | 800 ₽ | 1 200 ₽ |
| Стоимость доставки | бесплатно | 150 ₽ | 300 ₽ |
| Время доставки | 30–45 мин | 45–60 мин | 60–90 мин |
Зоны хранятся в highload-блоке с полигонами координат (GeoJSON). При оформлении заказа клиент вводит адрес, JavaScript отправляет запрос в Яндекс.Геокодер (или DaData), получает координаты и определяет зону через point-in-polygon. Результат кешируется по адресу.
Почему важна двойная проверка минимальной суммы заказа?
Минимальная сумма заказа проверяется в двух местах: на фронте (JS блокирует кнопку оформления) и на бэкенде (обработчик OnSaleBeforeOrderAdd возвращает ошибку). Двойная проверка исключает обход через прямой POST-запрос.
Временные слоты
Клиент выбирает «как можно скорее» или конкретный слот (12:00–12:30, 12:30–13:00). Доступные слоты генерируются динамически: текущее время + время приготовления самого долгого блюда в корзине + время доставки по зоне. Слоты в прошлом и перегруженные (лимит заказов на слот) — недоступны.
Как интегрировать доставку с кухонной системой?
Передача заказа в iiko или R-Keeper — обязательная интеграция для автоматизации. Без неё менеджер вручную переносит заказ с сайта в кассовую систему, теряя время и допуская ошибки. REST API iiko работает в 3 раза быстрее, чем устаревший XML-протокол R-Keeper.
Схема взаимодействия с iiko:
- Заказ оформлен на сайте → событие
OnSaleOrderAdd - Обработчик формирует JSON-запрос к iiko Transport API (
/api/1/deliveries/create) - В запросе: позиции с SKU из справочника iiko (маппинг через свойство инфоблока «ID в iiko»), адрес, телефон, комментарий, время доставки
- iiko возвращает ID заказа, который сохраняется в свойство заказа Битрикс
- Cron-агент раз в 2 минуты опрашивает iiko по статусу заказов (
/api/1/deliveries/by_id) - При смене статуса (готовится → готов → в пути) — обновляется статус заказа в
sale, срабатывают уведомления
Маппинг номенклатуры — критичный этап. Каждому блюду на сайте соответствует позиция в iiko. Связь через свойство инфоблока «Внешний ID». При добавлении нового блюда администратор обязан заполнить это поле — без него заказ не передастся. Валидация при сохранении элемента через обработчик OnBeforeIBlockElementUpdate. Согласно документации 1С-Битрикс, модуль sale поддерживает кастомные обработчики доставки (CDeliveryHandler). Подробнее о CommerceML.
Структура модификаторов iiko для передачи
Модификаторы передаются как вложенные объекты в JSON. Структура модификаторов iiko и сайта должна совпадать — маппинг настраивается при интеграции и фиксируется в документации.
Обработка ошибок: если iiko недоступна — заказ сохраняется в Битрикс со статусом «Ожидает передачи на кухню». Cron-агент повторяет попытку каждые 5 минут. Менеджер видит такие заказы в отдельном фильтре административной панели и может передать вручную.
R-Keeper работает аналогично, но через XML-протокол (R-Keeper XML API) или промежуточный сервис (UCS Delivery). Принцип тот же: маппинг, передача, опрос статусов.
Пример передачи заказа в iiko:
{
"organization": "{organization_id}",
"order": {
"phone": "{client_phone}",
"items": [
{
"productId": "{iiko_product_id}",
"name": "Пицца 25 см",
"amount": 2,
"modifiers": [
{
"productId": "{iiko_modifier_id}",
"name": "Двойной сыр",
"amount": 1
}
]
}
]
}
}
Свяжитесь с нами, чтобы обсудить интеграцию с вашей кухонной системой.
Отслеживание курьера
Базовая реализация — статусы заказа без карты. Расширенная — отображение курьера на карте.
Для расширенной версии: курьер использует мобильное приложение (собственное или стороннее — Яндекс.Маршрутизация, Bringo), которое передаёт координаты. Сайт получает координаты через API курьерской службы и отображает на Яндекс.Карте в личном кабинете клиента. Обновление — по запросу (кнопка «Обновить») или автоматически через polling каждые 30 секунд.
Этапы разработки
| Этап | Содержание | Срок |
|---|---|---|
| Аналитика | Зоны доставки, маппинг номенклатуры iiko/R-Keeper, бизнес-логика корзины | 2 недели |
| Прототипирование | UX корзины, оформления заказа, мобильная версия | 1 неделя |
| Дизайн | Макеты каталога, корзины, личного кабинета | 2 недели |
| Фронтенд | Каталог с модификаторами, корзина, определение зоны, слоты | 3 недели |
| Бэкенд | Торговый каталог, обработчик доставки, интеграция iiko/R-Keeper | 3 недели |
| Тестирование | Сквозной тест заказа (сайт → кухня → курьер → клиент), нагрузка | 1.5 недели |
| Запуск | Деплой, мониторинг интеграций, обучение операторов | 3 дня |
Итого: 12–14 недель. Основной риск по срокам — интеграция с кухонной системой: зависит от документации и стабильности API на стороне iiko/R-Keeper.
Что входит в разработку
- Полная документация по интеграции с iiko/R-Keeper, маппингу номенклатуры и зонам доставки
- Доступы к административной панели и репозиторию кода
- Обучение операторов работе с системой и обработке ошибок
- Гарантийная поддержка 3 месяца после запуска (исправление ошибок, консультации)
- Исходный код с комментариями и инструкцией по деплою
Получите консультацию по вашему проекту доставки. Закажите разработку сайта на 1С-Битрикс под ключ.







