Ситуация: у интернет-магазина на 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 дней.







