[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-entities\u002Fopenline-configs":3,"docs-tabs-entities\u002Fopenline-configs":6},{"content":4,"lastmod":5},"# Конфигурации открытых линий\n\nУправление конфигурациями открытых линий Битрикс24: настройка входящих обращений из мессенджеров и социальных сетей, очереди операторов, рабочего времени, интеграции с CRM, приветственных сообщений и оценки качества обслуживания.\n\nБитрикс24 API: `imopenlines.config.*`\nСкоуп: `imopenlines`\n\n## Операции\n\n- [Создать конфигурацию](.\u002Fopenline-configs\u002Fcreate.md) — `POST \u002Fv1\u002Fopenline-configs`\n- [Список конфигураций](.\u002Fopenline-configs\u002Flist.md) — `GET \u002Fv1\u002Fopenline-configs`\n- [Получить конфигурацию](.\u002Fopenline-configs\u002Fget.md) — `GET \u002Fv1\u002Fopenline-configs\u002F:id`\n- [Обновить конфигурацию](.\u002Fopenline-configs\u002Fupdate.md) — `PATCH \u002Fv1\u002Fopenline-configs\u002F:id`\n- [Удалить конфигурацию](.\u002Fopenline-configs\u002Fdelete.md) — `DELETE \u002Fv1\u002Fopenline-configs\u002F:id`\n- [Поиск конфигураций](.\u002Fopenline-configs\u002Fsearch.md) — `POST \u002Fv1\u002Fopenline-configs\u002Fsearch`\n- [Поля конфигурации](.\u002Fopenline-configs\u002Ffields.md) — `GET \u002Fv1\u002Fopenline-configs\u002Ffields`\n- [Агрегация конфигураций](.\u002Fopenline-configs\u002Faggregate.md) — `POST \u002Fv1\u002Fopenline-configs\u002Faggregate`\n\n## Действия оператора над диалогом\n\nПомимо CRUD конфигураций есть пара действий, которые выполняет оператор поверх конкретного диалога открытой линии. Оба требуют `imopenlines` скоупа и принимают `chatId` — идентификатор объекта чата (получите его через `imopenlines.session.open` или `imopenlines.dialog.get`; это **не** dialogId с префиксом `chat`):\n\n### `POST \u002Fv1\u002Fopenlines\u002Foperator\u002Fanswer`\n\nПринимает диалог к обработке текущим оператором.\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenlines\u002Foperator\u002Fanswer\" \\\n  -H \"X-Api-Key: $VIBE_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"chatId\": 2043}'\n```\n\nОтвет при успехе: `{ \"success\": true, \"data\": { \"chatId\": 2043, \"answered\": true } }`.\n\n### `POST \u002Fv1\u002Fopenlines\u002Foperator\u002Ffinish`\n\nЗавершает диалог от имени текущего оператора.\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenlines\u002Foperator\u002Ffinish\" \\\n  -H \"X-Api-Key: $VIBE_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"chatId\": 2043}'\n```\n\nОтвет при успехе: `{ \"success\": true, \"data\": { \"chatId\": 2043, \"finished\": true } }`.\n\n### Ошибки операторских эндпоинтов\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_CHAT_ID` | `chatId` отсутствует, не является положительным целым или передан в неверном формате |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imopenlines` |\n| 403 | `BITRIX_ACCESS_DENIED` | У оператора недостаточно прав на действие с этим диалогом |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n| 502 | `OPENLINE_OPERATOR_FAILED` | Битрикс24 вернул `result: false` — диалог уже взят\u002Fзавершён другим оператором, либо `chatId` не соответствует активному диалогу открытой линии |\n| 422 | `BITRIX_ERROR` | Битрикс24 вернул ошибку: `CHAT_TYPE` (чат не является открытой линией), `USER_ID` (неверный идентификатор пользователя). Детали — в `error.message` |\n\n## Ключевые поля\n\n| Поле | Описание |\n|------|---------|\n| `id` | Идентификатор конфигурации (число) |\n| `name` | Название открытой линии. При создании и обновлении это же поле передаётся в `body` как `LINE_NAME` |\n| `active` | Признак активности: `true` — линия принимает обращения, `false` — отключена |\n| `queueType` | Алгоритм распределения: `all` — всем операторам, `evenly` — равномерно, `strictly` — строго по очереди |\n| `QUEUE` | Массив идентификаторов операторов очереди — приходит только в `GET \u002Fv1\u002Fopenline-configs\u002F:id`. Источник идентификаторов: `GET \u002Fv1\u002Fusers` |\n| `WELCOME_BOT_ID` | Идентификатор приветственного бота — бот, с которым начинается диалог до передачи оператору. Источник: `\u002Fdocs\u002Fbots\u002Fmanagement\u002Flist` |\n| `CRM_CREATE` | Признак автоматического создания лида или контакта в CRM при входящем обращении |\n| `WORKTIME_ENABLE` | Признак использования расписания рабочего времени |\n\nПолный список полей — [`GET \u002Fv1\u002Fopenline-configs\u002Ffields`](.\u002Fopenline-configs\u002Ffields.md).\n\n## Что нужно знать перед работой\n\n1. **Смешанный регистр полей.** Ответы содержат поля в двух регистрах одновременно: 6 полей в camelCase (`id`, `active`, `name`, `queueType`, `workTimeFrom`, `workTimeTo`) и UPPER_SNAKE_CASE-поля (`CRM_CREATE`, `WORKTIME_ENABLE`, `WELCOME_BOT_ID` и другие). Где какое поле — в [Поля конфигурации](.\u002Fopenline-configs\u002Ffields.md).\n2. **Разный набор полей в `list`\u002F`search` и в `get`.** `GET \u002Fv1\u002Fopenline-configs` и `POST \u002Fv1\u002Fopenline-configs\u002Fsearch` возвращают по 91 полю на запись (6 camelCase + 85 UPPER_SNAKE_CASE). `GET \u002Fv1\u002Fopenline-configs\u002F:id` дополнительно отдаёт 4 поля очереди операторов (`QUEUE`, `QUEUE_FULL`, `QUEUE_USERS_FIELDS`, `QUEUE_ONLINE`) — итого 95 полей.\n3. **Минимум для создания — одно поле `LINE_NAME`.** Остальные поля при создании опциональны. Тело запроса передаётся в `UPPER_SNAKE_CASE`.\n4. **Адресация по `id`.** Для получения, обновления и удаления используется числовой `id` из ответа. Бывшие «зарезервированные» поля `lineId` и `agentId` удалены из схемы (VB-5ba3fd91) — `imopenlines.config.*` никогда их не возвращал.\n\n## Связанные сущности\n\n| Сущность | Эндпоинт | Назначение |\n|----------|----------|-----------|\n| Пользователи | `GET \u002Fv1\u002Fusers` | Источник идентификаторов операторов для поля `QUEUE` |\n| Боты | `\u002Fdocs\u002Fbots\u002Fmanagement\u002Flist` | Источник идентификатора приветственного бота для поля `WELCOME_BOT_ID` |\n\n## Типичный сценарий\n\n1. Получить список конфигураций: [`GET \u002Fv1\u002Fopenline-configs`](.\u002Fopenline-configs\u002Flist.md).\n2. Создать конфигурацию с минимальным набором полей: [`POST \u002Fv1\u002Fopenline-configs`](.\u002Fopenline-configs\u002Fcreate.md) с `LINE_NAME`.\n3. Получить полную запись с очередью операторов: [`GET \u002Fv1\u002Fopenline-configs\u002F:id`](.\u002Fopenline-configs\u002Fget.md).\n4. Обновить параметры: [`PATCH \u002Fv1\u002Fopenline-configs\u002F:id`](.\u002Fopenline-configs\u002Fupdate.md).\n5. Удалить конфигурацию: [`DELETE \u002Fv1\u002Fopenline-configs\u002F:id`](.\u002Fopenline-configs\u002Fdelete.md).\n\n## Лимиты\n\n| Лимит | Значение |\n|-------|----------|\n| Максимум записей на запрос | 200 (`limit ≤ 200`). На типичном портале конфигураций — десятки, одного запроса хватает на всё |\n| Пагинация | через `limit` + `offset`. Используйте поле `hasMore` для проверки следующей страницы |\n| Batch-доступные операции | `create`, `update`, `delete` — через [`POST \u002Fv1\u002Fbatch`](\u002Fdocs\u002Fbatch) |\n| Rate limit | общий для Вайбкода — см. [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) |\n\n## Смотрите также\n\n- [Справочник сущностей](\u002Fdocs\u002Fentity-api)\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n- [Batch](\u002Fdocs\u002Fbatch)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","2026-06-30",{"openline-configs\u002Fcreate.md":7,"openline-configs\u002Flist.md":8,"openline-configs\u002Fget.md":9,"openline-configs\u002Fupdate.md":10,"openline-configs\u002Fdelete.md":11,"openline-configs\u002Fsearch.md":12,"openline-configs\u002Ffields.md":13,"openline-configs\u002Faggregate.md":14},"\n## Создать конфигурацию открытой линии\n\n`POST \u002Fv1\u002Fopenline-configs`\n\nСоздаёт новую конфигурацию открытой линии. Для создания достаточно передать одно поле — остальные параметры устанавливаются по умолчанию. Полная запись с идентификаторами и всеми полями доступна через `GET \u002Fv1\u002Fopenline-configs\u002F:id`.\n\n## Поля запроса (body)\n\nМинимум для создания: хотя бы одно поле.\n\n**Имена полей.** Все поля передавайте в camelCase (`name`, `active`, `queueType`, `crmCreate`, `workTimeFrom` и т. д. — см. [Поля конфигурации](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields)) — это канонический регистр, как они приходят в ответе и в `GET \u002Fv1\u002Fopenline-configs\u002Ffields`. B24-native UPPER_SNAKE_CASE-имена также принимаются для обратной совместимости и приводятся к нужному имени Битрикс24 автоматически. Пример ниже использует camelCase.\n\n**Булевы поля** (`active`, `crm`, `workTimeEnable`, `welcomeMessage`, …) принимают `true` \u002F `false` — значение приводится к ожидаемому Битрикс24 `\"Y\"`\u002F`\"N\"` автоматически.\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|-------|---------|\n| `name` | string | нет | Название открытой линии |\n| `active` | boolean | нет | Активна ли линия (`true` \u002F `false`) |\n| `queueType` | string | нет | Распределение очереди: `all` — всем одновременно, `evenly` — равномерно, `strictly` — строго по порядку |\n| `queueTime` | number | нет | Время ожидания в очереди (секунды) до перевода |\n| `noAnswerTime` | number | нет | Время без ответа (секунды), после которого срабатывает правило `noAnswerRule` |\n| `crm` | boolean | нет | Включить интеграцию с CRM |\n| `crmCreate` | string | нет | Режим создания CRM-сущностей при новом обращении |\n| `workTimeEnable` | boolean | нет | Включить расписание рабочего времени |\n| `workTimeFrom` | string | нет | Начало рабочего дня (например `\"9\"` или `\"9.30\"`) |\n| `workTimeTo` | string | нет | Конец рабочего дня (например `\"18\"` или `\"18.30\"`) |\n| `workTimeTimezone` | string | нет | Часовой пояс расписания (например `\"Europe\u002FMoscow\"`) |\n| `welcomeMessage` | boolean | нет | Включить приветственное сообщение |\n| `welcomeMessageText` | string | нет | Текст приветственного сообщения |\n| `languageId` | string | нет | Язык линии (например `\"ru\"`, `\"en\"`) |\n\nПолный список полей — [`GET \u002Fv1\u002Fopenline-configs\u002Ffields`](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields).\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"Поддержка клиентов\",\n    \"active\": true,\n    \"queueType\": \"evenly\",\n    \"workTimeEnable\": true,\n    \"workTimeFrom\": \"9\",\n    \"workTimeTo\": \"18\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"Поддержка клиентов\",\n    \"active\": true,\n    \"queueType\": \"evenly\",\n    \"workTimeEnable\": true,\n    \"workTimeFrom\": \"9\",\n    \"workTimeTo\": \"18\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    name: 'Поддержка клиентов',\n    active: true,\n    queueType: 'evenly',\n    workTimeEnable: true,\n    workTimeFrom: '9',\n    workTimeTo: '18',\n  }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('Новая конфигурация ID:', data)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    name: 'Поддержка клиентов',\n    active: true,\n    queueType: 'evenly',\n    workTimeEnable: true,\n    workTimeFrom: '9',\n    workTimeTo: '18',\n  }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('Новая конфигурация ID:', data)\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data` | number | Идентификатор созданной конфигурации |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": 29\n}\n```\n\n## Пример ответа при ошибке\n\n400 — тело запроса не содержит ни одного поля:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"Request body must contain at least one field for imopenlines.config.add (e.g. lineName, queueType, agentId).\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `VALIDATION_ERROR` | Тело запроса пустое — не передано ни одного поля |\n| 401 | `TOKEN_MISSING` | Заголовок `X-Api-Key` не передан |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imopenlines` |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n`data` в ответе — это число (идентификатор новой конфигурации), а не объект записи. Чтобы получить созданную конфигурацию со всеми полями, выполните отдельный запрос: `GET \u002Fv1\u002Fopenline-configs\u002F:id`.\n\n**Неизвестное имя поля не отклоняется.** У метода `imopenlines.config.add` нет схемы полей, и Битрикс24 молча игнорирует незнакомые ключи. Поэтому тело только из несуществующего поля (например `{ \"bogusField\": \"x\" }`) пройдёт валидацию «непустого тела» и создаст конфигурацию со значениями по умолчанию. Проверяйте имена полей по [Поля конфигурации](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields).\n\n## Смотрите также\n\n- [Получить конфигурацию](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Fget)\n- [Список конфигураций](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Flist)\n- [Поля конфигурации](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields)\n","\n## Список конфигураций открытых линий\n\n`GET \u002Fv1\u002Fopenline-configs`\n\nВозвращает список конфигураций открытых линий с поддержкой фильтрации, сортировки и пагинации.\n\n## Параметры\n\n| Параметр | Тип | По умолч. | Допустимые значения | Описание |\n|----------|-----|-----------|---------------------|---------|\n| `limit` | number | `50` | `1`–`200` | Количество записей на запрос |\n| `offset` | number | `0` | `0` и больше | Пропустить N записей |\n| `sort` | string | — | `id`, `name`, `active`, `queueType`, `workTimeFrom`, `workTimeTo` | Поле сортировки |\n| `order` | string | `asc` | `asc`, `desc` | Направление сортировки |\n| `filter` | object | — | ключи — те же 6 полей, что и в `sort`; значения — по типу поля | Фильтрация по полям схемы.\u003Cbr>[Синтаксис фильтрации](\u002Fdocs\u002Ffiltering). Пример: `?filter[active]=false`, `?filter[queueType]=evenly` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs?limit=10&sort=id&order=asc&filter[active]=true\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs?limit=10&sort=id&order=asc&filter[active]=true\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs?limit=10&sort=id&order=asc&filter[active]=true', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data, total, hasMore } = await res.json()\nconsole.log(`Получено ${data.length} конфигураций, всего в окне: ${total}`)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs?limit=10&sort=id&order=asc&filter[active]=true', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data, total, hasMore } = await res.json()\n```\n\n## Поля ответа\n\nОтвет содержит поля метаданных на верхнем уровне (не вложены в `meta`):\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data` | array | Массив конфигураций (все поля — см. [Поля конфигурации](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields)) |\n| `total` | number | Количество записей в текущем окне (не общий счётчик портала) |\n| `limit` | number | Размер страницы |\n| `offset` | number | Смещение |\n| `hasMore` | boolean | Есть ли ещё записи за пределами `limit` |\n\n## Пример ответа\n\nПоказаны основные поля. Полный список: [Поля конфигурации](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields).\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": 1,\n      \"active\": true,\n      \"name\": \"Открытая линия\",\n      \"queueType\": \"all\",\n      \"workTimeFrom\": \"8\",\n      \"workTimeTo\": \"17\",\n      \"crm\": \"Y\",\n      \"crmCreate\": \"deal\",\n      \"queueTime\": \"60\",\n      \"noAnswerTime\": \"180\",\n      \"welcomeMessage\": \"Y\",\n      \"workTimeEnable\": \"Y\",\n      \"workTimeTimezone\": \"Europe\u002FKaliningrad\",\n      \"dateCreate\": {},\n      \"dateModify\": {}\n    },\n    {\n      \"id\": 3,\n      \"active\": true,\n      \"name\": \"Wix\",\n      \"queueType\": \"all\",\n      \"workTimeFrom\": \"9\",\n      \"workTimeTo\": \"18.30\",\n      \"crm\": \"Y\",\n      \"crmCreate\": \"deal\",\n      \"queueTime\": \"60\",\n      \"noAnswerTime\": \"180\",\n      \"welcomeMessage\": \"Y\",\n      \"workTimeEnable\": \"N\",\n      \"workTimeTimezone\": \"Europe\u002FMoscow\",\n      \"dateCreate\": {},\n      \"dateModify\": {}\n    }\n  ],\n  \"total\": 10,\n  \"limit\": 10,\n  \"offset\": 0,\n  \"hasMore\": false\n}\n```\n\n> В примере показаны 2 записи из 10 — остальные 8 опущены для краткости. Каждый элемент содержит ещё около 75 полей помимо показанных.\n\n## Пример ответа при ошибке\n\n400 — логический оператор `$or` \u002F `$and` в фильтре (Битрикс24 не поддерживает OR\u002FAND для этого метода):\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_FILTER_OPERATOR\",\n    \"message\": \"'$or' is not supported. OR\u002FAND logic cannot be expressed in a single openline-configs filter. For same-field OR use { field: { $in: [v1, v2] } }. For cross-field OR run parallel requests. AND is the default — combine conditions as sibling keys in one filter object.\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_FILTER_OPERATOR` | В фильтре передан логический оператор `$or` \u002F `$and` \u002F `$not` \u002F `LOGIC`. Для OR по одному полю используйте `{ поле: { $in: [...] } }` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imopenlines` |\n| 422 | `BITRIX_ERROR` | Передано имя поля, которого нет в сущности `imopenlines.config` Битрикс24 (например `createdAt`, опечатка или не-фильтруемое поле). Используйте 6 документированных camelCase-полей схемы |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**`total` — счётчик текущего окна, а не общий.** Битрикс24 не возвращает общее количество конфигураций для метода списка, поэтому `total` содержит число записей только в текущей странице. Для проверки наличия следующей страницы используйте поле `hasMore`.\n\n**Фильтрация и сортировка — 6 camelCase-полей схемы.** Параметры `filter` и `sort` работают по всем 6 документированным именам: `id`, `name`, `active`, `queueType`, `workTimeFrom`, `workTimeTo` (обёртка переводит их в реальные имена Битрикс24 на стороне запроса).\n\n**Другие поля тоже принимаются (escape hatch).** Если нужно отфильтровать\u002Fотсортировать по полю вне этих шести (например `crmCreate`, `languageId`), передайте его camelCase-имя из [Поля конфигурации](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields) — canonical. B24-native UPPER_SNAKE-имена также принимаются для обратной совместимости. Валидность проверяет Битрикс24: неизвестное поле вернёт `422 BITRIX_ERROR`.\n\n**OR\u002FAND в фильтре не поддерживаются.** `imopenlines.config.list.get` не умеет выражать логику OR\u002FAND в одном фильтре — операторы `$or` \u002F `$and` \u002F `$not` \u002F `LOGIC` отклоняются с `400 INVALID_FILTER_OPERATOR`. Для OR по одному полю используйте `{ \"id\": { \"$in\": [1, 3] } }` (в querystring — `filter[id][$in]=1,3`).\n\n**Поля `queue`, `queueFull`, `queueUsersFields`, `queueOnline` в списке не возвращаются** — они доступны только в [Получить конфигурацию](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Fget).\n\n**camelCase и пустые даты.** Каждая запись содержит ~91 поле, все в camelCase; `dateCreate` и `dateModify` приходят пустыми объектами `{}`. `\u002Ffields` описывает каждое поле с `label` и `description` — полный реестр и пояснения — [Поля конфигурации](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields).\n\n## Смотрите также\n\n- [Получить конфигурацию](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Fget)\n- [Создать конфигурацию](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Fcreate)\n- [Поля конфигурации](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields)\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n- [Entity API](\u002Fdocs\u002Fentity-api)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Получить конфигурацию открытой линии\n\n`GET \u002Fv1\u002Fopenline-configs\u002F:id`\n\nВозвращает конфигурацию открытой линии по ID со всеми полями, включая данные очереди операторов.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `id` (path) | number | да | ID конфигурации |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002F1\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002F1\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002F1', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log('Линия:', data.name, '— тип очереди:', data.queueType)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002F1', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\nОтвет содержит 95 полей, все в camelCase — `\u002Ffields` описывает каждое поле с `label` и `description`: [Поля открытой линии](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields).\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data` | object | Объект конфигурации (все поля — см. [Поля открытой линии](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields)) |\n\n## Пример ответа\n\nПоказаны ключевые поля. Полный список: [Поля открытой линии](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields).\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 1,\n    \"active\": true,\n    \"name\": \"Открытая линия\",\n    \"queueType\": \"all\",\n    \"workTimeFrom\": \"8\",\n    \"workTimeTo\": \"17\",\n    \"crm\": \"Y\",\n    \"crmCreate\": \"deal\",\n    \"queueTime\": \"60\",\n    \"noAnswerTime\": \"180\",\n    \"workTimeEnable\": \"Y\",\n    \"workTimeTimezone\": \"Europe\u002FKaliningrad\",\n    \"welcomeMessage\": \"Y\",\n    \"voteMessage\": \"Y\",\n    \"queue\": [\"139\", \"131\", \"99\"],\n    \"queueFull\": {\n      \"99\": {\n        \"ID\": \"59\",\n        \"SORT\": \"2\",\n        \"USER_ID\": \"99\",\n        \"DEPARTMENT_ID\": \"0\",\n        \"USER_NAME\": \"Иван Петров\",\n        \"USER_WORK_POSITION\": \"Менеджер поддержки\",\n        \"USER_AVATAR\": \"\u002Fupload\u002Fmain\u002Favatars\u002F99.jpg\",\n        \"USER_AVATAR_ID\": \"12345\"\n      },\n      \"131\": {\n        \"ID\": \"57\",\n        \"SORT\": \"1\",\n        \"USER_ID\": \"131\",\n        \"DEPARTMENT_ID\": \"0\",\n        \"USER_NAME\": \"Мария Смирнова\",\n        \"USER_WORK_POSITION\": \"Старший оператор\",\n        \"USER_AVATAR\": \"\u002Fupload\u002Fmain\u002Favatars\u002F131.jpg\",\n        \"USER_AVATAR_ID\": \"67890\"\n      }\n    },\n    \"queueUsersFields\": {\n      \"99\": { \"USER_NAME\": \"Иван Петров\", \"USER_WORK_POSITION\": \"Менеджер поддержки\", \"USER_AVATAR\": \"\u002Fupload\u002Fmain\u002Favatars\u002F99.jpg\" },\n      \"131\": { \"USER_NAME\": \"Мария Смирнова\", \"USER_WORK_POSITION\": \"Старший оператор\", \"USER_AVATAR\": \"\u002Fupload\u002Fmain\u002Favatars\u002F131.jpg\" }\n    },\n    \"queueOnline\": \"N\",\n    \"dateCreate\": {},\n    \"dateModify\": {}\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n404 — конфигурация не найдена:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ENTITY_NOT_FOUND\",\n    \"message\": \"openlineConfig 99999 not found\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imopenlines` |\n| 404 | `ENTITY_NOT_FOUND` | Конфигурация с таким ID не найдена |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Поля очереди операторов доступны только здесь.** `queue`, `queueFull`, `queueUsersFields`, `queueOnline` приходят в ответе одиночного запроса и недоступны в [Списке](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Flist) и [Поиске](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Fsearch).\n\nПолный реестр всех 95 полей (все в camelCase, с `label` и `description`) и пустые `dateCreate`\u002F`dateModify` — [Поля конфигурации](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields).\n\n## Смотрите также\n\n- [Поля открытой линии](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields)\n- [Список конфигураций](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Flist)\n- [Обновить конфигурацию](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Fupdate)\n","\n## Обновить конфигурацию открытой линии\n\n`PATCH \u002Fv1\u002Fopenline-configs\u002F:id`\n\nОбновляет поля существующей конфигурации открытой линии. Передайте только изменяемые поля — остальные не затрагиваются. Полный список полей — [Поля конфигурации](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields).\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `id` (path) | number | да | Числовой идентификатор конфигурации |\n\n## Поля запроса (body)\n\nТело запроса не должно быть пустым — обязательно наличие хотя бы одного поля. Передайте только изменяемые поля.\n\n**Имена полей.** Все поля передавайте в camelCase (`name`, `active`, `queueType`, `queueTime`, `workTimeFrom` и т. д.) — это канонический регистр. B24-native UPPER_SNAKE_CASE-имена также принимаются для обратной совместимости.\n\n**Булевы поля** (`active`, …) принимают `true` \u002F `false` — значение приводится к `\"Y\"`\u002F`\"N\"` автоматически. Например, `{ \"active\": false }` (или `{ \"ACTIVE\": false }`) выключит линию.\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `name` | string | Название открытой линии |\n| `active` | boolean | Включена ли линия (`true` \u002F `false`) |\n| `queueTime` | number | Время ожидания ответа оператора (секунды) |\n| `noAnswerTime` | number | Время до сработывания правила «Нет ответа» (секунды) |\n| `welcomeMessageText` | string | Текст приветственного сообщения |\n| `workTimeFrom` | string | Начало рабочего времени, например `\"9\"` или `\"9.30\"` |\n| `workTimeTo` | string | Конец рабочего времени, например `\"18\"` или `\"17.30\"` |\n| `workTimeTimezone` | string | Часовой пояс рабочего времени |\n\nПолный список доступных полей — [Поля конфигурации](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields).\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002F29\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"queueTime\": 120,\n    \"welcomeMessageText\": \"Здравствуйте! Чем можем помочь?\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002F29\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"queueTime\": 120,\n    \"welcomeMessageText\": \"Здравствуйте! Чем можем помочь?\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002F29', {\n  method: 'PATCH',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    queueTime: 120,\n    welcomeMessageText: 'Здравствуйте! Чем можем помочь?',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002F29', {\n  method: 'PATCH',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    queueTime: 120,\n    welcomeMessageText: 'Здравствуйте! Чем можем помочь?',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data` | object | Результат операции |\n| `data.id` | number | Идентификатор обновлённой конфигурации |\n| `data.updated` | boolean | `true` — обновление применено |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 29,\n    \"updated\": true\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n404 — конфигурация не найдена:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ENTITY_NOT_FOUND\",\n    \"message\": \"openlineConfig 99999 not found\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_ID` | Параметр `id` не является положительным целым числом |\n| 400 | `VALIDATION_ERROR` | Тело запроса пустое — необходимо передать хотя бы одно поле |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imopenlines` |\n| 404 | `ENTITY_NOT_FOUND` | Конфигурация с указанным `id` не существует |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\nОтвет содержит только `id` и `data.updated: true` — полей конфигурации в ответе нет. Чтобы получить актуальные значения всех полей после обновления, выполните `GET \u002Fv1\u002Fopenline-configs\u002F:id`.\n\n## Смотрите также\n\n- [Получить конфигурацию](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Fget) — текущие значения полей\n- [Поля конфигурации](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields) — полный список изменяемых полей\n- [Список конфигураций](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Flist) — все конфигурации на портале\n- [Batch](\u002Fdocs\u002Fbatch) — массовое обновление записей\n","\n## Удалить конфигурацию открытой линии\n\n`DELETE \u002Fv1\u002Fopenline-configs\u002F:id`\n\nУдаляет конфигурацию открытой линии по ID. Восстановить удалённую запись через API нельзя — создавайте новую при необходимости.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `id` (path) | number | да | ID конфигурации |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002F29\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002F29\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002F29', {\n  method: 'DELETE',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nif (success && data.deleted) {\n  console.log('Конфигурация удалена, ID:', data.id)\n}\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002F29', {\n  method: 'DELETE',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\nif (success && data.deleted) {\n  console.log('Конфигурация удалена, ID:', data.id)\n}\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.id` | number | ID удалённой конфигурации |\n| `data.deleted` | boolean | `true` при успешном удалении |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 29,\n    \"deleted\": true\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n404 — конфигурация не найдена:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ENTITY_NOT_FOUND\",\n    \"message\": \"openlineConfig 99999 not found\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_ID` | `id` не является положительным целым числом |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imopenlines` |\n| 404 | `ENTITY_NOT_FOUND` | Конфигурация с указанным ID не найдена |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Список конфигураций](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Flist)\n- [Получить конфигурацию](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Fget)\n- [Batch](\u002Fdocs\u002Fbatch) — массовое удаление\n","\n## Поиск конфигураций открытых линий\n\n`POST \u002Fv1\u002Fopenline-configs\u002Fsearch`\n\nВозвращает список конфигураций открытых линий с фильтрацией, сортировкой и пагинацией. Параметры передаются в теле запроса — удобнее для сложных условий, чем query-строка.\n\n## Поля запроса (body)\n\n| Параметр | Тип | По умолч. | Допустимые значения | Описание |\n|----------|-----|-----------|---------------------|---------|\n| `filter` | object | — | ключи — те же 6 полей, что и в `sort`; значения — по типу поля | Фильтрация по полям схемы. Доступные поля — [`GET \u002Fv1\u002Fopenline-configs\u002Ffields`](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields).\u003Cbr>Пример: `{\"active\": false}` |\n| `limit` | number | `50` | `1`–`200` | Количество записей на запрос |\n| `offset` | number | `0` | `0` и больше | Пропустить N записей |\n| `sort` | string | — | `id`, `name`, `active`, `queueType`, `workTimeFrom`, `workTimeTo` | Поле для сортировки |\n| `order` | string | `asc` | `asc`, `desc` | Направление сортировки |\n\nПустое тело запроса возвращает все конфигурации — эквивалент `GET \u002Fv1\u002Fopenline-configs` без параметров.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002Fsearch\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"filter\": { \"active\": true },\n    \"limit\": 3,\n    \"sort\": \"id\",\n    \"order\": \"desc\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002Fsearch\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"filter\": { \"active\": true },\n    \"limit\": 3,\n    \"sort\": \"id\",\n    \"order\": \"desc\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002Fsearch', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    filter: { active: true },\n    limit: 3,\n    sort: 'id',\n    order: 'desc',\n  }),\n})\n\nconst { success, data, total } = await res.json()\nconsole.log('Найдено:', total, 'записей, возвращено:', data.length)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002Fsearch', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    filter: { active: true },\n    limit: 3,\n    sort: 'id',\n    order: 'desc',\n  }),\n})\n\nconst { success, data, total } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data` | array | Массив конфигураций (все поля — см. [Поля конфигурации](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields)) |\n| `total` | number | Количество записей в текущей странице (не общий счётчик портала — Битрикс24 не передаёт глобальный total для этого метода) |\n| `limit` | number | Применённое ограничение на количество записей |\n| `offset` | number | Применённое смещение |\n| `hasMore` | boolean | Есть ли ещё записи за пределами `limit` |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": 21,\n      \"active\": true,\n      \"name\": \"Открытая линия 12\",\n      \"queueType\": \"all\",\n      \"workTimeFrom\": \"9\",\n      \"workTimeTo\": \"18.30\",\n      \"crm\": \"Y\",\n      \"crmCreate\": \"lead\",\n      \"queueTime\": \"60\",\n      \"noAnswerTime\": \"60\",\n      \"welcomeMessage\": \"Y\",\n      \"dateCreate\": {},\n      \"dateModify\": {}\n    }\n  ],\n  \"total\": 10,\n  \"limit\": 3,\n  \"offset\": 0,\n  \"hasMore\": true\n}\n```\n\nПоказаны основные поля. Каждый элемент массива содержит ~91 поле, все в camelCase; `\u002Ffields` описывает каждое с `label` и `description`. Полный список — [Поля конфигурации](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields).\n\n## Пример ответа при ошибке\n\n400 — логический оператор `$or` \u002F `$and` в фильтре (для этого метода Битрикс24 их не поддерживает):\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_FILTER_OPERATOR\",\n    \"message\": \"'$or' is not supported. OR\u002FAND logic cannot be expressed in a single openline-configs filter. For same-field OR use { field: { $in: [v1, v2] } }. For cross-field OR run parallel requests. AND is the default — combine conditions as sibling keys in one filter object.\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_FILTER_OPERATOR` | В фильтре передан логический оператор `$or` \u002F `$and` \u002F `$not` \u002F `LOGIC` |\n| 401 | `TOKEN_MISSING` | Не передан `X-Api-Key` |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imopenlines` |\n| 422 | `BITRIX_ERROR` | Имя поля отсутствует в сущности `imopenlines.config` Битрикс24 (опечатка или не-фильтруемое поле) |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Пустое тело возвращает все записи** — эквивалент `GET \u002Fv1\u002Fopenline-configs` без параметров.\n\nОстальные особенности — те же, что и у списка (`total` как счётчик текущей страницы; фильтр и сортировка по 6 camelCase-полям схемы, прочие camelCase-имена как escape hatch; OR\u002FAND через `$or`\u002F`$and` не поддерживаются — используйте `$in`; отсутствие полей очереди операторов): подробности — [Известные особенности списка](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Flist).\n\n## Смотрите также\n\n- [Список конфигураций](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Flist)\n- [Поля конфигурации](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields)\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n","\n## Поля конфигурации открытой линии\n\n`GET \u002Fv1\u002Fopenline-configs\u002Ffields`\n\nВозвращает схему полей, доступных для фильтрации и сортировки, а также полный реестр полей в ответах `list`, `get` и `search`.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002Ffields\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002Ffields\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002Ffields', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log('Поля схемы:', Object.keys(data.fields))\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002Ffields', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\nЭндпоинт `\u002Ffields` возвращает `data.fields` — описание **всех** полей ответов `list`, `get` и `search`: каждое поле снабжено `type`, `readonly`, названием `label` и описанием `description`. Имена полей — **в camelCase**. Полный набор в `get` — 95 полей, в `list`\u002F`search` — 91 (без 4 полей очереди операторов). Дополнительно `data` содержит `aggregatable` и `batch`.\n\n### Схема полей (data.fields)\n\n`\u002Ffields` возвращает полный набор полей — каждое с `type`, `readonly`, `label` и `description`. Фильтрация (`filter`), сортировка (`sort`) и группировка (`groupBy`) работают по этим camelCase-именам. Ниже — основные поля, чаще всего используемые в `sort` и `filter`:\n\n| Поле | Тип | RO | Описание |\n|------|-----|----|---------|\n| `id` | number | да | Идентификатор конфигурации |\n| `name` | string | | Название открытой линии |\n| `active` | boolean | | Активна ли линия |\n| `queueType` | string | | Алгоритм распределения: `all` — всем операторам одновременно, `evenly` — равномерно, `strictly` — строго по очереди |\n| `workTimeFrom` | string | | Начало рабочего времени (например `\"8\"` или `\"9.30\"`) |\n| `workTimeTo` | string | | Конец рабочего времени |\n\nДополнительно в `data` указаны:\n- `aggregatable` — поля, доступные для `groupBy`: `[\"active\", \"queueType\"]`\n- `batch` — перечень пакетных операций, объявленных для этой сущности в ответе `\u002Ffields`: пустой массив `[]`\n\n### Полный реестр полей ответа (list \u002F get \u002F search)\n\nВ `get` объект `data` содержит 95 полей (все в camelCase), в `list`\u002F`search` — 91 (без 4 полей с отметкой «только `get`»: `queue`, `queueFull`, `queueUsersFields`, `queueOnline`).\n\n#### Основные\n\n| Поле | Тип | RO | Источник | Описание |\n|------|-----|----|---------|---------|\n| `id` | number | да | везде | Идентификатор конфигурации |\n| `name` | string | | везде | Название открытой линии |\n| `active` | boolean | | везде | Линия активна (`true`\u002F`false`) |\n| `temporary` | string | | везде | Временная линия: `\"Y\"` \u002F `\"N\"` |\n| `xmlId` | string\\|null | | везде | Внешний идентификатор |\n| `languageId` | string\\|null | | везде | Язык линии (например `\"ru\"`). `null`, если язык не задан |\n\n#### Очередь и операторы\n\n| Поле | Тип | RO | Источник | Описание |\n|------|-----|----|---------|---------|\n| `queueType` | string | | везде | Алгоритм распределения: `all` — всем операторам одновременно, `evenly` — равномерно, `strictly` — строго по очереди |\n| `queueTime` | string | | везде | Время ожидания в очереди (секунды) |\n| `noAnswerTime` | string | | везде | Время без ответа оператора до переключения (секунды) |\n| `checkAvailable` | string | | везде | Проверять доступность оператора: `\"Y\"` \u002F `\"N\"` |\n| `maxChat` | string\\|null | | везде | Максимальное число одновременных чатов на оператора (`\"0\"` — без ограничения). `null`, если не задан |\n| `typeMaxChat` | string\\|null | | везде | Тип подсчёта лимита чатов: `answered` — только принятые, `total` — все. `null`, если не задан |\n| `queue` | string[] | да | только `get` | Массив ID операторов в очереди (строки) |\n| `queueFull` | object | да | только `get` | Объекты операторов с полями `ID`, `SORT`, `USER_ID`, `DEPARTMENT_ID`, `USER_NAME`, `USER_WORK_POSITION`, `USER_AVATAR`, `USER_AVATAR_ID` |\n| `queueUsersFields` | object | да | только `get` | Данные профилей операторов: `USER_NAME`, `USER_WORK_POSITION`, `USER_AVATAR`, `USER_AVATAR_ID` |\n| `queueOnline` | string | да | только `get` | Есть ли операторы онлайн в данный момент: `\"Y\"` \u002F `\"N\"` |\n\n#### Интеграция с CRM\n\n| Поле | Тип | RO | Источник | Описание |\n|------|-----|----|---------|---------|\n| `crm` | string | | везде | Включить интеграцию с CRM: `\"Y\"` \u002F `\"N\"` |\n| `crmCreate` | string | | везде | Тип создаваемой CRM-записи при первом обращении: `deal`, `lead`, `contact`, `company` |\n| `crmCreateSecond` | string | | везде | Тип записи при повторных обращениях (числовой идентификатор типа) |\n| `crmCreateThird` | string | | везде | Тип записи при третьем и последующих обращениях: `\"Y\"` \u002F `\"N\"` |\n| `crmForward` | string | | везде | Переадресовывать обращение ответственному из CRM: `\"Y\"` \u002F `\"N\"` |\n| `crmChatTracker` | string | | везде | Включить трекер чата в CRM: `\"Y\"` \u002F `\"N\"` |\n| `crmTransferChange` | string | | везде | Менять ответственного при переводе чата: `\"Y\"` \u002F `\"N\"` |\n| `crmSource` | string | | везде | Источник CRM-записи: `create` — создавать, другое значение — брать из истории |\n\n#### Приветственное сообщение\n\n| Поле | Тип | RO | Источник | Описание |\n|------|-----|----|---------|---------|\n| `welcomeMessage` | string | | везде | Показывать приветствие: `\"Y\"` \u002F `\"N\"` |\n| `welcomeMessageText` | string | | везде | Текст приветствия (поддерживает BB-код) |\n| `watchTyping` | string | | везде | Показывать индикатор набора текста: `\"Y\"` \u002F `\"N\"` |\n| `sendWelcomeEachSession` | string | | везде | Отправлять приветствие при каждой новой сессии: `\"Y\"` \u002F `\"N\"` |\n\n#### Приветственный бот\n\n| Поле | Тип | RO | Источник | Описание |\n|------|-----|----|---------|---------|\n| `welcomeBotEnable` | string | | везде | Включить приветственного бота: `\"Y\"` \u002F `\"N\"` |\n| `welcomeBotId` | string | | везде | ID бота. Список: `GET \u002Fv1\u002Fbots` |\n| `welcomeBotTime` | string | | везде | Время ожидания ответа бота (секунды) |\n| `welcomeBotJoin` | string | | везде | Когда бот присоединяется: `always` — всегда, другие значения по настройке |\n| `welcomeBotLeft` | string | | везде | Когда бот покидает чат: `queue` — после постановки в очередь, другие значения по настройке |\n\n#### Рабочее время\n\n| Поле | Тип | RO | Источник | Описание |\n|------|-----|----|---------|---------|\n| `workTimeEnable` | string | | везде | Включить расписание рабочего времени: `\"Y\"` \u002F `\"N\"` |\n| `workTimeFrom` | string | | везде | Начало рабочего дня (например `\"8\"`, `\"9.30\"`) |\n| `workTimeTo` | string | | везде | Конец рабочего дня |\n| `workTimeTimezone` | string | | везде | Часовой пояс (например `\"Europe\u002FKaliningrad\"`) |\n| `workTimeHolidays` | string[] | | везде | Праздничные нерабочие дни в формате `\"ДД.ММ\"` (например `[\"1.01\",\"7.01\"]`) |\n| `workTimeDayoff` | string[] | | везде | Выходные дни недели: `\"MO\"`, `\"TU\"`, `\"WE\"`, `\"TH\"`, `\"FR\"`, `\"SA\"`, `\"SU\"` |\n\n#### Сценарии нерабочего времени, нет ответа, закрытие\n\nТри группы по четыре поля — сценарий, форма, бот, текст:\n\n| Поле | Тип | RO | Источник | Описание |\n|------|-----|----|---------|---------|\n| `workTimeDayoffRule` | string | | везде | Действие в выходной день: `text` — сообщение, `form` — форма, `bot` — бот, `none` — ничего |\n| `workTimeDayoffFormId` | string | | везде | ID формы для нерабочего времени |\n| `workTimeDayoffBotId` | string | | везде | ID бота для нерабочего времени. Список: `GET \u002Fv1\u002Fbots` |\n| `workTimeDayoffText` | string | | везде | Текст сообщения в нерабочее время (поддерживает BB-код) |\n| `noAnswerRule` | string | | везде | Действие при нет ответа: `text`, `form`, `bot`, `none` |\n| `noAnswerFormId` | string | | везде | ID формы при нет ответа |\n| `noAnswerBotId` | string | | везде | ID бота при нет ответа. Список: `GET \u002Fv1\u002Fbots` |\n| `noAnswerText` | string | | везде | Текст сообщения при нет ответа |\n| `closeRule` | string | | везде | Действие при закрытии чата: `text`, `form`, `bot`, `none` |\n| `closeFormId` | string | | везде | ID формы при закрытии |\n| `closeBotId` | string | | везде | ID бота при закрытии. Список: `GET \u002Fv1\u002Fbots` |\n| `closeText` | string | | везде | Текст сообщения при закрытии |\n| `fullCloseTime` | string | | везде | Время до полного закрытия чата (секунды) |\n| `confirmClose` | string | | везде | Запрашивать подтверждение при закрытии чата: `\"Y\"` \u002F `\"N\"` |\n| `showNotificationRedirect` | string\\|null | | везде | Показывать уведомление при перенаправлении: `\"Y\"` \u002F `\"N\"` \u002F `null` |\n\n#### Автозакрытие по неактивности\n\n| Поле | Тип | RO | Источник | Описание |\n|------|-----|----|---------|---------|\n| `autoCloseRule` | string | | везде | Действие при истечении времени неактивности: `text`, `form`, `bot`, `none` |\n| `autoCloseFormId` | string | | везде | ID формы при автозакрытии |\n| `autoCloseBotId` | string | | везде | ID бота при автозакрытии. Список: `GET \u002Fv1\u002Fbots` |\n| `autoCloseTime` | string | | везде | Время до автозакрытия чата (секунды) |\n| `autoCloseText` | string\\|null | | везде | Текст при автозакрытии. Незаданное значение приходит как `null` |\n| `autoExpireTime` | string | | везде | Время истечения сессии по неактивности (секунды) |\n\n#### Оценка качества\n\n| Поле | Тип | RO | Источник | Описание |\n|------|-----|----|---------|---------|\n| `voteMessage` | string | | везде | Включить запрос оценки: `\"Y\"` \u002F `\"N\"` |\n| `voteTimeLimit` | string | | везде | Ограничение времени на оценку (секунды, `\"0\"` — без ограничения) |\n| `voteBeforeFinish` | string | | везде | Запрашивать оценку до завершения чата: `\"Y\"` \u002F `\"N\"` |\n| `voteClosingDelay` | string | | везде | Задержка закрытия после оценки: `\"Y\"` \u002F `\"N\"` |\n| `voteMessage1Text` | string | | везде | Текст запроса оценки (простые сообщения с кнопками) |\n| `voteMessage1Like` | string | | везде | Ответ при положительной оценке |\n| `voteMessage1Dislike` | string | | везде | Ответ при отрицательной оценке |\n| `voteMessage2Text` | string | | везде | Текст запроса оценки (текстовый режим, `1`\u002F`0`) |\n| `voteMessage2Like` | string | | везде | Ответ при `1` (положительная) |\n| `voteMessage2Dislike` | string | | везде | Ответ при `0` (отрицательная) |\n\n#### Соглашения и категории\n\n| Поле | Тип | RO | Источник | Описание |\n|------|-----|----|---------|---------|\n| `agreementMessage` | string | | везде | Запрашивать согласие с условиями: `\"Y\"` \u002F `\"N\"` |\n| `agreementId` | string | | везде | ID документа с условиями |\n| `categoryEnable` | string | | везде | Включить категоризацию обращений: `\"Y\"` \u002F `\"N\"` |\n| `categoryId` | string | | везде | ID категории по умолчанию |\n\n#### Форма ожидания\n\n| Поле | Тип | RO | Источник | Описание |\n|------|-----|----|---------|---------|\n| `useWelcomeForm` | string | | везде | Показывать форму перед постановкой в очередь: `\"Y\"` \u002F `\"N\"` |\n| `welcomeFormId` | string | | везде | ID формы ожидания |\n| `welcomeFormDelay` | string | | везде | Задержка показа формы: `\"Y\"` \u002F `\"N\"` |\n| `ignoreWelcomeFormResponsible` | string | | везде | Пропускать форму для ответственного из CRM: `\"Y\"` \u002F `\"N\"` |\n\n#### Оператор и сессия\n\n| Поле | Тип | RO | Источник | Описание |\n|------|-----|----|---------|---------|\n| `operatorData` | string | | везде | Данные оператора в чате: `profile` — полный профиль |\n| `defaultOperatorData` | array | | везде | Данные по умолчанию при отсутствии операторов. Пустой набор приходит как `[]` |\n| `sessionPriority` | string | | везде | Приоритет сессии (`\"0\"` — стандартный) |\n| `quickAnswersIblockId` | string | | везде | ID инфоблока с быстрыми ответами |\n\n#### KPI\n\n| Поле | Тип | RO | Источник | Описание |\n|------|-----|----|---------|---------|\n| `kpiFirstAnswerTime` | string | | везде | Норматив времени первого ответа (секунды) |\n| `kpiFirstAnswerAlert` | string | | везде | Отправлять предупреждение при нарушении KPI первого ответа: `\"Y\"` \u002F `\"N\"` |\n| `kpiFirstAnswerList` | string[] | | везде | Список ID получателей предупреждения по KPI первого ответа. Пустой набор приходит как `[]` |\n| `kpiFirstAnswerText` | string\\|null | | везде | Шаблон текста предупреждения (поддерживает `#OPERATOR#`, `#DIALOG#`). `null`, если не задан |\n| `kpiFurtherAnswerTime` | string | | везде | Норматив времени последующих ответов (секунды) |\n| `kpiFurtherAnswerAlert` | string | | везде | Отправлять предупреждение при нарушении KPI последующих ответов: `\"Y\"` \u002F `\"N\"` |\n| `kpiFurtherAnswerList` | string[] | | везде | Список ID получателей предупреждения. Пустой набор приходит как `[]` |\n| `kpiFurtherAnswerText` | string\\|null | | везде | Шаблон текста предупреждения. `null`, если не задан |\n| `kpiCheckOperatorActivity` | string | | везде | Контролировать активность оператора: `\"Y\"` \u002F `\"N\"` |\n| `sendNotificationEmptyQueue` | string | | везде | Уведомлять при пустой очереди: `\"Y\"` \u002F `\"N\"` |\n\n#### Служебные\n\n| Поле | Тип | RO | Источник | Описание |\n|------|-----|----|---------|---------|\n| `dateCreate` | object | да | везде | Дата создания — приходит как пустой объект `{}` |\n| `dateModify` | object | да | везде | Дата последнего изменения — приходит как пустой объект `{}` |\n| `modifyUserId` | string | да | везде | ID пользователя, внёсшего последнее изменение. Поиск: `GET \u002Fv1\u002Fusers` |\n\n## Пример ответа\n\nПоказаны несколько представительных полей. Полный набор больше — 95 полей в `get`, 91 в `list`\u002F`search`.\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"fields\": {\n      \"id\": { \"type\": \"number\", \"readonly\": true, \"label\": \"Идентификатор\", \"description\": \"Идентификатор конфигурации.\" },\n      \"name\": { \"type\": \"string\", \"readonly\": false, \"label\": \"Название линии\", \"description\": \"Название открытой линии.\" },\n      \"active\": { \"type\": \"boolean\", \"readonly\": false, \"label\": \"Линия активна\", \"description\": \"Линия активна (true\u002Ffalse).\" },\n      \"queueType\": { \"type\": \"string\", \"readonly\": false, \"label\": \"Алгоритм распределения\", \"description\": \"Алгоритм распределения: all — всем одновременно, evenly — равномерно, strictly — строго по очереди.\" },\n      \"crmCreate\": { \"type\": \"string\", \"readonly\": false, \"label\": \"Создаваемая CRM-запись\", \"description\": \"Тип создаваемой CRM-записи при первом обращении: deal, lead, contact, company.\" },\n      \"welcomeMessage\": { \"type\": \"string\", \"readonly\": false, \"label\": \"Показывать приветствие\", \"description\": \"Показывать приветствие: Y\u002FN.\" },\n      \"workTimeFrom\": { \"type\": \"string\", \"readonly\": false, \"label\": \"Начало рабочего дня\", \"description\": \"Начало рабочего дня (например 8, 9.30).\" }\n    },\n    \"aggregatable\": [\"active\", \"queueType\"],\n    \"batch\": []\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n403 — нет скоупа:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SCOPE_DENIED\",\n    \"message\": \"Access denied. Required scope: imopenlines\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 401 | `TOKEN_MISSING` | API-ключ не передан |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imopenlines` |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Единый набор имён — camelCase.** Все поля ответов `list`\u002F`get`\u002F`search` приходят в camelCase. Эндпоинт `\u002Ffields` (`data.fields`) описывает каждое поле с `type`, `readonly`, `label` и `description`. По этим именам работают `filter`, `sort`, `groupBy`. Всего 91 поле в `list`\u002F`search`, 95 в `get` (добавляются 4 поля очереди операторов). При **записи** (`create`\u002F`update`) camelCase — канонический регистр. Имена в UPPER_SNAKE_CASE также принимаются для обратной совместимости. Булевы поля при записи принимают `true`\u002F`false` (приводятся к `\"Y\"`\u002F`\"N\"`).\n\n**Числовые поля приходят строками.** `queueTime`, `noAnswerTime`, `autoCloseTime`, `maxChat`, `kpiFirstAnswerTime` и другие — строки (`\"60\"`, `\"180\"`). Исключение — `id` (`number`) и `active` (`boolean`): эти два поля трансформирует схема API Вайбкод.\n\n**`dateCreate` и `dateModify` всегда пустые объекты `{}`.** Битрикс24 не передаёт значения дат через эти поля.\n\n## Смотрите также\n\n- [Список конфигураций](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Flist)\n- [Получить конфигурацию](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Fget)\n- [Entity API](\u002Fdocs\u002Fentity-api)\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n","\n## Агрегация конфигураций открытых линий\n\n`POST \u002Fv1\u002Fopenline-configs\u002Faggregate`\n\nПодсчёт количества конфигураций открытых линий с опциональной группировкой по типу очереди и другим полям схемы.\n\n**Группировка.** `groupBy` принимает 2 поля: `active`, `queueType` — это `aggregatable`-поля из [`GET \u002Fv1\u002Fopenline-configs\u002Ffields`](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields). Остальные поля (`id`, `name`, `workTimeFrom`, `workTimeTo` и прочие camelCase-поля ответа) в `groupBy` отвергаются с `400 INVALID_PARAMS` — подробности в [Известных особенностях](#известные-особенности).\n\n**Числовые агрегации (`sum`\u002F`avg`\u002F`min`\u002F`max`) не применимы.** Поля openline-configs — категориальные или идентификационные; поддерживается только функция `count` с `field: \"*\"`.\n\n## Поля запроса (body)\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `aggregate` | array | нет | Массив агрегаций. Каждый элемент: `{ \"field\": \"*\", \"function\": \"count\" }`. Функция `count` требует `field: \"*\"`. Без параметра — только `count` |\n| `filter` | object | нет | Фильтрация. [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering). Пример: `{\"active\": false}` |\n| `groupBy` | string \\| string[] | нет | Поле или массив полей для группировки. Допустимые значения: `active`, `queueType` — см. [Известные особенности](#известные-особенности) |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002Faggregate\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"groupBy\": \"queueType\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002Faggregate\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"groupBy\": \"queueType\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002Faggregate', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    groupBy: 'queueType',\n  }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('Всего конфигураций:', data.count)\nconsole.log('По типу очереди:', data.groups)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenline-configs\u002Faggregate', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    groupBy: 'queueType',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n> Для группировки по нескольким полям передайте массив: `\"groupBy\": [\"queueType\", \"active\"]`. Принимаются комбинации из 2 допустимых полей: `active`, `queueType`.\n\n## Другие сценарии\n\nОбщее количество конфигураций — самый быстрый запрос, без выгрузки записей:\n\n```json\n{}\n```\n\nЯвная передача `count` через `aggregate`:\n\n```json\n{\n  \"aggregate\": [{ \"field\": \"*\", \"function\": \"count\" }]\n}\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.count` | number | Итоговое количество конфигураций в выборке (после применения фильтра, если он сработал). Это основной показатель для приложения |\n| `data.aggregates` | object | Результаты агрегаций (для openline-configs всегда `{}`) |\n| `data.groups` | array | Группы (только при `groupBy`). Каждый элемент: поле группировки + `count` + `aggregates` |\n| `data.meta.totalRecords` | number | Сколько записей увидел aggregator во входной выборке. Без `groupBy` совпадает с `data.count`; с `groupBy` равен сумме `count` по всем группам. Техническая метрика |\n| `data.meta.recordsProcessed` | number | Сколько записей реально обработано при группировке. `0`, если `groupBy` не передан |\n| `data.meta.truncated` | boolean | `true`, если под выборку попало более 5000 записей |\n| `data.meta.groupTotal` | number | Количество групп в результате (только при `groupBy`) |\n| `data.meta.groupsTruncated` | boolean | Признак усечения списка групп (только при `groupBy`) |\n\n## Пример ответа\n\nОтвет на основной запрос (`groupBy: \"queueType\"`):\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"count\": 10,\n    \"aggregates\": {},\n    \"groups\": [\n      { \"queueType\": \"all\", \"count\": 9, \"aggregates\": {} },\n      { \"queueType\": \"evenly\", \"count\": 1, \"aggregates\": {} }\n    ],\n    \"meta\": {\n      \"totalRecords\": 10,\n      \"recordsProcessed\": 10,\n      \"truncated\": false,\n      \"groupTotal\": 2,\n      \"groupsTruncated\": false\n    }\n  }\n}\n```\n\nБез `groupBy` поле `data.groups` в ответе отсутствует.\n\n## Пример ответа при ошибке\n\n400 — функция `count` с неверным именем поля:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_PARAMS\",\n    \"message\": \"count aggregate requires field \\\"*\\\"\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | Функция `count` передана с `field` не равным `\"*\"`, или передан `groupBy` по полю не из схемы Вайбкода |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imopenlines` |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Параметр `filter` в aggregate игнорируется.** Передача `{\"filter\": {\"active\": false}}` не влияет на результат — метод возвращает `count` по всем конфигурациям портала. Причина: aggregate обходит записи через метод списка `imopenlines.config.list.get`, который на стороне Битрикс24 фильтр для openline-configs не применяет. Для подсчёта по подмножеству используйте `groupBy` (например, `groupBy: [\"active\"]` разобьёт результат по признаку активности) или обрабатывайте результат [`POST \u002Fv1\u002Fopenline-configs\u002Fsearch`](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Fsearch) на стороне клиента.\n\n**Функция `count` требует `field: \"*\"`.** При передаче `{\"field\": \"id\", \"function\": \"count\"}` возвращается `400 INVALID_PARAMS`. Единственный корректный формат: `{\"field\": \"*\", \"function\": \"count\"}`.\n\n**`groupBy` принимает только 2 поля из схемы Вайбкода:** `active`, `queueType`. Это `aggregatable`-поля из ответа [`GET \u002Fv1\u002Fopenline-configs\u002Ffields`](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Ffields). Остальные поля (`id`, `name`, `workTimeFrom`, `workTimeTo`, `queueTime`, `crm`, ...) в `groupBy` отвергаются с `400 INVALID_PARAMS` и сообщением «groupBy field 'X' is not aggregatable on this entity. Available: active, queueType».\n\n## Смотрите также\n\n- [Список конфигураций](\u002Fdocs\u002Fentities\u002Fopenline-configs\u002Flist) — получить записи с фильтрацией и `total`\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) — rate limits\n"]