Інтеграція 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.
Замовте інтеграцію зараз — отримайте консультацію з архітектури та оцінку термінів безкоштовно.







