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

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-06-01T00:00:00+03:00",
    "dateTo": "2026-06-30T23:59:59+03:00",
    "configId": 3
  }'

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-06-01T00:00:00+03:00",
    "dateTo": "2026-06-30T23:59:59+03:00",
    "configId": 3
  }'

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-06-01T00:00:00+03:00',
    dateTo: '2026-06-30T23:59:59+03:00',
    configId: 3,
  }),
})
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-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 }]

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

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

JSON
{
  "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.

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