За 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С-Бітрікс під ключ.







