Push&Pull в браузере
Выберите инструмент для разработки с AI-агентом:
- используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
- используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации
Штатный клиент BX.PullClient держит соединение с серверами Push&Pull и передает в браузер события, которые серверная часть приложения отправляет методом pull.application.event.add. Интерфейс приложения обновляется сразу, без опроса сервера и перезагрузки страницы.
Клиент работает на странице приложения и сам запрашивает конфигурацию заново, когда срок канала истекает. Если приложение работает отдельно от интерфейса Битрикс24 и штатного клиента недостаточно, соединение придется поддерживать самостоятельно — это описывает статья Собственный Push&Pull клиент.
Клиент работает только в контексте приложения. Конфигурацию подключения он запрашивает методом pull.application.config.get, которому нужен OAuth-токен и scope pull, а вебхук такой контекст не создает.
Что нужно перед началом
- установленное приложение с интерфейсом
- scope
pull
Для клиента нужны две библиотеки с api.bitrix24.tech: api/v1/ дает объект BX24 для вызовов REST, api/v1/pull/ — конструктор BX.PullClient.
Как подключить клиент
- Подключите библиотеки
api/v1/иapi/v1/pull/в<head>страницы - Дождитесь готовности
BX24: остальные шаги выполняйте внутриBX24.init - Получите идентификатор пользователя методом user.current
- Создайте клиент через
new BX.PullClient()и передайте параметры - Подпишитесь на события методом
subscribe - Запустите соединение методом
start
<!DOCTYPE html>
<html>
<head>
<title>Bitrix24 application with Push & Pull</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="//api.bitrix24.tech/api/v1/"></script>
<script src="//api.bitrix24.tech/api/v1/pull/"></script>
</head>
<body>
<script>
BX24.init(function () {
BX24.callMethod('user.current', {}, function (result) {
if (result.error()) {
console.error(result.error().ex);
return;
}
window.appPullClient = new BX.PullClient({
restApplication: 'my_app_pull',
restClient: BX24,
userId: Number(result.data().ID)
});
window.appPullClient.subscribe({
moduleId: 'application',
callback: function (data) {
console.warn(data); // {command: '...', params: {...}, extra: {...}}
}
});
window.appPullClient.start();
});
});
</script>
</body>
</html>
Чтобы убедиться, что клиент получает события, отправьте событие из серверной части методом pull.application.event.add. Обработчик выведет в консоль браузера объект с полями command, params и extra.
Параметры BX.PullClient
Обязательные параметры отмечены *
|
Название |
Описание |
|
restApplication* |
Идентификатор приложения. Когда он задан, клиент запрашивает конфигурацию методом pull.application.config.get и подключается к каналам приложения. По этому же значению клиент хранит состояние соединения в браузере, поэтому задайте стабильную строку — одну на приложение |
|
restClient* |
Объект, через который клиент вызывает методы REST. В приложении передайте |
|
userId* |
Идентификатор текущего пользователя. На странице приложения клиенту неоткуда взять его самостоятельно, поэтому значение передают явно — в примере его возвращает user.current |
Подписка на события
Метод subscribe регистрирует обработчик и возвращает функцию, которая его отключает:
const unsubscribe = window.appPullClient.subscribe({
moduleId: 'application',
callback: function (data) {
console.warn(data);
}
});
unsubscribe();
Обязательные параметры отмечены *
|
Название |
Описание |
|
moduleId* |
Модуль, события которого нужны приложению. События из канала приложения приходят с |
|
callback* |
Функция-обработчик. Что она получит, зависит от того, задано ли поле |
|
command |
Команда, на которую подписан обработчик, — значение параметра |
|
type |
Источник событий. По умолчанию |
От поля command зависит, в каком виде обработчик получит данные:
- без
command— событие приходит целиком:callback(data, info), гдеdataсодержитcommand,paramsиextra - с
command— те же данные приходят разобранными:callback(params, extra, command, info)
Последним параметром обработчик в обеих формах получает info с полями type и moduleId.