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