Ситуация: у интернет-магазина на 1С-Битрикс объём заказов вырос до 200 в день, и менеджеры тратят по 6 часов на ручную смену статусов: подтверждение оплаты, отмена просроченных, перевод в доставлены. В результате растёт нагрузка, клиенты жалуются на задержки, а возвраты увеличиваются на 20% из-за пропущенных уведомлений. Мы автоматизируем смену статусов под ключ: от простого события при оплате до полной интеграции с транспортными компаниями и бизнес-процессами. Наш подход снижает ручное вмешательство на 70% и существенно экономит бюджет на FTE менеджера. Мы занимаемся автоматизацией Битрикс более 5 лет, реализовали проекты для 50+ магазинов.
Как работает автоматическая смена статусов заказа?
Система реагирует на ключевые события в жизненном цикле заказа. Рассмотрим три основных подхода.
Автосмена статуса при оплате
Событие OnSalePaymentPaid срабатывает когда платёжный модуль помечает оплату проведённой — и при ручном подтверждении менеджером, и при автоматическом IPN от платёжной системы (например, ЮKassa или Сбер):
AddEventHandler('sale', 'OnSalePaymentPaid', function(\Bitrix\Main\Event $event) { $payment = $event->getParameter('ENTITY'); $order = $payment->getOrder(); if ($payment->isPaid() && $order->getField('STATUS_ID') === 'WAIT_PREPAY') { $order->setField('STATUS_ID', 'F'); $order->save(); } }); Автоотмена по истечению времени
Реализуется через агент Битрикс — он запускается по расписанию и проверяет заказы без оплаты. Лимит 50 заказов за итерацию защищает от таймаута при большом накопленном объёме:
// Регистрация агента (разово) \CAgent::AddAgent( 'Local\\Sale\\OrderAgents::cancelUnpaidOrders();', 'local', 'N', 3600, // каждый час '', 'Y', \ConvertTimeStamp(time() + 3600, 'FULL'), ); class OrderAgents { public static function cancelUnpaidOrders(): string { $deadline = new \Bitrix\Main\Type\DateTime(); $deadline->add('-24 hours'); $result = \Bitrix\Sale\Internals\OrderTable::getList([ 'filter' => [ 'STATUS_ID' => 'WAIT_PREPAY', '<DATE_INSERT' => $deadline, ], 'select' => ['ID'], 'limit' => 50, ]); while ($row = $result->fetch()) { $order = \Bitrix\Sale\Order::load($row['ID']); if ($order) { $order->setField('STATUS_ID', 'CANCEL'); $order->save(); } } return 'Local\\Sale\\OrderAgents::cancelUnpaidOrders();'; } } Автоматизация через бизнес-процессы
Для сложных цепочек с условиями и задержками — бизнес-процессы Sale (Интернет-магазин → Бизнес-процессы заказов). Доступные триггеры:
- По статусу — запуск при переходе в определённый статус
- По оплате — при подтверждении или возврате платежа
- По времени — через N часов/дней после создания или смены статуса
Пример: «Через 2 часа после перехода в Передан курьеру — отправить SMS с запросом оценки». Реализуется без кода через конструктор BP.
Почему стоит автоматизировать смену статусов?
Помимо экономии времени, автоматизация снижает риск ошибок человеческого фактора (пропущенный платёж, забытая отмена) и улучшает пользовательский опыт — клиенты получают актуальную информацию без задержек. Наши клиенты отмечают сокращение времени обработки заказа на 70% и уменьшение количества возвратов на 15% за счёт своевременных уведомлений. Для простых сценариев агенты обрабатывают заказы в 2 раза быстрее, чем бизнес-процессы, но BP удобнее при сложной логике.
Какой подход выбрать: агенты или бизнес-процессы?
| Критерий | Агенты (код) | Бизнес-процессы (BP) |
|---|---|---|
| Гибкость | Полный контроль логики | Ограничен шаблонами |
| Скорость разработки | Часы | Минуты (если шаблон готов) |
| Требуется разработчик | Да | Нет (можно силами администратора) |
| Интеграция с внешними API | Простая | Сложнее (через REST) |
| Масштабирование | Ограничение 50 заказов за шаг | Зависит от производительности |
Какие events используются для автосмены?
Типовые сценарии и триггеры сведены в таблицу:
| Текущий статус | Событие | Новый статус |
|---|---|---|
| WAIT_PREPAY | Оплата | F (Выполнен) |
| WAIT_PREPAY | 24 часа без оплаты | CANCEL (Отменён) |
| D (Доставлен) | 14 дней без претензий | CLOSED (Закрыт) |
Подробнее о событии OnSalePaymentPaid — в официальной документации. Автоматизация в целом описана на Wikipedia.
Процесс работы
- Аналитика — изучаем текущие статусы, сценарии, логику обмена с 1С.
- Проектирование — выбираем подход (события/агенты/BP) для каждого сценария.
- Реализация — пишем код или настраиваем BP, тестируем на тестовом заказе.
- Тест — прогоняем все сценарии (оплата, отмена, доставка) в staging-среде.
- Деплой — переносим на боевую, мониторим логи в первые сутки.
Что входит в настройку (deliverables)
- Создание файла
local/php_interface/init.phpс обработчиками событий (если нужно). - Настройка агентов с указанием периодичности.
- Конфигурация бизнес-процессов (если требуется) через админку.
- Интеграция с webhook от транспортной компании (например, СДЭК API или Почта России API).
- Документация: описание всех автоматических переходов.
- Доступ к git-репозиторию с кодом.
- Обучение администратора (1 час).
- Гарантия 14 дней на корректную работу скриптов.
Типичная ошибка при интеграции транспортной компании: если в webhook приходит статус, которого нет в маппинге, заказ остаётся без изменения. Решение: добавить логирование неизвестных статусов и настроить уведомление администратору.
Интеграция со статусами транспортных компаний
// Webhook от ТК — POST /bitrix/tools/delivery_webhook.php $trackNumber = $_POST['track']; $deliveryStatus = $_POST['status']; $shipmentResult = \Bitrix\Sale\Internals\ShipmentTable::getList([ 'filter' => ['TRACKING_NUMBER' => $trackNumber], 'select' => ['ORDER_ID'], ]); if ($shipment = $shipmentResult->fetch()) { $order = \Bitrix\Sale\Order::load($shipment['ORDER_ID']); $statusMap = ['delivered' => 'D', 'returned' => 'RETURN_INIT', 'lost' => 'PROBLEM']; $newStatus = $statusMap[$deliveryStatus] ?? null; if ($newStatus && $order) { $order->setField('STATUS_ID', $newStatus); $order->save(); } } Автозавершение доставленных заказов
Перевод в «Закрыт» через 14 дней после доставки без претензий:
public static function completeDeliveredOrders(): string { $deadline = new \Bitrix\Main\Type\DateTime(); $deadline->add('-14 days'); $result = \Bitrix\Sale\Internals\OrderTable::getList([ 'filter' => ['STATUS_ID' => 'D', '<DATE_STATUS' => $deadline], 'select' => ['ID'], 'limit' => 100, ]); while ($row = $result->fetch()) { $order = \Bitrix\Sale\Order::load($row['ID']); if ($order) { $order->setField('STATUS_ID', 'CLOSED'); $order->save(); } } return 'Local\\Sale\\OrderAgents::completeDeliveredOrders();'; } Сроки выполнения
Автосмена при оплате и один агент автоотмены — 3–5 часов. Полная автоматизация с интеграцией ТК, бизнес-процессами и несколькими агентами — 1–3 рабочих дня. Оценим ваш проект бесплатно — свяжитесь с нами для аудита. Закажите настройку и получите готовое решение с гарантией 14 дней.







