Для AI-агентов: markdown этой страницы — /docs-content/openlines/stats.md индекс документации — /llms.txt
Агрегаты по линии за период
Метод выходит в обновлении
imopenlines 26.700.0и доступен пока не на всех порталах Битрикс24. Если обновление на ваш портал ещё не пришло, API вернёт422 METHOD_NOT_YET_AVAILABLE— это признак того, что метод на портале ещё не выпущен, а не ошибка интеграции.
POST /v1/openlines/stats
Сводные показатели Открытых линий за период — счётчики сессий, среднее время до первого ответа и средняя длительность сессии, удовлетворённость клиентов (CSAT) и разбивки по каналам, часам и операторам. Основной метод для сводных блоков панели статистики. Запрос ресурсоёмкий: запрашивайте не чаще одного раза в 30–60 секунд и кэшируйте результат.
Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
ПолеdateFrom |
Типstring | Обяз.да | ОписаниеНачало периода, ISO 8601. Период dateFrom..dateTo — не больше 1 года |
ПолеdateTo |
Типstring | Обяз.да | ОписаниеКонец периода, ISO 8601 |
ПолеconfigId |
Типnumber | Обяз.нет | ОписаниеИдентификатор линии. Источник: GET /v1/openline-configs |
ПолеconfigIdList |
Типnumber[] | Обяз.нет | ОписаниеСписок идентификаторов линий. Источник: GET /v1/openline-configs |
Полеsource |
Типstring | Обяз.нет | ОписаниеКод коннектора, например livechat. Значения — поле sessionsBySource[].source в ответе этого метода или sessions[].source в ответе POST /v1/openlines/sessions/search |
ПолеsourceList |
Типstring[] | Обяз.нет | ОписаниеСписок кодов коннекторов |
ПолеoperatorId |
Типnumber | Обяз.нет | ОписаниеИдентификатор оператора. Источник: GET /v1/users |
ПолеoperatorIdList |
Типnumber[] | Обяз.нет | ОписаниеСписок идентификаторов операторов. Источник: GET /v1/users |
Если не задан ни один из configId*/source*/operatorId*, агрегаты считаются по всем линиям, доступным текущему пользователю.
Примеры
curl — личный ключ
curl -X POST "https://vibecode.bitrix24.tech/v1/openlines/stats" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"dateFrom": "2026-10-01T00:00:00+03:00",
"dateTo": "2026-10-19T23:59:59+03:00",
"configId": 59
}'
curl — OAuth-приложение
curl -X POST "https://vibecode.bitrix24.tech/v1/openlines/stats" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"dateFrom": "2026-10-01T00:00:00+03:00",
"dateTo": "2026-10-19T23:59:59+03:00",
"configId": 59
}'
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/openlines/stats', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
dateFrom: '2026-10-01T00:00:00+03:00',
dateTo: '2026-10-19T23:59:59+03:00',
configId: 59,
}),
})
const { data } = await res.json()
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/openlines/stats', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
dateFrom: '2026-10-01T00:00:00+03:00',
dateTo: '2026-10-19T23:59:59+03:00',
configId: 59,
}),
})
const { data } = await res.json()
Поля ответа
Числовые метрики при отсутствии данных за период возвращаются как 0, а не null. Разбивки sessionsBySource и sessionsByOperator в этом случае приходят пустыми массивами.
| Поле | Тип | Описание |
|---|---|---|
Полеsuccess |
Типboolean | Описаниеtrue при успешном запросе |
Полеdata |
Типobject | ОписаниеПоказатели за период |
Полеdata.totalSessions |
Типnumber | ОписаниеЧисло сессий за период |
Полеdata.closedSessions |
Типnumber | ОписаниеЧисло закрытых сессий |
Полеdata.spamSessions |
Типnumber | ОписаниеЧисло сессий, помеченных как спам |
Полеdata.avgWaitAnswer |
Типnumber | ОписаниеСреднее время до первого ответа, секунды |
Полеdata.avgSessionDuration |
Типnumber | ОписаниеСредняя длительность сессии, секунды |
Полеdata.likeCount |
Типnumber | ОписаниеЧисло клиентских оценок «лайк» |
Полеdata.dislikeCount |
Типnumber | ОписаниеЧисло клиентских оценок «дизлайк» |
Полеdata.votedSessions |
Типnumber | ОписаниеЧисло сессий с клиентской оценкой |
Полеdata.positiveRate |
Типnumber | ОписаниеДоля положительных оценок среди оценённых сессий, от 0 до 1 |
Полеdata.kpiFirstAnswerOk |
Типnumber | ОписаниеЧисло сессий, где первый ответ уложился в норматив времени (SLA) |
Полеdata.kpiFirstAnswerFail |
Типnumber | ОписаниеЧисло сессий, где первый ответ не уложился в норматив времени |
Полеdata.sessionsBySource |
Типobject[] | ОписаниеРазбивка по каналам |
Полеdata.sessionsBySource[].source |
Типstring | ОписаниеКод коннектора, например livechat |
Полеdata.sessionsBySource[].count |
Типnumber | ОписаниеЧисло сессий из канала |
Полеdata.sessionsByHour |
Типnumber[] | ОписаниеРовно 24 числа — сессии по часам 0–23 в часовом поясе сервера портала. Индекс элемента — час |
Полеdata.sessionsByOperator |
Типobject[] | ОписаниеРазбивка по операторам |
Полеdata.sessionsByOperator[].operatorId |
Типnumber | ОписаниеИдентификатор оператора. Данные сотрудника — GET /v1/users |
Полеdata.sessionsByOperator[].count |
Типnumber | ОписаниеЧисло сессий оператора |
Полеdata.sessionsByOperator[].avgWaitAnswer |
Типnumber | ОписаниеСреднее время до первого ответа, секунды |
Полеdata.sessionsByOperator[].positiveRate |
Типnumber | ОписаниеДоля положительных оценок среди оценённых сессий оператора, от 0 до 1 |
Пример ответа
{
"success": true,
"data": {
"totalSessions": 6,
"closedSessions": 5,
"spamSessions": 1,
"avgWaitAnswer": 0,
"avgSessionDuration": 0,
"likeCount": 0,
"dislikeCount": 0,
"votedSessions": 0,
"positiveRate": 0,
"kpiFirstAnswerOk": 0,
"kpiFirstAnswerFail": 0,
"sessionsBySource": [
{ "source": "doccheck", "count": 6 }
],
"sessionsByHour": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,0,0,0,0],
"sessionsByOperator": [
{ "operatorId": 1295, "count": 4, "avgWaitAnswer": 0, "positiveRate": 0 },
{ "operatorId": 1, "count": 2, "avgWaitAnswer": 0, "positiveRate": 0 }
]
}
}
Пример ответа при ошибке
400 — не передан период:
{
"success": false,
"error": { "code": "MISSING_PARAMS", "message": "Required: dateFrom, dateTo (ISO 8601 strings)" }
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP400 | КодINVALID_JSON_BODY |
ОписаниеТело запроса не разобралось как JSON. JSON разбирается до проверки полей, поэтому про отсутствующие параметры ответ ничего не говорит |
| HTTP400 | КодINVALID_PARAMS |
ОписаниеТело запроса не объект |
| HTTP400 | КодMISSING_PARAMS |
ОписаниеНе передан dateFrom и/или dateTo либо значение не строка или пустая строка |
| HTTP401 | КодTOKEN_MISSING |
ОписаниеУ ключа нет настроенных токенов |
| HTTP403 | КодSCOPE_DENIED |
ОписаниеУ ключа нет скоупа imopenlines |
| HTTP403 | КодB24_TARIFF_RESTRICTION |
ОписаниеТариф не включает статистику Открытых линий (report_open_lines) |
| HTTP422 | КодBITRIX_ERROR (error.b24Code: INVALID_FILTER) |
ОписаниеНедопустимое значение фильтра или формат даты |
| HTTP422 | КодBITRIX_ERROR (error.b24Code: PERIOD_TOO_LARGE) |
ОписаниеПериод превышает 1 год |
| HTTP422 | КодMETHOD_NOT_YET_AVAILABLE |
ОписаниеОбновление imopenlines 26.700.0 ещё не пришло на портал. Ответ содержит поле error.release со значением imopenlines 26.700.0 |
Полный список общих ошибок API — Ошибки.