Інтеграція 1С-Бітрікс з Pushwoosh

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція 1С-Бітрікс з Pushwoosh
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

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