
## Поля конфигурации открытой линии

`GET /v1/openline-configs/fields`

Возвращает схему полей, доступных для фильтрации и сортировки, а также полный реестр полей в ответах `list`, `get` и `search`.

## Примеры

### curl — личный ключ

```bash
curl "https://vibecode.bitrix24.tech/v1/openline-configs/fields" \
  -H "X-Api-Key: YOUR_API_KEY"
```

### curl — OAuth-приложение

```bash
curl "https://vibecode.bitrix24.tech/v1/openline-configs/fields" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"
```

### JavaScript — личный ключ

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/openline-configs/fields', {
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
  },
})

const { success, data } = await res.json()
console.log('Поля схемы:', Object.keys(data.fields))
```

### JavaScript — OAuth-приложение

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/openline-configs/fields', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

const { success, data } = await res.json()
```

## Поля ответа

Эндпоинт `/fields` возвращает `data.fields` — описание **всех** полей ответов `list`, `get` и `search`: каждое поле снабжено `type`, `readonly`, названием `label` и описанием `description`. Имена полей — **в camelCase**. Полный набор в `get` — 95 полей, в `list`/`search` — 91 (без 4 полей очереди операторов). Дополнительно `data` содержит `aggregatable` и `batch`.

### Схема полей (data.fields)

`/fields` возвращает полный набор полей — каждое с `type`, `readonly`, `label` и `description`. Фильтрация (`filter`), сортировка (`sort`) и группировка (`groupBy`) работают по этим camelCase-именам. Ниже — основные поля, чаще всего используемые в `sort` и `filter`:

| Поле | Тип | RO | Описание |
|------|-----|----|---------|
| `id` | number | да | Идентификатор конфигурации |
| `name` | string | | Название открытой линии |
| `active` | boolean | | Активна ли линия |
| `queueType` | string | | Алгоритм распределения: `all` — всем операторам одновременно, `evenly` — равномерно, `strictly` — строго по очереди |
| `workTimeFrom` | string | | Начало рабочего времени (например `"8"` или `"9.30"`) |
| `workTimeTo` | string | | Конец рабочего времени |

Дополнительно в `data` указаны:
- `aggregatable` — поля, доступные для `groupBy`: `["active", "queueType"]`
- `batch` — перечень пакетных операций, объявленных для этой сущности в ответе `/fields`: пустой массив `[]`

### Полный реестр полей ответа (list / get / search)

В `get` объект `data` содержит 95 полей (все в camelCase), в `list`/`search` — 91 (без 4 полей с отметкой «только `get`»: `queue`, `queueFull`, `queueUsersFields`, `queueOnline`).

#### Основные

| Поле | Тип | RO | Источник | Описание |
|------|-----|----|---------|---------|
| `id` | number | да | везде | Идентификатор конфигурации |
| `name` | string | | везде | Название открытой линии |
| `active` | boolean | | везде | Линия активна (`true`/`false`) |
| `temporary` | string | | везде | Временная линия: `"Y"` / `"N"` |
| `xmlId` | string\|null | | везде | Внешний идентификатор |
| `languageId` | string\|null | | везде | Язык линии (например `"ru"`). `null`, если язык не задан |

#### Очередь и операторы

| Поле | Тип | RO | Источник | Описание |
|------|-----|----|---------|---------|
| `queueType` | string | | везде | Алгоритм распределения: `all` — всем операторам одновременно, `evenly` — равномерно, `strictly` — строго по очереди |
| `queueTime` | string | | везде | Время ожидания в очереди (секунды) |
| `noAnswerTime` | string | | везде | Время без ответа оператора до переключения (секунды) |
| `checkAvailable` | string | | везде | Проверять доступность оператора: `"Y"` / `"N"` |
| `maxChat` | string\|null | | везде | Максимальное число одновременных чатов на оператора (`"0"` — без ограничения). `null`, если не задан |
| `typeMaxChat` | string\|null | | везде | Тип подсчёта лимита чатов: `answered` — только принятые, `total` — все. `null`, если не задан |
| `queue` | string[] | да | только `get` | Массив ID операторов в очереди (строки) |
| `queueFull` | object | да | только `get` | Объекты операторов с полями `ID`, `SORT`, `USER_ID`, `DEPARTMENT_ID`, `USER_NAME`, `USER_WORK_POSITION`, `USER_AVATAR`, `USER_AVATAR_ID` |
| `queueUsersFields` | object | да | только `get` | Данные профилей операторов: `USER_NAME`, `USER_WORK_POSITION`, `USER_AVATAR`, `USER_AVATAR_ID` |
| `queueOnline` | string | да | только `get` | Есть ли операторы онлайн в данный момент: `"Y"` / `"N"` |

#### Интеграция с CRM

| Поле | Тип | RO | Источник | Описание |
|------|-----|----|---------|---------|
| `crm` | string | | везде | Включить интеграцию с CRM: `"Y"` / `"N"` |
| `crmCreate` | string | | везде | Тип создаваемой CRM-записи при первом обращении: `deal`, `lead`, `contact`, `company` |
| `crmCreateSecond` | string | | везде | Тип записи при повторных обращениях (числовой идентификатор типа) |
| `crmCreateThird` | string | | везде | Тип записи при третьем и последующих обращениях: `"Y"` / `"N"` |
| `crmForward` | string | | везде | Переадресовывать обращение ответственному из CRM: `"Y"` / `"N"` |
| `crmChatTracker` | string | | везде | Включить трекер чата в CRM: `"Y"` / `"N"` |
| `crmTransferChange` | string | | везде | Менять ответственного при переводе чата: `"Y"` / `"N"` |
| `crmSource` | string | | везде | Источник CRM-записи: `create` — создавать, другое значение — брать из истории |

#### Приветственное сообщение

| Поле | Тип | RO | Источник | Описание |
|------|-----|----|---------|---------|
| `welcomeMessage` | string | | везде | Показывать приветствие: `"Y"` / `"N"` |
| `welcomeMessageText` | string | | везде | Текст приветствия (поддерживает BB-код) |
| `watchTyping` | string | | везде | Показывать индикатор набора текста: `"Y"` / `"N"` |
| `sendWelcomeEachSession` | string | | везде | Отправлять приветствие при каждой новой сессии: `"Y"` / `"N"` |

#### Приветственный бот

| Поле | Тип | RO | Источник | Описание |
|------|-----|----|---------|---------|
| `welcomeBotEnable` | string | | везде | Включить приветственного бота: `"Y"` / `"N"` |
| `welcomeBotId` | string | | везде | ID бота. Список: `GET /v1/bots` |
| `welcomeBotTime` | string | | везде | Время ожидания ответа бота (секунды) |
| `welcomeBotJoin` | string | | везде | Когда бот присоединяется: `always` — всегда, другие значения по настройке |
| `welcomeBotLeft` | string | | везде | Когда бот покидает чат: `queue` — после постановки в очередь, другие значения по настройке |

#### Рабочее время

| Поле | Тип | RO | Источник | Описание |
|------|-----|----|---------|---------|
| `workTimeEnable` | string | | везде | Включить расписание рабочего времени: `"Y"` / `"N"` |
| `workTimeFrom` | string | | везде | Начало рабочего дня (например `"8"`, `"9.30"`) |
| `workTimeTo` | string | | везде | Конец рабочего дня |
| `workTimeTimezone` | string | | везде | Часовой пояс (например `"Europe/Kaliningrad"`) |
| `workTimeHolidays` | string[] | | везде | Праздничные нерабочие дни в формате `"ДД.ММ"` (например `["1.01","7.01"]`) |
| `workTimeDayoff` | string[] | | везде | Выходные дни недели: `"MO"`, `"TU"`, `"WE"`, `"TH"`, `"FR"`, `"SA"`, `"SU"` |

#### Сценарии нерабочего времени, нет ответа, закрытие

Три группы по четыре поля — сценарий, форма, бот, текст:

| Поле | Тип | RO | Источник | Описание |
|------|-----|----|---------|---------|
| `workTimeDayoffRule` | string | | везде | Действие в выходной день: `text` — сообщение, `form` — форма, `bot` — бот, `none` — ничего |
| `workTimeDayoffFormId` | string | | везде | ID формы для нерабочего времени |
| `workTimeDayoffBotId` | string | | везде | ID бота для нерабочего времени. Список: `GET /v1/bots` |
| `workTimeDayoffText` | string | | везде | Текст сообщения в нерабочее время (поддерживает BB-код) |
| `noAnswerRule` | string | | везде | Действие при нет ответа: `text`, `form`, `bot`, `none` |
| `noAnswerFormId` | string | | везде | ID формы при нет ответа |
| `noAnswerBotId` | string | | везде | ID бота при нет ответа. Список: `GET /v1/bots` |
| `noAnswerText` | string | | везде | Текст сообщения при нет ответа |
| `closeRule` | string | | везде | Действие при закрытии чата: `text`, `form`, `bot`, `none` |
| `closeFormId` | string | | везде | ID формы при закрытии |
| `closeBotId` | string | | везде | ID бота при закрытии. Список: `GET /v1/bots` |
| `closeText` | string | | везде | Текст сообщения при закрытии |
| `fullCloseTime` | string | | везде | Время до полного закрытия чата (секунды) |
| `confirmClose` | string | | везде | Запрашивать подтверждение при закрытии чата: `"Y"` / `"N"` |
| `showNotificationRedirect` | string\|null | | везде | Показывать уведомление при перенаправлении: `"Y"` / `"N"` / `null` |

#### Автозакрытие по неактивности

| Поле | Тип | RO | Источник | Описание |
|------|-----|----|---------|---------|
| `autoCloseRule` | string | | везде | Действие при истечении времени неактивности: `text`, `form`, `bot`, `none` |
| `autoCloseFormId` | string | | везде | ID формы при автозакрытии |
| `autoCloseBotId` | string | | везде | ID бота при автозакрытии. Список: `GET /v1/bots` |
| `autoCloseTime` | string | | везде | Время до автозакрытия чата (секунды) |
| `autoCloseText` | string\|null | | везде | Текст при автозакрытии. Незаданное значение приходит как `null` |
| `autoExpireTime` | string | | везде | Время истечения сессии по неактивности (секунды) |

#### Оценка качества

| Поле | Тип | RO | Источник | Описание |
|------|-----|----|---------|---------|
| `voteMessage` | string | | везде | Включить запрос оценки: `"Y"` / `"N"` |
| `voteTimeLimit` | string | | везде | Ограничение времени на оценку (секунды, `"0"` — без ограничения) |
| `voteBeforeFinish` | string | | везде | Запрашивать оценку до завершения чата: `"Y"` / `"N"` |
| `voteClosingDelay` | string | | везде | Задержка закрытия после оценки: `"Y"` / `"N"` |
| `voteMessage1Text` | string | | везде | Текст запроса оценки (простые сообщения с кнопками) |
| `voteMessage1Like` | string | | везде | Ответ при положительной оценке |
| `voteMessage1Dislike` | string | | везде | Ответ при отрицательной оценке |
| `voteMessage2Text` | string | | везде | Текст запроса оценки (текстовый режим, `1`/`0`) |
| `voteMessage2Like` | string | | везде | Ответ при `1` (положительная) |
| `voteMessage2Dislike` | string | | везде | Ответ при `0` (отрицательная) |

#### Соглашения и категории

| Поле | Тип | RO | Источник | Описание |
|------|-----|----|---------|---------|
| `agreementMessage` | string | | везде | Запрашивать согласие с условиями: `"Y"` / `"N"` |
| `agreementId` | string | | везде | ID документа с условиями |
| `categoryEnable` | string | | везде | Включить категоризацию обращений: `"Y"` / `"N"` |
| `categoryId` | string | | везде | ID категории по умолчанию |

#### Форма ожидания

| Поле | Тип | RO | Источник | Описание |
|------|-----|----|---------|---------|
| `useWelcomeForm` | string | | везде | Показывать форму перед постановкой в очередь: `"Y"` / `"N"` |
| `welcomeFormId` | string | | везде | ID формы ожидания |
| `welcomeFormDelay` | string | | везде | Задержка показа формы: `"Y"` / `"N"` |
| `ignoreWelcomeFormResponsible` | string | | везде | Пропускать форму для ответственного из CRM: `"Y"` / `"N"` |

#### Оператор и сессия

| Поле | Тип | RO | Источник | Описание |
|------|-----|----|---------|---------|
| `operatorData` | string | | везде | Данные оператора в чате: `profile` — полный профиль |
| `defaultOperatorData` | array | | везде | Данные по умолчанию при отсутствии операторов. Пустой набор приходит как `[]` |
| `sessionPriority` | string | | везде | Приоритет сессии (`"0"` — стандартный) |
| `quickAnswersIblockId` | string | | везде | ID инфоблока с быстрыми ответами |

#### KPI

| Поле | Тип | RO | Источник | Описание |
|------|-----|----|---------|---------|
| `kpiFirstAnswerTime` | string | | везде | Норматив времени первого ответа (секунды) |
| `kpiFirstAnswerAlert` | string | | везде | Отправлять предупреждение при нарушении KPI первого ответа: `"Y"` / `"N"` |
| `kpiFirstAnswerList` | string[] | | везде | Список ID получателей предупреждения по KPI первого ответа. Пустой набор приходит как `[]` |
| `kpiFirstAnswerText` | string\|null | | везде | Шаблон текста предупреждения (поддерживает `#OPERATOR#`, `#DIALOG#`). `null`, если не задан |
| `kpiFurtherAnswerTime` | string | | везде | Норматив времени последующих ответов (секунды) |
| `kpiFurtherAnswerAlert` | string | | везде | Отправлять предупреждение при нарушении KPI последующих ответов: `"Y"` / `"N"` |
| `kpiFurtherAnswerList` | string[] | | везде | Список ID получателей предупреждения. Пустой набор приходит как `[]` |
| `kpiFurtherAnswerText` | string\|null | | везде | Шаблон текста предупреждения. `null`, если не задан |
| `kpiCheckOperatorActivity` | string | | везде | Контролировать активность оператора: `"Y"` / `"N"` |
| `sendNotificationEmptyQueue` | string | | везде | Уведомлять при пустой очереди: `"Y"` / `"N"` |

#### Служебные

| Поле | Тип | RO | Источник | Описание |
|------|-----|----|---------|---------|
| `dateCreate` | object | да | везде | Дата создания — приходит как пустой объект `{}` |
| `dateModify` | object | да | везде | Дата последнего изменения — приходит как пустой объект `{}` |
| `modifyUserId` | string | да | везде | ID пользователя, внёсшего последнее изменение. Поиск: `GET /v1/users` |

## Пример ответа

Показаны несколько представительных полей. Полный набор больше — 95 полей в `get`, 91 в `list`/`search`.

```json
{
  "success": true,
  "data": {
    "fields": {
      "id": { "type": "number", "readonly": true, "label": "Идентификатор", "description": "Идентификатор конфигурации." },
      "name": { "type": "string", "readonly": false, "label": "Название линии", "description": "Название открытой линии." },
      "active": { "type": "boolean", "readonly": false, "label": "Линия активна", "description": "Линия активна (true/false)." },
      "queueType": { "type": "string", "readonly": false, "label": "Алгоритм распределения", "description": "Алгоритм распределения: all — всем одновременно, evenly — равномерно, strictly — строго по очереди." },
      "crmCreate": { "type": "string", "readonly": false, "label": "Создаваемая CRM-запись", "description": "Тип создаваемой CRM-записи при первом обращении: deal, lead, contact, company." },
      "welcomeMessage": { "type": "string", "readonly": false, "label": "Показывать приветствие", "description": "Показывать приветствие: Y/N." },
      "workTimeFrom": { "type": "string", "readonly": false, "label": "Начало рабочего дня", "description": "Начало рабочего дня (например 8, 9.30)." }
    },
    "aggregatable": ["active", "queueType"],
    "batch": []
  }
}
```

## Пример ответа при ошибке

403 — нет скоупа:

```json
{
  "success": false,
  "error": {
    "code": "SCOPE_DENIED",
    "message": "Access denied. Required scope: imopenlines"
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|---------|
| 401 | `TOKEN_MISSING` | API-ключ не передан |
| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imopenlines` |

Полный список общих ошибок API — [Ошибки](/docs/errors).

## Известные особенности

**Единый набор имён — camelCase.** Все поля ответов `list`/`get`/`search` приходят в camelCase. Эндпоинт `/fields` (`data.fields`) описывает каждое поле с `type`, `readonly`, `label` и `description`. По этим именам работают `filter`, `sort`, `groupBy`. Всего 91 поле в `list`/`search`, 95 в `get` (добавляются 4 поля очереди операторов). При **записи** (`create`/`update`) camelCase — канонический регистр. Имена в UPPER_SNAKE_CASE также принимаются для обратной совместимости. Булевы поля при записи принимают `true`/`false` (приводятся к `"Y"`/`"N"`).

**Числовые поля приходят строками.** `queueTime`, `noAnswerTime`, `autoCloseTime`, `maxChat`, `kpiFirstAnswerTime` и другие — строки (`"60"`, `"180"`). Исключение — `id` (`number`) и `active` (`boolean`): эти два поля трансформирует схема API Вайбкод.

**`dateCreate` и `dateModify` всегда пустые объекты `{}`.** Битрикс24 не передаёт значения дат через эти поля.

## Смотрите также

- [Список конфигураций](/docs/openlines/config/list)
- [Получить конфигурацию](/docs/openlines/config/get)
- [Entity API](/docs/entity-api)
- [Синтаксис фильтрации](/docs/filtering)
