Интеграция 1С-Битрикс со службой доставки Dostavista
Dostavista — краудсорсинговая служба курьерской доставки «последней мили». Курьеры работают в режиме реального времени: заявка принимается за несколько минут, доставка выполняется в течение нескольких часов. API открытое, документация на русском. Используется для магазинов с быстрой доставкой: еда, цветы, фармацевтика, электроника.
Принцип работы API Dostavista
Dostavista предоставляет REST API. Авторизация — по токену в заголовке X-Authorizationtoken. Основные методы:
-
POST /api/business/v1/orders— создать заявку на доставку -
GET /api/business/v1/orders/{id}— получить статус заявки -
DELETE /api/business/v1/orders/{id}— отменить заявку -
GET /api/business/v1/couriers/{id}/location— координаты курьера
Заявка содержит точки маршрута (массив points): точка 0 — откуда забрать (склад/магазин), точки 1..N — адреса доставки покупателей. Один заказ Dostavista может содержать несколько точек доставки — это удобно для пакетных отправок.
Модуль доставки в Битрикс
Служба доставки подключается через класс, наследующий \Bitrix\Sale\Delivery\Services\Base. Ключевые методы:
-
calculateConcrete()— рассчитывает стоимость доставки. ВызываетPOST /api/business/v1/orders/calculate-priceс адресом откуда/куда и весом. -
createDelivery()— создаёт реальную заявку при подтверждении заказа менеджером или автоматически при смене статуса. - Обработчик
OnSaleStatusOrder— хук на смену статуса заказа вb_sale_order.
Параметры модуля хранятся в b_sale_delivery_service_params: API_TOKEN, SHOP_POINT_ADDRESS (адрес склада), AUTO_CREATE (создавать заявку автоматически).
Расчёт стоимости доставки
$response = $httpClient->post(
'https://robot.dostavista.ru/api/business/v1/orders/calculate-price',
[
'matter' => 'Товар из магазина',
'weight_kg' => $weightKg,
'points' => [
['address' => $shopAddress],
[
'address' => $deliveryAddress,
'contact_person' => ['phone' => $phone],
],
],
],
['X-Authorizationtoken' => $apiToken]
);
$price = $response['order']['payment_amount'];
Ответ содержит payment_amount — сумма к оплате в рублях (или местной валюте). Если адрес не определён или выходит за зону покрытия, API возвращает ошибку — обрабатываем как «доставка недоступна».
Создание заявки при оформлении заказа
Заявка создаётся либо автоматически при выборе покупателем способа доставки и подтверждении заказа, либо вручную менеджером из административной части. Второй вариант предпочтительнее для магазинов, где нужна проверка наличия перед отправкой.
В b_sale_order_props сохраняем DOSTAVISTA_ORDER_ID — идентификатор заявки в системе Dostavista. Он нужен для:
- отслеживания статуса заявки (polling или webhook)
- отмены заявки при отмене заказа в Битрикс
- передачи покупателю ссылки для трекинга курьера
Статусы и синхронизация
Dostavista поддерживает вебхуки: при смене статуса заявки система делает POST-запрос на указанный URL. Настраивается в личном кабинете. На стороне Битрикс создаём обработчик, который маппирует статусы Dostavista на статусы заказа:
| Статус Dostavista | Статус заказа в Битрикс |
|---|---|
awaiting_executor |
Передан в доставку |
active |
Курьер в пути |
completed |
Доставлен |
canceled |
Отменён |
failed |
Ошибка доставки |
Если вебхуки недоступны (нет белого IP), реализуем polling: агент Битрикс раз в 5–10 минут опрашивает статус активных заявок через GET /api/business/v1/orders/{id}.
Трекинг курьера
Dostavista возвращает в заявке поле courier.latitude/courier.longitude при активной доставке. Для магазинов, которым нужно показывать покупателю положение курьера на карте, реализуем AJAX-эндпоинт на стороне Битрикс — он прокидывает запрос к Dostavista API и отдаёт координаты.
Сроки
| Масштаб | Состав | Срок |
|---|---|---|
| Базовая интеграция | Расчёт стоимости + создание заявки | 3–4 дня |
| + Автосоздание + статусы | Хук на статус + маппинг + polling | 5–6 дней |
| + Трекинг курьера | AJAX-эндпоинт + виджет на сайте | +2 дня |







