Интеграция 1С-Битрикс с Pushwoosh

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс с Pushwoosh
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Интеграция 1С-Битрикс с Pushwoosh

Pushwoosh — российский сервис push-уведомлений, работающий через собственную инфраструктуру поверх FCM/APNs. Преимущество перед прямой интеграцией с FCM: единый API для Web Push, Android, iOS и Huawei; встроенные сегменты, A/B-тесты, аналитика. Интеграция с 1С-Битрикс включает SDK на фронтенде, PHP-клиент для отправки и привязку Pushwoosh-устройств к пользователям Битрикс.

Структура интеграции

Pushwoosh использует понятие hwid (hardware ID) — уникальный идентификатор устройства в Pushwoosh. Нужно хранить соответствие: USER_ID Битрикс → hwid[] Pushwoosh. Один пользователь — несколько hwid (браузеры + мобильные устройства).

Pushwoosh SDK (JS/Android/iOS)
  → Получает hwid, регистрирует устройство в Pushwoosh
    → POST /local/api/pushwoosh/register (привязка hwid к USER_ID)
      → Битрикс событие (заказ, акция)
        → PHP → Pushwoosh API (sendMessage/createMessage)
          → Pushwoosh → FCM/APNs → устройство

Инициализация Web SDK

<script src="https://cdn.pushwoosh.com/webpush/v3/pushwoosh-web-notifications.js"></script>
<script>
var Pushwoosh = Pushwoosh || [];
Pushwoosh.push(['init', {
    logLevel:    'error',
    applicationCode: 'XXXXX-YYYYY', // Application Code из Pushwoosh Dashboard
    safariWebsitePushID: 'web.com.example.shop',
    defaultNotificationTitle: 'Магазин Пример',
    defaultNotificationImage: 'https://example.com/push-icon.png',
    autoSubscribe:  false,           // управляем подпиской вручную
    serviceWorkerUrl: '/pushwoosh-service-worker.js',
}]);

Pushwoosh.push(function(api) {
    api.onReady(function() {
        // Регистрируем hwid в Битрикс
        api.getHWID().then(function(hwid) {
            if (hwid) {
                registerPushwooshDevice(hwid);
            }
        });
    });
});

function registerPushwooshDevice(hwid) {
    fetch('/local/api/pushwoosh/register', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'X-Bitrix-Csrf-Token': BX.bitrix_sessid()
        },
        body: JSON.stringify({ hwid: hwid, platform: 'web' })
    });
}

// Кнопка подписки
document.getElementById('subscribe-push').addEventListener('click', function() {
    Pushwoosh.push(function(api) {
        api.subscribe().then(function() {
            Pushwoosh.push(function(api) {
                api.getHWID().then(registerPushwooshDevice);
            });
        });
    });
});
</script>

Service Worker /pushwoosh-service-worker.js в корне сайта:

importScripts('https://cdn.pushwoosh.com/webpush/v3/pushwoosh-service-worker.js');

Хранение hwid и PHP-клиент Pushwoosh API

class PushwooshService
{
    private string $appCode;
    private string $apiAccessToken;
    private string $apiUrl = 'https://cp.pushwoosh.com/json/1.3/';

    public function createMessage(array $recipientHwids, string $content, array $extra = []): array
    {
        $payload = [
            'request' => [
                'application'   => $this->appCode,
                'auth'          => $this->apiAccessToken,
                'notifications' => [[
                    'send_date'    => 'now',
                    'ignore_user_timezone' => false,
                    'content'      => $content,
                    'devices'      => $recipientHwids, // массив hwid
                    'data'         => $extra['data']  ?? [],
                    'ios_title'    => $extra['title'] ?? '',
                    'android_header' => $extra['title'] ?? '',
                    'link'         => $extra['url']   ?? '',
                ]],
            ],
        ];

        return $this->request('createMessage', $payload);
    }

    public function sendMessageToUser(int $userId, string $content, string $title = '', string $url = ''): void
    {
        $hwids = PushwooshDeviceTable::getHwidsByUserId($userId);
        if (empty($hwids)) return;

        $this->createMessage($hwids, $content, ['title' => $title, 'url' => $url]);
    }

    /**
     * Массовая рассылка по тегу пользователя (сегментация)
     * Например: пользователи, купившие товар из категории X
     */
    public function createMessageByTag(string $tagName, string $tagValue, string $content): array
    {
        $payload = [
            'request' => [
                'application' => $this->appCode,
                'auth'        => $this->apiAccessToken,
                'notifications' => [[
                    'send_date' => 'now',
                    'content'   => $content,
                    'conditions' => [[$tagName, 'EQ', $tagValue]],
                ]],
            ],
        ];

        return $this->request('createMessage', $payload);
    }

    private function request(string $method, array $data): array
    {
        $ch = curl_init($this->apiUrl . $method);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST           => true,
            CURLOPT_POSTFIELDS     => json_encode($data),
            CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
        ]);
        $response = json_decode(curl_exec($ch), true);
        curl_close($ch);

        return $response ?? [];
    }
}

Теги Pushwoosh для сегментации

Pushwoosh поддерживает теги — пользовательские атрибуты устройства. Это позволяет отправлять уведомления по сегментам без передачи списка hwid.

Установка тега при регистрации или изменении данных пользователя:

public function setUserTags(string $hwid, int $userId): void
{
    $user = \Bitrix\Main\UserTable::getById($userId)->fetch();

    $tags = [];

    // Группы пользователя → теги
    $groups = \CUser::GetUserGroup($userId);
    if (in_array(7, $groups)) { // ID группы "Gold"
        $tags[] = ['tagName' => 'loyalty_level', 'tagValue' => 'gold'];
    }

    // Город
    if (!empty($user['PERSONAL_CITY'])) {
        $tags[] = ['tagName' => 'city', 'tagValue' => $user['PERSONAL_CITY']];
    }

    // История покупок — суммарная сумма
    $totalOrders = $this->getUserOrdersTotal($userId);
    $tags[] = ['tagName' => 'orders_total', 'tagValue' => (int)$totalOrders];

    $this->request('setTags', [
        'request' => [
            'application' => $this->appCode,
            'auth'        => $this->apiAccessToken,
            'tags'        => $tags,
            'hwid'        => $hwid,
        ],
    ]);
}

Обработка событий из Битрикс

// Смена статуса заказа
AddEventHandler('sale', 'OnSaleStatusOrder', function(string $statusId, \Bitrix\Sale\Order $order) {
    $userId = (int)$order->getUserId();

    $notifications = [
        'O' => ['Заказ #' . $order->getField('ACCOUNT_NUMBER'), 'Заказ принят, передаём в обработку'],
        'D' => ['Заказ отправлен', 'Посылка уже в пути — отслеживайте доставку'],
        'F' => ['Заказ выполнен', 'Спасибо за покупку! Оставьте отзыв — вам важен ваш опыт'],
    ];

    if (!isset($notifications[$statusId])) return;

    [$title, $content] = $notifications[$statusId];
    $url = '/personal/order/detail/' . $order->getField('ACCOUNT_NUMBER') . '/';

    (new PushwooshService())->sendMessageToUser($userId, $content, $title, $url);
});

Статистика и Inbox

Pushwoosh предоставляет API для получения статистики (getStats) и inbox-уведомлений (getInboxMessages) — список последних push, которые пользователь мог пропустить. Inbox отображается в личном кабинете как центр уведомлений:

Pushwoosh.push(function(api) {
    api.getInboxMessages().then(function(messages) {
        // Рендерим список непрочитанных уведомлений
        renderInbox(messages);
    });
});

Сроки

Задача Срок
SDK инициализация, сохранение hwid 2–3 дня
PHP-клиент API, таблица устройств 2–3 дня
Отправка по событиям заказов 2–3 дня
Теги и сегментация 2–3 дня
Inbox, статистика, управление из ЛК 3–5 дней
Полный комплекс (web + mobile) 3–4 недели