[{"data":1,"prerenderedAt":2938},["ShallowReactive",2],{"navigation":3,"-docs-examples-crm-analytics":459,"-docs-examples-crm-analytics-description":2927},[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":15,"badge":15,"body":462,"category":362,"description":363,"extension":2917,"links":2918,"meta":2923,"navigation":2924,"path":360,"restApiVersion":15,"seo":2925,"stem":361,"__hash__":2926},"docs\u002Fdocs\u002F99.examples\u002F1.crm-analytics.md","Аналитика CRM — воронка продаж",{"type":463,"value":464,"toc":2909},"minimark",[465,470,474,478,481,485,522,526,543,546,2848,2852,2905],[466,467,469],"h2",{"id":468},"what-it-does","Что делает",[471,472,473],"p",{},"Загружает все сделки портала чанками (не грузит все строки в RAM), группирует их по стадиям и печатает в консоль отчёт по воронке: количество, проценты конверсии, средний чек, общую выручку, win rate.",[466,475,477],{"id":476},"stack","Стек",[471,479,480],{},"Node.js 18+. Без внешних зависимостей.",[466,482,484],{"id":483},"environment","Переменные окружения",[486,487,492],"pre",{"className":488,"code":489,"language":490,"meta":491,"style":491},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export B24_HOOK='https:\u002F\u002Fyour.bitrix24.com\u002Frest\u002F1\u002Fsecret'\n","bash","",[493,494,495],"code",{"__ignoreMap":491},[496,497,500,504,508,512,515,519],"span",{"class":498,"line":499},"line",1,[496,501,503],{"class":502},"spNyl","export",[496,505,507],{"class":506},"sTEyZ"," B24_HOOK",[496,509,511],{"class":510},"sMK4o","=",[496,513,514],{"class":510},"'",[496,516,518],{"class":517},"sfazB","https:\u002F\u002Fyour.bitrix24.com\u002Frest\u002F1\u002Fsecret",[496,520,521],{"class":510},"'\n",[466,523,525],{"id":524},"run","Запуск",[486,527,529],{"className":488,"code":528,"language":490,"meta":491,"style":491},"npx tsx 01-crm-analytics.ts\n",[493,530,531],{"__ignoreMap":491},[496,532,533,537,540],{"class":498,"line":499},[496,534,536],{"class":535},"sBMFI","npx",[496,538,539],{"class":517}," tsx",[496,541,542],{"class":517}," 01-crm-analytics.ts\n",[466,544,545],{"id":493},"Код",[486,547,552],{"className":548,"code":549,"filename":550,"language":551,"meta":491,"style":491},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {\n  B24Hook,\n  ConsoleV2Handler,\n  EnumCrmEntityTypeId,\n  LogLevel,\n  Logger,\n  type TypeB24\n} from '@bitrix24\u002Fb24jssdk'\n\n\u002F\u002F Новый логгер SDK. См. \u002Fdocs\u002Fworking-with-the-rest-api\u002Flogger\u002F.\nconst logger = Logger.create('CrmAnalytics')\nlogger.pushHandler(new ConsoleV2Handler(LogLevel.INFO, { useStyles: false }))\n\nfunction bootB24(): TypeB24 {\n  const url = process.env.B24_HOOK\n  if (!url) throw new Error('B24_HOOK env var is required')\n  const $b24 = B24Hook.fromWebhookUrl(url)\n  $b24.offClientSideWarning?.()\n  return $b24\n}\n\nconst STAGE_NAMES: Record\u003Cstring, string> = {\n  NEW: 'New',\n  PREPARATION: 'Preparation',\n  PREPAYMENT_INVOICE: 'Prepayment invoice',\n  EXECUTING: 'Executing',\n  FINAL_INVOICE: 'Final invoice',\n  WON: 'Won',\n  LOSE: 'Lost'\n}\n\nconst baseStage = (s: string) => (s.includes(':') ? s.split(':')[1] : s)\n\ninterface DealRow {\n  id: number\n  stageId: string\n  opportunity: number\n  currencyId: string\n}\n\nasync function loadAllDeals($b24: TypeB24): Promise\u003CDealRow[]> {\n  const out: DealRow[] = []\n  \u002F\u002F Heartbeat каждые N элементов, чтобы долгая загрузка на большом портале не выглядела\n  \u002F\u002F как зависание. Уберите на маленьких порталах, где выполнение занимает доли секунды.\n  const progressEvery = 500\n  let nextProgressAt = progressEvery\n  const startedAt = Date.now()\n\n  const generator = $b24.actions.v2.fetchList.make\u003CDealRow>({\n    method: 'crm.item.list',\n    params: {\n      entityTypeId: EnumCrmEntityTypeId.deal,\n      select: ['id', 'stageId', 'opportunity', 'currencyId']\n    },\n    idKey: 'id',\n    customKeyForResult: 'items',\n    requestId: 'load-deals'\n  })\n\n  for await (const chunk of generator) {\n    for (const it of chunk) {\n      out.push({\n        id: Number(it.id),\n        stageId: it.stageId,\n        opportunity: Number(it.opportunity ?? 0),\n        currencyId: it.currencyId ?? 'RUB'\n      })\n    }\n    if (out.length >= nextProgressAt) {\n      const elapsed = ((Date.now() - startedAt) \u002F 1000).toFixed(1)\n      logger.info(`  …${out.length} deals so far (${elapsed}s)`)\n      nextProgressAt += progressEvery\n    }\n  }\n  return out\n}\n\ninterface StageStat { count: number; total: number }\n\nfunction analyseFunnel(deals: DealRow[]): Map\u003Cstring, StageStat> {\n  const stages = new Map\u003Cstring, StageStat>()\n  for (const d of deals) {\n    const s = stages.get(d.stageId) ?? { count: 0, total: 0 }\n    s.count += 1\n    s.total += d.opportunity\n    stages.set(d.stageId, s)\n  }\n  return stages\n}\n\nfunction printFunnel(stages: Map\u003Cstring, StageStat>, totalDeals: number) {\n  const order = ['NEW', 'PREPARATION', 'PREPAYMENT_INVOICE', 'EXECUTING', 'FINAL_INVOICE', 'WON', 'LOSE']\n  console.log(`Total deals: ${totalDeals}`)\n  for (const baseId of order) {\n    let count = 0\n    let total = 0\n    for (const [sid, s] of stages) {\n      if (baseStage(sid) === baseId) { count += s.count; total += s.total }\n    }\n    if (count === 0) continue\n    const conversion = totalDeals > 0 ? (count \u002F totalDeals) * 100 : 0\n    const avg = count > 0 ? total \u002F count : 0\n    console.log(`  ${STAGE_NAMES[baseId].padEnd(25)} ${String(count).padStart(8)} ${conversion.toFixed(1).padStart(9)}%  avg=${avg.toFixed(0)}`)\n  }\n}\n\nasync function main() {\n  const $b24 = bootB24()\n  const deals = await loadAllDeals($b24)\n  logger.info(`Loaded ${deals.length} deals`)\n  printFunnel(analyseFunnel(deals), deals.length)\n}\n\nmain().catch((e: unknown) => {\n  console.error('\\n[recipe failed]', e instanceof Error ? `${e.name}: ${e.message}` : String(e))\n  if (e instanceof Error && e.stack) console.error(e.stack)\n  process.exit(1)\n})\n","01-crm-analytics.ts","ts",[493,553,554,563,572,580,588,596,604,613,630,637,644,678,727,732,749,774,812,836,853,862,868,873,904,921,938,955,972,989,1006,1021,1026,1031,1109,1114,1125,1136,1147,1157,1167,1172,1177,1216,1236,1242,1248,1261,1275,1295,1300,1342,1359,1369,1387,1435,1441,1457,1474,1489,1497,1502,1527,1548,1563,1587,1603,1631,1654,1662,1668,1693,1743,1790,1801,1806,1812,1820,1825,1830,1861,1866,1902,1928,1949,1998,2014,2033,2058,2063,2071,2076,2081,2120,2195,2223,2243,2256,2267,2296,2347,2352,2371,2413,2441,2549,2554,2559,2564,2579,2592,2611,2644,2671,2676,2681,2712,2783,2824,2841],{"__ignoreMap":491},[496,555,556,560],{"class":498,"line":499},[496,557,559],{"class":558},"s7zQu","import",[496,561,562],{"class":510}," {\n",[496,564,566,569],{"class":498,"line":565},2,[496,567,568],{"class":506},"  B24Hook",[496,570,571],{"class":510},",\n",[496,573,575,578],{"class":498,"line":574},3,[496,576,577],{"class":506},"  ConsoleV2Handler",[496,579,571],{"class":510},[496,581,583,586],{"class":498,"line":582},4,[496,584,585],{"class":506},"  EnumCrmEntityTypeId",[496,587,571],{"class":510},[496,589,591,594],{"class":498,"line":590},5,[496,592,593],{"class":506},"  LogLevel",[496,595,571],{"class":510},[496,597,599,602],{"class":498,"line":598},6,[496,600,601],{"class":506},"  Logger",[496,603,571],{"class":510},[496,605,607,610],{"class":498,"line":606},7,[496,608,609],{"class":558},"  type",[496,611,612],{"class":506}," TypeB24\n",[496,614,616,619,622,625,628],{"class":498,"line":615},8,[496,617,618],{"class":510},"}",[496,620,621],{"class":558}," from",[496,623,624],{"class":510}," '",[496,626,627],{"class":517},"@bitrix24\u002Fb24jssdk",[496,629,521],{"class":510},[496,631,633],{"class":498,"line":632},9,[496,634,636],{"emptyLinePlaceholder":635},true,"\n",[496,638,640],{"class":498,"line":639},10,[496,641,643],{"class":642},"sHwdD","\u002F\u002F Новый логгер SDK. См. \u002Fdocs\u002Fworking-with-the-rest-api\u002Flogger\u002F.\n",[496,645,647,650,653,655,658,661,665,668,670,673,675],{"class":498,"line":646},11,[496,648,649],{"class":502},"const",[496,651,652],{"class":506}," logger ",[496,654,511],{"class":510},[496,656,657],{"class":506}," Logger",[496,659,660],{"class":510},".",[496,662,664],{"class":663},"s2Zo4","create",[496,666,667],{"class":506},"(",[496,669,514],{"class":510},[496,671,672],{"class":517},"CrmAnalytics",[496,674,514],{"class":510},[496,676,677],{"class":506},")\n",[496,679,681,683,685,688,690,693,696,699,701,704,707,710,714,717,721,724],{"class":498,"line":680},12,[496,682,249],{"class":506},[496,684,660],{"class":510},[496,686,687],{"class":663},"pushHandler",[496,689,667],{"class":506},[496,691,692],{"class":510},"new",[496,694,695],{"class":663}," ConsoleV2Handler",[496,697,698],{"class":506},"(LogLevel",[496,700,660],{"class":510},[496,702,703],{"class":506},"INFO",[496,705,706],{"class":510},",",[496,708,709],{"class":510}," {",[496,711,713],{"class":712},"swJcz"," useStyles",[496,715,716],{"class":510},":",[496,718,720],{"class":719},"sfNiH"," false",[496,722,723],{"class":510}," }",[496,725,726],{"class":506},"))\n",[496,728,730],{"class":498,"line":729},13,[496,731,636],{"emptyLinePlaceholder":635},[496,733,735,738,741,744,747],{"class":498,"line":734},14,[496,736,737],{"class":502},"function",[496,739,740],{"class":663}," bootB24",[496,742,743],{"class":510},"():",[496,745,746],{"class":535}," TypeB24",[496,748,562],{"class":510},[496,750,752,755,758,761,764,766,769,771],{"class":498,"line":751},15,[496,753,754],{"class":502},"  const",[496,756,757],{"class":506}," url",[496,759,760],{"class":510}," =",[496,762,763],{"class":506}," process",[496,765,660],{"class":510},[496,767,768],{"class":506},"env",[496,770,660],{"class":510},[496,772,773],{"class":506},"B24_HOOK\n",[496,775,777,780,783,786,789,792,795,798,801,803,805,808,810],{"class":498,"line":776},16,[496,778,779],{"class":558},"  if",[496,781,782],{"class":712}," (",[496,784,785],{"class":510},"!",[496,787,788],{"class":506},"url",[496,790,791],{"class":712},") ",[496,793,794],{"class":558},"throw",[496,796,797],{"class":510}," new",[496,799,800],{"class":663}," Error",[496,802,667],{"class":712},[496,804,514],{"class":510},[496,806,807],{"class":517},"B24_HOOK env var is required",[496,809,514],{"class":510},[496,811,677],{"class":712},[496,813,815,817,820,822,825,827,830,832,834],{"class":498,"line":814},17,[496,816,754],{"class":502},[496,818,819],{"class":506}," $b24",[496,821,760],{"class":510},[496,823,824],{"class":506}," B24Hook",[496,826,660],{"class":510},[496,828,829],{"class":663},"fromWebhookUrl",[496,831,667],{"class":712},[496,833,788],{"class":506},[496,835,677],{"class":712},[496,837,839,842,844,847,850],{"class":498,"line":838},18,[496,840,841],{"class":506},"  $b24",[496,843,660],{"class":510},[496,845,846],{"class":663},"offClientSideWarning",[496,848,849],{"class":510},"?.",[496,851,852],{"class":712},"()\n",[496,854,856,859],{"class":498,"line":855},19,[496,857,858],{"class":558},"  return",[496,860,861],{"class":506}," $b24\n",[496,863,865],{"class":498,"line":864},20,[496,866,867],{"class":510},"}\n",[496,869,871],{"class":498,"line":870},21,[496,872,636],{"emptyLinePlaceholder":635},[496,874,876,878,881,883,886,889,892,894,897,900,902],{"class":498,"line":875},22,[496,877,649],{"class":502},[496,879,880],{"class":506}," STAGE_NAMES",[496,882,716],{"class":510},[496,884,885],{"class":535}," Record",[496,887,888],{"class":510},"\u003C",[496,890,891],{"class":535},"string",[496,893,706],{"class":510},[496,895,896],{"class":535}," string",[496,898,899],{"class":510},">",[496,901,760],{"class":510},[496,903,562],{"class":510},[496,905,907,910,912,914,917,919],{"class":498,"line":906},23,[496,908,909],{"class":712},"  NEW",[496,911,716],{"class":510},[496,913,624],{"class":510},[496,915,916],{"class":517},"New",[496,918,514],{"class":510},[496,920,571],{"class":510},[496,922,924,927,929,931,934,936],{"class":498,"line":923},24,[496,925,926],{"class":712},"  PREPARATION",[496,928,716],{"class":510},[496,930,624],{"class":510},[496,932,933],{"class":517},"Preparation",[496,935,514],{"class":510},[496,937,571],{"class":510},[496,939,941,944,946,948,951,953],{"class":498,"line":940},25,[496,942,943],{"class":712},"  PREPAYMENT_INVOICE",[496,945,716],{"class":510},[496,947,624],{"class":510},[496,949,950],{"class":517},"Prepayment invoice",[496,952,514],{"class":510},[496,954,571],{"class":510},[496,956,958,961,963,965,968,970],{"class":498,"line":957},26,[496,959,960],{"class":712},"  EXECUTING",[496,962,716],{"class":510},[496,964,624],{"class":510},[496,966,967],{"class":517},"Executing",[496,969,514],{"class":510},[496,971,571],{"class":510},[496,973,975,978,980,982,985,987],{"class":498,"line":974},27,[496,976,977],{"class":712},"  FINAL_INVOICE",[496,979,716],{"class":510},[496,981,624],{"class":510},[496,983,984],{"class":517},"Final invoice",[496,986,514],{"class":510},[496,988,571],{"class":510},[496,990,992,995,997,999,1002,1004],{"class":498,"line":991},28,[496,993,994],{"class":712},"  WON",[496,996,716],{"class":510},[496,998,624],{"class":510},[496,1000,1001],{"class":517},"Won",[496,1003,514],{"class":510},[496,1005,571],{"class":510},[496,1007,1009,1012,1014,1016,1019],{"class":498,"line":1008},29,[496,1010,1011],{"class":712},"  LOSE",[496,1013,716],{"class":510},[496,1015,624],{"class":510},[496,1017,1018],{"class":517},"Lost",[496,1020,521],{"class":510},[496,1022,1024],{"class":498,"line":1023},30,[496,1025,867],{"class":510},[496,1027,1029],{"class":498,"line":1028},31,[496,1030,636],{"emptyLinePlaceholder":635},[496,1032,1034,1036,1039,1041,1043,1047,1049,1051,1054,1057,1060,1062,1065,1067,1069,1071,1073,1075,1078,1081,1083,1086,1088,1090,1092,1094,1097,1101,1104,1106],{"class":498,"line":1033},32,[496,1035,649],{"class":502},[496,1037,1038],{"class":506}," baseStage ",[496,1040,511],{"class":510},[496,1042,782],{"class":510},[496,1044,1046],{"class":1045},"sHdIc","s",[496,1048,716],{"class":510},[496,1050,896],{"class":535},[496,1052,1053],{"class":510},")",[496,1055,1056],{"class":502}," =>",[496,1058,1059],{"class":506}," (s",[496,1061,660],{"class":510},[496,1063,1064],{"class":663},"includes",[496,1066,667],{"class":506},[496,1068,514],{"class":510},[496,1070,716],{"class":517},[496,1072,514],{"class":510},[496,1074,791],{"class":506},[496,1076,1077],{"class":510},"?",[496,1079,1080],{"class":506}," s",[496,1082,660],{"class":510},[496,1084,1085],{"class":663},"split",[496,1087,667],{"class":506},[496,1089,514],{"class":510},[496,1091,716],{"class":517},[496,1093,514],{"class":510},[496,1095,1096],{"class":506},")[",[496,1098,1100],{"class":1099},"sbssI","1",[496,1102,1103],{"class":506},"] ",[496,1105,716],{"class":510},[496,1107,1108],{"class":506}," s)\n",[496,1110,1112],{"class":498,"line":1111},33,[496,1113,636],{"emptyLinePlaceholder":635},[496,1115,1117,1120,1123],{"class":498,"line":1116},34,[496,1118,1119],{"class":502},"interface",[496,1121,1122],{"class":535}," DealRow",[496,1124,562],{"class":510},[496,1126,1128,1131,1133],{"class":498,"line":1127},35,[496,1129,1130],{"class":712},"  id",[496,1132,716],{"class":510},[496,1134,1135],{"class":535}," number\n",[496,1137,1139,1142,1144],{"class":498,"line":1138},36,[496,1140,1141],{"class":712},"  stageId",[496,1143,716],{"class":510},[496,1145,1146],{"class":535}," string\n",[496,1148,1150,1153,1155],{"class":498,"line":1149},37,[496,1151,1152],{"class":712},"  opportunity",[496,1154,716],{"class":510},[496,1156,1135],{"class":535},[496,1158,1160,1163,1165],{"class":498,"line":1159},38,[496,1161,1162],{"class":712},"  currencyId",[496,1164,716],{"class":510},[496,1166,1146],{"class":535},[496,1168,1170],{"class":498,"line":1169},39,[496,1171,867],{"class":510},[496,1173,1175],{"class":498,"line":1174},40,[496,1176,636],{"emptyLinePlaceholder":635},[496,1178,1180,1183,1186,1189,1191,1194,1196,1198,1201,1204,1206,1209,1212,1214],{"class":498,"line":1179},41,[496,1181,1182],{"class":502},"async",[496,1184,1185],{"class":502}," function",[496,1187,1188],{"class":663}," loadAllDeals",[496,1190,667],{"class":510},[496,1192,1193],{"class":1045},"$b24",[496,1195,716],{"class":510},[496,1197,746],{"class":535},[496,1199,1200],{"class":510},"):",[496,1202,1203],{"class":535}," Promise",[496,1205,888],{"class":510},[496,1207,1208],{"class":535},"DealRow",[496,1210,1211],{"class":506},"[]",[496,1213,899],{"class":510},[496,1215,562],{"class":510},[496,1217,1219,1221,1224,1226,1228,1231,1233],{"class":498,"line":1218},42,[496,1220,754],{"class":502},[496,1222,1223],{"class":506}," out",[496,1225,716],{"class":510},[496,1227,1122],{"class":535},[496,1229,1230],{"class":712},"[] ",[496,1232,511],{"class":510},[496,1234,1235],{"class":712}," []\n",[496,1237,1239],{"class":498,"line":1238},43,[496,1240,1241],{"class":642},"  \u002F\u002F Heartbeat каждые N элементов, чтобы долгая загрузка на большом портале не выглядела\n",[496,1243,1245],{"class":498,"line":1244},44,[496,1246,1247],{"class":642},"  \u002F\u002F как зависание. Уберите на маленьких порталах, где выполнение занимает доли секунды.\n",[496,1249,1251,1253,1256,1258],{"class":498,"line":1250},45,[496,1252,754],{"class":502},[496,1254,1255],{"class":506}," progressEvery",[496,1257,760],{"class":510},[496,1259,1260],{"class":1099}," 500\n",[496,1262,1264,1267,1270,1272],{"class":498,"line":1263},46,[496,1265,1266],{"class":502},"  let",[496,1268,1269],{"class":506}," nextProgressAt",[496,1271,760],{"class":510},[496,1273,1274],{"class":506}," progressEvery\n",[496,1276,1278,1280,1283,1285,1288,1290,1293],{"class":498,"line":1277},47,[496,1279,754],{"class":502},[496,1281,1282],{"class":506}," startedAt",[496,1284,760],{"class":510},[496,1286,1287],{"class":506}," Date",[496,1289,660],{"class":510},[496,1291,1292],{"class":663},"now",[496,1294,852],{"class":712},[496,1296,1298],{"class":498,"line":1297},48,[496,1299,636],{"emptyLinePlaceholder":635},[496,1301,1303,1305,1308,1310,1312,1314,1316,1318,1321,1323,1326,1328,1331,1333,1335,1337,1339],{"class":498,"line":1302},49,[496,1304,754],{"class":502},[496,1306,1307],{"class":506}," generator",[496,1309,760],{"class":510},[496,1311,819],{"class":506},[496,1313,660],{"class":510},[496,1315,91],{"class":506},[496,1317,660],{"class":510},[496,1319,1320],{"class":506},"v2",[496,1322,660],{"class":510},[496,1324,1325],{"class":506},"fetchList",[496,1327,660],{"class":510},[496,1329,1330],{"class":663},"make",[496,1332,888],{"class":510},[496,1334,1208],{"class":535},[496,1336,899],{"class":510},[496,1338,667],{"class":712},[496,1340,1341],{"class":510},"{\n",[496,1343,1345,1348,1350,1352,1355,1357],{"class":498,"line":1344},50,[496,1346,1347],{"class":712},"    method",[496,1349,716],{"class":510},[496,1351,624],{"class":510},[496,1353,1354],{"class":517},"crm.item.list",[496,1356,514],{"class":510},[496,1358,571],{"class":510},[496,1360,1362,1365,1367],{"class":498,"line":1361},51,[496,1363,1364],{"class":712},"    params",[496,1366,716],{"class":510},[496,1368,562],{"class":510},[496,1370,1372,1375,1377,1380,1382,1385],{"class":498,"line":1371},52,[496,1373,1374],{"class":712},"      entityTypeId",[496,1376,716],{"class":510},[496,1378,1379],{"class":506}," EnumCrmEntityTypeId",[496,1381,660],{"class":510},[496,1383,1384],{"class":506},"deal",[496,1386,571],{"class":510},[496,1388,1390,1393,1395,1398,1400,1403,1405,1407,1409,1412,1414,1416,1418,1421,1423,1425,1427,1430,1432],{"class":498,"line":1389},53,[496,1391,1392],{"class":712},"      select",[496,1394,716],{"class":510},[496,1396,1397],{"class":712}," [",[496,1399,514],{"class":510},[496,1401,1402],{"class":517},"id",[496,1404,514],{"class":510},[496,1406,706],{"class":510},[496,1408,624],{"class":510},[496,1410,1411],{"class":517},"stageId",[496,1413,514],{"class":510},[496,1415,706],{"class":510},[496,1417,624],{"class":510},[496,1419,1420],{"class":517},"opportunity",[496,1422,514],{"class":510},[496,1424,706],{"class":510},[496,1426,624],{"class":510},[496,1428,1429],{"class":517},"currencyId",[496,1431,514],{"class":510},[496,1433,1434],{"class":712},"]\n",[496,1436,1438],{"class":498,"line":1437},54,[496,1439,1440],{"class":510},"    },\n",[496,1442,1444,1447,1449,1451,1453,1455],{"class":498,"line":1443},55,[496,1445,1446],{"class":712},"    idKey",[496,1448,716],{"class":510},[496,1450,624],{"class":510},[496,1452,1402],{"class":517},[496,1454,514],{"class":510},[496,1456,571],{"class":510},[496,1458,1460,1463,1465,1467,1470,1472],{"class":498,"line":1459},56,[496,1461,1462],{"class":712},"    customKeyForResult",[496,1464,716],{"class":510},[496,1466,624],{"class":510},[496,1468,1469],{"class":517},"items",[496,1471,514],{"class":510},[496,1473,571],{"class":510},[496,1475,1477,1480,1482,1484,1487],{"class":498,"line":1476},57,[496,1478,1479],{"class":712},"    requestId",[496,1481,716],{"class":510},[496,1483,624],{"class":510},[496,1485,1486],{"class":517},"load-deals",[496,1488,521],{"class":510},[496,1490,1492,1495],{"class":498,"line":1491},58,[496,1493,1494],{"class":510},"  }",[496,1496,677],{"class":712},[496,1498,1500],{"class":498,"line":1499},59,[496,1501,636],{"emptyLinePlaceholder":635},[496,1503,1505,1508,1511,1513,1515,1518,1521,1523,1525],{"class":498,"line":1504},60,[496,1506,1507],{"class":558},"  for",[496,1509,1510],{"class":558}," await",[496,1512,782],{"class":712},[496,1514,649],{"class":502},[496,1516,1517],{"class":506}," chunk",[496,1519,1520],{"class":510}," of",[496,1522,1307],{"class":506},[496,1524,791],{"class":712},[496,1526,1341],{"class":510},[496,1528,1530,1533,1535,1537,1540,1542,1544,1546],{"class":498,"line":1529},61,[496,1531,1532],{"class":558},"    for",[496,1534,782],{"class":712},[496,1536,649],{"class":502},[496,1538,1539],{"class":506}," it",[496,1541,1520],{"class":510},[496,1543,1517],{"class":506},[496,1545,791],{"class":712},[496,1547,1341],{"class":510},[496,1549,1551,1554,1556,1559,1561],{"class":498,"line":1550},62,[496,1552,1553],{"class":506},"      out",[496,1555,660],{"class":510},[496,1557,1558],{"class":663},"push",[496,1560,667],{"class":712},[496,1562,1341],{"class":510},[496,1564,1566,1569,1571,1574,1576,1579,1581,1583,1585],{"class":498,"line":1565},63,[496,1567,1568],{"class":712},"        id",[496,1570,716],{"class":510},[496,1572,1573],{"class":663}," Number",[496,1575,667],{"class":712},[496,1577,1578],{"class":506},"it",[496,1580,660],{"class":510},[496,1582,1402],{"class":506},[496,1584,1053],{"class":712},[496,1586,571],{"class":510},[496,1588,1590,1593,1595,1597,1599,1601],{"class":498,"line":1589},64,[496,1591,1592],{"class":712},"        stageId",[496,1594,716],{"class":510},[496,1596,1539],{"class":506},[496,1598,660],{"class":510},[496,1600,1411],{"class":506},[496,1602,571],{"class":510},[496,1604,1606,1609,1611,1613,1615,1617,1619,1621,1624,1627,1629],{"class":498,"line":1605},65,[496,1607,1608],{"class":712},"        opportunity",[496,1610,716],{"class":510},[496,1612,1573],{"class":663},[496,1614,667],{"class":712},[496,1616,1578],{"class":506},[496,1618,660],{"class":510},[496,1620,1420],{"class":506},[496,1622,1623],{"class":510}," ??",[496,1625,1626],{"class":1099}," 0",[496,1628,1053],{"class":712},[496,1630,571],{"class":510},[496,1632,1634,1637,1639,1641,1643,1645,1647,1649,1652],{"class":498,"line":1633},66,[496,1635,1636],{"class":712},"        currencyId",[496,1638,716],{"class":510},[496,1640,1539],{"class":506},[496,1642,660],{"class":510},[496,1644,1429],{"class":506},[496,1646,1623],{"class":510},[496,1648,624],{"class":510},[496,1650,1651],{"class":517},"RUB",[496,1653,521],{"class":510},[496,1655,1657,1660],{"class":498,"line":1656},67,[496,1658,1659],{"class":510},"      }",[496,1661,677],{"class":712},[496,1663,1665],{"class":498,"line":1664},68,[496,1666,1667],{"class":510},"    }\n",[496,1669,1671,1674,1676,1679,1681,1684,1687,1689,1691],{"class":498,"line":1670},69,[496,1672,1673],{"class":558},"    if",[496,1675,782],{"class":712},[496,1677,1678],{"class":506},"out",[496,1680,660],{"class":510},[496,1682,1683],{"class":506},"length",[496,1685,1686],{"class":510}," >=",[496,1688,1269],{"class":506},[496,1690,791],{"class":712},[496,1692,1341],{"class":510},[496,1694,1696,1699,1702,1704,1707,1710,1712,1714,1717,1720,1722,1724,1727,1730,1732,1734,1737,1739,1741],{"class":498,"line":1695},70,[496,1697,1698],{"class":502},"      const",[496,1700,1701],{"class":506}," elapsed",[496,1703,760],{"class":510},[496,1705,1706],{"class":712}," ((",[496,1708,1709],{"class":506},"Date",[496,1711,660],{"class":510},[496,1713,1292],{"class":663},[496,1715,1716],{"class":712},"() ",[496,1718,1719],{"class":510},"-",[496,1721,1282],{"class":506},[496,1723,791],{"class":712},[496,1725,1726],{"class":510},"\u002F",[496,1728,1729],{"class":1099}," 1000",[496,1731,1053],{"class":712},[496,1733,660],{"class":510},[496,1735,1736],{"class":663},"toFixed",[496,1738,667],{"class":712},[496,1740,1100],{"class":1099},[496,1742,677],{"class":712},[496,1744,1746,1749,1751,1754,1756,1759,1762,1765,1767,1769,1771,1773,1776,1778,1781,1783,1786,1788],{"class":498,"line":1745},71,[496,1747,1748],{"class":506},"      logger",[496,1750,660],{"class":510},[496,1752,1753],{"class":663},"info",[496,1755,667],{"class":712},[496,1757,1758],{"class":510},"`",[496,1760,1761],{"class":517},"  …",[496,1763,1764],{"class":510},"${",[496,1766,1678],{"class":506},[496,1768,660],{"class":510},[496,1770,1683],{"class":506},[496,1772,618],{"class":510},[496,1774,1775],{"class":517}," deals so far (",[496,1777,1764],{"class":510},[496,1779,1780],{"class":506},"elapsed",[496,1782,618],{"class":510},[496,1784,1785],{"class":517},"s)",[496,1787,1758],{"class":510},[496,1789,677],{"class":712},[496,1791,1793,1796,1799],{"class":498,"line":1792},72,[496,1794,1795],{"class":506},"      nextProgressAt",[496,1797,1798],{"class":510}," +=",[496,1800,1274],{"class":506},[496,1802,1804],{"class":498,"line":1803},73,[496,1805,1667],{"class":510},[496,1807,1809],{"class":498,"line":1808},74,[496,1810,1811],{"class":510},"  }\n",[496,1813,1815,1817],{"class":498,"line":1814},75,[496,1816,858],{"class":558},[496,1818,1819],{"class":506}," out\n",[496,1821,1823],{"class":498,"line":1822},76,[496,1824,867],{"class":510},[496,1826,1828],{"class":498,"line":1827},77,[496,1829,636],{"emptyLinePlaceholder":635},[496,1831,1833,1835,1838,1840,1843,1845,1848,1851,1854,1856,1858],{"class":498,"line":1832},78,[496,1834,1119],{"class":502},[496,1836,1837],{"class":535}," StageStat",[496,1839,709],{"class":510},[496,1841,1842],{"class":712}," count",[496,1844,716],{"class":510},[496,1846,1847],{"class":535}," number",[496,1849,1850],{"class":510},";",[496,1852,1853],{"class":712}," total",[496,1855,716],{"class":510},[496,1857,1847],{"class":535},[496,1859,1860],{"class":510}," }\n",[496,1862,1864],{"class":498,"line":1863},79,[496,1865,636],{"emptyLinePlaceholder":635},[496,1867,1869,1871,1874,1876,1879,1881,1883,1885,1887,1890,1892,1894,1896,1898,1900],{"class":498,"line":1868},80,[496,1870,737],{"class":502},[496,1872,1873],{"class":663}," analyseFunnel",[496,1875,667],{"class":510},[496,1877,1878],{"class":1045},"deals",[496,1880,716],{"class":510},[496,1882,1122],{"class":535},[496,1884,1211],{"class":506},[496,1886,1200],{"class":510},[496,1888,1889],{"class":535}," Map",[496,1891,888],{"class":510},[496,1893,891],{"class":535},[496,1895,706],{"class":510},[496,1897,1837],{"class":535},[496,1899,899],{"class":510},[496,1901,562],{"class":510},[496,1903,1905,1907,1910,1912,1914,1916,1918,1920,1922,1924,1926],{"class":498,"line":1904},81,[496,1906,754],{"class":502},[496,1908,1909],{"class":506}," stages",[496,1911,760],{"class":510},[496,1913,797],{"class":510},[496,1915,1889],{"class":663},[496,1917,888],{"class":510},[496,1919,891],{"class":535},[496,1921,706],{"class":510},[496,1923,1837],{"class":535},[496,1925,899],{"class":510},[496,1927,852],{"class":712},[496,1929,1931,1933,1935,1937,1940,1942,1945,1947],{"class":498,"line":1930},82,[496,1932,1507],{"class":558},[496,1934,782],{"class":712},[496,1936,649],{"class":502},[496,1938,1939],{"class":506}," d",[496,1941,1520],{"class":510},[496,1943,1944],{"class":506}," deals",[496,1946,791],{"class":712},[496,1948,1341],{"class":510},[496,1950,1952,1955,1957,1959,1961,1963,1966,1968,1971,1973,1975,1977,1980,1982,1984,1986,1988,1990,1992,1994,1996],{"class":498,"line":1951},83,[496,1953,1954],{"class":502},"    const",[496,1956,1080],{"class":506},[496,1958,760],{"class":510},[496,1960,1909],{"class":506},[496,1962,660],{"class":510},[496,1964,1965],{"class":663},"get",[496,1967,667],{"class":712},[496,1969,1970],{"class":506},"d",[496,1972,660],{"class":510},[496,1974,1411],{"class":506},[496,1976,791],{"class":712},[496,1978,1979],{"class":510},"??",[496,1981,709],{"class":510},[496,1983,1842],{"class":712},[496,1985,716],{"class":510},[496,1987,1626],{"class":1099},[496,1989,706],{"class":510},[496,1991,1853],{"class":712},[496,1993,716],{"class":510},[496,1995,1626],{"class":1099},[496,1997,1860],{"class":510},[496,1999,2001,2004,2006,2009,2011],{"class":498,"line":2000},84,[496,2002,2003],{"class":506},"    s",[496,2005,660],{"class":510},[496,2007,2008],{"class":506},"count",[496,2010,1798],{"class":510},[496,2012,2013],{"class":1099}," 1\n",[496,2015,2017,2019,2021,2024,2026,2028,2030],{"class":498,"line":2016},85,[496,2018,2003],{"class":506},[496,2020,660],{"class":510},[496,2022,2023],{"class":506},"total",[496,2025,1798],{"class":510},[496,2027,1939],{"class":506},[496,2029,660],{"class":510},[496,2031,2032],{"class":506},"opportunity\n",[496,2034,2036,2039,2041,2044,2046,2048,2050,2052,2054,2056],{"class":498,"line":2035},86,[496,2037,2038],{"class":506},"    stages",[496,2040,660],{"class":510},[496,2042,2043],{"class":663},"set",[496,2045,667],{"class":712},[496,2047,1970],{"class":506},[496,2049,660],{"class":510},[496,2051,1411],{"class":506},[496,2053,706],{"class":510},[496,2055,1080],{"class":506},[496,2057,677],{"class":712},[496,2059,2061],{"class":498,"line":2060},87,[496,2062,1811],{"class":510},[496,2064,2066,2068],{"class":498,"line":2065},88,[496,2067,858],{"class":558},[496,2069,2070],{"class":506}," stages\n",[496,2072,2074],{"class":498,"line":2073},89,[496,2075,867],{"class":510},[496,2077,2079],{"class":498,"line":2078},90,[496,2080,636],{"emptyLinePlaceholder":635},[496,2082,2084,2086,2089,2091,2094,2096,2098,2100,2102,2104,2106,2109,2112,2114,2116,2118],{"class":498,"line":2083},91,[496,2085,737],{"class":502},[496,2087,2088],{"class":663}," printFunnel",[496,2090,667],{"class":510},[496,2092,2093],{"class":1045},"stages",[496,2095,716],{"class":510},[496,2097,1889],{"class":535},[496,2099,888],{"class":510},[496,2101,891],{"class":535},[496,2103,706],{"class":510},[496,2105,1837],{"class":535},[496,2107,2108],{"class":510},">,",[496,2110,2111],{"class":1045}," totalDeals",[496,2113,716],{"class":510},[496,2115,1847],{"class":535},[496,2117,1053],{"class":510},[496,2119,562],{"class":510},[496,2121,2123,2125,2128,2130,2132,2134,2137,2139,2141,2143,2146,2148,2150,2152,2155,2157,2159,2161,2164,2166,2168,2170,2173,2175,2177,2179,2182,2184,2186,2188,2191,2193],{"class":498,"line":2122},92,[496,2124,754],{"class":502},[496,2126,2127],{"class":506}," order",[496,2129,760],{"class":510},[496,2131,1397],{"class":712},[496,2133,514],{"class":510},[496,2135,2136],{"class":517},"NEW",[496,2138,514],{"class":510},[496,2140,706],{"class":510},[496,2142,624],{"class":510},[496,2144,2145],{"class":517},"PREPARATION",[496,2147,514],{"class":510},[496,2149,706],{"class":510},[496,2151,624],{"class":510},[496,2153,2154],{"class":517},"PREPAYMENT_INVOICE",[496,2156,514],{"class":510},[496,2158,706],{"class":510},[496,2160,624],{"class":510},[496,2162,2163],{"class":517},"EXECUTING",[496,2165,514],{"class":510},[496,2167,706],{"class":510},[496,2169,624],{"class":510},[496,2171,2172],{"class":517},"FINAL_INVOICE",[496,2174,514],{"class":510},[496,2176,706],{"class":510},[496,2178,624],{"class":510},[496,2180,2181],{"class":517},"WON",[496,2183,514],{"class":510},[496,2185,706],{"class":510},[496,2187,624],{"class":510},[496,2189,2190],{"class":517},"LOSE",[496,2192,514],{"class":510},[496,2194,1434],{"class":712},[496,2196,2198,2201,2203,2206,2208,2210,2213,2215,2218,2221],{"class":498,"line":2197},93,[496,2199,2200],{"class":506},"  console",[496,2202,660],{"class":510},[496,2204,2205],{"class":663},"log",[496,2207,667],{"class":712},[496,2209,1758],{"class":510},[496,2211,2212],{"class":517},"Total deals: ",[496,2214,1764],{"class":510},[496,2216,2217],{"class":506},"totalDeals",[496,2219,2220],{"class":510},"}`",[496,2222,677],{"class":712},[496,2224,2226,2228,2230,2232,2235,2237,2239,2241],{"class":498,"line":2225},94,[496,2227,1507],{"class":558},[496,2229,782],{"class":712},[496,2231,649],{"class":502},[496,2233,2234],{"class":506}," baseId",[496,2236,1520],{"class":510},[496,2238,2127],{"class":506},[496,2240,791],{"class":712},[496,2242,1341],{"class":510},[496,2244,2246,2249,2251,2253],{"class":498,"line":2245},95,[496,2247,2248],{"class":502},"    let",[496,2250,1842],{"class":506},[496,2252,760],{"class":510},[496,2254,2255],{"class":1099}," 0\n",[496,2257,2259,2261,2263,2265],{"class":498,"line":2258},96,[496,2260,2248],{"class":502},[496,2262,1853],{"class":506},[496,2264,760],{"class":510},[496,2266,2255],{"class":1099},[496,2268,2270,2272,2274,2276,2278,2281,2283,2285,2288,2290,2292,2294],{"class":498,"line":2269},97,[496,2271,1532],{"class":558},[496,2273,782],{"class":712},[496,2275,649],{"class":502},[496,2277,1397],{"class":510},[496,2279,2280],{"class":506},"sid",[496,2282,706],{"class":510},[496,2284,1080],{"class":506},[496,2286,2287],{"class":510},"]",[496,2289,1520],{"class":510},[496,2291,1909],{"class":506},[496,2293,791],{"class":712},[496,2295,1341],{"class":510},[496,2297,2299,2302,2304,2307,2309,2311,2313,2316,2318,2320,2323,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345],{"class":498,"line":2298},98,[496,2300,2301],{"class":558},"      if",[496,2303,782],{"class":712},[496,2305,2306],{"class":663},"baseStage",[496,2308,667],{"class":712},[496,2310,2280],{"class":506},[496,2312,791],{"class":712},[496,2314,2315],{"class":510},"===",[496,2317,2234],{"class":506},[496,2319,791],{"class":712},[496,2321,2322],{"class":510},"{",[496,2324,1842],{"class":506},[496,2326,1798],{"class":510},[496,2328,1080],{"class":506},[496,2330,660],{"class":510},[496,2332,2008],{"class":506},[496,2334,1850],{"class":510},[496,2336,1853],{"class":506},[496,2338,1798],{"class":510},[496,2340,1080],{"class":506},[496,2342,660],{"class":510},[496,2344,2023],{"class":506},[496,2346,1860],{"class":510},[496,2348,2350],{"class":498,"line":2349},99,[496,2351,1667],{"class":510},[496,2353,2355,2357,2359,2361,2364,2366,2368],{"class":498,"line":2354},100,[496,2356,1673],{"class":558},[496,2358,782],{"class":712},[496,2360,2008],{"class":506},[496,2362,2363],{"class":510}," ===",[496,2365,1626],{"class":1099},[496,2367,791],{"class":712},[496,2369,2370],{"class":558},"continue\n",[496,2372,2374,2376,2379,2381,2383,2386,2388,2391,2393,2395,2398,2400,2402,2405,2408,2411],{"class":498,"line":2373},101,[496,2375,1954],{"class":502},[496,2377,2378],{"class":506}," conversion",[496,2380,760],{"class":510},[496,2382,2111],{"class":506},[496,2384,2385],{"class":510}," >",[496,2387,1626],{"class":1099},[496,2389,2390],{"class":510}," ?",[496,2392,782],{"class":712},[496,2394,2008],{"class":506},[496,2396,2397],{"class":510}," \u002F",[496,2399,2111],{"class":506},[496,2401,791],{"class":712},[496,2403,2404],{"class":510},"*",[496,2406,2407],{"class":1099}," 100",[496,2409,2410],{"class":510}," :",[496,2412,2255],{"class":1099},[496,2414,2416,2418,2421,2423,2425,2427,2429,2431,2433,2435,2437,2439],{"class":498,"line":2415},102,[496,2417,1954],{"class":502},[496,2419,2420],{"class":506}," avg",[496,2422,760],{"class":510},[496,2424,1842],{"class":506},[496,2426,2385],{"class":510},[496,2428,1626],{"class":1099},[496,2430,2390],{"class":510},[496,2432,1853],{"class":506},[496,2434,2397],{"class":510},[496,2436,1842],{"class":506},[496,2438,2410],{"class":510},[496,2440,2255],{"class":1099},[496,2442,2444,2447,2449,2451,2453,2455,2458,2461,2463,2466,2468,2471,2473,2475,2478,2481,2484,2486,2489,2491,2494,2496,2498,2500,2503,2505,2507,2509,2511,2513,2515,2517,2519,2522,2524,2526,2529,2531,2534,2536,2538,2540,2543,2545,2547],{"class":498,"line":2443},103,[496,2445,2446],{"class":506},"    console",[496,2448,660],{"class":510},[496,2450,2205],{"class":663},[496,2452,667],{"class":712},[496,2454,1758],{"class":510},[496,2456,2457],{"class":510},"  ${",[496,2459,2460],{"class":506},"STAGE_NAMES[baseId]",[496,2462,660],{"class":510},[496,2464,2465],{"class":663},"padEnd",[496,2467,667],{"class":506},[496,2469,2470],{"class":1099},"25",[496,2472,1053],{"class":506},[496,2474,618],{"class":510},[496,2476,2477],{"class":510}," ${",[496,2479,2480],{"class":663},"String",[496,2482,2483],{"class":506},"(count)",[496,2485,660],{"class":510},[496,2487,2488],{"class":663},"padStart",[496,2490,667],{"class":506},[496,2492,2493],{"class":1099},"8",[496,2495,1053],{"class":506},[496,2497,618],{"class":510},[496,2499,2477],{"class":510},[496,2501,2502],{"class":506},"conversion",[496,2504,660],{"class":510},[496,2506,1736],{"class":663},[496,2508,667],{"class":506},[496,2510,1100],{"class":1099},[496,2512,1053],{"class":506},[496,2514,660],{"class":510},[496,2516,2488],{"class":663},[496,2518,667],{"class":506},[496,2520,2521],{"class":1099},"9",[496,2523,1053],{"class":506},[496,2525,618],{"class":510},[496,2527,2528],{"class":517},"%  avg=",[496,2530,1764],{"class":510},[496,2532,2533],{"class":506},"avg",[496,2535,660],{"class":510},[496,2537,1736],{"class":663},[496,2539,667],{"class":506},[496,2541,2542],{"class":1099},"0",[496,2544,1053],{"class":506},[496,2546,2220],{"class":510},[496,2548,677],{"class":712},[496,2550,2552],{"class":498,"line":2551},104,[496,2553,1811],{"class":510},[496,2555,2557],{"class":498,"line":2556},105,[496,2558,867],{"class":510},[496,2560,2562],{"class":498,"line":2561},106,[496,2563,636],{"emptyLinePlaceholder":635},[496,2565,2567,2569,2571,2574,2577],{"class":498,"line":2566},107,[496,2568,1182],{"class":502},[496,2570,1185],{"class":502},[496,2572,2573],{"class":663}," main",[496,2575,2576],{"class":510},"()",[496,2578,562],{"class":510},[496,2580,2582,2584,2586,2588,2590],{"class":498,"line":2581},108,[496,2583,754],{"class":502},[496,2585,819],{"class":506},[496,2587,760],{"class":510},[496,2589,740],{"class":663},[496,2591,852],{"class":712},[496,2593,2595,2597,2599,2601,2603,2605,2607,2609],{"class":498,"line":2594},109,[496,2596,754],{"class":502},[496,2598,1944],{"class":506},[496,2600,760],{"class":510},[496,2602,1510],{"class":558},[496,2604,1188],{"class":663},[496,2606,667],{"class":712},[496,2608,1193],{"class":506},[496,2610,677],{"class":712},[496,2612,2614,2617,2619,2621,2623,2625,2628,2630,2632,2634,2636,2638,2640,2642],{"class":498,"line":2613},110,[496,2615,2616],{"class":506},"  logger",[496,2618,660],{"class":510},[496,2620,1753],{"class":663},[496,2622,667],{"class":712},[496,2624,1758],{"class":510},[496,2626,2627],{"class":517},"Loaded ",[496,2629,1764],{"class":510},[496,2631,1878],{"class":506},[496,2633,660],{"class":510},[496,2635,1683],{"class":506},[496,2637,618],{"class":510},[496,2639,1944],{"class":517},[496,2641,1758],{"class":510},[496,2643,677],{"class":712},[496,2645,2647,2650,2652,2655,2657,2659,2661,2663,2665,2667,2669],{"class":498,"line":2646},111,[496,2648,2649],{"class":663},"  printFunnel",[496,2651,667],{"class":712},[496,2653,2654],{"class":663},"analyseFunnel",[496,2656,667],{"class":712},[496,2658,1878],{"class":506},[496,2660,1053],{"class":712},[496,2662,706],{"class":510},[496,2664,1944],{"class":506},[496,2666,660],{"class":510},[496,2668,1683],{"class":506},[496,2670,677],{"class":712},[496,2672,2674],{"class":498,"line":2673},112,[496,2675,867],{"class":510},[496,2677,2679],{"class":498,"line":2678},113,[496,2680,636],{"emptyLinePlaceholder":635},[496,2682,2684,2687,2689,2691,2694,2696,2698,2701,2703,2706,2708,2710],{"class":498,"line":2683},114,[496,2685,2686],{"class":663},"main",[496,2688,2576],{"class":506},[496,2690,660],{"class":510},[496,2692,2693],{"class":663},"catch",[496,2695,667],{"class":506},[496,2697,667],{"class":510},[496,2699,2700],{"class":1045},"e",[496,2702,716],{"class":510},[496,2704,2705],{"class":535}," unknown",[496,2707,1053],{"class":510},[496,2709,1056],{"class":502},[496,2711,562],{"class":510},[496,2713,2715,2717,2719,2722,2724,2726,2729,2732,2734,2736,2739,2742,2744,2746,2749,2751,2753,2756,2758,2761,2763,2765,2767,2770,2772,2774,2777,2779,2781],{"class":498,"line":2714},115,[496,2716,2200],{"class":506},[496,2718,660],{"class":510},[496,2720,2721],{"class":663},"error",[496,2723,667],{"class":712},[496,2725,514],{"class":510},[496,2727,2728],{"class":506},"\\n",[496,2730,2731],{"class":517},"[recipe failed]",[496,2733,514],{"class":510},[496,2735,706],{"class":510},[496,2737,2738],{"class":506}," e",[496,2740,2741],{"class":510}," instanceof",[496,2743,800],{"class":535},[496,2745,2390],{"class":510},[496,2747,2748],{"class":510}," `${",[496,2750,2700],{"class":506},[496,2752,660],{"class":510},[496,2754,2755],{"class":506},"name",[496,2757,618],{"class":510},[496,2759,2760],{"class":517},": ",[496,2762,1764],{"class":510},[496,2764,2700],{"class":506},[496,2766,660],{"class":510},[496,2768,2769],{"class":506},"message",[496,2771,2220],{"class":510},[496,2773,2410],{"class":510},[496,2775,2776],{"class":663}," String",[496,2778,667],{"class":712},[496,2780,2700],{"class":506},[496,2782,726],{"class":712},[496,2784,2786,2788,2790,2792,2794,2796,2799,2801,2803,2805,2807,2810,2812,2814,2816,2818,2820,2822],{"class":498,"line":2785},116,[496,2787,779],{"class":558},[496,2789,782],{"class":712},[496,2791,2700],{"class":506},[496,2793,2741],{"class":510},[496,2795,800],{"class":535},[496,2797,2798],{"class":510}," &&",[496,2800,2738],{"class":506},[496,2802,660],{"class":510},[496,2804,476],{"class":506},[496,2806,791],{"class":712},[496,2808,2809],{"class":506},"console",[496,2811,660],{"class":510},[496,2813,2721],{"class":663},[496,2815,667],{"class":712},[496,2817,2700],{"class":506},[496,2819,660],{"class":510},[496,2821,476],{"class":506},[496,2823,677],{"class":712},[496,2825,2827,2830,2832,2835,2837,2839],{"class":498,"line":2826},117,[496,2828,2829],{"class":506},"  process",[496,2831,660],{"class":510},[496,2833,2834],{"class":663},"exit",[496,2836,667],{"class":712},[496,2838,1100],{"class":1099},[496,2840,677],{"class":712},[496,2842,2844,2846],{"class":498,"line":2843},118,[496,2845,618],{"class":510},[496,2847,677],{"class":506},[466,2849,2851],{"id":2850},"notes","Примечания",[2853,2854,2855,2867,2876,2894],"ul",{},[2856,2857,2858,2859,2862,2863,2866],"li",{},"Порталы с несколькими воронками: ID стадий приходят с префиксом (",[493,2860,2861],{},"C2:WON","). Хелпер ",[493,2864,2865],{},"baseStage()"," агрегирует их под базовым именем.",[2856,2868,2869,2872,2873,660],{},[493,2870,2871],{},"fetchList.make"," держит память ограниченной — внутри он стримит чанки по 50 строк, используя keyset-курсор по ",[493,2874,2875],{},"idKey",[2856,2877,2878,2879,2886,2887,2890,2891,660],{},"Действие ",[2880,2881,2882,2883],"strong",{},"отбрасывает любой пользовательский ",[493,2884,2885],{},"order",", потому что keyset-пагинация требует ",[493,2888,2889],{},"idKey ASC"," — сужайте через ",[493,2892,2893],{},"filter",[2856,2895,2896,2897,2900,2901,2904],{},"Для более эффективного подсчёта выручки ",[493,2898,2899],{},"actions.v3.aggregate.make"," сделал бы один вызов ",[493,2902,2903],{},"sum",", но эта поверхность действий пока не доступна в SDK.",[2906,2907,2908],"style",{},"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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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);}",{"title":491,"searchDepth":565,"depth":565,"links":2910},[2911,2912,2913,2914,2915,2916],{"id":468,"depth":565,"text":469},{"id":476,"depth":565,"text":477},{"id":483,"depth":565,"text":484},{"id":524,"depth":565,"text":525},{"id":493,"depth":565,"text":545},{"id":2850,"depth":565,"text":2851},"md",[2919],{"label":2920,"iconName":2921,"to":2922},"Исходник на GitHub","GitHubIcon","https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fskills\u002Fb24jssdk-recipes\u002Fexamples\u002F01-crm-analytics.ts",{},{"title":359},{"title":461,"description":363},"ahoBhK2hIq5XMO35ZuFGhdKz84-HBJbO6zHc4ihTmv4",{"data":2928,"body":2929},{},{"type":2930,"children":2931},"root",[2932],{"type":2933,"tag":471,"props":2934,"children":2935},"element",{},[2936],{"type":2937,"value":363},"text",1783080213614]