Настройка уведомлений о статусе доставки на 1С-Битрикс
Уведомления о доставке — это не просто email «ваш заказ отправлен». Полноценная система включает SMS или мессенджер при ключевых событиях, трекинг-ссылку, и персонализированный текст в зависимости от перевозчика и статуса. Битрикс предоставляет инфраструктуру для рассылок, но её нужно правильно расширить.
Встроенные уведомления Битрикс
Битрикс рассылает уведомления через систему «Почта» (/bitrix/admin/message_edit.php). Шаблоны привязаны к событиям: SALE_ORDER_STATUS_CHANGE, SALE_NEW_ORDER, SALE_ORDER_CANCEL.
Проблема стандартных шаблонов: они статичны, не содержат трекинговый номер и ссылку, не учитывают перевозчика.
Кастомное событие при смене статуса доставки
Создаём собственное событие и добавляем шаблон:
// Регистрация события
\Bitrix\Main\Mail\Event::register([
'EVENT_NAME' => 'SALE_SHIPMENT_TRACKING_UPDATE',
'LID' => SITE_ID,
'FIELDS' => [
['NAME' => 'ORDER_ID', 'DESCRIPTION' => 'ID заказа'],
['NAME' => 'ORDER_NUMBER', 'DESCRIPTION' => 'Номер заказа'],
['NAME' => 'TRACK_NUMBER', 'DESCRIPTION' => 'Трекинг-номер'],
['NAME' => 'CARRIER_NAME', 'DESCRIPTION' => 'Служба доставки'],
['NAME' => 'STATUS_TEXT', 'DESCRIPTION' => 'Статус доставки'],
['NAME' => 'TRACKING_URL', 'DESCRIPTION' => 'Ссылка для трекинга'],
['NAME' => 'DELIVERY_DATE', 'DESCRIPTION' => 'Ожидаемая дата доставки'],
],
]);
// Отправка уведомления
private static function notifyCustomer(\Bitrix\Sale\Order $order, array $status): void
{
$carrier = $status['carrier'];
$trackNumber = $status['track_number'];
\Bitrix\Main\Mail\Event::send([
'EVENT_NAME' => 'SALE_SHIPMENT_TRACKING_UPDATE',
'LID' => $order->getSiteId(),
'MESSAGE_ID' => '', // шаблон определится по событию и сайту
'C_FIELDS' => [
'ORDER_ID' => $order->getId(),
'ORDER_NUMBER' => $order->getField('ACCOUNT_NUMBER'),
'TRACK_NUMBER' => $trackNumber,
'CARRIER_NAME' => self::getCarrierName($carrier),
'STATUS_TEXT' => $status['text'],
'TRACKING_URL' => self::getTrackingUrl($carrier, $trackNumber),
'DELIVERY_DATE' => $status['expected_date'] ?? '',
],
'TO_EMAIL' => $order->getPropertyCollection()->getUserEmail()?->getValue(),
]);
}
SMS-уведомления
Для SMS интегрируем одного из SMS-провайдеров (SMS.ru, SMSC.ru, МегаФон Messages). Ключевые статусы для SMS:
- Заказ отправлен (появился трекинг-номер)
- Заказ прибыл в пункт выдачи / на терминал
- Попытка вручения (курьер не застал)
class SmsNotifier
{
public function send(string $phone, string $message): bool
{
$phone = preg_replace('/\D/', '', $phone);
if (strlen($phone) === 10) $phone = '7' . $phone;
if (strlen($phone) === 11 && $phone[0] === '8') $phone = '7' . substr($phone, 1);
$response = $this->httpPost('https://sms.ru/sms/send', [
'api_id' => $this->apiKey,
'to' => $phone,
'msg' => $message,
'from' => $this->sender,
]);
return ($response['status'] ?? '') === 'OK';
}
}
Шаблон SMS: «Заказ #12345: ваш товар прибыл в ПВЗ СДЭК по адресу ул. Ленина, 1. Трекинг: cdek.ru/track/AB123».
Уведомления в Telegram
Часть магазинов отправляет уведомления через Telegram-бот — особенно актуально для B2B с постоянными клиентами. Реализуется через Telegram Bot API (sendMessage с chat_id клиента). chat_id клиент предоставляет при подписке через мини-форму на сайте.
Сроки
| Состав | Срок |
|---|---|
| Email-уведомления через кастомное событие | 1–2 дня |
| + SMS при ключевых статусах | +1 день |
| + Telegram-уведомления | +1–2 дня |







