Інтеграція 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 год |







