Налаштування модуля Push and Pull 1С-Бітрікс

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

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

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

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

  • 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

Налаштування модуля Push and Pull 1С-Bitrix

Онлайн-чат оновлюється лише при перезавантаженні сторінки. Сповіщення про новий заказ приходять з затримкою на кілька хвилин. «Жива стрічка» в корпоративному портальному Bitrix24 не оновлюється в реальному часі. Все це — наслідок відсутності налаштованого модуля Push and Pull, який забезпечує двосторонню комунікацію між сервером та браузером.

Що робить модуль Push and Pull

Модуль pull (Bitrix-ідентифікатор: pull) забезпечує серверний push подій на клієнт. Технічно реалізований через кілька транспортів:

  • WebSocket — постійне з'єднання, мінімальна затримка (1–5 мс)
  • Long Polling — клієнт тримає HTTP-запит відкритим, сервер відповідає коли є подія
  • Server-Sent Events — односторонній потік від сервера

Вибір транспорту відбувається автоматично. Для WebSocket потрібен окремий NodeJS-сервер, що поставляється у складі Bitrix VM або встановлюється окремо.

Установка та активація модуля

У адміністративній панелі: «Marketplace» → «Установлені рішення» → знайти модуль push and pull. Якщо не встановлений — «Marketplace» → «Всі рішення» → пошук «Push and Pull».

Після встановлення в /bitrix/modules/pull/ з'являється модуль. Налаштування: «Налаштування» → «Налаштування продукту» → «Push and Pull».

Ключові параметри модуля:

  • Сервер Push — адреса NodeJS Push-сервера (наприклад, http://localhost:9010)
  • Сервер Pull (Long Polling) — адреса для long polling (може бути той же)
  • Ключ безпеки — shared secret для підпису повідомлень

Конфігурація через b_option

Налаштування зберігаються у таблиці b_option, модуль pull:

SELECT * FROM b_option WHERE MODULE_ID = 'pull';

Ключові параметри:

  • PUSH_ENABLE — увімкнення push-сповіщень
  • PULL_SERVER_ENABLED — увімкнення pull-сервера
  • PUSH_SERVER_URL — URL NodeJS push-сервера
  • PULL_SERVER_URL — URL pull-сервера
  • PUSH_SECURITY_KEY — ключ безпеки

Long Polling без NodeJS

Якщо NodeJS не встановлений, модуль працює в режимі Long Polling через PHP. Для цього потрібно налаштувати окремий location у Nginx, який буде тримати з'єднання:

location ^~ /bitrix/pub/ {
    proxy_pass http://127.0.0.1:9000; # PHP-FPM
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_read_timeout 25;
    proxy_send_timeout 25;
    # Не буферизувати відповідь — відправляти одразу
    proxy_buffering off;
    proxy_cache off;
}

Шлях /bitrix/pub/ — стандартний endpoint для pull-запитів у Bitrix.

Перевірка роботи

У браузері відкрити DevTools → Network. Знайти запит до /bitrix/pub/ або до push-сервера. Він повинен висіти відкритим (pending) — це й є long polling або SSE з'єднання.

З PHP відправити тестову подію:

use Bitrix\Pull\Event;
use Bitrix\Pull\Push;

// Відправити подію конкретному користувачу
$push = new Push(1); // userId = 1
$push->addUser(1);
$push->setMessage([
    'module_id' => 'im',
    'command' => 'test',
    'params' => ['text' => 'Тестова повідомлення']
]);
$push->send();

// Через статичний метод
\CPullWatch::AddToStack('TEST_CHANNEL', [
    'module_id' => 'main',
    'command' => 'test',
    'params' => []
]);
\CPullStack::Send();

Типові проблеми

Канал не підключається, помилка 502. NodeJS push-сервер не запущений або впав. Перевірте:

systemctl status push-server
# або
ps aux | grep node

Long polling працює, але затримка велика. proxy_read_timeout у Nginx менше 20 секунд — Nginx розриває з'єднання до відповіді сервера. Клієнт одразу переподключається, створюючи додаткове навантаження.

З'єднань занадто багато, worker_connections переповнен. При 1000 онлайн-користувачів — 1000 висячих HTTP-з'єднань. Потрібно збільшити worker_connections у Nginx та системний ліміт відкритих файлів:

# /etc/security/limits.conf
nginx soft nofile 65535
nginx hard nofile 65535

# Nginx
events {
    worker_connections 8192;
    use epoll;
    multi_accept on;
}

Повідомлення теряються при рестарті PHP-FPM. Очередь подій b_pull_stack очищується агентом. При рестарті FPM агенти не виконуються — події накопичуються. Після рестарту виконати вручну або налаштувати cron для агентів Bitrix.