Налаштування сповіщень про зміну статусу замовлення 1С-Бітрікс
Покупець оформив замовлення і чекає. Наступний контакт — сповіщення про зміну статусу. Якщо лист приходить із затримкою або містить помилки — це удар по довірі. 1С-Бітрікс надсилає сповіщення через механізм поштових подій, який потребує свідомого налаштування під конкретний бізнес.
Механізм поштових подій
Система сповіщень будується на трьох шарах:
-
Тип поштової події — опис з набором макросів (
SALE_STATUS_CHANGED) - Шаблон — HTML-лист з макросами, прив'язаний до сайту та мови
-
Виклик відправки —
CEvent::Send()в обробнику події
При зміні статусу з прапорцем «Повідомляти покупця» Бітрікс автоматично надсилає SALE_STATUS_CHANGED. Прапорець знімається, якщо потрібен повний контроль над логікою сповіщень.
Стандартні макроси
#ORDER_ID# — номер замовлення
#ORDER_DATE# — дата замовлення
#ORDER_STATUS# — назва нового статусу
#ORDER_PRICE# — сума замовлення
#ORDER_TRACK_NUMBER# — трек-номер
#BUYER_EMAIL# — email покупця
#BUYER_NAME# — ім'я покупця
Кастомний обробник з розширеними даними
AddEventHandler('sale', 'OnSaleStatusOrderChange', function(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
$newStatus = $order->getField('STATUS_ID');
$notifyStatuses = ['F', 'PROCESSING', 'DELIVERING', 'D', 'CANCEL'];
if (!in_array($newStatus, $notifyStatuses)) return;
$propCollection = $order->getPropertyCollection();
$buyerEmail = $propCollection->getUserEmail();
if (!$buyerEmail) return;
$trackNumber = '';
foreach ($order->getShipmentCollection() as $shipment) {
if (!$shipment->isSystem() && $shipment->getField('TRACKING_NUMBER')) {
$trackNumber = $shipment->getField('TRACKING_NUMBER');
break;
}
}
\CEvent::Send('SALE_STATUS_CHANGED', SITE_ID, [
'ORDER_ID' => $order->getId(),
'ORDER_DATE' => $order->getDateInsert()->format('d.m.Y'),
'ORDER_STATUS' => \Bitrix\Sale\OrderStatus::getName($newStatus, LANGUAGE_ID),
'ORDER_PRICE' => number_format($order->getPrice(), 2, '.', ' '),
'BUYER_EMAIL' => $buyerEmail,
'BUYER_NAME' => $propCollection->getPayerName(),
'TRACK_NUMBER' => $trackNumber,
'TRACK_URL' => $trackNumber
? 'https://track.pochta.ru/tracking#' . $trackNumber
: '',
]);
});
Окремі шаблони за статусами
Один шаблон для всіх статусів — погане рішення: лист «Замовлення виконано» повинен відрізнятися від «Замовлення скасовано». Створюємо окремі типи подій:
\CEventType::Add([
'EVENT_NAME' => 'SALE_STATUS_DELIVERING',
'LID' => 's1',
'NAME' => 'Замовлення передано до доставки',
'FIELDS' => [
['ID' => 'ORDER_ID', 'NAME' => 'Номер замовлення'],
['ID' => 'TRACK_NUMBER', 'NAME' => 'Трек-номер'],
['ID' => 'TRACK_URL', 'NAME' => 'Посилання для відстеження'],
['ID' => 'DELIVERY_NAME', 'NAME' => 'Служба доставки'],
['ID' => 'BUYER_EMAIL', 'NAME' => 'Email покупця'],
['ID' => 'BUYER_NAME', 'NAME' => "Ім'я покупця"],
],
]);
Для кожного статусу — окремий HTML-шаблон: трек-посилання для «Доставка», причина та інструкція для «Скасовано».
SMS-сповіщення
AddEventHandler('sale', 'OnSaleStatusOrderChange', function(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
if ($order->getField('STATUS_ID') !== 'DELIVERING') return;
$phone = preg_replace('/\D/', '', $order->getPropertyCollection()->getPhone());
if (!$phone) return;
$text = "Замовлення #{$order->getId()} передано до доставки.";
$trackNumber = getOrderTrackNumber($order);
if ($trackNumber) $text .= " Трек: {$trackNumber}";
sendSms($phone, $text); // ваша інтеграція з SMS-шлюзом
});
Сповіщення менеджерам при проблемних статусах
if ($newStatus === 'RETURN_INIT') {
$managerEmail = getOrderManagerEmail($order);
if ($managerEmail) {
\CEvent::Send('SALE_RETURN_INITIATED', SITE_ID, [
'ORDER_ID' => $order->getId(),
'MANAGER_EMAIL' => $managerEmail,
'BUYER_NAME' => $propCollection->getPayerName(),
'BUYER_PHONE' => $propCollection->getPhone(),
'ORDER_PRICE' => number_format($order->getPrice(), 2, '.', ' '),
]);
}
}
Терміни виконання
Налаштування стандартних сповіщень за 3–5 статусами з кастомними шаблонами — 4–8 годин. Окремі шаблони, SMS, сповіщення менеджерам, повне тестування — 1–2 робочих дні.







