Автоматизация дропшиппинга: базовая архитектура
Менеджер не должен вручную пересылать письмо поставщику при каждом заказе — это замедляет обработку, порождает ошибки и не масштабируется. В типичном интернет-магазине на Битрикс с 200 заказов в сутки ручная передача отнимает до 4 часов рабочего времени. Автоматическая передача — обработчик события создания заказа, который без участия человека маршрутизирует позиции поставщикам. Наш опыт внедрения таких решений превышает 5 лет, мы запустили автоматизацию для 40+ проектов разного масштаба. Гарантируем стабильную работу обработчика даже при пиковых нагрузках. Экономия на операционных затратах может достигать $360–520 в месяц для магазина с 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 дней. Если вы хотите избавиться от рутины, свяжитесь с нами — мы предложим оптимальное решение для вашего магазина. Закажите настройку сегодня и освободите время ваших менеджеров для более важных задач.







