Интеграция 1С-Битрикс с Mailchimp
Mailchimp — наиболее распространённый западный ESP с мощным API и развитыми инструментами автоматизации. Для российских проектов его использование оправдано при работе с международной аудиторией или когда заказчик уже ведёт маркетинг через Mailchimp.
API Mailchimp v3
Mailchimp предоставляет REST API v3. Базовый URL зависит от дата-центра аккаунта: https://us1.api.mailchimp.com/3.0/ (замените us1 на дата-центр вашего аккаунта — он указан в URL после логина).
Аутентификация — Basic Auth: логин любой, пароль — API-ключ из раздела Account → API Keys.
Добавление подписчика в список (Audience)
class MailchimpClient {
private string $apiKey;
private string $dataCenter;
private string $listId;
public function __construct() {
$this->apiKey = COption::GetOptionString('site', 'mailchimp_api_key');
$this->dataCenter = explode('-', $this->apiKey)[1]; // us1, us2 и т.д.
$this->listId = COption::GetOptionString('site', 'mailchimp_list_id');
}
public function upsertMember(string $email, array $mergeFields = [], array $tags = []): array {
$subscriberHash = md5(strtolower($email));
$url = "https://{$this->dataCenter}.api.mailchimp.com/3.0/lists/{$this->listId}/members/{$subscriberHash}";
$http = new \Bitrix\Main\Web\HttpClient();
$http->setHeader('Authorization', 'Basic ' . base64_encode('anystring:' . $this->apiKey));
$http->setHeader('Content-Type', 'application/json');
$data = [
'email_address' => $email,
'status_if_new' => 'subscribed', // не перезаписывать статус отписавшихся
'merge_fields' => $mergeFields, // FNAME, LNAME, PHONE, CITY и др.
'tags' => $tags,
];
// PUT — создаёт или обновляет (upsert)
$response = $http->query(HttpClient::HTTP_PUT, $url, json_encode($data));
return json_decode($response, true);
}
}
Метод PUT /members/{hash} работает как upsert — создаёт нового подписчика или обновляет существующего по хешу email. Это предотвращает дубли.
Merge fields и теги
Merge fields — кастомные поля аудитории Mailchimp. Стандартные: FNAME, LNAME. Создаём дополнительные в настройках аудитории:
| Merge tag | Тип | Источник в Битриксе |
|---|---|---|
FNAME |
Text | USER.NAME |
LNAME |
Text | USER.LAST_NAME |
PHONE |
Phone | USER.PERSONAL_PHONE |
CITY |
Text | Свойство профиля |
ORDERS |
Number | Количество заказов |
LTV |
Number | Сумма заказов |
Теги — свободные метки для сегментации. Синхронизируем с группами пользователей Битрикса (b_user_group):
// Получаем теги пользователя для Mailchimp
function getUserMailchimpTags(int $userId): array {
$tags = [];
$groups = CUser::GetUserGroup($userId);
$tagMap = ['9' => 'buyer', '12' => 'vip', '15' => 'wholesale'];
foreach ($groups as $groupId) {
if (isset($tagMap[$groupId])) $tags[] = $tagMap[$groupId];
}
return $tags;
}
Кейс: брошенная корзина
Ситуация. Интернет-магазин электроники, конверсия корзины — 18%. Задача: автоматически отправлять письмо с содержимым корзины через 1 час после добавления товара, если заказ не оформлен.
Реализация. В Битриксе хранятся корзины незарегистрированных пользователей в b_sale_basket. Регистрируемся — при сохранении корзины (OnSaleBasketSaved) ставим агент на 1 час:
AddEventHandler('sale', 'OnSaleBasketSaved', function($basket) {
$userId = $basket->getFUserId();
// Агент проверит через час — если заказ не оформлен, отправит в Mailchimp
CAgent::AddAgent(
'AbandonedCartAgent::check(' . $userId . ');',
'my_module', 'N', 3600 // через 3600 секунд
);
});
Агент проверяет: если заказ так и не создан, передаёт данные корзины в Mailchimp через POST /lists/{id}/members/{hash}/events — событие abandoned_cart запускает автоматизацию в Mailchimp.
Обработка вебхука отписки
Mailchimp отправляет POST на указанный URL при отписке или bounce:
// /bitrix/tools/mailchimp_webhook.php
$data = $_POST;
if ($data['type'] === 'unsubscribe') {
$email = $data['data']['email'];
// Обновляем статус в Битриксе
$mailchimp->updateLocalSubscription($email, 'unsubscribed');
}
if ($data['type'] === 'cleaned') {
// Hard bounce — адрес недействителен
$mailchimp->markEmailInvalid($data['data']['email']);
}
| Задача | Трудозатраты |
|---|---|
| API-клиент + базовая синхронизация | 4–6 ч |
| Merge fields + теги по группам | 3–4 ч |
| Автоматизация брошенной корзины | 6–8 ч |
| Вебхуки отписок и bounces | 3–4 ч |







