Налаштування повідомлень про статус доставки в 1С-Бітрікс
Повідомлення про зміну статусу доставки — одна з ключових комунікацій з покупцем після оформлення замовлення. «Ваше замовлення відправлено», «Прибуло до вашого міста», «Кур'єр виїхав» — кожне таке повідомлення знижує навантаження на підтримку та підвищує лояльність. Технічно це зв'язка трекінгу з подієвою системою 1С-Бітрікс.
Типи повідомлень
Email — стандартний канал, налаштовується через події пошти 1С-Бітрікс. Підходить для несрочних статусів: «Замовлення відправлено», «Прибуло на склад».
SMS — критичні повідомлення: «Кур'єр виїжджає», «Замовлення чекає в ПВЗ». Вимагає підключення SMS-провайдера.
Push — для магазинів з мобільним додатком або PWA.
Email-повідомлення через події 1С-Бітрікс
// Реєстрація типу події (один раз, при встановленні)
\Bitrix\Main\EventManager::getInstance()->registerEventHandler(
'main', 'OnBeforeEventSend',
'my_module', \My\DeliveryNotification::class, 'onBeforeEventSend'
);
Створюємо подію пошти DELIVERY_STATUS_UPDATE в розділі Налаштування → Пошта → Типи поштових подій:
- Поля:
ORDER_ID,STATUS_NAME,TRACK_NUMBER,DELIVERY_NAME,ORDER_URL
Шаблон листа (Налаштування → Пошта → Поштові шаблони) використовує ці поля. Різним статусам — різні шаблони: для «Відправлено» та для «Чекає в ПВЗ» тексти різні.
Тригер повідомлення
class DeliveryStatusNotifier
{
public static function notify(int $orderId, string $oldStatus, string $newStatus): void
{
// Не всі статуси вимагають повідомлення
$notifiableStatuses = [
'SHIPPED' => 'Замовлення відправлено',
'ARRIVED_CITY' => 'Прибуло до вашого міста',
'IN_PVZ' => 'Очікує в пункті видачі',
'OUT_FOR_DELIVERY' => 'Кур\'єр виїжджає',
'DELIVERED' => 'Замовлення доставлено',
];
if (!isset($notifiableStatuses[$newStatus])) return;
$order = \Bitrix\Sale\Order::load($orderId);
if (!$order) return;
$props = $order->getPropertyCollection();
\Bitrix\Main\Mail\Event::send([
'EVENT_NAME' => 'DELIVERY_STATUS_UPDATE',
'LID' => $order->getSiteId(),
'C_FIELDS' => [
'ORDER_ID' => $orderId,
'STATUS_NAME' => $notifiableStatuses[$newStatus],
'TRACK_NUMBER' => $props->getItemByOrderPropertyCode('TRACKING_CODE')?->getValue(),
'EMAIL' => $props->getItemByOrderPropertyCode('EMAIL')?->getValue(),
'ORDER_URL' => $this->getOrderUrl($orderId),
],
]);
}
}
SMS-повідомлення
SMS підключається через провайдера (SMSC.ru, SMS.ru, Devino тощо). Загальна схема: при зміні статусу надсилаємо HTTP-запит до API провайдера.
private function sendSms(string $phone, string $message): void
{
$response = $this->httpClient->get(
'https://smsc.ru/sys/send.php',
[
'login' => $this->getOption('SMS_LOGIN'),
'psw' => $this->getOption('SMS_PASSWORD'),
'phones' => $phone,
'mes' => $message,
'sender' => $this->getOption('SMS_SENDER'),
]
);
if (strpos($response, 'OK') === false) {
\Bitrix\Main\Diag\Debug::writeToFile('SMS error: ' . $response, 'sms');
}
}
SMS тільки для статусів «Кур'єр виїжджає» та «Очікує в ПВЗ» — не спамимо покупця.
Важливий нюанс: частота повідомлень
Не варто повідомляти про кожен проміжний статус. Покупець не хоче отримувати 8 листів про етапи шляху посилки — тільки про значущі події. Таблиця рекомендованих повідомлень:
| Статус | SMS | |
|---|---|---|
| Відправлено | Так | Ні |
| Прибуло до міста | Ні | Ні |
| Очікує в ПВЗ | Так | Так |
| Кур'єр виїжджає | Ні | Так |
| Доставлено | Так | Ні |
Захист від дублювання повідомлень
Polling-агент може опитати статус кілька разів поспіль і отримати той самий статус, що вже був. Без захисту покупець отримає повторне повідомлення.
private static function alreadyNotified(int $orderId, string $status): bool
{
$existing = \Bitrix\Sale\Internals\OrderTable::getList([
'filter' => [
'ID' => $orderId,
'=COMMENTS' => '%NOTIFIED:' . $status . '%',
],
])->fetch();
return (bool)$existing;
}
Простіше: зберігати надіслані повідомлення як бітову маску або JSON в окремому полі/властивості замовлення. Перевіряємо перед відправкою — якщо статус вже надсилався, пропускаємо.
Шаблони повідомлень: що писати
Шаблони для кожного статусу зберігаються в подіях 1С-Бітрікс. Мінімальний набір контенту для кожного шаблону:
- Відправлено: трек-номер, назва служби доставки, посилання на трекінг на сайті служби
- Очікує в ПВЗ: адреса ПВЗ, години роботи, термін зберігання (7–14 днів)
- Доставлено: подяка, посилання на повторне замовлення або відгук
Шаблони створюються в розділі Налаштування → Пошта → Поштові шаблони. Кожному типу події — свій шаблон з правильним subject line.
Терміни виконання
Налаштування email-повідомлень із шаблонами для 3–5 статусів — 1 робочий день. З додаванням SMS і захистом від дублювання — +1 день. Повна система з кастомними шаблонами для кожного статусу і кожної служби — 2–2.5 дні.







