Интеграция 1С-Битрикс с Mindbox (персонализация)
Mindbox — платформа автоматизации маркетинга: единый профиль клиента, сегментация, триггерные рассылки, программы лояльности, персонализированные промокоды. Интеграция с Битрикс охватывает несколько направлений: передачу данных о клиентах и заказах, получение персонализированных предложений для конкретного пользователя и управление бонусной программой.
Архитектура интеграции
Mindbox работает через REST API с двумя режимами:
- Синхронный — запрос → ответ в реальном времени. Используется при регистрации/авторизации (получить профиль клиента, начислить бонусы) и при оформлении заказа (применить скидку по промокоду, узнать баланс бонусов).
- Асинхронный — события ставятся в очередь и обрабатываются Mindbox в фоне. Используется для передачи данных о просмотрах, добавлениях в корзину, истории заказов.
Битрикс → Mindbox API (events): регистрация, заказ, просмотр
Mindbox → Битрикс (callback): бонусный баланс, статус промокода
Mindbox → Email/SMS: рассылки, триггеры (Mindbox внутри)
Аутентификация в Mindbox API
Mindbox использует авторизацию по секрету через заголовок:
Authorization: Mindbox secretKey="YOUR_SECRET_KEY"
Content-Type: application/json
Базовый URL: https://api.mindbox.ru/v3/operations/async (асинхронный) и /v3/operations/sync (синхронный).
Передача события регистрации
При регистрации пользователя в Битрикс — событие в Mindbox для создания/обновления профиля клиента:
AddEventHandler('main', 'OnAfterUserRegister', function(&$arUser) {
sendMindboxEvent('Website.RegisterCustomer', [
'customer' => [
'email' => $arUser['EMAIL'],
'mobilePhone' => $arUser['PERSONAL_PHONE'] ?? '',
'firstName' => $arUser['NAME'] ?? '',
'lastName' => $arUser['LAST_NAME'] ?? '',
'customFields'=> [
'bitrixUserId' => $arUser['USER_ID'],
],
],
'executionDateTimeUtc' => gmdate('Y-m-d\TH:i:s\Z'),
]);
});
function sendMindboxEvent(string $operation, array $data, bool $sync = false): ?array
{
$endpoint = $sync
? 'https://api.mindbox.ru/v3/operations/sync'
: 'https://api.mindbox.ru/v3/operations/async';
$http = new \Bitrix\Main\Web\HttpClient();
$http->setHeader('Authorization', 'Mindbox secretKey="' . MINDBOX_SECRET . '"');
$http->setHeader('Content-Type', 'application/json');
$payload = array_merge(['deviceUUID' => getMindboxDeviceUUID()], $data);
$response = $http->post(
$endpoint . '?endpointId=' . MINDBOX_ENDPOINT_ID
. '&operation=' . urlencode($operation),
json_encode($payload)
);
return $sync ? json_decode($response, true) : null;
}
Передача заказа
При создании заказа в Битрикс отправляем полные данные:
AddEventHandler('sale', 'OnSaleOrderSaved', function(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
$isNew = $event->getParameter('IS_NEW');
if (!$isNew) return;
$basket = $order->getBasket();
$lines = [];
foreach ($basket->getOrderableItems() as $item) {
$lines[] = [
'product' => [
'ids' => ['bitrix' => $item->getProductId()],
],
'count' => $item->getQuantity(),
'price' => $item->getPrice(),
'basePricePerItem' => $item->getBasePrice(),
];
}
sendMindboxEvent('Website.CreateOrder', [
'order' => [
'ids' => ['bitrix' => $order->getId()],
'totalPrice' => $order->getPrice(),
'discountedPrice' => $order->getPrice(),
'lines' => $lines,
],
'customer' => [
'email' => $order->getUserEmail(),
'ids' => ['bitrixId' => $order->getUserId()],
],
]);
});
Бонусная программа: проверка и списание
Синхронный запрос при оформлении заказа — получить баланс бонусов и применить:
function getMindboxBonusBalance(int $userId): float
{
$user = CUser::GetByID($userId)->Fetch();
$result = sendMindboxEvent('Website.GetCustomerBalance', [
'customer' => ['email' => $user['EMAIL']],
], true);
return (float)($result['customer']['bonusPointsBalance']['available'] ?? 0);
}
function applyMindboxBonuses(int $orderId, int $userId, float $bonusAmount): bool
{
$user = CUser::GetByID($userId)->Fetch();
$result = sendMindboxEvent('Website.ConfirmOrderBonusPoints', [
'order' => ['ids' => ['bitrix' => $orderId]],
'customer' => ['email' => $user['EMAIL']],
'payment' => ['bonusPoints' => $bonusAmount],
], true);
return ($result['status'] ?? '') === 'Success';
}
На странице оформления заказа баланс бонусов запрашивается через AJAX и показывается пользователю с возможностью применить часть или всё.
Персонализированные промокоды
Mindbox генерирует персональные промокоды для каждого сегмента. При оформлении заказа проверяем промокод:
function validateMindboxPromocode(string $code, int $userId): ?array
{
$user = CUser::GetByID($userId)->Fetch();
$result = sendMindboxEvent('Website.CheckPromocode', [
'order' => ['promocode' => $code],
'customer' => ['email' => $user['EMAIL']],
], true);
if (($result['status'] ?? '') !== 'Success') {
return null;
}
return [
'discount_type' => $result['order']['discountType'] ?? 'percent',
'discount_value' => $result['order']['discountValue'] ?? 0,
];
}
Возвращаемый тип и размер скидки используется при пересчёте корзины через механизм скидок Битрикс или напрямую через $item->setField('DISCOUNT_PRICE', ...).
DeviceUUID
Mindbox связывает анонимные действия и авторизованного пользователя через UUID устройства:
function getMindboxDeviceUUID(): string
{
if (!isset($_COOKIE['mindboxDeviceUUID'])) {
$uuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0x0fff) | 0x4000,
mt_rand(0, 0x3fff) | 0x8000,
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
setcookie('mindboxDeviceUUID', $uuid, time() + 86400 * 365, '/');
return $uuid;
}
return $_COOKIE['mindboxDeviceUUID'];
}
JavaScript-трекер Mindbox также читает этот UUID и автоматически привязывает поведение на сайте.
Подключение JS-трекера
<!-- В footer.php или через addExternalJs -->
<script>
var mindbox = window.mindbox || [];
mindbox.push = mindbox.push || function(e) { mindbox.queue.push(e); };
mindbox.queue = mindbox.queue || [];
mindbox('create', {
endpointId: '<?= MINDBOX_ENDPOINT_ID ?>'
});
</script>
<script src="https://api.mindbox.ru/scripts/v1/tracker.js" async></script>
Сроки реализации
| Объём | Состав | Срок |
|---|---|---|
| Базовый (регистрация + заказы + JS-трекер) | Обработчики событий + клиент API | 3–5 дней |
| Бонусная программа (баланс + списание) | Синхронные запросы + форма в корзине | +3–5 дней |
| Полная (промокоды + сегменты + персонализация) | Вся интеграция + тестирование сценариев | 2–3 недели |







