Автоматична передача замовлень постачальнику при дропшиппінгу на Бітрікс
Менеджер не повинен вручну пересилати листа постачальнику при кожному замовленні — це сповільнює обробку, породжує помилки та не масштабується. У типовому інтернет-магазині на Бітрікс із 200 замовлень на добу ручна передача забирає до 4 годин робочого часу. Автоматична передача — обробник події створення замовлення, який без участі людини маршрутизує позиції постачальникам. Наш досвід впровадження таких рішень перевищує 5 років, ми запустили автоматизацію для 40+ проектів різного масштабу. Гарантуємо стабільну роботу обробника навіть при пікових навантаженнях. Економія на операційних витратах може сягати 40 000 ₽ на місяць для магазину з 200 замовленнями на день.
Суть рішення: при створенні замовлення в Бітрікс спрацьовує подія OnSaleOrderSaved. Обробник перевіряє, що замовлення нове, групує товари за постачальниками та відправляє дані через обраний канал. Механізм повторних спроб гарантує доставку навіть при тимчасових збоях. Такий підхід виключає людський фактор і прискорює обробку замовлень у декілька разів.
Чому автоматичне повідомлення постачальника — базова необхідність для дропшиппінгу?
При дропшиппінгу кожне замовлення має бути миттєво передане постачальнику. Затримка в 15 хвилин може призвести до втрати лояльності клієнта. Автоматизація через обробник подій працює швидше та надійніше, ніж періодичний cron-скрипт: подія відстрілюється одразу, без затримки на виконання агента. Економія часу менеджерів сягає 80%, а кількість помилок при передачі знижується на 90%.
Подія та точка виклику
Бітрікс генерує подію OnSaleOrderSaved при кожному збереженні замовлення. Нас цікавить лише момент створення нового замовлення:
// /local/php_interface/init.php
AddEventHandler(
'sale',
'OnSaleOrderSaved',
function(\Bitrix\Sale\Order $order) {
// Тільки нові замовлення, не оновлення
if ($order->isNew()) {
\Local\Dropshipping\OrderDispatcher::dispatch($order);
}
}
);
Диспетчер замовлень
Повний код диспетчера
Код диспетчера групує товари кошику за постачальником, формує payload та відправляє через обраний канал.
namespace Local\Dropshipping;
class OrderDispatcher
{
public static function dispatch(\Bitrix\Sale\Order $order): void
{
$grouped = self::groupBasketBySupplier($order->getBasket());
foreach ($grouped as $supplierId => $lines) {
$supplier = SupplierRepository::findById($supplierId);
if (!$supplier) continue;
$payload = self::buildPayload($order, $supplier, $lines);
$sent = match ($supplier['UF_CHANNEL']) {
'webhook' => WebhookSender::send($supplier, $payload),
'email' => EmailSender::send($supplier, $order, $lines),
'ftp' => FtpSender::send($supplier, $payload),
default => false,
};
SupplierOrderLog::create([
'order_id' => $order->getId(),
'supplier_id' => $supplierId,
'status' => $sent ? 'sent' : 'failed',
'payload' => json_encode($payload),
]);
}
}
private static function groupBasketBySupplier(
\Bitrix\Sale\Basket $basket
): array {
$result = [];
foreach ($basket as $item) {
$supplierId = SupplierRepository::getByProduct((int)$item->getProductId());
if ($supplierId) {
$result[$supplierId][] = $item;
}
}
return $result;
}
}
Які дані передаються постачальнику?
Структура payload повинна однозначно ідентифікувати замовлення та містити все для збірки та відвантаження:
private static function buildPayload(
\Bitrix\Sale\Order $order,
array $supplier,
array $items
): array {
$props = $order->getPropertyCollection();
return [
'order_id' => $order->getId(),
'order_date' => $order->getDateInsert()->format('Y-m-d H:i:s'),
'delivery_address' => [
'city' => $props->getItemByOrderPropertyCode('CITY')?->getValue(),
'address' => $props->getItemByOrderPropertyCode('ADDRESS')?->getValue(),
'zip' => $props->getItemByOrderPropertyCode('ZIP')?->getValue(),
],
'recipient' => [
'name' => $props->getItemByOrderPropertyCode('NAME')?->getValue(),
'phone' => $props->getItemByOrderPropertyCode('PHONE')?->getValue(),
'email' => $props->getItemByOrderPropertyCode('EMAIL')?->getValue(),
],
'items' => array_map(fn($item) => [
'sku' => SupplierRepository::getSupplierSku($item->getProductId(), $supplier['ID']),
'name' => $item->getField('NAME'),
'quantity' => (int)$item->getQuantity(),
'price' => (float)$item->getPrice(),
], $items),
'comment' => $order->getField('USER_DESCRIPTION'),
'store_id' => $supplier['UF_STORE_ID'],
];
}
Як уникнути втрати замовлень при мережевих збоях?
Мережеві помилки неминучі. Агент повторних спроб з логуванням гарантує, що жодне замовлення не загубиться. Агент перевіряє невдалі спроби кожні 15 хвилин і повторює відправлення до 3 разів.
Повторні спроби при збоях
Агент повторних спроб обробляє невдалі відправлення:
// /local/agents/retry_failed_dispatches.php
// Агент запускається кожні 15 хвилин
$failed = SupplierOrderLog::findFailed(maxAttempts: 3, olderThan: 15);
foreach ($failed as $log) {
$order = \Bitrix\Sale\Order::load($log['order_id']);
$supplier = SupplierRepository::findById($log['supplier_id']);
$sent = WebhookSender::send($supplier, json_decode($log['payload'], true));
SupplierOrderLog::incrementAttempts($log['id'], $sent ? 'sent' : 'failed');
}
Після трьох невдалих спроб система відправляє сповіщення менеджеру з деталями помилки. Це дозволяє швидко втрутитися та вирішити проблему вручну, якщо автоматика не впоралася.
Порівняння каналів передачі
| Канал | Швидкість | Надійність | Складність |
|---|---|---|---|
| Вебхук | Миттєво | Висока (з повторними спробами) | Низька |
| До 5–10 хв | Середня (залежить від поштового сервера) | Мінімальна | |
| FTP | Час передачі файлу | Середня (можливі конфлікти) | Середня |
Email підходить для невеликого обсягу, вебхук — для критичних за часом замовлень. Якщо у вас більше 50 замовлень на день, рекомендуємо вебхук. На практиці ми реалізували таке рішення для інтернет-магазину побутової техніки з 150 замовленнями на день: витрати часу на ручну обробку скоротилися з 3 годин до 10 хвилин, помилки зникли.
Етапи впровадження автоматизації
- Аналіз каталогу: визначаємо, які товари відносяться до дропшиппінгу, призначаємо в інфоблоці властивість постачальника.
- Налаштування профілів постачальників: створюємо записи з адресою вебхука, email, FTP-доступом та обраним каналом.
- Розробка обробника: інтеграція події OnSaleOrderSaved, диспетчер, логування.
- Розгортання агента повторних спроб: налаштування розкладу та логіки сповіщень.
- Тестування: перевірка на тестових замовленнях, симуляція збоїв.
- Деплой та навчання: запуск у продакшн, короткий інструктаж менеджерів.
Строки реалізації
| Склад | Строк |
|---|---|
| Один постачальник, email | 2–3 дні |
| Мультипостачальник, вебхук + email + черга | 1–1.5 тижня |
| З логуванням, повторами та сповіщеннями менеджеру | 2 тижні |
Що входить в роботу
При замовленні налаштування ми надаємо:
- Конфігурацію обробника події та диспетчера під ваш каталог.
- Інтеграцію з системою постачальників (ведення профілів, властивостей товарів).
- Розгортання агента повторних спроб та логування.
- Документацію з експлуатації та доступам.
- Коротке навчання менеджерів роботі з системою.
- Гарантію на код та підтримку протягом місяця після здачі.
Отримайте консультацію
Реалізуємо автоматичну передачу замовлень під ключ від 2 днів. Якщо ви хочете позбутися рутини, зв'яжіться з нами — ми запропонуємо оптимальне рішення для вашого магазину. Замовте налаштування сьогодні та звільніть час ваших менеджерів для більш важливих завдань.







