Для 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 — личный ключ

Terminal
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-приложение

Terminal
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 — личный ключ

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-приложение

javascript
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

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

JSON
{
  "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 — не передан период:

JSON
{
  "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 — Ошибки.

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