[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-openlines\u002Fsessions\u002Fstats":3,"docs-tabs-openlines\u002Fsessions\u002Fstats":6},{"content":4,"lastmod":5},"## Метрики по сессиям\n\n> ⚠️ **Метод выходит в обновлении `imopenlines 26.700.0` и доступен пока не на всех порталах Битрикс24.** Если обновление на ваш портал ещё не пришло, API вернёт `422 METHOD_NOT_YET_AVAILABLE` — это признак того, что метод на портале ещё не выпущен, а не ошибка интеграции.\n\n`POST \u002Fv1\u002Fopenlines\u002Fsessions\u002Fstats`\n\nПакетные метрики по конкретным сессиям — время ответа и закрытия, счётчики сообщений, число переводов, оценка. До 100 идентификаторов за один вызов.\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|---------|\n| `sessionId` | number[] | да | Массив идентификаторов сессий, до 100 элементов. Источник: [`POST \u002Fv1\u002Fopenlines\u002Fsessions\u002Fsearch`](\u002Fdocs\u002Fopenlines\u002Fsessions). Одиночное число тоже принимается и оборачивается в массив |\n\nДубликаты в `sessionId` схлопываются: каждый уникальный идентификатор возвращается один раз. Несуществующий, чужой или недоступный `sessionId` не приводит к ошибке — для него возвращается объект с самим `sessionId` и `null` во всех метриках.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenlines\u002Fsessions\u002Fstats\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"sessionId\": [1024, 1025, 999999] }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenlines\u002Fsessions\u002Fstats\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"sessionId\": [1024, 1025, 999999] }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenlines\u002Fsessions\u002Fstats', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({ sessionId: [1024, 1025, 999999] }),\n})\nconst { data } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fopenlines\u002Fsessions\u002Fstats', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({ sessionId: [1024, 1025, 999999] }),\n})\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\nОтвет — `{ \"success\": true, \"data\": { \"sessions\": [...] } }`. По одному объекту на каждый уникальный запрошенный `sessionId`, в том числе недоступные (с `null`-полями).\n\n| Ключ | Описание |\n|---|---|\n| `sessionId` | Идентификатор сессии |\n| `waitAnswer` \u002F `waitClose` | Время до первого ответа и до закрытия, секунды |\n| `messagesCount` | Число сообщений в сессии |\n| `messagesOperatorCount` \u002F `messagesClientCount` | Сообщения оператора и клиента |\n| `transfersCount` | Число переназначений |\n| `kpiFirstAnswer` | Уложились ли в SLA первого ответа |\n| `vote` | Клиентская оценка |\n| `voteHead` | Оценка руководителя (`null`, если нет права) |\n\n## Пример ответа\n\nТретья сессия недоступна или не существует — отдана объектом с `null`-полями:\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"sessions\": [\n      { \"sessionId\": 1024, \"waitAnswer\": 65, \"waitClose\": 1330, \"messagesCount\": 14, \"messagesOperatorCount\": 6, \"messagesClientCount\": 8, \"transfersCount\": 1, \"kpiFirstAnswer\": true, \"vote\": \"like\", \"voteHead\": 5 },\n      { \"sessionId\": 1025, \"waitAnswer\": 12, \"waitClose\": 340, \"messagesCount\": 5, \"messagesOperatorCount\": 2, \"messagesClientCount\": 3, \"transfersCount\": 0, \"kpiFirstAnswer\": true, \"vote\": \"none\", \"voteHead\": null },\n      { \"sessionId\": 999999, \"waitAnswer\": null, \"waitClose\": null, \"messagesCount\": null, \"messagesOperatorCount\": null, \"messagesClientCount\": null, \"transfersCount\": null, \"kpiFirstAnswer\": null, \"vote\": null, \"voteHead\": null }\n    ]\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n`400` — в батче больше 100 идентификаторов:\n\n```json\n{\n  \"success\": false,\n  \"error\": { \"code\": \"BATCH_LIMIT_EXCEEDED\", \"message\": \"sessionId batch must not exceed 100 unique ids\" }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Когда |\n|---|---|---|\n| 403 | `B24_TARIFF_RESTRICTION` | Тариф не включает статистику Открытых линий (`report_open_lines`) |\n| 400 | `MISSING_PARAMS` | `sessionId` пустой массив или не передан |\n| 400 | `INVALID_PARAMS` | Нечисловой элемент в `sessionId` |\n| 400 | `BATCH_LIMIT_EXCEEDED` | Больше 100 уникальных идентификаторов (после схлопывания дублей) |\n| 422 | `METHOD_NOT_YET_AVAILABLE` | Обновление `imopenlines 26.700.0` ещё не приехало на портал |\n\nПолный список системных кодов — [Ошибки API](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Список сессий](\u002Fdocs\u002Fopenlines\u002Fsessions)\n- [История переназначений](\u002Fdocs\u002Fopenlines\u002Fsessions\u002Ftransfers)\n- [Статистика Открытых линий](\u002Fdocs\u002Fopenlines)\n","2026-07-21",{}]