Інтеграція 1С-Bitrix з агрегатором доставок Dalli
Dalli Service — агрегатор і логістичний оператор, що спеціалізується на доставці для інтернет-магазинів. Об'єднує власну кур'єрську службу та партнерських перевозників. Особливість: доставка в день оформлення або на наступний день у Москві та Санкт-Петербурзі, інтеграція з маркетплейсами (Wildberries, Ozon, Яндекс.Маркет).
Що надає Dalli API
Dalli API — REST, авторизація за токеном. Документація на порталі dalli.ru для партнерів.
Основні операції:
- Розрахунок вартості доставки
- Створення заявок (одиничних та пакетних)
- Отримання статусів
- Список ПВЗ
- Отримання етикеток (PDF)
- Реєстрація вебхуків
Dalli працює переважно за моделлю: магазин передає заявки через API, Dalli розподіляє між своєю службою та партнерами залежно від адреси та термінів.
Модуль доставки у Bitrix
Клас успадковує \Bitrix\Sale\Delivery\Services\Base. Параметри в b_sale_delivery_service_params:
-
DALLI_TOKEN— токен API -
SENDER_ID— ID точки відправки (оформляється при підключенні) -
DELIVERY_MODE—express(день-в-день / наступний день) абоstandard -
COD_ALLOWED— дозволено накладений платіж
Розрахунок вартості
У calculateConcrete() передаємо адресу, габарити, оголошену вартість. Dalli повертає варіанти з різними термінами (стандарт, експрес) та цінами:
$calcResponse = $httpClient->post('/v1/calculate', [
'sender_id' => $senderId,
'address' => $recipientAddress,
'weight' => $weightGram,
'dimensions' => $dimensions,
'declared_value' => $declaredValue,
'delivery_types' => ['standard', 'express'],
]);
foreach ($calcResponse['variants'] as $variant) {
// $variant['type'], $variant['price'], $variant['delivery_date']
}
Якщо магазин пропонує два способи доставки (стандарт та експрес), створюємо два екземпляри модуля з різними DELIVERY_MODE у настройках.
Експрес-доставка в день замовлення
Ключова особливість Dalli для Москви та СПб. Працює при виконанні умов:
- Замовлення прийнято до певного часу (зазвичай до 14:00–15:00)
- Склад відправника знаходиться в зоні покриття
- Товар фізично готовий до відправки
У calculateConcrete() перевіряємо поточний час: якщо date('H') >= $cutoffHour — експрес-доставка сьогодні недоступна, пропонуємо доставку на наступний день.
$currentHour = (int) date('H');
$cutoffHour = 14; // Дата дедлайну з настройок модуля
if ($currentHour >= $cutoffHour) {
$deliveryDate = date('d.m.Y', strtotime('+1 day'));
$label = 'Доставка завтра, ' . $deliveryDate;
} else {
$deliveryDate = date('d.m.Y');
$label = 'Доставка сьогодні, ' . $deliveryDate;
}
Створення заявки
$orderPayload = [
'sender_id' => $senderId,
'external_id' => 'SHOP-' . $bitrixOrderId,
'delivery_type' => $deliveryMode,
'recipient' => [
'name' => $name,
'phone' => $phone,
'address' => $address,
],
'packages' => [[
'weight' => $weightGram,
'dimensions' => $dimensions,
'items' => $items,
]],
'declared_value' => $declaredValue,
'cash_on_delivery'=> $codAmount,
'comment' => $comment,
];
Відповідь: order_id у системі Dalli. Етикетку отримуємо через GET /orders/{id}/label.
Пакетне створення заявок
Якщо замовлення накопичуються протягом дня, Dalli підтримує POST /orders/batch — створення кількох заявок одним запитом. Менеджер натискає «Відправити в Dalli» в адміністративній частині Bitrix — скрипт збирає всі замовлення зі статусом «Готово до відправки» та надсилає пакетом.
Статуси
Вебхуки: Dalli надсилає сповіщення на URL мерчанта. Реєструємо в особистому кабінеті. Маппінг:
| Статус Dalli | Bitrix |
|---|---|
accepted |
Прийнято |
on_the_way |
У пути |
delivered |
Доставлено |
partially_delivered |
Частковий викуп |
returned |
Повернення |
failed |
Помилка доставки |
Строки
| Масштаб | Склад | Строк |
|---|---|---|
| Базова інтеграція | Розрахунок + заявки + статуси | 3–4 дні |
| + Експрес-логіка | Контроль часу, два способи | +1–2 дні |
| + Пакетна відправка | Інтерфейс в адміні + batch API | +2 дні |
| + ПВЗ | Завантаження + віджет | +2 дні |







