[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-openlines\u002Fsessions":3,"docs-tabs-openlines\u002Fsessions":6},{"content":4,"lastmod":5},"## Список сессий\n\n> ⚠️ **Метод выходит в обновлении `imopenlines 26.700.0` и доступен пока не на всех порталах Битрикс24.** Если обновление на ваш портал ещё не пришло, API вернёт `422 METHOD_NOT_YET_AVAILABLE` — это признак того, что метод на портале ещё не выпущен, а не ошибка интеграции.\n\n`POST \u002Fv1\u002Fopenlines\u002Fsessions\u002Fsearch`\n\nСписок сессий Открытых линий с фильтрами и пагинацией — основной метод для детализированных отчётов и выгрузки в внешние системы аналитики. Пустое тело `{}` вернёт первую страницу всех видимых сессий.\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|---------|\n| `configId` | number | нет | Идентификатор линии. Источник: [`GET \u002Fv1\u002Fopenline-configs`](\u002Fdocs\u002Fopenlines\u002Fconfig\u002Flist) |\n| `configIdList` | number[] | нет | Список линий |\n| `operatorId` | number | нет | Идентификатор оператора. Источник: [`GET \u002Fv1\u002Fusers`](\u002Fdocs\u002Fentities\u002Fusers) |\n| `operatorIdList` | number[] | нет | Список операторов |\n| `source` | string | нет | Код канала (connector id) |\n| `sourceList` | string[] | нет | Список кодов каналов |\n| `status` | string | нет | Статус сессии: `new` \u002F `answered` \u002F `closed` \u002F `spam` \u002F `paused` |\n| `closeReason` | string | нет | Причина закрытия: `operator` \u002F `auto` \u002F `spam` \u002F `client` \u002F `replyLimit` |\n| `dateCreateFrom` | string | нет | Начало периода создания, ISO 8601. Период `dateCreateFrom`..`dateCreateTo` — не больше 1 года |\n| `dateCreateTo` | string | нет | Конец периода создания, ISO 8601 |\n| `dateCloseFrom` | string | нет | Начало периода закрытия, ISO 8601 |\n| `dateCloseTo` | string | нет | Конец периода закрытия, ISO 8601 |\n| `vote` | string | нет | Клиентская оценка: `like` \u002F `dislike` \u002F `none` \u002F `any` |\n| `hasVoteHead` | boolean | нет | Есть ли оценка руководителя. Принимает `true`\u002F`false` и `Y`\u002F`N` |\n| `kpiFirstAnswer` | boolean | нет | Уложились ли в SLA первого ответа. Требует ограниченного периода (`dateCreateFrom`+`dateCreateTo` либо `dateCloseFrom`+`dateCloseTo`) |\n| `hasCrm` | boolean | нет | Есть ли привязка к CRM |\n| `waitAnswerFrom` | number | нет | Мин. время до первого ответа, секунды |\n| `waitAnswerTo` | number | нет | Макс. время до первого ответа, секунды |\n| `waitCloseFrom` | number | нет | Мин. время до закрытия, секунды |\n| `waitCloseTo` | number | нет | Макс. время до закрытия, секунды |\n| `order` | string | нет | Поле сортировки: `dateCreate` \u002F `dateClose` \u002F `waitAnswer` \u002F `waitClose` (по умолчанию `dateCreate`) |\n| `orderDirection` | string | нет | Направление: `asc` \u002F `desc` (по умолчанию `desc`) |\n| `limit` | number | нет | Размер страницы, 1..200 (по умолчанию 50) |\n| `offset` | number | нет | Смещение для пагинации (по умолчанию 0) |\n\nФильтры `status` и `closeReason` взаимоисключающи: `closeReason` уже подразумевает закрытую сессию. Фильтр `hasVoteHead` применяется только к линиям, где у пользователя есть право на оценку руководителя.\n\nФильтра по типу CRM-сущности нет — по CRM доступен только булев `hasCrm` (есть привязка или нет). Если нужен отбор по конкретному типу, фильтруйте на своей стороне по полям `crmEntityType` \u002F `crmEntityId` из ответа.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenlines\u002Fsessions\u002Fsearch\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"configId\": 3,\n    \"status\": \"closed\",\n    \"dateCreateFrom\": \"2026-06-01T00:00:00+03:00\",\n    \"dateCreateTo\": \"2026-06-30T23:59:59+03:00\",\n    \"limit\": 50\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenlines\u002Fsessions\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    \"configId\": 3,\n    \"status\": \"closed\",\n    \"dateCreateFrom\": \"2026-06-01T00:00:00+03:00\",\n    \"dateCreateTo\": \"2026-06-30T23:59:59+03:00\",\n    \"limit\": 50\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenlines\u002Fsessions\u002Fsearch', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    configId: 3,\n    status: 'closed',\n    dateCreateFrom: '2026-06-01T00:00:00+03:00',\n    dateCreateTo: '2026-06-30T23:59:59+03:00',\n    limit: 50,\n  }),\n})\nconst { data } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenlines\u002Fsessions\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    configId: 3,\n    status: 'closed',\n    dateCreateFrom: '2026-06-01T00:00:00+03:00',\n    dateCreateTo: '2026-06-30T23:59:59+03:00',\n    limit: 50,\n  }),\n})\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\nОтвет — `{ \"success\": true, \"data\": { \"sessions\": [...], \"hasNextPage\": bool } }`.\n\n| Ключ | Описание |\n|---|---|\n| `sessions[].id` | Идентификатор сессии |\n| `sessions[].configId` | Идентификатор линии |\n| `sessions[].source` | Код канала |\n| `sessions[].operatorId` | Идентификатор оператора, завершившего сессию |\n| `sessions[].userId` \u002F `userCode` | Клиент: внутренний id и внешний код |\n| `sessions[].chatId` | Идентификатор IM-чата сессии |\n| `sessions[].dateCreate` \u002F `dateClose` | Создание и закрытие сессии, ISO 8601 |\n| `sessions[].dateFirstAnswer` \u002F `dateOperatorAnswer` | Дата первого ответа и дата, когда оператор начал работу с сессией — это разные моменты, ISO 8601 |\n| `sessions[].status` \u002F `closeReason` | Статус и причина закрытия |\n| `sessions[].vote` | Клиентская оценка (`like` \u002F `dislike` \u002F `none`) |\n| `sessions[].voteHead` \u002F `commentHead` | Оценка и комментарий руководителя (`null`, если нет права) |\n| `sessions[].crmEntityType` \u002F `crmEntityId` | Привязка к CRM (`null`, если нет права чтения связанной сущности) |\n| `sessions[].queueTransfers` | Число переназначений в очереди |\n| `sessions[].waitAnswer` \u002F `waitClose` | Время до первого ответа и до закрытия, секунды. Это самостоятельные хранимые метрики — не вычисляйте их из дат выше, значения могут не совпасть |\n| `sessions[].kpiFirstAnswer` | Уложились ли в SLA первого ответа |\n| `sessions[].messageCount` | Число сообщений в сессии |\n| `hasNextPage` | Есть ли следующая страница (поле конверта `data`, не элемента) |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"sessions\": [\n      {\n        \"id\": 1024,\n        \"configId\": 3,\n        \"source\": \"livechat\",\n        \"operatorId\": 42,\n        \"userId\": 501,\n        \"userCode\": \"site_visitor_88a1\",\n        \"chatId\": 2048,\n        \"dateCreate\": \"2026-06-15T14:30:00+03:00\",\n        \"dateClose\": \"2026-06-15T14:52:10+03:00\",\n        \"dateFirstAnswer\": \"2026-06-15T14:31:05+03:00\",\n        \"dateOperatorAnswer\": \"2026-06-15T14:50:00+03:00\",\n        \"status\": \"closed\",\n        \"closeReason\": \"operator\",\n        \"vote\": \"like\",\n        \"voteHead\": 5,\n        \"commentHead\": \"Отличная работа\",\n        \"crmEntityType\": \"deal\",\n        \"crmEntityId\": 771,\n        \"queueTransfers\": 1,\n        \"waitAnswer\": 65,\n        \"waitClose\": 1330,\n        \"kpiFirstAnswer\": true,\n        \"messageCount\": 14\n      }\n    ],\n    \"hasNextPage\": false\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n`422` — период превышен:\n\n```json\n{\n  \"success\": false,\n  \"error\": { \"code\": \"BITRIX_ERROR\", \"message\": \"The requested period exceeds the maximum of 1 year\", \"b24Code\": \"PERIOD_TOO_LARGE\" }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Когда |\n|---|---|---|\n| 403 | `B24_TARIFF_RESTRICTION` | Тариф не включает статистику Открытых линий (`report_open_lines`) |\n| 400 | `INVALID_PARAMS` | Тело запроса не объект |\n| 422 | `BITRIX_ERROR` (`error.b24Code: PERIOD_TOO_LARGE`) | Период создания\u002Fзакрытия превышает 1 год |\n| 422 | `BITRIX_ERROR` (`error.b24Code: OFFSET_TOO_LARGE`) | `offset` превышает максимум — сузьте период или фильтры |\n| 422 | `BITRIX_ERROR` (`error.b24Code: INVALID_FILTER`) | Недопустимое значение фильтра, одновременно переданы `status` и `closeReason`, либо `kpiFirstAnswer` без ограниченного периода |\n| 422 | `METHOD_NOT_YET_AVAILABLE` | Обновление `imopenlines 26.700.0` ещё не приехало на портал |\n\n## Пагинация без дрейфа страниц\n\nМетод листается через `offset`\u002F`limit`. При постраничной выгрузке фиксируйте верхнюю границу периода — `dateCreateTo` равным моменту старта выгрузки. Без фиксированной границы новые сессии, пришедшие во время листания, сдвигают страницы, и записи на стыках могут повториться или пропасть.\n\nПолный список системных кодов — [Ошибки API](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Метрики по сессиям](\u002Fdocs\u002Fopenlines\u002Fsessions\u002Fstats)\n- [История переназначений](\u002Fdocs\u002Fopenlines\u002Fsessions\u002Ftransfers)\n- [Статистика Открытых линий](\u002Fdocs\u002Fopenlines)\n","2026-07-21",{}]