[{"data":1,"prerenderedAt":2169},["ShallowReactive",2],{"navigation":3,"-docs-examples-frame-app-skeleton":459,"-docs-examples-frame-app-skeleton-description":2158},[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":393,"extension":2146,"links":2147,"meta":2154,"navigation":2155,"path":391,"restApiVersion":15,"seo":2156,"stem":392,"__hash__":2157},"docs\u002Fdocs\u002F99.examples\u002F2.frame-app-skeleton.md","Рецепт: скелет frame-приложения","2026-05-29",{"type":464,"value":465,"toc":2137},"minimark",[466,473,478,481,485,509,534,538,544,1826,1831,1834,1904,1908,1983,1997,2001,2053,2057,2093,2097,2133],[467,468,469],"warning",{},[470,471,472],"p",{},"Мы всё ещё дорабатываем эту страницу. Некоторых данных здесь может не хватать — скоро дополним.",[474,475,477],"h2",{"id":476},"goal","Цель",[470,479,480],{},"Один Vue 3-компонент, демонстрирующий четыре вещи, нужные каждому iframe-приложению Bitrix24: инициализировать рукопожатие postMessage, задать заголовок родительского окна, сохранить часть состояния между перезагрузками через опции приложения и открыть другую страницу портала в слайдере.",[474,482,484],{"id":483},"stack-prerequisites","Стек и предпосылки",[486,487,488,497,502],"ul",{},[489,490,491,492,496],"li",{},"Vue 3 + Vite (или Nuxt 3 с ",[493,494,495],"code",{},"@bitrix24\u002Fb24jssdk-nuxt",")",[489,498,499],{},[493,500,501],{},"@bitrix24\u002Fb24jssdk@^1.0.0",[489,503,504,505,508],{},"Страница должна отдаваться с URL, зарегистрированного как обработчик placement в карточке вашего приложения Bitrix24. Вне iframe ",[493,506,507],{},"initializeB24Frame()"," завершается reject.",[510,511,516],"pre",{"className":512,"code":513,"language":514,"meta":515,"style":515},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add @bitrix24\u002Fb24jssdk\n","bash","",[493,517,518],{"__ignoreMap":515},[519,520,523,527,531],"span",{"class":521,"line":522},"line",1,[519,524,526],{"class":525},"sBMFI","pnpm",[519,528,530],{"class":529},"sfazB"," add",[519,532,533],{"class":529}," @bitrix24\u002Fb24jssdk\n",[474,535,537],{"id":536},"full-example","Полный пример",[470,539,540,543],{},[493,541,542],{},"src\u002Fcomponents\u002FAppShell.vue",":",[510,545,549],{"className":546,"code":547,"language":548,"meta":515,"style":515},"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  type B24Frame,\n  LoggerFactory\n} from '@bitrix24\u002Fb24jssdk'\n\nconst logger = LoggerFactory.createForBrowser('AppShell', import.meta.env.DEV)\nconst ready = ref(false)\nconst userTheme = ref\u003C'light' | 'dark'>('light')\nconst portalDomain = ref('')\nlet $b24: B24Frame | null = null\n\nonMounted(async () => {\n  try {\n    $b24 = await initializeB24Frame()\n  }\n  catch (error) {\n    logger.error('initializeB24Frame failed', error)\n    return\n  }\n\n  $b24.parent.setTitle('My Bitrix24 App')\n  \u002F\u002F Авто-ресайз iframe под содержимое; вызывайте снова, когда высота содержимого\n  \u002F\u002F меняется (например, после рендера ответа сети).\n  await $b24.parent.resizeWindowAuto()\n\n  \u002F\u002F Чтение сохранённых настроек. Возвращает `null`, если ничего ещё не задано.\n  const stored = $b24.options.appGet('theme') as 'light' | 'dark' | null\n  if (stored) userTheme.value = stored\n\n  const appInfo = await $b24.actions.v2.call.make({ method: 'app.info' })\n  portalDomain.value = appInfo.getData().result.DOMAIN ?? ''\n\n  ready.value = true\n})\n\nonBeforeUnmount(() => {\n  $b24 = null\n})\n\nasync function setTheme(value: 'light' | 'dark') {\n  userTheme.value = value\n  \u002F\u002F Опция уровня приложения: хранится на портале под приложением, не под пользователем.\n  await $b24?.options.appSet('theme', value)\n}\n\nasync function openCrmDeals() {\n  if (!$b24) return\n  const url = new URL('\u002Fcrm\u002Fdeal\u002Flist\u002F', `https:\u002F\u002F${portalDomain.value}`)\n  await $b24.slider.openPath(url, 1200)\n}\n\nasync function close() {\n  await $b24?.parent.closeApplication()\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Csection v-if=\"ready\" class=\"app-shell\" :data-theme=\"userTheme\">\n    \u003Cheader>\n      \u003Ch1>Hello from {{ portalDomain }}\u003C\u002Fh1>\n    \u003C\u002Fheader>\n\n    \u003Cmain>\n      \u003Cbutton @click=\"setTheme(userTheme === 'light' ? 'dark' : 'light')\">\n        Switch theme (current: {{ userTheme }})\n      \u003C\u002Fbutton>\n      \u003Cbutton @click=\"openCrmDeals\">\n        Open deals in slider\n      \u003C\u002Fbutton>\n    \u003C\u002Fmain>\n\n    \u003Cfooter>\n      \u003Cbutton @click=\"close\">Close app\u003C\u002Fbutton>\n    \u003C\u002Ffooter>\n  \u003C\u002Fsection>\n  \u003Cp v-else>Loading…\u003C\u002Fp>\n\u003C\u002Ftemplate>\n","vue",[493,550,551,582,621,629,638,649,655,670,677,729,750,794,813,837,842,861,869,886,892,910,936,942,947,952,979,986,992,1011,1016,1022,1077,1103,1108,1162,1200,1205,1220,1227,1232,1246,1255,1262,1267,1303,1318,1324,1356,1362,1367,1381,1399,1447,1477,1482,1487,1501,1519,1524,1534,1539,1549,1595,1606,1626,1636,1641,1651,1673,1679,1689,1709,1715,1724,1733,1738,1748,1777,1786,1796,1817],{"__ignoreMap":515},[519,552,553,557,561,565,568,571,574,577,579],{"class":521,"line":522},[519,554,556],{"class":555},"sMK4o","\u003C",[519,558,560],{"class":559},"swJcz","script",[519,562,564],{"class":563},"spNyl"," setup",[519,566,567],{"class":563}," lang",[519,569,570],{"class":555},"=",[519,572,573],{"class":555},"\"",[519,575,576],{"class":529},"ts",[519,578,573],{"class":555},[519,580,581],{"class":555},">\n",[519,583,585,589,592,596,599,602,604,607,610,613,616,618],{"class":521,"line":584},2,[519,586,588],{"class":587},"s7zQu","import",[519,590,591],{"class":555}," {",[519,593,595],{"class":594},"sTEyZ"," onBeforeUnmount",[519,597,598],{"class":555},",",[519,600,601],{"class":594}," onMounted",[519,603,598],{"class":555},[519,605,606],{"class":594}," ref",[519,608,609],{"class":555}," }",[519,611,612],{"class":587}," from",[519,614,615],{"class":555}," '",[519,617,548],{"class":529},[519,619,620],{"class":555},"'\n",[519,622,624,626],{"class":521,"line":623},3,[519,625,588],{"class":587},[519,627,628],{"class":555}," {\n",[519,630,632,635],{"class":521,"line":631},4,[519,633,634],{"class":594},"  initializeB24Frame",[519,636,637],{"class":555},",\n",[519,639,641,644,647],{"class":521,"line":640},5,[519,642,643],{"class":587},"  type",[519,645,646],{"class":594}," B24Frame",[519,648,637],{"class":555},[519,650,652],{"class":521,"line":651},6,[519,653,654],{"class":594},"  LoggerFactory\n",[519,656,658,661,663,665,668],{"class":521,"line":657},7,[519,659,660],{"class":555},"}",[519,662,612],{"class":587},[519,664,615],{"class":555},[519,666,667],{"class":529},"@bitrix24\u002Fb24jssdk",[519,669,620],{"class":555},[519,671,673],{"class":521,"line":672},8,[519,674,676],{"emptyLinePlaceholder":675},true,"\n",[519,678,680,683,686,688,691,694,698,701,704,707,709,711,714,716,719,721,724,726],{"class":521,"line":679},9,[519,681,682],{"class":563},"const",[519,684,685],{"class":594}," logger ",[519,687,570],{"class":555},[519,689,690],{"class":594}," LoggerFactory",[519,692,693],{"class":555},".",[519,695,697],{"class":696},"s2Zo4","createForBrowser",[519,699,700],{"class":594},"(",[519,702,703],{"class":555},"'",[519,705,706],{"class":529},"AppShell",[519,708,703],{"class":555},[519,710,598],{"class":555},[519,712,713],{"class":587}," import",[519,715,693],{"class":555},[519,717,718],{"class":594},"meta",[519,720,693],{"class":555},[519,722,723],{"class":594},"env",[519,725,693],{"class":555},[519,727,728],{"class":594},"DEV)\n",[519,730,732,734,737,739,741,743,747],{"class":521,"line":731},10,[519,733,682],{"class":563},[519,735,736],{"class":594}," ready ",[519,738,570],{"class":555},[519,740,606],{"class":696},[519,742,700],{"class":594},[519,744,746],{"class":745},"sfNiH","false",[519,748,749],{"class":594},")\n",[519,751,753,755,758,760,762,764,766,769,771,774,776,779,781,784,786,788,790,792],{"class":521,"line":752},11,[519,754,682],{"class":563},[519,756,757],{"class":594}," userTheme ",[519,759,570],{"class":555},[519,761,606],{"class":696},[519,763,556],{"class":555},[519,765,703],{"class":555},[519,767,768],{"class":529},"light",[519,770,703],{"class":555},[519,772,773],{"class":555}," |",[519,775,615],{"class":555},[519,777,778],{"class":529},"dark",[519,780,703],{"class":555},[519,782,783],{"class":555},">",[519,785,700],{"class":594},[519,787,703],{"class":555},[519,789,768],{"class":529},[519,791,703],{"class":555},[519,793,749],{"class":594},[519,795,797,799,802,804,806,808,811],{"class":521,"line":796},12,[519,798,682],{"class":563},[519,800,801],{"class":594}," portalDomain ",[519,803,570],{"class":555},[519,805,606],{"class":696},[519,807,700],{"class":594},[519,809,810],{"class":555},"''",[519,812,749],{"class":594},[519,814,816,819,822,824,826,828,831,834],{"class":521,"line":815},13,[519,817,818],{"class":563},"let",[519,820,821],{"class":594}," $b24",[519,823,543],{"class":555},[519,825,646],{"class":525},[519,827,773],{"class":555},[519,829,830],{"class":525}," null",[519,832,833],{"class":555}," =",[519,835,836],{"class":555}," null\n",[519,838,840],{"class":521,"line":839},14,[519,841,676],{"emptyLinePlaceholder":675},[519,843,845,848,850,853,856,859],{"class":521,"line":844},15,[519,846,847],{"class":696},"onMounted",[519,849,700],{"class":594},[519,851,852],{"class":563},"async",[519,854,855],{"class":555}," ()",[519,857,858],{"class":563}," =>",[519,860,628],{"class":555},[519,862,864,867],{"class":521,"line":863},16,[519,865,866],{"class":587},"  try",[519,868,628],{"class":555},[519,870,872,875,877,880,883],{"class":521,"line":871},17,[519,873,874],{"class":594},"    $b24",[519,876,833],{"class":555},[519,878,879],{"class":587}," await",[519,881,882],{"class":696}," initializeB24Frame",[519,884,885],{"class":559},"()\n",[519,887,889],{"class":521,"line":888},18,[519,890,891],{"class":555},"  }\n",[519,893,895,898,901,904,907],{"class":521,"line":894},19,[519,896,897],{"class":587},"  catch",[519,899,900],{"class":559}," (",[519,902,903],{"class":594},"error",[519,905,906],{"class":559},") ",[519,908,909],{"class":555},"{\n",[519,911,913,916,918,920,922,924,927,929,931,934],{"class":521,"line":912},20,[519,914,915],{"class":594},"    logger",[519,917,693],{"class":555},[519,919,903],{"class":696},[519,921,700],{"class":559},[519,923,703],{"class":555},[519,925,926],{"class":529},"initializeB24Frame failed",[519,928,703],{"class":555},[519,930,598],{"class":555},[519,932,933],{"class":594}," error",[519,935,749],{"class":559},[519,937,939],{"class":521,"line":938},21,[519,940,941],{"class":587},"    return\n",[519,943,945],{"class":521,"line":944},22,[519,946,891],{"class":555},[519,948,950],{"class":521,"line":949},23,[519,951,676],{"emptyLinePlaceholder":675},[519,953,955,958,960,963,965,968,970,972,975,977],{"class":521,"line":954},24,[519,956,957],{"class":594},"  $b24",[519,959,693],{"class":555},[519,961,962],{"class":594},"parent",[519,964,693],{"class":555},[519,966,967],{"class":696},"setTitle",[519,969,700],{"class":559},[519,971,703],{"class":555},[519,973,974],{"class":529},"My Bitrix24 App",[519,976,703],{"class":555},[519,978,749],{"class":559},[519,980,982],{"class":521,"line":981},25,[519,983,985],{"class":984},"sHwdD","  \u002F\u002F Авто-ресайз iframe под содержимое; вызывайте снова, когда высота содержимого\n",[519,987,989],{"class":521,"line":988},26,[519,990,991],{"class":984},"  \u002F\u002F меняется (например, после рендера ответа сети).\n",[519,993,995,998,1000,1002,1004,1006,1009],{"class":521,"line":994},27,[519,996,997],{"class":587},"  await",[519,999,821],{"class":594},[519,1001,693],{"class":555},[519,1003,962],{"class":594},[519,1005,693],{"class":555},[519,1007,1008],{"class":696},"resizeWindowAuto",[519,1010,885],{"class":559},[519,1012,1014],{"class":521,"line":1013},28,[519,1015,676],{"emptyLinePlaceholder":675},[519,1017,1019],{"class":521,"line":1018},29,[519,1020,1021],{"class":984},"  \u002F\u002F Чтение сохранённых настроек. Возвращает `null`, если ничего ещё не задано.\n",[519,1023,1025,1028,1031,1033,1035,1037,1040,1042,1045,1047,1049,1052,1054,1056,1059,1061,1063,1065,1067,1069,1071,1073,1075],{"class":521,"line":1024},30,[519,1026,1027],{"class":563},"  const",[519,1029,1030],{"class":594}," stored",[519,1032,833],{"class":555},[519,1034,821],{"class":594},[519,1036,693],{"class":555},[519,1038,1039],{"class":594},"options",[519,1041,693],{"class":555},[519,1043,1044],{"class":696},"appGet",[519,1046,700],{"class":559},[519,1048,703],{"class":555},[519,1050,1051],{"class":529},"theme",[519,1053,703],{"class":555},[519,1055,906],{"class":559},[519,1057,1058],{"class":587},"as",[519,1060,615],{"class":555},[519,1062,768],{"class":529},[519,1064,703],{"class":555},[519,1066,773],{"class":555},[519,1068,615],{"class":555},[519,1070,778],{"class":529},[519,1072,703],{"class":555},[519,1074,773],{"class":555},[519,1076,836],{"class":525},[519,1078,1080,1083,1085,1088,1090,1093,1095,1098,1100],{"class":521,"line":1079},31,[519,1081,1082],{"class":587},"  if",[519,1084,900],{"class":559},[519,1086,1087],{"class":594},"stored",[519,1089,906],{"class":559},[519,1091,1092],{"class":594},"userTheme",[519,1094,693],{"class":555},[519,1096,1097],{"class":594},"value",[519,1099,833],{"class":555},[519,1101,1102],{"class":594}," stored\n",[519,1104,1106],{"class":521,"line":1105},32,[519,1107,676],{"emptyLinePlaceholder":675},[519,1109,1111,1113,1116,1118,1120,1122,1124,1126,1128,1131,1133,1136,1138,1141,1143,1146,1149,1151,1153,1156,1158,1160],{"class":521,"line":1110},33,[519,1112,1027],{"class":563},[519,1114,1115],{"class":594}," appInfo",[519,1117,833],{"class":555},[519,1119,879],{"class":587},[519,1121,821],{"class":594},[519,1123,693],{"class":555},[519,1125,91],{"class":594},[519,1127,693],{"class":555},[519,1129,1130],{"class":594},"v2",[519,1132,693],{"class":555},[519,1134,1135],{"class":594},"call",[519,1137,693],{"class":555},[519,1139,1140],{"class":696},"make",[519,1142,700],{"class":559},[519,1144,1145],{"class":555},"{",[519,1147,1148],{"class":559}," method",[519,1150,543],{"class":555},[519,1152,615],{"class":555},[519,1154,1155],{"class":529},"app.info",[519,1157,703],{"class":555},[519,1159,609],{"class":555},[519,1161,749],{"class":559},[519,1163,1165,1168,1170,1172,1174,1176,1178,1181,1184,1186,1189,1191,1194,1197],{"class":521,"line":1164},34,[519,1166,1167],{"class":594},"  portalDomain",[519,1169,693],{"class":555},[519,1171,1097],{"class":594},[519,1173,833],{"class":555},[519,1175,1115],{"class":594},[519,1177,693],{"class":555},[519,1179,1180],{"class":696},"getData",[519,1182,1183],{"class":559},"()",[519,1185,693],{"class":555},[519,1187,1188],{"class":594},"result",[519,1190,693],{"class":555},[519,1192,1193],{"class":594},"DOMAIN",[519,1195,1196],{"class":555}," ??",[519,1198,1199],{"class":555}," ''\n",[519,1201,1203],{"class":521,"line":1202},35,[519,1204,676],{"emptyLinePlaceholder":675},[519,1206,1208,1211,1213,1215,1217],{"class":521,"line":1207},36,[519,1209,1210],{"class":594},"  ready",[519,1212,693],{"class":555},[519,1214,1097],{"class":594},[519,1216,833],{"class":555},[519,1218,1219],{"class":745}," true\n",[519,1221,1223,1225],{"class":521,"line":1222},37,[519,1224,660],{"class":555},[519,1226,749],{"class":594},[519,1228,1230],{"class":521,"line":1229},38,[519,1231,676],{"emptyLinePlaceholder":675},[519,1233,1235,1238,1240,1242,1244],{"class":521,"line":1234},39,[519,1236,1237],{"class":696},"onBeforeUnmount",[519,1239,700],{"class":594},[519,1241,1183],{"class":555},[519,1243,858],{"class":563},[519,1245,628],{"class":555},[519,1247,1249,1251,1253],{"class":521,"line":1248},40,[519,1250,957],{"class":594},[519,1252,833],{"class":555},[519,1254,836],{"class":555},[519,1256,1258,1260],{"class":521,"line":1257},41,[519,1259,660],{"class":555},[519,1261,749],{"class":594},[519,1263,1265],{"class":521,"line":1264},42,[519,1266,676],{"emptyLinePlaceholder":675},[519,1268,1270,1272,1275,1278,1280,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301],{"class":521,"line":1269},43,[519,1271,852],{"class":563},[519,1273,1274],{"class":563}," function",[519,1276,1277],{"class":696}," setTheme",[519,1279,700],{"class":555},[519,1281,1097],{"class":1282},"sHdIc",[519,1284,543],{"class":555},[519,1286,615],{"class":555},[519,1288,768],{"class":529},[519,1290,703],{"class":555},[519,1292,773],{"class":555},[519,1294,615],{"class":555},[519,1296,778],{"class":529},[519,1298,703],{"class":555},[519,1300,496],{"class":555},[519,1302,628],{"class":555},[519,1304,1306,1309,1311,1313,1315],{"class":521,"line":1305},44,[519,1307,1308],{"class":594},"  userTheme",[519,1310,693],{"class":555},[519,1312,1097],{"class":594},[519,1314,833],{"class":555},[519,1316,1317],{"class":594}," value\n",[519,1319,1321],{"class":521,"line":1320},45,[519,1322,1323],{"class":984},"  \u002F\u002F Опция уровня приложения: хранится на портале под приложением, не под пользователем.\n",[519,1325,1327,1329,1331,1334,1336,1338,1341,1343,1345,1347,1349,1351,1354],{"class":521,"line":1326},46,[519,1328,997],{"class":587},[519,1330,821],{"class":594},[519,1332,1333],{"class":555},"?.",[519,1335,1039],{"class":594},[519,1337,693],{"class":555},[519,1339,1340],{"class":696},"appSet",[519,1342,700],{"class":559},[519,1344,703],{"class":555},[519,1346,1051],{"class":529},[519,1348,703],{"class":555},[519,1350,598],{"class":555},[519,1352,1353],{"class":594}," value",[519,1355,749],{"class":559},[519,1357,1359],{"class":521,"line":1358},47,[519,1360,1361],{"class":555},"}\n",[519,1363,1365],{"class":521,"line":1364},48,[519,1366,676],{"emptyLinePlaceholder":675},[519,1368,1370,1372,1374,1377,1379],{"class":521,"line":1369},49,[519,1371,852],{"class":563},[519,1373,1274],{"class":563},[519,1375,1376],{"class":696}," openCrmDeals",[519,1378,1183],{"class":555},[519,1380,628],{"class":555},[519,1382,1384,1386,1388,1391,1394,1396],{"class":521,"line":1383},50,[519,1385,1082],{"class":587},[519,1387,900],{"class":559},[519,1389,1390],{"class":555},"!",[519,1392,1393],{"class":594},"$b24",[519,1395,906],{"class":559},[519,1397,1398],{"class":587},"return\n",[519,1400,1402,1404,1407,1409,1412,1415,1417,1419,1422,1424,1426,1429,1432,1435,1438,1440,1442,1445],{"class":521,"line":1401},51,[519,1403,1027],{"class":563},[519,1405,1406],{"class":594}," url",[519,1408,833],{"class":555},[519,1410,1411],{"class":555}," new",[519,1413,1414],{"class":696}," URL",[519,1416,700],{"class":559},[519,1418,703],{"class":555},[519,1420,1421],{"class":529},"\u002Fcrm\u002Fdeal\u002Flist\u002F",[519,1423,703],{"class":555},[519,1425,598],{"class":555},[519,1427,1428],{"class":555}," `",[519,1430,1431],{"class":529},"https:\u002F\u002F",[519,1433,1434],{"class":555},"${",[519,1436,1437],{"class":594},"portalDomain",[519,1439,693],{"class":555},[519,1441,1097],{"class":594},[519,1443,1444],{"class":555},"}`",[519,1446,749],{"class":559},[519,1448,1450,1452,1454,1456,1459,1461,1464,1466,1469,1471,1475],{"class":521,"line":1449},52,[519,1451,997],{"class":587},[519,1453,821],{"class":594},[519,1455,693],{"class":555},[519,1457,1458],{"class":594},"slider",[519,1460,693],{"class":555},[519,1462,1463],{"class":696},"openPath",[519,1465,700],{"class":559},[519,1467,1468],{"class":594},"url",[519,1470,598],{"class":555},[519,1472,1474],{"class":1473},"sbssI"," 1200",[519,1476,749],{"class":559},[519,1478,1480],{"class":521,"line":1479},53,[519,1481,1361],{"class":555},[519,1483,1485],{"class":521,"line":1484},54,[519,1486,676],{"emptyLinePlaceholder":675},[519,1488,1490,1492,1494,1497,1499],{"class":521,"line":1489},55,[519,1491,852],{"class":563},[519,1493,1274],{"class":563},[519,1495,1496],{"class":696}," close",[519,1498,1183],{"class":555},[519,1500,628],{"class":555},[519,1502,1504,1506,1508,1510,1512,1514,1517],{"class":521,"line":1503},56,[519,1505,997],{"class":587},[519,1507,821],{"class":594},[519,1509,1333],{"class":555},[519,1511,962],{"class":594},[519,1513,693],{"class":555},[519,1515,1516],{"class":696},"closeApplication",[519,1518,885],{"class":559},[519,1520,1522],{"class":521,"line":1521},57,[519,1523,1361],{"class":555},[519,1525,1527,1530,1532],{"class":521,"line":1526},58,[519,1528,1529],{"class":555},"\u003C\u002F",[519,1531,560],{"class":559},[519,1533,581],{"class":555},[519,1535,1537],{"class":521,"line":1536},59,[519,1538,676],{"emptyLinePlaceholder":675},[519,1540,1542,1544,1547],{"class":521,"line":1541},60,[519,1543,556],{"class":555},[519,1545,1546],{"class":559},"template",[519,1548,581],{"class":555},[519,1550,1552,1555,1558,1561,1563,1565,1568,1570,1573,1575,1577,1580,1582,1585,1587,1589,1591,1593],{"class":521,"line":1551},61,[519,1553,1554],{"class":555},"  \u003C",[519,1556,1557],{"class":559},"section",[519,1559,1560],{"class":563}," v-if",[519,1562,570],{"class":555},[519,1564,573],{"class":555},[519,1566,1567],{"class":529},"ready",[519,1569,573],{"class":555},[519,1571,1572],{"class":563}," class",[519,1574,570],{"class":555},[519,1576,573],{"class":555},[519,1578,1579],{"class":529},"app-shell",[519,1581,573],{"class":555},[519,1583,1584],{"class":563}," :data-theme",[519,1586,570],{"class":555},[519,1588,573],{"class":555},[519,1590,1092],{"class":529},[519,1592,573],{"class":555},[519,1594,581],{"class":555},[519,1596,1598,1601,1604],{"class":521,"line":1597},62,[519,1599,1600],{"class":555},"    \u003C",[519,1602,1603],{"class":559},"header",[519,1605,581],{"class":555},[519,1607,1609,1612,1615,1617,1620,1622,1624],{"class":521,"line":1608},63,[519,1610,1611],{"class":555},"      \u003C",[519,1613,1614],{"class":559},"h1",[519,1616,783],{"class":555},[519,1618,1619],{"class":594},"Hello from {{ portalDomain }}",[519,1621,1529],{"class":555},[519,1623,1614],{"class":559},[519,1625,581],{"class":555},[519,1627,1629,1632,1634],{"class":521,"line":1628},64,[519,1630,1631],{"class":555},"    \u003C\u002F",[519,1633,1603],{"class":559},[519,1635,581],{"class":555},[519,1637,1639],{"class":521,"line":1638},65,[519,1640,676],{"emptyLinePlaceholder":675},[519,1642,1644,1646,1649],{"class":521,"line":1643},66,[519,1645,1600],{"class":555},[519,1647,1648],{"class":559},"main",[519,1650,581],{"class":555},[519,1652,1654,1656,1659,1662,1664,1666,1669,1671],{"class":521,"line":1653},67,[519,1655,1611],{"class":555},[519,1657,1658],{"class":559},"button",[519,1660,1661],{"class":563}," @click",[519,1663,570],{"class":555},[519,1665,573],{"class":555},[519,1667,1668],{"class":529},"setTheme(userTheme === 'light' ? 'dark' : 'light')",[519,1670,573],{"class":555},[519,1672,581],{"class":555},[519,1674,1676],{"class":521,"line":1675},68,[519,1677,1678],{"class":594},"        Switch theme (current: {{ userTheme }})\n",[519,1680,1682,1685,1687],{"class":521,"line":1681},69,[519,1683,1684],{"class":555},"      \u003C\u002F",[519,1686,1658],{"class":559},[519,1688,581],{"class":555},[519,1690,1692,1694,1696,1698,1700,1702,1705,1707],{"class":521,"line":1691},70,[519,1693,1611],{"class":555},[519,1695,1658],{"class":559},[519,1697,1661],{"class":563},[519,1699,570],{"class":555},[519,1701,573],{"class":555},[519,1703,1704],{"class":529},"openCrmDeals",[519,1706,573],{"class":555},[519,1708,581],{"class":555},[519,1710,1712],{"class":521,"line":1711},71,[519,1713,1714],{"class":594},"        Open deals in slider\n",[519,1716,1718,1720,1722],{"class":521,"line":1717},72,[519,1719,1684],{"class":555},[519,1721,1658],{"class":559},[519,1723,581],{"class":555},[519,1725,1727,1729,1731],{"class":521,"line":1726},73,[519,1728,1631],{"class":555},[519,1730,1648],{"class":559},[519,1732,581],{"class":555},[519,1734,1736],{"class":521,"line":1735},74,[519,1737,676],{"emptyLinePlaceholder":675},[519,1739,1741,1743,1746],{"class":521,"line":1740},75,[519,1742,1600],{"class":555},[519,1744,1745],{"class":559},"footer",[519,1747,581],{"class":555},[519,1749,1751,1753,1755,1757,1759,1761,1764,1766,1768,1771,1773,1775],{"class":521,"line":1750},76,[519,1752,1611],{"class":555},[519,1754,1658],{"class":559},[519,1756,1661],{"class":563},[519,1758,570],{"class":555},[519,1760,573],{"class":555},[519,1762,1763],{"class":529},"close",[519,1765,573],{"class":555},[519,1767,783],{"class":555},[519,1769,1770],{"class":594},"Close app",[519,1772,1529],{"class":555},[519,1774,1658],{"class":559},[519,1776,581],{"class":555},[519,1778,1780,1782,1784],{"class":521,"line":1779},77,[519,1781,1631],{"class":555},[519,1783,1745],{"class":559},[519,1785,581],{"class":555},[519,1787,1789,1792,1794],{"class":521,"line":1788},78,[519,1790,1791],{"class":555},"  \u003C\u002F",[519,1793,1557],{"class":559},[519,1795,581],{"class":555},[519,1797,1799,1801,1803,1806,1808,1811,1813,1815],{"class":521,"line":1798},79,[519,1800,1554],{"class":555},[519,1802,470],{"class":559},[519,1804,1805],{"class":563}," v-else",[519,1807,783],{"class":555},[519,1809,1810],{"class":594},"Loading…",[519,1812,1529],{"class":555},[519,1814,470],{"class":559},[519,1816,581],{"class":555},[519,1818,1820,1822,1824],{"class":521,"line":1819},80,[519,1821,1529],{"class":555},[519,1823,1546],{"class":559},[519,1825,581],{"class":555},[470,1827,1828,543],{},[493,1829,1830],{},"src\u002Fmain.ts",[470,1832,1833],{},"\u002F\u002F @check-ignore: vue .vue module import — .vue files are not in tsconfig",[510,1835,1838],{"className":1836,"code":1837,"language":576,"meta":515,"style":515},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createApp } from 'vue'\nimport AppShell from '.\u002Fcomponents\u002FAppShell.vue'\n\ncreateApp(AppShell).mount('#app')\n",[493,1839,1840,1859,1876,1880],{"__ignoreMap":515},[519,1841,1842,1844,1846,1849,1851,1853,1855,1857],{"class":521,"line":522},[519,1843,588],{"class":587},[519,1845,591],{"class":555},[519,1847,1848],{"class":594}," createApp",[519,1850,609],{"class":555},[519,1852,612],{"class":587},[519,1854,615],{"class":555},[519,1856,548],{"class":529},[519,1858,620],{"class":555},[519,1860,1861,1863,1866,1869,1871,1874],{"class":521,"line":584},[519,1862,588],{"class":587},[519,1864,1865],{"class":594}," AppShell ",[519,1867,1868],{"class":587},"from",[519,1870,615],{"class":555},[519,1872,1873],{"class":529},".\u002Fcomponents\u002FAppShell.vue",[519,1875,620],{"class":555},[519,1877,1878],{"class":521,"line":623},[519,1879,676],{"emptyLinePlaceholder":675},[519,1881,1882,1885,1888,1890,1893,1895,1897,1900,1902],{"class":521,"line":631},[519,1883,1884],{"class":696},"createApp",[519,1886,1887],{"class":594},"(AppShell)",[519,1889,693],{"class":555},[519,1891,1892],{"class":696},"mount",[519,1894,700],{"class":594},[519,1896,703],{"class":555},[519,1898,1899],{"class":529},"#app",[519,1901,703],{"class":555},[519,1903,749],{"class":594},[474,1905,1907],{"id":1906},"run-it","Запуск",[510,1909,1911],{"className":512,"code":1910,"language":514,"meta":515,"style":515},"# 1. Локальный dev-сервер (Vite)\npnpm dev\n# → http:\u002F\u002Flocalhost:5173\u002F — запуск этого URL напрямую завершится reject:\n#   initializeB24Frame() нужно родительское окно Bitrix24.\n\n# 2. Пробросьте dev-сервер (ngrok \u002F cloudflared \u002F ваш туннель)\nngrok http 5173\n# → возьмите https-URL.\n\n# 3. В Bitrix24: Приложения → Ресурсы разработчика → Локальное приложение →\n#    укажите URL обработчика placement равным URL туннеля и сохраните.\n\n# 4. Откройте placement внутри Bitrix24.\n",[493,1912,1913,1918,1925,1930,1935,1939,1944,1955,1960,1964,1969,1974,1978],{"__ignoreMap":515},[519,1914,1915],{"class":521,"line":522},[519,1916,1917],{"class":984},"# 1. Локальный dev-сервер (Vite)\n",[519,1919,1920,1922],{"class":521,"line":584},[519,1921,526],{"class":525},[519,1923,1924],{"class":529}," dev\n",[519,1926,1927],{"class":521,"line":623},[519,1928,1929],{"class":984},"# → http:\u002F\u002Flocalhost:5173\u002F — запуск этого URL напрямую завершится reject:\n",[519,1931,1932],{"class":521,"line":631},[519,1933,1934],{"class":984},"#   initializeB24Frame() нужно родительское окно Bitrix24.\n",[519,1936,1937],{"class":521,"line":640},[519,1938,676],{"emptyLinePlaceholder":675},[519,1940,1941],{"class":521,"line":651},[519,1942,1943],{"class":984},"# 2. Пробросьте dev-сервер (ngrok \u002F cloudflared \u002F ваш туннель)\n",[519,1945,1946,1949,1952],{"class":521,"line":657},[519,1947,1948],{"class":525},"ngrok",[519,1950,1951],{"class":529}," http",[519,1953,1954],{"class":1473}," 5173\n",[519,1956,1957],{"class":521,"line":672},[519,1958,1959],{"class":984},"# → возьмите https-URL.\n",[519,1961,1962],{"class":521,"line":679},[519,1963,676],{"emptyLinePlaceholder":675},[519,1965,1966],{"class":521,"line":731},[519,1967,1968],{"class":984},"# 3. В Bitrix24: Приложения → Ресурсы разработчика → Локальное приложение →\n",[519,1970,1971],{"class":521,"line":752},[519,1972,1973],{"class":984},"#    укажите URL обработчика placement равным URL туннеля и сохраните.\n",[519,1975,1976],{"class":521,"line":796},[519,1977,676],{"emptyLinePlaceholder":675},[519,1979,1980],{"class":521,"line":815},[519,1981,1982],{"class":984},"# 4. Откройте placement внутри Bitrix24.\n",[470,1984,1985,1986,1989,1990,1993,1994,1996],{},"После загрузки iframe вы увидите: заголовок родительского окна станет «My Bitrix24 App», iframe подстроится под содержимое, а в теле появится ",[493,1987,1988],{},"Hello from \u003Cyour-portal>.bitrix24.com"," и две кнопки. Переключение темы сохраняется между перезагрузками (значение живёт на портале под приложением, а не в ",[493,1991,1992],{},"localStorage","). Клик по «Open deals in slider» открывает ",[493,1995,1421],{}," того же портала в слайдере в стиле Bitrix24.",[474,1998,2000],{"id":1999},"how-it-works","Как это работает",[486,2002,2003,2015,2029,2039],{},[489,2004,2005,2007,2008,2010,2011,2014],{},[493,2006,507],{}," — единственный правильный способ создать ",[493,2009,133],{},". Он устраняет дублирование параллельных вызовов, разбирает параметры рукопожатия портала из ",[493,2012,2013],{},"window.name"," и ждёт, пока родительское окно подтвердит payload авторизации.",[489,2016,2017,2020,2021,2024,2025,2028],{},[493,2018,2019],{},"parent.setTitle()"," и ",[493,2022,2023],{},"parent.resizeWindowAuto()"," пересекают границу iframe через ",[493,2026,2027],{},"postMessage",". Оба идемпотентны — вызывайте их всякий раз при изменении вёрстки.",[489,2030,2031,2034,2035,2038],{},[493,2032,2033],{},"options.appGet()"," синхронный, потому что значения загружаются один раз во время рукопожатия. ",[493,2036,2037],{},"options.appSet()"," асинхронный, потому что делает round-trip к серверу.",[489,2040,2041,2044,2045,2048,2049,2052],{},[493,2042,2043],{},"slider.openPath(url, width)"," принимает экземпляр ",[493,2046,2047],{},"URL"," (не строку) и возвращает ",[493,2050,2051],{},"Promise\u003CStatusClose>",", который разрешается, когда пользователь закрывает слайдер. CSP портала разрешает открывать URL только на домене того же портала.",[474,2054,2056],{"id":2055},"limitations","Ограничения",[486,2058,2059,2071,2077,2083],{},[489,2060,2061,2062,2066,2067,2070],{},"Компонент должен монтироваться ",[2063,2064,2065],"strong",{},"внутри"," iframe Bitrix24; запуск отдельно (например, в Storybook) сразу падает, потому что родительского окна нет. Защищайтесь проверкой ",[493,2068,2069],{},"window.parent === window",", если нужен мягкий фолбэк.",[489,2072,2073,2076],{},[493,2074,2075],{},"$b24.options.appSet()"," записывает по одной опции за раз. Несколько записей в одном рендере — нормально (SDK их сериализует), но каждый вызов — это сетевой round-trip.",[489,2078,2079,2082],{},[493,2080,2081],{},"parent.closeApplication()"," закрывает слайдер приложения только когда placement поддерживает закрытие. Встроенные placement (виджеты сайдбара) игнорируют запрос.",[489,2084,2085,2086,2089,2090,693],{},"Опции уровня приложения видны каждому пользователю приложения на портале. Для пользовательских настроек используйте ",[493,2087,2088],{},"userGet"," \u002F ",[493,2091,2092],{},"userSet",[474,2094,2096],{"id":2095},"see-also","См. также",[486,2098,2099,2107,2116,2124],{},[489,2100,2101],{},[2102,2103,2105],"a",{"href":2104},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-initialize-b24-frame\u002F",[493,2106,507],{},[489,2108,2109,2115],{},[2102,2110,2112],{"href":2111},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-parent\u002F",[493,2113,2114],{},"B24Frame.parent"," — заголовок, ресайз, закрытие, IM-хелперы.",[489,2117,2118],{},[2102,2119,2121],{"href":2120},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-slider\u002F",[493,2122,2123],{},"B24Frame.slider",[489,2125,2126,2132],{},[2102,2127,2129],{"href":2128},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-options\u002F",[493,2130,2131],{},"B24Frame.options"," — хранилище опций приложения и пользователя.",[2134,2135,2136],"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 .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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .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}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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}",{"title":515,"searchDepth":584,"depth":584,"links":2138},[2139,2140,2141,2142,2143,2144,2145],{"id":476,"depth":584,"text":477},{"id":483,"depth":584,"text":484},{"id":536,"depth":584,"text":537},{"id":1906,"depth":584,"text":1907},{"id":1999,"depth":584,"text":2000},{"id":2055,"depth":584,"text":2056},{"id":2095,"depth":584,"text":2096},"md",[2148,2151],{"label":133,"iconName":2149,"to":2150},"GitHubIcon","https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Fframe\u002Fb24.ts",{"label":2152,"iconName":2149,"to":2153},"initializeB24Frame","https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Floader-b24frame.ts",{},{"title":390},{"title":461,"description":393},"ygI-R9sdFpNvivI-ip-82vJQIqj1gPi5IGLlT2rCSeY",{"data":2159,"body":2160},{},{"type":2161,"children":2162},"root",[2163],{"type":2164,"tag":470,"props":2165,"children":2166},"element",{},[2167],{"type":2168,"value":393},"text",1783080213473]