[{"data":1,"prerenderedAt":1681},["ShallowReactive",2],{"navigation":3,"-docs-examples-pull-subscribe-frame":459,"-docs-examples-pull-subscribe-frame-description":1670},[4],{"title":5,"path":6,"stem":7,"children":8,"page":47},"Docs","\u002Fdocs","docs",[9,78,351],{"title":10,"path":11,"stem":12,"children":13,"restApiVersion":15,"category":15,"description":15,"badge":15},"Начало работы","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,17,48,63],{"title":10,"path":11,"stem":12,"restApiVersion":15,"category":15,"description":16,"badge":15},null,"Краткое руководство по работе с SDK для REST API Bitrix24",{"title":18,"path":19,"stem":20,"children":21,"page":47},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",[22,27,32,37,42],{"title":23,"path":24,"stem":25,"restApiVersion":15,"category":15,"description":26,"badge":15},"Vue","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fvue","docs\u002F1.getting-started\u002F2.installation\u002F1.vue","Руководство по установке Bitrix24 JS SDK в приложениях Vue.",{"title":28,"path":29,"stem":30,"restApiVersion":15,"category":15,"description":31,"badge":15},"Nuxt","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnuxt","docs\u002F1.getting-started\u002F2.installation\u002F2.nuxt","Руководство по установке Bitrix24 JS SDK в приложениях Nuxt.",{"title":33,"path":34,"stem":35,"restApiVersion":15,"category":15,"description":36,"badge":15},"React","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Freact","docs\u002F1.getting-started\u002F2.installation\u002F3.react","Руководство по установке Bitrix24 JS SDK в приложениях React.",{"title":38,"path":39,"stem":40,"restApiVersion":15,"category":15,"description":41,"badge":15},"Node.js","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnodejs","docs\u002F1.getting-started\u002F2.installation\u002F4.nodejs","Руководство по установке Bitrix24 JS SDK в приложениях Node.js.",{"title":43,"path":44,"stem":45,"restApiVersion":15,"category":15,"description":46,"badge":15},"UMD","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fumd","docs\u002F1.getting-started\u002F2.installation\u002F5.umd","Руководство по использованию UMD-версии Bitrix24 JS SDK в ваших приложениях.",false,{"title":49,"restApiVersion":15,"category":15,"description":15,"badge":15,"shadow":47,"path":50,"stem":51,"children":52,"page":47},"Migration","\u002Fdocs\u002Fgetting-started\u002Fmigration","docs\u002F1.getting-started\u002F3.migration",[53,58],{"title":54,"path":55,"stem":56,"restApiVersion":15,"category":15,"description":57,"badge":15},"v0 → v1","\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv1","docs\u002F1.getting-started\u002F3.migration\u002F1.v1","Подробное руководство по миграции приложения с Bitrix24 JS SDK v0 на Bitrix24 JS SDK v1.",{"title":59,"path":60,"stem":61,"restApiVersion":15,"category":15,"description":62,"badge":15},"v2 → v3","\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv3","docs\u002F1.getting-started\u002F3.migration\u002F2.v3","Как уйти с устаревшей REST-поверхности, которая удаляется в Bitrix24 JS SDK 3.0.0.",{"title":64,"restApiVersion":15,"category":15,"description":15,"badge":15,"path":65,"stem":66,"children":67,"page":47},"AI-инструменты","\u002Fdocs\u002Fgetting-started\u002Fai","docs\u002F1.getting-started\u002F7.ai",[68,73],{"title":69,"path":70,"stem":71,"restApiVersion":15,"category":15,"description":72,"badge":15},"Навыки","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fskills","docs\u002F1.getting-started\u002F7.ai\u002F1.skills","Узкоспециализированные skill-файлы для AI-агентов разработчика, работающих с @bitrix24\u002Fb24jssdk.",{"title":74,"path":75,"stem":76,"restApiVersion":15,"category":15,"description":77,"badge":15},"LLMs.txt","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fllms-txt","docs\u002F1.getting-started\u002F7.ai\u002F2.llms-txt","Как сделать, чтобы AI-инструменты вроде Cursor, Windsurf, GitHub Copilot, ChatGPT и Claude понимали методы, инструменты и лучшие практики Bitrix24 JS SDK.",{"title":79,"path":80,"stem":81,"children":82,"restApiVersion":15,"category":15,"description":15,"badge":15},"Работа с REST API","\u002Fdocs\u002Fworking-with-the-rest-api","docs\u002F2.working-with-the-rest-api\u002F0.index",[83,86,93,98,103,107,112,116,121,126,130,135,140,145,150,155,160,165,170,175,179,184,189,194,200,205,210,215,220,225,230,235,240,245,251,256,261,267,272,277,282,287,293,299,305,310,315,320,326,331,336,341,346],{"title":84,"path":80,"stem":81,"restApiVersion":15,"category":15,"description":85,"badge":15},"Введение","Обзор возможностей SDK для работы с REST API Bitrix24",{"title":87,"path":88,"stem":89,"restApiVersion":90,"category":91,"description":92,"badge":15},"Call","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F1.call-rest-api-ver2","rest-api-ver2","actions","Метод для вызовов REST API Bitrix24 версии 2.",{"title":87,"path":94,"stem":95,"restApiVersion":96,"category":91,"description":97,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F1.call-rest-api-ver3","rest-api-ver3","Метод для вызовов REST API Bitrix24 версии 3.",{"title":99,"path":100,"stem":101,"restApiVersion":90,"category":91,"description":102,"badge":15},"CallList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-list-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F2.call-list-rest-api-ver2","Метод для быстрого получения всех данных из list-методов REST API Bitrix24 версии 2.",{"title":99,"path":104,"stem":105,"restApiVersion":96,"category":91,"description":106,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-list-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F2.call-list-rest-api-ver3","Метод для быстрого получения всех данных из list-методов REST API Bitrix24 версии 3.",{"title":108,"path":109,"stem":110,"restApiVersion":90,"category":91,"description":111,"badge":15},"FetchList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffetch-list-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F2.fetch-list-rest-api-ver2","Возвращает AsyncGenerator, позволяющий обрабатывать данные из list-методов REST API Bitrix24 версии 2 по мере поступления, не загружая весь массив в память сразу. Особенно полезно при работе с очень большими объёмами данных.",{"title":108,"path":113,"stem":114,"restApiVersion":96,"category":91,"description":115,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffetch-list-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F2.fetch-list-rest-api-ver3","Возвращает AsyncGenerator, позволяющий обрабатывать данные из list-методов REST API Bitrix24 версии 3 по мере поступления, не загружая весь массив в память сразу. Особенно полезно при работе с очень большими объёмами данных.",{"title":117,"path":118,"stem":119,"restApiVersion":15,"category":117,"description":120,"badge":15},"B24Hook","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhook","docs\u002F2.working-with-the-rest-api\u002F20.hook","Серверная точка входа для работы с REST API Bitrix24 через входящий вебхук (постоянный токен).",{"title":122,"path":123,"stem":124,"restApiVersion":90,"category":91,"description":125,"badge":15},"Batch","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F3.batch-rest-api-ver2","Метод для выполнения пакетных запросов к REST API Bitrix24 версии 2. Позволяет выполнить до 50 команд в одном API-вызове.",{"title":122,"path":127,"stem":128,"restApiVersion":96,"category":91,"description":129,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F3.batch-rest-api-ver3","Метод для выполнения пакетных запросов к REST API Bitrix24 версии 3. Позволяет выполнить до 50 команд в одном API-вызове.",{"title":84,"path":131,"stem":132,"restApiVersion":15,"category":133,"description":134,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe","docs\u002F2.working-with-the-rest-api\u002F30.frame","B24Frame","Предназначен для управления приложениями Bitrix24, работающими внутри placement-iframe. Наследуется от AbstractB24 и предоставляет менеджеры для аутентификации, обмена сообщениями с родительским окном, слайдеров, диалогов, placement и опций.",{"title":136,"path":137,"stem":138,"restApiVersion":15,"category":133,"description":139,"badge":15},"Инициализация","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-initialize-b24-frame","docs\u002F2.working-with-the-rest-api\u002F30.frame-initialize-b24-frame","Функция предназначена для инициализации B24Frame",{"title":141,"path":142,"stem":143,"restApiVersion":15,"category":133,"description":144,"badge":15},"Авторизация","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-auth","docs\u002F2.working-with-the-rest-api\u002F31.frame-auth","Предназначен для управления аутентификацией в приложениях Bitrix24. Обрабатывает данные аутентификации, полученные от родительского окна, и предоставляет методы для их обновления и получения.",{"title":146,"path":147,"stem":148,"restApiVersion":15,"category":133,"description":149,"badge":15},"Диалог","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-dialog","docs\u002F2.working-with-the-rest-api\u002F31.frame-dialog","Оборачивает системные диалоги BX24 (выбор пользователя, выбор прав доступа, выбор CRM-сущности), чтобы их можно было открывать изнутри iframe приложения Bitrix24.",{"title":151,"path":152,"stem":153,"restApiVersion":15,"category":133,"description":154,"badge":15},"Опции","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-options","docs\u002F2.working-with-the-rest-api\u002F31.frame-options","Используется для управления настройками приложения и пользователя в приложении Bitrix24. Позволяет инициализировать данные, получать и устанавливать опции через сообщения родительскому окну.",{"title":156,"path":157,"stem":158,"restApiVersion":15,"category":133,"description":159,"badge":15},"Родительское окно","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-parent","docs\u002F2.working-with-the-rest-api\u002F31.frame-parent","Предоставляет методы для управления родительским окном приложения в Bitrix24, включая изменение размера окна, управление прокруткой, инициацию звонков и открытие мессенджера.",{"title":161,"path":162,"stem":163,"restApiVersion":15,"category":133,"description":164,"badge":15},"Placement","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-placement","docs\u002F2.working-with-the-rest-api\u002F31.frame-placement","Используется для управления placement виджетов в приложении Bitrix24.",{"title":166,"path":167,"stem":168,"restApiVersion":15,"category":133,"description":169,"badge":15},"Слайдер","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-slider","docs\u002F2.working-with-the-rest-api\u002F31.frame-slider","Предоставляет методы для работы со слайдерами в приложении Bitrix24. Позволяет открывать и закрывать слайдеры, а также управлять их содержимым.",{"title":171,"path":172,"stem":173,"restApiVersion":90,"category":91,"description":174,"badge":15},"BatchByChunk","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-by-chunk-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F4.batch-by-chunk-rest-api-ver2","Метод для выполнения пакетных запросов с автоматическим разбиением на чанки для любого числа команд. Автоматически делит большие наборы команд на батчи по 50 и выполняет их последовательно. Используйте только массивы кортежей или массивы объектов.",{"title":171,"path":176,"stem":177,"restApiVersion":96,"category":91,"description":178,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-by-chunk-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F4.batch-by-chunk-rest-api-ver3","Метод для выполнения пакетных запросов к REST API Bitrix24 версии 3 с автоматическим разбиением на чанки для любого числа команд. Автоматически делит большие наборы команд на батчи по 50 и выполняет их последовательно. Используйте только массивы кортежей или массивы объектов.",{"title":180,"path":181,"stem":182,"restApiVersion":15,"category":180,"description":183,"badge":15},"B24OAuth","\u002Fdocs\u002Fworking-with-the-rest-api\u002Foauth","docs\u002F2.working-with-the-rest-api\u002F40.oauth","Серверная точка входа для работы с REST API Bitrix24 по access token OAuth 2.0 (с автоматическим обновлением).",{"title":185,"path":186,"stem":187,"restApiVersion":15,"category":15,"description":188,"badge":15},"Выбор метода","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fchoosing-the-right-method","docs\u002F2.working-with-the-rest-api\u002F5.choosing-the-right-method","Руководство по выбору между Call, CallList, FetchList, Batch и BatchByChunk в REST API v2 и v3.",{"title":190,"path":191,"stem":192,"restApiVersion":15,"category":15,"description":193,"badge":15},"Фильтрация","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffiltering","docs\u002F2.working-with-the-rest-api\u002F5.filtering","Справочник по построению параметров фильтра в Bitrix24 REST API v2 (префиксные операторы) и v3 (массив троек), включая формат дат и правило отбрасывания order.",{"title":195,"path":196,"stem":197,"restApiVersion":15,"category":198,"description":199,"badge":15},"B24HelperManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper","docs\u002F2.working-with-the-rest-api\u002F50.helper","Helper","Агрегирующий менеджер, который загружает данные профиля, приложения, оплаты, лицензии, валют и опций одним батч-запросом REST, а также подключает Pull-клиент.",{"title":201,"path":202,"stem":203,"restApiVersion":15,"category":198,"description":204,"badge":15},"useB24Helper","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-use-b24-helper","docs\u002F2.working-with-the-rest-api\u002F51.helper-use-b24-helper","Основанный на замыкании composable, который владеет единственным экземпляром B24HelperManager и предоставляет хелперы жизненного цикла (init \u002F destroy \u002F связка с Pull-клиентом).",{"title":206,"path":207,"stem":208,"restApiVersion":15,"category":198,"description":209,"badge":15},"ProfileManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-profile-manager","docs\u002F2.working-with-the-rest-api\u002F52.helper-profile-manager","Разобранный ответ REST-метода `profile`: id, имя, фамилия, пол, фото, часовой пояс, флаг администратора.",{"title":211,"path":212,"stem":213,"restApiVersion":15,"category":198,"description":214,"badge":15},"AppManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-app-manager","docs\u002F2.working-with-the-rest-api\u002F53.helper-app-manager","Разобранный ответ REST-метода `app.info`: id приложения, код, версия, статус, флаг установки.",{"title":216,"path":217,"stem":218,"restApiVersion":15,"category":198,"description":219,"badge":15},"PaymentManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-payment-manager","docs\u002F2.working-with-the-rest-api\u002F54.helper-payment-manager","Статус оплаты приложения Bitrix24 — извлекается из `app.info`.",{"title":221,"path":222,"stem":223,"restApiVersion":15,"category":198,"description":224,"badge":15},"LicenseManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-license-manager","docs\u002F2.working-with-the-rest-api\u002F55.helper-license-manager","Информация о лицензии Bitrix24 из `app.info` — и автоматическая перенастройка менеджера ограничений под соответствующий тарифный план.",{"title":226,"path":227,"stem":228,"restApiVersion":15,"category":198,"description":229,"badge":15},"CurrencyManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-currency-manager","docs\u002F2.working-with-the-rest-api\u002F56.helper-currency-manager","Каталог валют, кэшируемый в памяти — базовая валюта, форматтеры для каждой валюты и форматтер числа в строку.",{"title":231,"path":232,"stem":233,"restApiVersion":15,"category":198,"description":234,"badge":15},"OptionsManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-options-manager","docs\u002F2.working-with-the-rest-api\u002F57.helper-options-manager","Типизированный доступ к `app.option.get` \u002F `user.option.get`, плюс save(), который батчит `*.option.set` с необязательным Pull-уведомлением.",{"title":236,"path":237,"stem":238,"restApiVersion":15,"category":15,"description":239,"badge":15},"Ошибки","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ferrors","docs\u002F2.working-with-the-rest-api\u002F6.errors","Справочник кодов SdkError и AjaxError, выбрасываемых SDK, плюс коды ошибок REST Bitrix24, которые через них проявляются.",{"title":241,"path":242,"stem":243,"restApiVersion":15,"category":241,"description":244,"badge":15},"Pull","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fpull","docs\u002F2.working-with-the-rest-api\u002F60.pull","Поток сообщений в реальном времени от Bitrix24 к вашему приложению — WebSocket как основной канал, long-polling как запасной. Только для фрейма.",{"title":246,"path":247,"stem":248,"restApiVersion":15,"category":249,"description":250,"badge":15},"Logger","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogger","docs\u002F2.working-with-the-rest-api\u002F66.logger","logger","Логгер, вдохновлённый PHP Monolog, предоставляет структурированную систему логирования с поддержкой каналов, обработчиков, процессоров и форматтеров. Реализация следует принципам PSR-3 и паттерну цепочки ответственности.",{"title":252,"path":253,"stem":254,"restApiVersion":15,"category":249,"description":255,"badge":15},"Telegram","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogger-telegram","docs\u002F2.working-with-the-rest-api\u002F66.logger-telegram","Отправка логов в Telegram",{"title":257,"path":258,"stem":259,"restApiVersion":15,"category":15,"description":260,"badge":15},"Обнаружение v3-методов","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fdiscovering-v3-methods","docs\u002F2.working-with-the-rest-api\u002F7.discovering-v3-methods","Используйте rest.documentation.openapi, чтобы получить собственный машиночитаемый список всех доступных методов REST API v3 портала — источник истины, на который SDK опирается вместо захардкоженного allowlist. Особенно полезно для AI-агентов и кодогенерации.",{"title":262,"path":263,"stem":264,"restApiVersion":15,"category":265,"description":266,"badge":15},"AjaxResult","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-ajax-result","docs\u002F2.working-with-the-rest-api\u002F70.core-ajax-result","Core","Специализированный Result, возвращаемый каждым REST-хелпером. Предоставляет `isMore() \u002F getNext() \u002F getTotal() \u002F getStatus()` для постраничных ответов и неизменяемые данные.",{"title":268,"path":269,"stem":270,"restApiVersion":15,"category":265,"description":271,"badge":15},"Http","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-http","docs\u002F2.working-with-the-rest-api\u002F70.core-http","Низкоуровневый интерфейс транспорта, возвращаемый `b24.getHttpClient(version)`. Прямой доступ к axios-клиентам, параметрам ограничений, статистике и сбросу.",{"title":273,"path":274,"stem":275,"restApiVersion":15,"category":265,"description":276,"badge":15},"B24LangList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-lang-list","docs\u002F2.working-with-the-rest-api\u002F70.core-lang-list","Enum языков интерфейса облачного Bitrix24 плюс карта локалей BCP-47.",{"title":278,"path":279,"stem":280,"restApiVersion":15,"category":265,"description":281,"badge":15},"RequestIdGenerator","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-request-id-generator","docs\u002F2.working-with-the-rest-api\u002F70.core-request-id-generator","Реализация `IRequestIdGenerator` по умолчанию. Генерирует request id в формате UUID v7 и предоставляет имена HTTP-заголовка \u002F query-параметра, используемые SDK.",{"title":283,"path":284,"stem":285,"restApiVersion":15,"category":265,"description":286,"badge":15},"Result","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-result","docs\u002F2.working-with-the-rest-api\u002F70.core-result","Обобщённый результат операции с флагом успеха, данными и картой ошибок. Аналог \\\\Bitrix\\\\Main\\\\Result из Bitrix Framework.",{"title":288,"path":289,"stem":290,"restApiVersion":15,"category":291,"description":292,"badge":15},"Лимитеры","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flimiters","docs\u002F2.working-with-the-rest-api\u002F77.limiters","limiters","Система ограничений предоставляет комплексный механизм управления частотой запросов, временем выполнения операций и адаптивными задержками.",{"title":294,"path":295,"stem":296,"restApiVersion":15,"category":297,"description":298,"badge":15},"Логирование и редактирование","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogging","docs\u002F2.working-with-the-rest-api\u002F78.logging","logging","Что SDK редактирует автоматически до того, как информация о запросе попадёт в логгер или AjaxError, что он не редактирует, и как подключить кастомный логгер через setLogger(...) без повторного появления утечек учётных данных.",{"title":300,"path":301,"stem":302,"restApiVersion":15,"category":303,"description":304,"badge":15},"Browser","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-browser","docs\u002F2.working-with-the-rest-api\u002F80.tools-browser","tools","Дешёвый детектор user-agent \u002F платформы \u002F возможностей. Полезен для runtime-ветвлений во фронтенд-коде.",{"title":306,"path":307,"stem":308,"restApiVersion":15,"category":303,"description":309,"badge":15},"Text","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-text","docs\u002F2.working-with-the-rest-api\u002F80.tools-text","Утилиты для текста и дат — UUID v4 \u002F v7, кодирование \u002F декодирование HTML-сущностей, преобразования типов, хелперы регистра, `toDateTime` \u002F `toB24Format` на Luxon, форматирование чисел и конструктор query-строки.",{"title":311,"path":312,"stem":313,"restApiVersion":15,"category":303,"description":314,"badge":15},"Type","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-type","docs\u002F2.working-with-the-rest-api\u002F80.tools-type","Runtime type guards — строки, числа, обычные объекты, массивы, DOM-узлы, Blob, FormData, формы JSON-RPC сообщений.",{"title":316,"path":317,"stem":318,"restApiVersion":15,"category":303,"description":319,"badge":15},"useFormatter","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-use-formatters","docs\u002F2.working-with-the-rest-api\u002F80.tools-use-formatters","Composable, возвращающий общие экземпляры `FormatterNumbers` и `FormatterIban`, преднастроенные спецификациями стран.",{"title":321,"path":322,"stem":323,"restApiVersion":15,"category":324,"description":325,"badge":15},"IResult","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftypes-iresult","docs\u002F2.working-with-the-rest-api\u002F90.types-iresult","Types","Обобщённый интерфейс результата операции. Реализуется `Result\u003CT>` и (транзитивно) `AjaxResult\u003CT>`.",{"title":327,"path":328,"stem":329,"restApiVersion":15,"category":324,"description":330,"badge":15},"TypeB24","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftypes-type-b24","docs\u002F2.working-with-the-rest-api\u002F90.types-type-b24","Публичный контракт, реализуемый каждым классом-точкой входа (B24Frame, B24Hook, B24OAuth). Единый источник истины для поверхности SDK.",{"title":332,"path":333,"stem":334,"restApiVersion":15,"category":265,"description":335,"badge":15},"Телеметрия","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftelemetry","docs\u002F2.working-with-the-rest-api\u002F95.telemetry","Query-параметры request id, версии SDK и типа SDK, добавляемые к каждому REST-вызову Bitrix24.",{"title":337,"path":338,"stem":339,"restApiVersion":15,"category":265,"description":340,"badge":15},"Коды ошибок","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ferror-codes","docs\u002F2.working-with-the-rest-api\u002F96.error-codes","Каталог кодов ошибок, которые распознаёт SDK — разделённых на «hard» (выбрасываются) и «soft» (возвращаются как AjaxError внутри AjaxResult).",{"title":342,"path":343,"stem":344,"restApiVersion":15,"category":303,"description":345,"badge":15},"HealthCheck","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-health-check","docs\u002F2.working-with-the-rest-api\u002Ftools-health-check","Метод для проверки доступности REST API Bitrix24. Выполняет простой запрос к REST API для проверки работоспособности сервиса.",{"title":347,"path":348,"stem":349,"restApiVersion":15,"category":303,"description":350,"badge":15},"Ping","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-ping","docs\u002F2.working-with-the-rest-api\u002Ftools-ping","Метод для измерения скорости ответа REST API Bitrix24. Выполняет тестовый запрос и возвращает время ответа в миллисекундах.",{"title":352,"path":353,"stem":354,"children":355,"restApiVersion":15,"category":15,"description":15,"badge":15},"Примеры","\u002Fdocs\u002Fexamples","docs\u002F99.examples\u002F0.index",[356,358,364,369,374,379,384,389,394,399,404,409,414,419,424,429,434,439,444,449,454],{"title":84,"path":353,"stem":354,"restApiVersion":15,"category":15,"description":357,"badge":15},"Рецепты, сочетающие SDK с реалистичными сценариями — аналитика CRM, массовые рассылки, AI-ассистенты, установка по OAuth и не только. Каждый рецепт — отдельный файл, удобный для копирования.",{"title":359,"path":360,"stem":361,"restApiVersion":15,"category":362,"description":363,"badge":15},"Аналитика CRM","\u002Fdocs\u002Fexamples\u002Fcrm-analytics","docs\u002F99.examples\u002F1.crm-analytics","examples","Стримит все сделки через actions.v2.fetchList.make, группирует по стадиям, печатает отчёт по воронке (количество, конверсия %, средний чек, win rate).",{"title":365,"path":366,"stem":367,"restApiVersion":15,"category":362,"description":368,"badge":15},"Сделки → CSV","\u002Fdocs\u002Fexamples\u002Fdashboard-deals-csv","docs\u002F99.examples\u002F1.dashboard-deals-csv","Стримит каждую сделку CRM, подходящую под фильтр по дате, в CSV-файл через вебхук и FetchListV2.",{"title":370,"path":371,"stem":372,"restApiVersion":15,"category":15,"description":373,"badge":15},"Список сущностей","\u002Fdocs\u002Fexamples\u002Fentity-list","docs\u002F99.examples\u002F10.entity-list","Рендерит постраничный список сущностей Bitrix24 с компонентами B24UI и SDK-действием callList.",{"title":375,"path":376,"stem":377,"restApiVersion":15,"category":362,"description":378,"badge":15},"Обработка ошибок","\u002Fdocs\u002Fexamples\u002Ferror-handling","docs\u002F99.examples\u002F10.error-handling","Демонстрирует четыре слоя ошибок (SdkError \u002F AjaxError \u002F сетевые \u002F soft) и настройки hardErrorCodes \u002F softErrorCodes \u002F retryOnNetworkError у менеджера ограничений.",{"title":380,"path":381,"stem":382,"restApiVersion":15,"category":362,"description":383,"badge":15},"Регистрация событий","\u002Fdocs\u002Fexamples\u002Fevent-registration","docs\u002F99.examples\u002F11.event-registration","CLI-инструмент — список, привязка и отвязка исходящих событий вебхуков Bitrix24 через event.get \u002F event.bind \u002F event.unbind. В паре с рецептом обработчика вебхуков.",{"title":385,"path":386,"stem":387,"restApiVersion":15,"category":362,"description":388,"badge":15},"Установка OAuth","\u002Fdocs\u002Fexamples\u002Foauth-install","docs\u002F99.examples\u002F12.oauth-install","Express-сервер, который обрабатывает события ONAPPINSTALL \u002F ONAPPUPDATE \u002F ONAPPUNINSTALL для маркетплейс-приложения Bitrix24, сохраняет токены по порталам и создаёт клиент B24OAuth по требованию с callback обновления, подключённым к хранилищу.",{"title":390,"path":391,"stem":392,"restApiVersion":15,"category":362,"description":393,"badge":15},"Скелет frame-приложения","\u002Fdocs\u002Fexamples\u002Fframe-app-skeleton","docs\u002F99.examples\u002F2.frame-app-skeleton","Минимально жизнеспособное iframe-приложение Bitrix24: рукопожатие init, установка заголовка, сохранение состояния приложения, открытие слайдера, чистое закрытие.",{"title":395,"path":396,"stem":397,"restApiVersion":15,"category":362,"description":398,"badge":15},"Массовые рассылки","\u002Fdocs\u002Fexamples\u002Fmass-messaging","docs\u002F99.examples\u002F2.mass-messaging","Фильтрует контакты в CRM, персонализирует шаблон, отправляет IM-уведомления ответственным менеджерам.",{"title":400,"path":401,"stem":402,"restApiVersion":15,"category":15,"description":403,"badge":15},"Мастер установки","\u002Fdocs\u002Fexamples\u002Fapp-installation-wizard","docs\u002F99.examples\u002F20.app-installation-wizard","Многошаговый процесс установки, который создаёт пользовательские поля, регистрирует placement-ы, финализирует установку и празднует конфетти.",{"title":405,"path":406,"stem":407,"restApiVersion":15,"category":362,"description":408,"badge":15},"Автоматизация задач","\u002Fdocs\u002Fexamples\u002Ftask-automation","docs\u002F99.examples\u002F3.task-automation","Опрашивает стадии сделок каждые 60 с. При отслеживаемом переходе создаёт задачу с описанием, дедлайном и приоритетом.",{"title":410,"path":411,"stem":412,"restApiVersion":15,"category":362,"description":413,"badge":15},"Вебхук CLI","\u002Fdocs\u002Fexamples\u002Fwebhook-cli-node","docs\u002F99.examples\u002F3.webhook-cli-node","Node-скрипт на 30 строк, который аутентифицируется на портале Bitrix24 через входящий вебхук и печатает вызывающего пользователя — полезно как первое, что вы запускаете после создания вебхука.",{"title":415,"path":416,"stem":417,"restApiVersion":15,"category":15,"description":418,"badge":15},"Экспорт Node + Hook","\u002Fdocs\u002Fexamples\u002Fnode-hook-company-export","docs\u002F99.examples\u002F30.node-hook-company-export","Экспорт компаний Bitrix24 в CSV-файл из чистого Node.js-скрипта через B24Hook.",{"title":420,"path":421,"stem":422,"restApiVersion":15,"category":362,"description":423,"badge":15},"Массовое обновление","\u002Fdocs\u002Fexamples\u002Fbulk-update-deals","docs\u002F99.examples\u002F4.bulk-update-deals","Переносит тысячи сделок CRM на новую стадию через BatchByChunkV2 — автоматическое разбиение на чанки, обработка частичных ошибок и одна строка прогресса.",{"title":425,"path":426,"stem":427,"restApiVersion":15,"category":362,"description":428,"badge":15},"Синхронизация ERP","\u002Fdocs\u002Fexamples\u002Ferp-sync","docs\u002F99.examples\u002F4.erp-sync","Двусторонняя синхронизация контактов между Bitrix24 и внешней ERP. Сопоставление по ИНН (основное) или email (запасное). Cron каждый час.",{"title":430,"path":431,"stem":432,"restApiVersion":15,"category":362,"description":433,"badge":15},"Файлы Диска","\u002Fdocs\u002Fexamples\u002Fdisk-files","docs\u002F99.examples\u002F5.disk-files","Список хранилищ и содержимого папок, создание подпапок, просмотр файлов. Загрузка файлов (multipart) намеренно вне области.",{"title":435,"path":436,"stem":437,"restApiVersion":15,"category":362,"description":438,"badge":15},"Подписка на Pull","\u002Fdocs\u002Fexamples\u002Fpull-subscribe-frame","docs\u002F99.examples\u002F5.pull-subscribe-frame","Открыть живой канал из frame-приложения Bitrix24 и реагировать на push-события через useB24Helper + Pull-клиент.",{"title":440,"path":441,"stem":442,"restApiVersion":15,"category":362,"description":443,"badge":15},"Telegram-бот","\u002Fdocs\u002Fexamples\u002Ftelegram-bot","docs\u002F99.examples\u002F6.telegram-bot","Опрашивает новые сделки CRM каждые две минуты; уведомляет Telegram-чат HTML-карточкой.",{"title":445,"path":446,"stem":447,"restApiVersion":15,"category":362,"description":448,"badge":15},"Обработчик вебхуков","\u002Fdocs\u002Fexamples\u002Fwebhook-handler","docs\u002F99.examples\u002F7.webhook-handler","Express-сервер, который принимает исходящие события Bitrix24, подгружает детали через REST, маршрутизирует по имени события. Всегда возвращает 200.",{"title":450,"path":451,"stem":452,"restApiVersion":15,"category":362,"description":453,"badge":15},"AI-ассистент","\u002Fdocs\u002Fexamples\u002Fai-assistant","docs\u002F99.examples\u002F8.ai-assistant","Загружает сделку и её дела, спрашивает у GPT-4o лучшее следующее действие, создаёт задачу, привязанную к сделке, с приоритетом и дедлайном.",{"title":455,"path":456,"stem":457,"restApiVersion":15,"category":362,"description":458,"badge":15},"Веб-поиск + LLM","\u002Fdocs\u002Fexamples\u002Fweb-search-llm","docs\u002F99.examples\u002F9.web-search-llm","Двухшаговый RAG: запрос к любому провайдеру веб-поиска, прогон результата через ваш LLM с цитатами [N], публикация ответа комментарием в таймлайн CRM на сделке.",{"id":460,"title":461,"audited":462,"badge":15,"body":463,"category":362,"description":438,"extension":1659,"links":1660,"meta":1666,"navigation":1667,"path":436,"restApiVersion":15,"seo":1668,"stem":437,"__hash__":1669},"docs\u002Fdocs\u002F99.examples\u002F5.pull-subscribe-frame.md","Рецепт: подписка на события Pull","2026-05-29",{"type":464,"value":465,"toc":1650},"minimark",[466,473,478,481,485,501,526,530,536,1477,1481,1488,1492,1550,1554,1624,1628,1646],[467,468,469],"warning",{},[470,471,472],"p",{},"Мы всё ещё дорабатываем эту страницу. Некоторых данных здесь может не хватать — скоро дополним.",[474,475,477],"h2",{"id":476},"goal","Цель",[470,479,480],{},"Frame-приложение, которое получает обновления в реальном времени от Bitrix24 — например, счётчик-бейдж растёт, когда приходит новое сообщение в чате или меняется ответственный по делу CRM. Pull-клиент мультиплексирует транспорты WebSocket и long-polling; вы видите только один callback.",[474,482,484],{"id":483},"stack-prerequisites","Стек и предпосылки",[486,487,488,492,498],"ul",{},[489,490,491],"li",{},"Vue 3 + Vite (или Nuxt), работающие внутри placement Bitrix24",[489,493,494],{},[495,496,497],"code",{},"@bitrix24\u002Fb24jssdk@^1.0.0",[489,499,500],{},"На портале должен быть включён модуль Pull (он есть на каждом облаке и большинстве коробочных инсталляций)",[502,503,508],"pre",{"className":504,"code":505,"language":506,"meta":507,"style":507},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add @bitrix24\u002Fb24jssdk\n","bash","",[495,509,510],{"__ignoreMap":507},[511,512,515,519,523],"span",{"class":513,"line":514},"line",1,[511,516,518],{"class":517},"sBMFI","pnpm",[511,520,522],{"class":521},"sfazB"," add",[511,524,525],{"class":521}," @bitrix24\u002Fb24jssdk\n",[474,527,529],{"id":528},"full-example","Полный пример",[470,531,532,535],{},[495,533,534],{},"src\u002Fcomponents\u002FPullPanel.vue",":",[502,537,541],{"className":538,"code":539,"language":540,"meta":507,"style":507},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref } from 'vue'\nimport {\n  initializeB24Frame,\n  LoadDataType,\n  LoggerFactory,\n  useB24Helper,\n  type B24Frame,\n  type TypePullMessage\n} from '@bitrix24\u002Fb24jssdk'\n\nconst logger = LoggerFactory.createForBrowser('PullPanel', import.meta.env.DEV)\nconst events = ref\u003CArray\u003C{ at: string, command: string }>>([])\nlet $b24: B24Frame | null = null\n\nconst {\n  initB24Helper,\n  destroyB24Helper,\n  usePullClient,\n  useSubscribePullClient,\n  startPullClient\n} = useB24Helper()\n\nfunction handleEvent(message: TypePullMessage) {\n  logger.info('pull', message)\n  events.value.unshift({\n    at: new Date().toLocaleTimeString(),\n    command: message.command\n  })\n  \u002F\u002F Держим видимый лог коротким.\n  if (events.value.length > 20) events.value.length = 20\n}\n\nonMounted(async () => {\n  $b24 = await initializeB24Frame()\n\n  \u002F\u002F App + Profile нужны, чтобы хелпер мог зарегистрировать Pull-канал.\n  await initB24Helper(\n    $b24,\n    [LoadDataType.App, LoadDataType.Profile],\n    'pull-panel-init'\n  )\n\n  usePullClient()\n  \u002F\u002F Слушаем события модуля `crm`. Используйте `'application'` (по умолчанию) для\n  \u002F\u002F собственных событий вашего приложения.\n  useSubscribePullClient(handleEvent, 'crm')\n  startPullClient()\n})\n\nonBeforeUnmount(() => {\n  destroyB24Helper()\n  $b24 = null\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Csection>\n    \u003Ch2>Live events\u003C\u002Fh2>\n    \u003Cul v-if=\"events.length\">\n      \u003Cli v-for=\"(event, index) in events\" :key=\"index\">\n        \u003Ccode>{{ event.at }}\u003C\u002Fcode> — {{ event.command }}\n      \u003C\u002Fli>\n    \u003C\u002Ful>\n    \u003Cp v-else>Waiting for events…\u003C\u002Fp>\n  \u003C\u002Fsection>\n\u003C\u002Ftemplate>\n","vue",[495,542,543,574,613,621,630,638,646,654,665,673,688,695,747,790,815,820,827,835,843,851,859,865,878,883,908,936,957,983,998,1006,1013,1059,1065,1070,1089,1105,1110,1116,1128,1136,1165,1176,1182,1187,1194,1200,1206,1227,1235,1242,1247,1261,1268,1277,1284,1294,1299,1309,1320,1340,1361,1395,1417,1427,1437,1458,1468],{"__ignoreMap":507},[511,544,545,549,553,557,560,563,566,569,571],{"class":513,"line":514},[511,546,548],{"class":547},"sMK4o","\u003C",[511,550,552],{"class":551},"swJcz","script",[511,554,556],{"class":555},"spNyl"," setup",[511,558,559],{"class":555}," lang",[511,561,562],{"class":547},"=",[511,564,565],{"class":547},"\"",[511,567,568],{"class":521},"ts",[511,570,565],{"class":547},[511,572,573],{"class":547},">\n",[511,575,577,581,584,588,591,594,596,599,602,605,608,610],{"class":513,"line":576},2,[511,578,580],{"class":579},"s7zQu","import",[511,582,583],{"class":547}," {",[511,585,587],{"class":586},"sTEyZ"," onBeforeUnmount",[511,589,590],{"class":547},",",[511,592,593],{"class":586}," onMounted",[511,595,590],{"class":547},[511,597,598],{"class":586}," ref",[511,600,601],{"class":547}," }",[511,603,604],{"class":579}," from",[511,606,607],{"class":547}," '",[511,609,540],{"class":521},[511,611,612],{"class":547},"'\n",[511,614,616,618],{"class":513,"line":615},3,[511,617,580],{"class":579},[511,619,620],{"class":547}," {\n",[511,622,624,627],{"class":513,"line":623},4,[511,625,626],{"class":586},"  initializeB24Frame",[511,628,629],{"class":547},",\n",[511,631,633,636],{"class":513,"line":632},5,[511,634,635],{"class":586},"  LoadDataType",[511,637,629],{"class":547},[511,639,641,644],{"class":513,"line":640},6,[511,642,643],{"class":586},"  LoggerFactory",[511,645,629],{"class":547},[511,647,649,652],{"class":513,"line":648},7,[511,650,651],{"class":586},"  useB24Helper",[511,653,629],{"class":547},[511,655,657,660,663],{"class":513,"line":656},8,[511,658,659],{"class":579},"  type",[511,661,662],{"class":586}," B24Frame",[511,664,629],{"class":547},[511,666,668,670],{"class":513,"line":667},9,[511,669,659],{"class":579},[511,671,672],{"class":586}," TypePullMessage\n",[511,674,676,679,681,683,686],{"class":513,"line":675},10,[511,677,678],{"class":547},"}",[511,680,604],{"class":579},[511,682,607],{"class":547},[511,684,685],{"class":521},"@bitrix24\u002Fb24jssdk",[511,687,612],{"class":547},[511,689,691],{"class":513,"line":690},11,[511,692,694],{"emptyLinePlaceholder":693},true,"\n",[511,696,698,701,704,706,709,712,716,719,722,725,727,729,732,734,737,739,742,744],{"class":513,"line":697},12,[511,699,700],{"class":555},"const",[511,702,703],{"class":586}," logger ",[511,705,562],{"class":547},[511,707,708],{"class":586}," LoggerFactory",[511,710,711],{"class":547},".",[511,713,715],{"class":714},"s2Zo4","createForBrowser",[511,717,718],{"class":586},"(",[511,720,721],{"class":547},"'",[511,723,724],{"class":521},"PullPanel",[511,726,721],{"class":547},[511,728,590],{"class":547},[511,730,731],{"class":579}," import",[511,733,711],{"class":547},[511,735,736],{"class":586},"meta",[511,738,711],{"class":547},[511,740,741],{"class":586},"env",[511,743,711],{"class":547},[511,745,746],{"class":586},"DEV)\n",[511,748,750,752,755,757,759,761,764,767,770,772,775,777,780,782,784,787],{"class":513,"line":749},13,[511,751,700],{"class":555},[511,753,754],{"class":586}," events ",[511,756,562],{"class":547},[511,758,598],{"class":714},[511,760,548],{"class":547},[511,762,763],{"class":517},"Array",[511,765,766],{"class":547},"\u003C{",[511,768,769],{"class":551}," at",[511,771,535],{"class":547},[511,773,774],{"class":517}," string",[511,776,590],{"class":547},[511,778,779],{"class":551}," command",[511,781,535],{"class":547},[511,783,774],{"class":517},[511,785,786],{"class":547}," }>>",[511,788,789],{"class":586},"([])\n",[511,791,793,796,799,801,803,806,809,812],{"class":513,"line":792},14,[511,794,795],{"class":555},"let",[511,797,798],{"class":586}," $b24",[511,800,535],{"class":547},[511,802,662],{"class":517},[511,804,805],{"class":547}," |",[511,807,808],{"class":517}," null",[511,810,811],{"class":547}," =",[511,813,814],{"class":547}," null\n",[511,816,818],{"class":513,"line":817},15,[511,819,694],{"emptyLinePlaceholder":693},[511,821,823,825],{"class":513,"line":822},16,[511,824,700],{"class":555},[511,826,620],{"class":547},[511,828,830,833],{"class":513,"line":829},17,[511,831,832],{"class":586},"  initB24Helper",[511,834,629],{"class":547},[511,836,838,841],{"class":513,"line":837},18,[511,839,840],{"class":586},"  destroyB24Helper",[511,842,629],{"class":547},[511,844,846,849],{"class":513,"line":845},19,[511,847,848],{"class":586},"  usePullClient",[511,850,629],{"class":547},[511,852,854,857],{"class":513,"line":853},20,[511,855,856],{"class":586},"  useSubscribePullClient",[511,858,629],{"class":547},[511,860,862],{"class":513,"line":861},21,[511,863,864],{"class":586},"  startPullClient\n",[511,866,868,870,872,875],{"class":513,"line":867},22,[511,869,678],{"class":547},[511,871,811],{"class":547},[511,873,874],{"class":714}," useB24Helper",[511,876,877],{"class":586},"()\n",[511,879,881],{"class":513,"line":880},23,[511,882,694],{"emptyLinePlaceholder":693},[511,884,886,889,892,894,898,900,903,906],{"class":513,"line":885},24,[511,887,888],{"class":555},"function",[511,890,891],{"class":714}," handleEvent",[511,893,718],{"class":547},[511,895,897],{"class":896},"sHdIc","message",[511,899,535],{"class":547},[511,901,902],{"class":517}," TypePullMessage",[511,904,905],{"class":547},")",[511,907,620],{"class":547},[511,909,911,914,916,919,921,923,926,928,930,933],{"class":513,"line":910},25,[511,912,913],{"class":586},"  logger",[511,915,711],{"class":547},[511,917,918],{"class":714},"info",[511,920,718],{"class":551},[511,922,721],{"class":547},[511,924,925],{"class":521},"pull",[511,927,721],{"class":547},[511,929,590],{"class":547},[511,931,932],{"class":586}," message",[511,934,935],{"class":551},")\n",[511,937,939,942,944,947,949,952,954],{"class":513,"line":938},26,[511,940,941],{"class":586},"  events",[511,943,711],{"class":547},[511,945,946],{"class":586},"value",[511,948,711],{"class":547},[511,950,951],{"class":714},"unshift",[511,953,718],{"class":551},[511,955,956],{"class":547},"{\n",[511,958,960,963,965,968,971,974,976,979,981],{"class":513,"line":959},27,[511,961,962],{"class":551},"    at",[511,964,535],{"class":547},[511,966,967],{"class":547}," new",[511,969,970],{"class":714}," Date",[511,972,973],{"class":551},"()",[511,975,711],{"class":547},[511,977,978],{"class":714},"toLocaleTimeString",[511,980,973],{"class":551},[511,982,629],{"class":547},[511,984,986,989,991,993,995],{"class":513,"line":985},28,[511,987,988],{"class":551},"    command",[511,990,535],{"class":547},[511,992,932],{"class":586},[511,994,711],{"class":547},[511,996,997],{"class":586},"command\n",[511,999,1001,1004],{"class":513,"line":1000},29,[511,1002,1003],{"class":547},"  }",[511,1005,935],{"class":551},[511,1007,1009],{"class":513,"line":1008},30,[511,1010,1012],{"class":1011},"sHwdD","  \u002F\u002F Держим видимый лог коротким.\n",[511,1014,1016,1019,1022,1025,1027,1029,1031,1034,1037,1041,1044,1046,1048,1050,1052,1054,1056],{"class":513,"line":1015},31,[511,1017,1018],{"class":579},"  if",[511,1020,1021],{"class":551}," (",[511,1023,1024],{"class":586},"events",[511,1026,711],{"class":547},[511,1028,946],{"class":586},[511,1030,711],{"class":547},[511,1032,1033],{"class":586},"length",[511,1035,1036],{"class":547}," >",[511,1038,1040],{"class":1039},"sbssI"," 20",[511,1042,1043],{"class":551},") ",[511,1045,1024],{"class":586},[511,1047,711],{"class":547},[511,1049,946],{"class":586},[511,1051,711],{"class":547},[511,1053,1033],{"class":586},[511,1055,811],{"class":547},[511,1057,1058],{"class":1039}," 20\n",[511,1060,1062],{"class":513,"line":1061},32,[511,1063,1064],{"class":547},"}\n",[511,1066,1068],{"class":513,"line":1067},33,[511,1069,694],{"emptyLinePlaceholder":693},[511,1071,1073,1076,1078,1081,1084,1087],{"class":513,"line":1072},34,[511,1074,1075],{"class":714},"onMounted",[511,1077,718],{"class":586},[511,1079,1080],{"class":555},"async",[511,1082,1083],{"class":547}," ()",[511,1085,1086],{"class":555}," =>",[511,1088,620],{"class":547},[511,1090,1092,1095,1097,1100,1103],{"class":513,"line":1091},35,[511,1093,1094],{"class":586},"  $b24",[511,1096,811],{"class":547},[511,1098,1099],{"class":579}," await",[511,1101,1102],{"class":714}," initializeB24Frame",[511,1104,877],{"class":551},[511,1106,1108],{"class":513,"line":1107},36,[511,1109,694],{"emptyLinePlaceholder":693},[511,1111,1113],{"class":513,"line":1112},37,[511,1114,1115],{"class":1011},"  \u002F\u002F App + Profile нужны, чтобы хелпер мог зарегистрировать Pull-канал.\n",[511,1117,1119,1122,1125],{"class":513,"line":1118},38,[511,1120,1121],{"class":579},"  await",[511,1123,1124],{"class":714}," initB24Helper",[511,1126,1127],{"class":551},"(\n",[511,1129,1131,1134],{"class":513,"line":1130},39,[511,1132,1133],{"class":586},"    $b24",[511,1135,629],{"class":547},[511,1137,1139,1142,1145,1147,1150,1152,1155,1157,1160,1163],{"class":513,"line":1138},40,[511,1140,1141],{"class":551},"    [",[511,1143,1144],{"class":586},"LoadDataType",[511,1146,711],{"class":547},[511,1148,1149],{"class":586},"App",[511,1151,590],{"class":547},[511,1153,1154],{"class":586}," LoadDataType",[511,1156,711],{"class":547},[511,1158,1159],{"class":586},"Profile",[511,1161,1162],{"class":551},"]",[511,1164,629],{"class":547},[511,1166,1168,1171,1174],{"class":513,"line":1167},41,[511,1169,1170],{"class":547},"    '",[511,1172,1173],{"class":521},"pull-panel-init",[511,1175,612],{"class":547},[511,1177,1179],{"class":513,"line":1178},42,[511,1180,1181],{"class":551},"  )\n",[511,1183,1185],{"class":513,"line":1184},43,[511,1186,694],{"emptyLinePlaceholder":693},[511,1188,1190,1192],{"class":513,"line":1189},44,[511,1191,848],{"class":714},[511,1193,877],{"class":551},[511,1195,1197],{"class":513,"line":1196},45,[511,1198,1199],{"class":1011},"  \u002F\u002F Слушаем события модуля `crm`. Используйте `'application'` (по умолчанию) для\n",[511,1201,1203],{"class":513,"line":1202},46,[511,1204,1205],{"class":1011},"  \u002F\u002F собственных событий вашего приложения.\n",[511,1207,1209,1211,1213,1216,1218,1220,1223,1225],{"class":513,"line":1208},47,[511,1210,856],{"class":714},[511,1212,718],{"class":551},[511,1214,1215],{"class":586},"handleEvent",[511,1217,590],{"class":547},[511,1219,607],{"class":547},[511,1221,1222],{"class":521},"crm",[511,1224,721],{"class":547},[511,1226,935],{"class":551},[511,1228,1230,1233],{"class":513,"line":1229},48,[511,1231,1232],{"class":714},"  startPullClient",[511,1234,877],{"class":551},[511,1236,1238,1240],{"class":513,"line":1237},49,[511,1239,678],{"class":547},[511,1241,935],{"class":586},[511,1243,1245],{"class":513,"line":1244},50,[511,1246,694],{"emptyLinePlaceholder":693},[511,1248,1250,1253,1255,1257,1259],{"class":513,"line":1249},51,[511,1251,1252],{"class":714},"onBeforeUnmount",[511,1254,718],{"class":586},[511,1256,973],{"class":547},[511,1258,1086],{"class":555},[511,1260,620],{"class":547},[511,1262,1264,1266],{"class":513,"line":1263},52,[511,1265,840],{"class":714},[511,1267,877],{"class":551},[511,1269,1271,1273,1275],{"class":513,"line":1270},53,[511,1272,1094],{"class":586},[511,1274,811],{"class":547},[511,1276,814],{"class":547},[511,1278,1280,1282],{"class":513,"line":1279},54,[511,1281,678],{"class":547},[511,1283,935],{"class":586},[511,1285,1287,1290,1292],{"class":513,"line":1286},55,[511,1288,1289],{"class":547},"\u003C\u002F",[511,1291,552],{"class":551},[511,1293,573],{"class":547},[511,1295,1297],{"class":513,"line":1296},56,[511,1298,694],{"emptyLinePlaceholder":693},[511,1300,1302,1304,1307],{"class":513,"line":1301},57,[511,1303,548],{"class":547},[511,1305,1306],{"class":551},"template",[511,1308,573],{"class":547},[511,1310,1312,1315,1318],{"class":513,"line":1311},58,[511,1313,1314],{"class":547},"  \u003C",[511,1316,1317],{"class":551},"section",[511,1319,573],{"class":547},[511,1321,1323,1326,1328,1331,1334,1336,1338],{"class":513,"line":1322},59,[511,1324,1325],{"class":547},"    \u003C",[511,1327,474],{"class":551},[511,1329,1330],{"class":547},">",[511,1332,1333],{"class":586},"Live events",[511,1335,1289],{"class":547},[511,1337,474],{"class":551},[511,1339,573],{"class":547},[511,1341,1343,1345,1347,1350,1352,1354,1357,1359],{"class":513,"line":1342},60,[511,1344,1325],{"class":547},[511,1346,486],{"class":551},[511,1348,1349],{"class":555}," v-if",[511,1351,562],{"class":547},[511,1353,565],{"class":547},[511,1355,1356],{"class":521},"events.length",[511,1358,565],{"class":547},[511,1360,573],{"class":547},[511,1362,1364,1367,1369,1372,1374,1376,1379,1381,1384,1386,1388,1391,1393],{"class":513,"line":1363},61,[511,1365,1366],{"class":547},"      \u003C",[511,1368,489],{"class":551},[511,1370,1371],{"class":555}," v-for",[511,1373,562],{"class":547},[511,1375,565],{"class":547},[511,1377,1378],{"class":521},"(event, index) in events",[511,1380,565],{"class":547},[511,1382,1383],{"class":555}," :key",[511,1385,562],{"class":547},[511,1387,565],{"class":547},[511,1389,1390],{"class":521},"index",[511,1392,565],{"class":547},[511,1394,573],{"class":547},[511,1396,1398,1401,1403,1405,1408,1410,1412,1414],{"class":513,"line":1397},62,[511,1399,1400],{"class":547},"        \u003C",[511,1402,495],{"class":551},[511,1404,1330],{"class":547},[511,1406,1407],{"class":586},"{{ event.at }}",[511,1409,1289],{"class":547},[511,1411,495],{"class":551},[511,1413,1330],{"class":547},[511,1415,1416],{"class":586}," — {{ event.command }}\n",[511,1418,1420,1423,1425],{"class":513,"line":1419},63,[511,1421,1422],{"class":547},"      \u003C\u002F",[511,1424,489],{"class":551},[511,1426,573],{"class":547},[511,1428,1430,1433,1435],{"class":513,"line":1429},64,[511,1431,1432],{"class":547},"    \u003C\u002F",[511,1434,486],{"class":551},[511,1436,573],{"class":547},[511,1438,1440,1442,1444,1447,1449,1452,1454,1456],{"class":513,"line":1439},65,[511,1441,1325],{"class":547},[511,1443,470],{"class":551},[511,1445,1446],{"class":555}," v-else",[511,1448,1330],{"class":547},[511,1450,1451],{"class":586},"Waiting for events…",[511,1453,1289],{"class":547},[511,1455,470],{"class":551},[511,1457,573],{"class":547},[511,1459,1461,1464,1466],{"class":513,"line":1460},66,[511,1462,1463],{"class":547},"  \u003C\u002F",[511,1465,1317],{"class":551},[511,1467,573],{"class":547},[511,1469,1471,1473,1475],{"class":513,"line":1470},67,[511,1472,1289],{"class":547},[511,1474,1306],{"class":551},[511,1476,573],{"class":547},[474,1478,1480],{"id":1479},"run-it","Запуск",[470,1482,1483,1484,1487],{},"Откройте приложение внутри Bitrix24, затем вызовите событие CRM в другой вкладке — перетащите сделку на новую стадию, добавьте дело, смените ответственного. В течение секунды команда события (например, ",[495,1485,1486],{},"crm_deal_update",") появляется вверху списка. Компонент держит видимыми последние 20 событий.",[474,1489,1491],{"id":1490},"how-it-works","Как это работает",[486,1493,1494,1513,1531,1544],{},[489,1495,1496,1499,1500,1502,1503,1507,1508,1510,1511,711],{},[495,1497,1498],{},"useB24Helper()"," возвращает замыкание над одним экземпляром ",[495,1501,195],{},". Это ",[1504,1505,1506],"strong",{},"не"," Vue composable — он не читает хуки жизненного цикла Vue. Вы сами подключаете его в ",[495,1509,1075],{}," \u002F ",[495,1512,1252],{},[489,1514,1515,1518,1519,1522,1523,1526,1527,1530],{},[495,1516,1517],{},"initB24Helper($b24, dataTypes, requestId)"," загружает данные, нужные Pull-клиенту для регистрации канала. Без ",[495,1520,1521],{},"LoadDataType.App"," и ",[495,1524,1525],{},"LoadDataType.Profile"," последующий вызов ",[495,1528,1529],{},"usePullClient()"," выбрасывает исключение.",[489,1532,1533,1535,1536,1539,1540,1543],{},[495,1534,1529],{}," создаёт транспорт Pull (WebSocket с фолбэком на long-polling). ",[495,1537,1538],{},"useSubscribePullClient(handler, moduleId)"," регистрирует ваш callback для этого модуля. ",[495,1541,1542],{},"startPullClient()"," собственно открывает соединение — вызывайте его последним.",[489,1545,1546,1549],{},[495,1547,1548],{},"destroyB24Helper()"," разрушает транспорт и снимает подписчиков. Вызов при размонтировании предотвращает утечку WebSocket при закрытии слайдера приложения.",[474,1551,1553],{"id":1552},"limitations","Ограничения",[486,1555,1556,1587,1598,1621],{},[489,1557,1558,1559,1562,1563,1566,1567,1566,1570,1566,1573,1576,1577,1579,1580,1582,1583,1586],{},"Порядок ",[1504,1560,1561],{},"обязан"," быть ",[495,1564,1565],{},"initB24Helper"," → ",[495,1568,1569],{},"usePullClient",[495,1571,1572],{},"useSubscribePullClient",[495,1574,1575],{},"startPullClient",". Вызов ",[495,1578,1572],{}," до ",[495,1581,1569],{}," выбрасывает ",[495,1584,1585],{},"PullClient is not initialized",". Ошибка намеренная — она рано выявляет ошибки подключения.",[489,1588,1589,1591,1592,1594,1595,1597],{},[495,1590,1498],{}," возвращает один общий экземпляр на замыкание. Если вы создадите второй ",[495,1593,1498],{}," и снова вызовете ",[495,1596,1565],{},", второй вызов переиспользует существующий менеджер, а не создаёт новый.",[489,1599,1600,1603,1604,1607,1608,1611,1612,1611,1615,1618,1619,711],{},[495,1601,1602],{},"moduleId"," по умолчанию ",[495,1605,1606],{},"'application'",". Чтобы слушать модули портала (",[495,1609,1610],{},"'crm'",", ",[495,1613,1614],{},"'tasks'",[495,1616,1617],{},"'im'",", …), передавайте их явно. Подписка на несколько модулей требует нескольких вызовов ",[495,1620,1572],{},[489,1622,1623],{},"События Pull — best-effort. Они отлично подходят для «разбудить UI», но не для «это источник истины». Всегда перезапрашивайте через REST, когда действие пользователя зависит от свежести.",[474,1625,1627],{"id":1626},"see-also","См. также",[486,1629,1630,1638],{},[489,1631,1632,1637],{},[1633,1634,1636],"a",{"href":1635},"\u002Fdocs\u002Fexamples\u002Fframe-app-skeleton\u002F","Рецепт: скелет frame-приложения"," — минимальное frame-приложение, на котором это построено.",[489,1639,1640,1645],{},[1633,1641,1643],{"href":1642},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe\u002F",[495,1644,133],{}," — точка входа iframe.",[1647,1648,1649],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":507,"searchDepth":576,"depth":576,"links":1651},[1652,1653,1654,1655,1656,1657,1658],{"id":476,"depth":576,"text":477},{"id":483,"depth":576,"text":484},{"id":528,"depth":576,"text":529},{"id":1479,"depth":576,"text":1480},{"id":1490,"depth":576,"text":1491},{"id":1552,"depth":576,"text":1553},{"id":1626,"depth":576,"text":1627},"md",[1661,1664],{"label":201,"iconName":1662,"to":1663},"GitHubIcon","https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Fhelper\u002Fuse-b24-helper.ts",{"label":195,"iconName":1662,"to":1665},"https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Fhelper\u002Fhelper-manager.ts",{},{"title":435},{"title":461,"description":438},"bjhj_0LYWxve5uoVfeo74mHMJ2m6-Qw7pvmWOPdi3qQ",{"data":1671,"body":1672},{},{"type":1673,"children":1674},"root",[1675],{"type":1676,"tag":470,"props":1677,"children":1678},"element",{},[1679],{"type":1680,"value":438},"text",1783080213610]