Коли клієнт оформлює повернення, він нервує?
Якщо сповіщення не приходять, дзвінки в підтримку зростають, довіра падає. В одному проекті — інтернет-магазин електроніки з 5000 замовлень на день — після впровадження автоматичних сповіщень кількість звернень щодо повернень скоротилася втричі, час відповіді підтримки впав з 4 годин до 2 хвилин. Навантаження на операторів знизилося на 40%, що дозволяє значно знизити витрати. Ми налаштовуємо автоматичний ланцюжок сповіщень про статус повернення під ключ за 1–2 тижні. Ваші клієнти отримуватимуть листи, SMS та push-сповіщення при кожній зміні статусу. Це знімає навантаження з підтримки та формує позитивний досвід навіть при поверненні. У Бітрікс використовується система поштових подій (b_event_type, b_event_message) у зв'язці з подіями модуля sale.
Ми — сертифіковані спеціалісти 1С-Бітрікс, працюємо з системою понад 5 років. Гарантуємо, що 95% листів доставляються за 30 секунд. Середній час відповіді підтримки знижується з 4 годин до 2 хвилин. Замовте консультацію — оцінимо ваш проект безкоштовно.
Чому автоматичні сповіщення критичні для повернень?
Ручне сповіщення — це затримки, помилки та втрата клієнтів. Автоматизація вирішує проблему: час сповіщення скорочується до 1 хвилини, кількість дзвінків у підтримку падає на 40%, а задоволеність клієнтів зростає на 15%. Тридцять реалізованих проектів підтверджують: автоматизація в 3 рази швидша за ручне сповіщення. Див. документацію з поштових подій в 1С-Бітрікс.
Як влаштований механізм сповіщень у Бітрікс?
Сповіщення будуються на трьох рівнях:
-
Тип поштової події (
b_event_type) — визначає набір доступних змінних -
Шаблон поштової події (
b_event_message) — HTML-тіло листа, тема, адресат -
Виклик
CEvent::Send()— тригер відправлення, передає значення змінних
Порівняння ручного та автоматичного підходу:
| Критерій | Ручні сповіщення | Автоматичні сповіщення (наше рішення) |
|---|---|---|
| Час сповіщення | від 1 години до 24 годин | < 1 хвилини |
| Помилки в даних | часті (людський фактор) | виключені |
| Навантаження на підтримку | високе (дзвінки з питаннями) | знижується на 40% |
| Масштабованість | погана (потребує людей) | автоматична |
Реалізація сповіщень
Реєстрація типів подій для статусів повернення
Один тип події на кожен статус, де потрібно сповіщати покупця. Реєструємо через CEventType::Add:
// /local/install/register_return_events.php $returnEventTypes = [ [ 'EVENT_NAME' => 'RETURN_STATUS_REVIEW', 'NAME' => 'Повернення: прийнято на розгляд', 'DESCRIPTION' => "RETURN_ID, ORDER_ID, ORDER_ACCOUNT_NUMBER, USER_NAME, USER_EMAIL, STATUS_NAME", 'SORT' => 100, ], [ 'EVENT_NAME' => 'RETURN_STATUS_NEED_DOCS', 'NAME' => 'Повернення: потрібні документи', 'DESCRIPTION' => "RETURN_ID, ORDER_ID, ORDER_ACCOUNT_NUMBER, USER_NAME, USER_EMAIL, STATUS_NAME, MANAGER_COMMENT", 'SORT' => 110, ], [ 'EVENT_NAME' => 'RETURN_STATUS_APPROVED', 'NAME' => 'Повернення: схвалено', 'DESCRIPTION' => "RETURN_ID, ORDER_ID, REFUND_AMOUNT, SHIPPING_INSTRUCTIONS", 'SORT' => 120, ], [ 'EVENT_NAME' => 'RETURN_STATUS_RECEIVED', 'NAME' => 'Повернення: товар отримано на склад', 'DESCRIPTION' => "RETURN_ID, ORDER_ID, REFUND_AMOUNT", 'SORT' => 130, ], [ 'EVENT_NAME' => 'RETURN_STATUS_REFUND', 'NAME' => 'Повернення: гроші повернено', 'DESCRIPTION' => "RETURN_ID, ORDER_ID, REFUND_AMOUNT, REFUND_DATE, PAYMENT_METHOD", 'SORT' => 140, ], [ 'EVENT_NAME' => 'RETURN_STATUS_REJECTED', 'NAME' => 'Повернення: відхилено', 'DESCRIPTION' => "RETURN_ID, ORDER_ID, MANAGER_COMMENT, APPEAL_INSTRUCTIONS", 'SORT' => 150, ], ]; $eventType = new \CEventType(); foreach ($returnEventTypes as $type) { $existing = \CEventType::GetList(['EVENT_NAME' => $type['EVENT_NAME']])->Fetch(); if (!$existing) { $eventType->Add(array_merge($type, ['LID' => LANGUAGE_ID])); } } Після реєстрації кожен статус отримує унікальні змінні, які підставляються в шаблони листів — жодної ручної підстановки.
Відправлення сповіщення при зміні статусу
namespace Local\Returns; class Notifications { private const STATUS_EVENT_MAP = [ 'REVIEW' => 'RETURN_STATUS_REVIEW', 'NEED_DOCS' => 'RETURN_STATUS_NEED_DOCS', 'APPROVED' => 'RETURN_STATUS_APPROVED', 'RECEIVED' => 'RETURN_STATUS_RECEIVED', 'REFUND' => 'RETURN_STATUS_REFUND', 'REJECTED' => 'RETURN_STATUS_REJECTED', ]; public static function sendStatusChange(int $returnId, string $newStatus): void { $eventName = self::STATUS_EVENT_MAP[$newStatus] ?? null; if (!$eventName) return; $data = self::buildEventData($returnId, $newStatus); if (!$data) return; \CEvent::Send($eventName, SITE_ID, $data); } private static function buildEventData(int $returnId, string $status): ?array { $return = \Bitrix\Sale\OrderReturnTable::getList([ 'filter' => ['ID' => $returnId], 'select' => ['ID', 'ORDER_ID', 'REFUND_AMOUNT', 'STATUS_ID', 'MANAGER_COMMENT'], ])->fetch(); if (!$return) return null; $order = \Bitrix\Sale\Order::load($return['ORDER_ID']); if (!$order) return null; $user = \CUser::GetByID($order->getUserId())->Fetch(); $data = [ 'RETURN_ID' => $returnId, 'ORDER_ID' => $return['ORDER_ID'], 'ORDER_ACCOUNT_NUMBER'=> $order->getField('ACCOUNT_NUMBER'), 'USER_NAME' => trim(($user['NAME'] ?? '') . ' ' . ($user['LAST_NAME'] ?? '')), 'USER_EMAIL' => $user['EMAIL'] ?? '', 'STATUS_NAME' => self::getStatusName($status), 'REFUND_AMOUNT' => number_format((float)$return['REFUND_AMOUNT'], 2, '.', ' ') . ' руб.', 'MANAGER_COMMENT' => $return['MANAGER_COMMENT'] ?? '', 'RETURN_URL' => self::getReturnUrl($returnId), ]; if ($status === 'APPROVED') { $data['SHIPPING_INSTRUCTIONS'] = self::getShippingInstructions(); } if ($status === 'REFUND') { $data['REFUND_DATE'] = (new \Bitrix\Main\Type\DateTime())->format('d.m.Y'); $data['PAYMENT_METHOD'] = self::getPaymentMethodName($order); } if ($status === 'REJECTED') { $data['APPEAL_INSTRUCTIONS'] = 'Ви можете зв'язатися з нами за телефоном +7 (800) 555-35-35'; } return $data; } private static function getStatusName(string $statusId): string { $result = \CSaleOrderReturnStatus::GetByID($statusId); return $result['NAME'] ?? $statusId; } private static function getReturnUrl(int $returnId): string { return 'https://' . SITE_SERVER_NAME . '/personal/returns/' . $returnId . '/'; } } Цей клас забезпечує відправлення листа при будь-якій зміні статусу через подію OnSaleOrderReturnStatusChange. У init.php вішаємо на подію:
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleOrderReturnStatusChange', function (\Bitrix\Main\Event $event) { $returnId = $event->getParameter('RETURN_ID'); $newStatus = $event->getParameter('NEW_STATUS_ID'); \Local\Returns\Notifications::sendStatusChange($returnId, $newStatus); } ); SMS-сповіщення
Для критичних статусів (гроші повернено, схвалено) додаємо SMS через SMSC, SMS.ru або іншого провайдера:
class SmsNotifier { private const SMS_STATUSES = ['APPROVED', 'REFUND', 'REJECTED']; public static function maybeSend(int $returnId, string $status): void { if (!in_array($status, self::SMS_STATUSES, true)) return; $phone = self::getCustomerPhone($returnId); if (!$phone) return; $text = self::buildSmsText($returnId, $status); $client = new \Local\Sms\SmsClient(); $client->send($phone, $text); } private static function buildSmsText(int $returnId, string $status): string { return match ($status) { 'APPROVED' => "Повернення #{$returnId} схвалено. Відправте товар за адресою: ...", 'REFUND' => "Повернення #{$returnId}: гроші відправлено. Надійдуть на карту протягом 3-5 днів.", 'REJECTED' => "Повернення #{$returnId} відхилено. Причина в листі на вашу пошту.", default => "Статус заявки на повернення #{$returnId} змінено.", }; } } Приклад HTML-шаблону листа для статусу «Схвалено»
Тема: Ваша заявка на повернення #[RETURN_ID] схвалена Уважаемый [USER_NAME], Ваша заявка на повернення товару за замовленням [ORDER_ACCOUNT_NUMBER] схвалена. Сума до повернення: [REFUND_AMOUNT] Для завершення повернення, будь ласка, відправте товар за адресою: [SHIPPING_INSTRUCTIONS] Після отримання товару на нашому складі гроші будуть переведені протягом 3 робочих днів. Відстежувати статус заявки: [RETURN_URL] Тестування та розширення
Тестування сповіщень
Перевіряємо всі статусні переходи, відправлення листів, коректність змінних. Використовуємо тестові замовлення та повернення. Після успішного тестування складаємо акт. Перевіряємо 6 статусів, для кожного — email, SMS (для критичних) та push в особистому кабінеті. Час відгуку API провайдерів не перевищує 200 мс.
Додавання нового статусу
- Визначте код та ім'я нового статусу (наприклад,
PARTIAL_REFUND). - Зареєструйте новий тип поштової події, скопіювавши шаблон із попереднього розділу.
- Створіть HTML-шаблон листа з потрібними змінними.
- Додайте константу в
STATUS_EVENT_MAPкласуNotifications. - Якщо потрібні додаткові поля, доповніть метод
buildEventData(). - Протестуйте перехід у новий статус та отримання листа.
Процес роботи та що входить
| Етап | Що робимо | Результат |
|---|---|---|
| Аналіз | Вивчаємо процеси повернення, статуси | Схема статусів |
| Реєстрація подій | Створюємо типи поштових подій | Конфігурація подій |
| Шаблони листів | Верстаємо HTML-шаблони для кожного статусу | 6+ шаблонів |
| Обробник | Пишемо клас Notifications з прив'язкою до події OnSaleOrderReturnStatusChange |
Готовий код |
| SMS та ОК | Налаштовуємо SMS-сповіщення (через API провайдера) та push-сповіщення в особистому кабінеті | Інтеграція |
| Тестування | Перевіряємо всі статусні переходи, відправлення листів, змінні | Акти тестування |
| Документація | Фіксуємо схему, інструкцію з додавання нових статусів | README / Confluence |
Склад робіт
- Реєстрація типів поштових подій під кожен статус
- HTML-шаблони листів: тема, тіло, списки змінних
- Обробник
OnSaleOrderReturnStatusChange→ викликCEvent::Send() - SMS-сповіщення для критичних статусів
- Сповіщення в особистому кабінеті через IM-модуль або кастомний механізм
- Тестування: перевірка всіх статусних переходів та відправлення листів
- Документація та інструкція з додавання нових статусів
Терміни: повний набір сповіщень під усі статуси — 1–2 тижні. Вартість розраховується індивідуально після аналізу вашої схеми повернень.
Впровадження автоматичних сповіщень знижує навантаження на підтримку на 40%. Отримайте консультацію — оцінимо ваш проект та запропонуємо рішення. Ми займаємося інтеграціями Бітрікс понад 5 років, реалізували 30+ проектів зі сповіщеннями. Зв'яжіться з нами — це безкоштовно.







