Інтеграція 1С-Бітрікс з сервісами email-розсилок
Вбудований модуль розсилок Бітрікса (bitrix:sender) справляється з базовими завданнями, але поступається спеціалізованим сервісам за доставлюваністю листів, шаблонізатором, A/B-тестуванням та аналітикою. Інтеграція із зовнішніми ESP (Email Service Provider) — Mailchimp, SendPulse, UniSender, eSputnik — дозволяє використовувати можливості сервісу при збереженні даних у Бітріксі.
Загальна архітектура інтеграції
Незалежно від конкретного сервісу, інтеграція вирішує три задачі:
- Експорт підписників — користувачі сайту, які оформили підписку, потрапляють до списку розсилочного сервісу.
- Синхронізація сегментів — групи користувачів Бітрікса (покупці, неактивні, VIP) відповідають тегам або листам у ESP.
- Зворотна синхронізація — відписка в розсилці оновлює статус підписника у Бітріксі.
Управління підписками у Бітріксі
Підписки зберігаються в таблицях:
-
b_subscribe— рубрики розсилок. -
b_subscribe_email— адреси підписників. -
b_user_subscribe— прив'язка користувачів до рубрик.
Подія підписки — OnSubscribeSubscribe (модуль subscribe). Відписки — OnSubscribeUnSubscribe. Підписуємося на ці події для синхронізації з ESP.
Передача підписника до ESP
AddEventHandler('subscribe', 'OnSubscribeSubscribe', function($subscribeId, $email, $fields) {
$espClient = new EspApiClient();
$user = CUser::GetByLogin($email)->Fetch();
$subscriberData = [
'email' => $email,
'first_name' => $user['NAME'] ?? '',
'last_name' => $user['LAST_NAME'] ?? '',
'tags' => getSubscriberTags($user),
'source' => 'bitrix_subscribe',
];
$espClient->addOrUpdateContact($subscriberData);
});
function getSubscriberTags(array $user): array {
$tags = ['site-subscriber'];
// Додаємо теги за історією покупок
if (hasOrders($user['ID'])) $tags[] = 'buyer';
if (isVipClient($user['ID'])) $tags[] = 'vip';
return $tags;
}
Сегментація за поведінкою
Цінність інтеграції — передача поведінкових даних сайту до сервісу розсилок для тригерних сценаріїв:
| Подія у Бітріксі | Дія в ESP |
|---|---|
| Додав товар у кошик, не купив | Додати до сегмента «Кинутий кошик», запустити ланцюжок |
| Оформив замовлення | Додати до сегмента «Покупці», запустити welcome-серію |
| Не заходив 90 днів | Додати до сегмента «Неактивні», запустити реактивацію |
| День народження через 7 днів | Додати до сегмента «Іменинники», надіслати персональну пропозицію |
Події відстежуються через обробники OnSaleOrderSaved, OnSaleBasketSaved, агенти для перевірки активності.
Зворотна синхронізація відписок
ESP надсилає сповіщення про відписки через вебхуки. Приймаємо вебхук на окремому URL (/bitrix/tools/esp_webhook.php), оновлюємо статус у Бітріксі:
// esp_webhook.php
$payload = json_decode(file_get_contents('php://input'), true);
$email = $payload['email'] ?? '';
$event = $payload['event'] ?? ''; // 'unsubscribe', 'spam_complaint'
if (in_array($event, ['unsubscribe', 'spam_complaint'])) {
// Відписуємо у Бітріксі
$subscribeEmail = CSubscribeEmail::GetByEmail($email)->Fetch();
if ($subscribeEmail) {
CSubscribeEmail::Update($subscribeEmail['ID'], ['CONFIRMED' => 'N']);
}
}
Транзакційні листи
Листи замовлень (підтвердження, статус) можна відправляти через ESP замість вбудованого поштового сервера Бітрікса — для кращої доставлюваності та аналітики. Перевизначаємо обробник подій пошти в bitrix/php_interface/init.php:
AddEventHandler('main', 'OnBeforeEventSend', function(&$eventFields, &$template) {
// Перехоплюємо лист і відправляємо через ESP
$esp = new EspTransactionalSender();
$esp->send($eventFields['EMAIL'], $template['SUBJECT'], $template['BODY_HTML']);
return false; // не відправляємо через вбудований SMTP
});
| Завдання | Трудовитрати |
|---|---|
| Експорт підписників + обробники подій | 4–6 год |
| Сегментація за поведінкою | 6–10 год |
| Зворотна синхронізація відписок | 3–4 год |
| Транзакційні листи через ESP | 4–6 год |







