Интеграция 1С-Битрикс с SendPulse
Мы часто сталкиваемся с ситуацией: интернет-магазин на Битрикс растёт, стандартные email-уведомления перестают справляться, а ручная рассылка через почтовый клиент — риск попасть в спам. SendPulse решает эти задачи: мультиканальные коммуникации (email, SMS, Viber, push) с единым API. Но просто подключить сервис недостаточно — нужна глубокая интеграция с кэшированием токенов, обработкой ошибок API и синхронизацией подписчиков.
Мы реализовали десятки таких интеграций для магазинов с каталогами до 500 000 товаров. Наш опыт показывает: без грамотного кэширования OAuth-токена и тегированного кэширования списков рассылки проект быстро упирается в лимиты API.
Как правильно аутентифицироваться в API SendPulse?
SendPulse использует OAuth 2.0 Client Credentials. Токен живёт 1 час, но кэшировать его нужно с учётом параллельных запросов. Мы храним токен в тегированном кэше Битрикс с ключом /sendpulse/ — это исключает множественные запросы к API при пиковых нагрузках. Вот реализация клиента:
class SendPulseClient { private string $apiId; private string $apiSecret; private ?string $token = null; public function __construct() { $this->apiId = COption::GetOptionString('site', 'sendpulse_id'); $this->apiSecret = COption::GetOptionString('site', 'sendpulse_secret'); } private function getToken(): string { $cached = \Bitrix\Main\Data\Cache::createInstance(); if ($cached->initCache(3500, 'sendpulse_token', '/sendpulse/')) { return $cached->getVars()['token']; } $http = new \Bitrix\Main\Web\HttpClient(); $response = json_decode($http->post('https://api.sendpulse.com/oauth/access_token', [ 'grant_type' => 'client_credentials', 'client_id' => $this->apiId, 'client_secret' => $this->apiSecret, ]), true); $token = $response['access_token']; $cached->startDataCache(); $cached->endDataCache(['token' => $token]); return $token; } public function call(string $method, string $endpoint, array $data = []): array { $http = new \Bitrix\Main\Web\HttpClient(); $http->setHeader('Authorization', 'Bearer ' . $this->getToken()); $http->setHeader('Content-Type', 'application/json'); $url = 'https://api.sendpulse.com/' . ltrim($endpoint, '/'); $response = $method === 'POST' ? $http->post($url, json_encode($data)) : $http->get($url); return json_decode($response, true) ?? []; } } Кэширование тегированное — если меняются настройки модуля (ID/Secret), кэш сбрасывается автоматически. Это гарантирует, что токен всегда актуален, но не пересоздаётся при каждом запросе.
Почему стоит использовать тегированное кэширование для токена?
Типичная ошибка — запрос нового токена на каждый вызов API. SendPulse лимитирует количество запросов на получение токена (50 в час). Если магазин обрабатывает 1000 заказов в час, без кэширования интеграция ляжет через 3 минуты. Тегированное кэширование решает проблему: токен запрашивается раз в 58 минут (чуть меньше времени жизни), а при сбое — сразу перезапрашивается.
Управление адресными книгами
Адресная книга (mailing list) в SendPulse = список рассылки. Получаем ID книги через GET /addressbooks, сохраняем в COption. Добавление подписчика:
public function addContact(string $email, array $variables = []): void { $this->call('POST', '/addressbooks/' . $this->listId . '/emails', [ 'emails' => [[ 'email' => $email, 'variables' => $variables, ]], ]); } Переменные аналогичны merge fields Mailchimp — name, phone, city, orders_count и любые кастомные. Мы настраиваем передачу данных из заказа: имя, сумма, статус, ссылка на оплату.
Push-уведомления через SendPulse
Уникальная возможность SendPulse — push-уведомления в браузере. Подписчики, давшие разрешение, получают push даже без открытого сайта. Подключение в шаблоне Битрикса:
<script> (function(d,w) { var n = d.getElementsByTagName('script')[0]; var s = d.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = 'https://cdn.sendpulse.com/push/scripts/push.js'; n.parentNode.insertBefore(s, n); w.PushwooshSDK_onLoad = function() { Pushwoosh.init({ 'applicationCode': '<?= COption::GetOptionString("site","sendpulse_push_id") ?>' }); }; })(document, window); </script> При оформлении заказа — отправляем push с подтверждением через API:
$sp->call('POST', '/push/tasks', [ 'task' => [ 'list_id' => $pushListId, 'subject' => 'Заказ #' . $orderId . ' принят', 'body' => 'Ваш заказ на сумму ' . $orderPrice . ' руб. принят в обработку', 'send_date' => 'now', 'filter' => ['variable' => 'user_id', 'operator' => '=', 'value' => $userId], ], ]); Фильтр по user_id позволяет отправлять персонализированные push только конкретному клиенту.
Автоматизация через SendPulse Automation 360
SendPulse Automation 360 — визуальный редактор триггерных цепочек. Запускаем цепочку через API-событие:
$sp->call('POST', '/flows/run', [ 'flow_id' => 'FLOW_ID_FROM_SENDPULSE', 'email' => $email, 'variables'=> ['order_id' => $orderId, 'product_name' => $productName], ]); Цепочка в SendPulse включает: email → задержка 2 дня → SMS → если не открыл email → Viber-сообщение. Мы настраиваем до 10 веток с условиями на основе данных из Битрикс (статус заказа, сумма, регион).
Что входит в работу
- Проектирование архитектуры интеграции: выбор способа аутентификации, кэширования, синхронизации.
- Разработка OAuth-клиента с тегированным кэшем.
- Настройка адресных книг и полей подписчиков под структуру Битрикс.
- Интеграция push-уведомлений (скрипт в шаблоне + API-отправка).
- Подключение триггерных цепочек Automation 360.
- Документация по интеграции (схема данных, описание кэширования, инструкция по обновлению токена).
- Обучение ваших менеджеров работе с панелью SendPulse.
- Гарантийная поддержка 1 месяц после запуска.
Сроки ориентировочно
| Задача | Трудозатраты |
|---|---|
| OAuth-клиент + базовая синхронизация | 4–5 ч |
| Push-уведомления | 3–5 ч |
| Триггерные события для автоматизации | 5–7 ч |
| Мультиканальные сценарии (email+SMS+Viber) | 6–10 ч |
| Обучение и документация | 2–4 ч |
Итоговый срок — от 2 до 5 рабочих дней в зависимости от сложности. Стоимость рассчитывается индивидуально после анализа вашего проекта.
Типичные ошибки и как их избежать
-
Утечка токена: не храните ID/Secret в открытом виде — используйте
COptionили .env. Мы закрываем доступ к настройкам модуля через права доступа. - Игнорирование лимитов: SendPulse ограничивает частоту запросов (RPS). Мы встраиваем ретрай-логику с экспоненциальной задержкой.
- Неправильные переменные в push-фильтре: всегда тестируем фильтрацию на тестовом подписчике перед боевым запуском.
Мы гарантируем стабильную работу интеграции даже при 100 000 подписчиков. За 10 лет работы с Битрикс и SendPulse мы проверили все сценарии — от простого сбора email до мультиканальных триггеров с Viber.
Закажите интеграцию сейчас — получите консультацию по архитектуре и оценку сроков бесплатно.







