Для 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[] | нет | Список идентификаторов линий |
source |
string | нет | Код канала (connector id), например livechat |
sourceList |
string[] | нет | Список кодов каналов |
operatorId |
number | нет | Идентификатор оператора. Источник: GET /v1/users |
operatorIdList |
number[] | нет | Список идентификаторов операторов |
Если не задан ни один из 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-06-01T00:00:00+03:00",
"dateTo": "2026-06-30T23:59:59+03:00",
"configId": 3
}'
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-06-01T00:00:00+03:00",
"dateTo": "2026-06-30T23:59:59+03:00",
"configId": 3
}'
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-06-01T00:00:00+03:00',
dateTo: '2026-06-30T23:59:59+03:00',
configId: 3,
}),
})
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-06-01T00:00:00+03:00',
dateTo: '2026-06-30T23:59:59+03:00',
configId: 3,
}),
})
const { data } = await res.json()
Поля ответа
Ответ — { "success": true, "data": {...} }. Все числовые метрики при отсутствии данных за период возвращаются как 0 (или 0.0), никогда как null.
| Ключ | Описание |
|---|---|
totalSessions / closedSessions / spamSessions |
Счётчики сессий за период |
avgWaitAnswer / avgSessionDuration |
Средние показатели, секунды |
likeCount / dislikeCount / votedSessions / positiveRate |
CSAT: клиентская оценка — лайк/дизлайк, positiveRate — доля лайков |
kpiFirstAnswerOk / kpiFirstAnswerFail |
Счётчики по SLA первого ответа |
sessionsBySource |
Разбивка по каналам, [{ source, count }] |
sessionsByHour |
Ровно 24 записи (часы 0–23, часовой пояс сервера портала) |
sessionsByOperator |
Разбивка по операторам, [{ operatorId, count, avgWaitAnswer, positiveRate }] |
Пример ответа
{
"success": true,
"data": {
"totalSessions": 340,
"closedSessions": 318,
"spamSessions": 4,
"avgWaitAnswer": 42.7,
"avgSessionDuration": 612.3,
"likeCount": 210,
"dislikeCount": 15,
"votedSessions": 225,
"positiveRate": 0.9333,
"kpiFirstAnswerOk": 300,
"kpiFirstAnswerFail": 18,
"sessionsBySource": [
{ "source": "livechat", "count": 200 },
{ "source": "whatsapp", "count": 140 }
],
"sessionsByHour": [0,0,0,0,0,0,2,10,25,40,38,30,28,22,20,25,30,20,15,10,8,5,3,1],
"sessionsByOperator": [
{ "operatorId": 42, "count": 120, "avgWaitAnswer": 38.1, "positiveRate": 0.95 },
{ "operatorId": 51, "count": 90, "avgWaitAnswer": 51.4, "positiveRate": 0.88 }
]
}
}
Пример ответа при ошибке
400 — не передан период:
{
"success": false,
"error": { "code": "MISSING_PARAMS", "message": "Required: dateFrom, dateTo (ISO 8601 strings)" }
}
Ошибки
| HTTP | Код | Когда |
|---|---|---|
| 403 | B24_TARIFF_RESTRICTION |
Тариф не включает статистику Открытых линий (report_open_lines) |
| 400 | MISSING_PARAMS |
Не передан dateFrom и/или dateTo |
| 422 | BITRIX_ERROR (error.b24Code: PERIOD_REQUIRED) |
Период не распознан Битрикс24 |
| 422 | BITRIX_ERROR (error.b24Code: INVALID_FILTER) |
Недопустимое значение фильтра или формат даты |
| 422 | BITRIX_ERROR (error.b24Code: PERIOD_TOO_LARGE) |
Период превышает 1 год |
| 422 | METHOD_NOT_YET_AVAILABLE |
Обновление imopenlines 26.700.0 ещё не приехало на портал |
Полный список системных кодов — Ошибки API.