Для AI-агентов: markdown этой страницы — /docs-content/openlines/sessions/transfers.md индекс документации — /llms.txt

История переназначений

Метод выходит в обновлении imopenlines 26.700.0 и доступен пока не на всех порталах Битрикс24. Если обновление на ваш портал ещё не пришло, API вернёт 422 METHOD_NOT_YET_AVAILABLE — это признак того, что метод на портале ещё не выпущен, а не ошибка интеграции.

POST /v1/openlines/sessions/transfers

Хронологический список переназначений (переводов) по конкретным сессиям — от кого к кому, между какими линиями, по какой причине.

Поля запроса (body)

Поле Тип Обяз. Описание
ПолеsessionId Типnumber[] Обяз.да ОписаниеМассив идентификаторов сессий, до 50 элементов. Источник: POST /v1/openlines/sessions/search. Одиночное число тоже принимается и оборачивается в массив

Повторы в sessionId учитываются один раз. Несуществующий, чужой или недоступный sessionId не приводит к ошибке — для него не будет записей в transfers.

Примеры

curl — личный ключ

Terminal
curl -X POST "https://vibecode.bitrix24.tech/v1/openlines/sessions/transfers" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "sessionId": [809, 805] }'

curl — OAuth-приложение

Terminal
curl -X POST "https://vibecode.bitrix24.tech/v1/openlines/sessions/transfers" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "sessionId": [809, 805] }'

JavaScript — личный ключ

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/openlines/sessions/transfers', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ sessionId: [809, 805] }),
})
const { data } = await res.json()

JavaScript — OAuth-приложение

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/openlines/sessions/transfers', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ sessionId: [809, 805] }),
})
const { data } = await res.json()

Поля ответа

Переводы всех запрошенных сессий идут общим списком в хронологическом порядке по возрастанию date. Для группировки по сессиям используйте поле data.transfers[].sessionId.

Поле Тип Описание
Полеsuccess Типboolean Описаниеtrue при успешном ответе
Полеdata.transfers Типarray ОписаниеПереназначения по всем запрошенным сессиям. Пустой массив, если переводов не было
Полеdata.transfers[].sessionId Типnumber ОписаниеИдентификатор сессии
Полеdata.transfers[].date Типstring ОписаниеДата и время переназначения, ISO 8601
Полеdata.transfers[].fromOperatorId Типnumber | null ОписаниеОператор, от которого ушёл диалог. null, если из очереди. Сотрудник — GET /v1/users
Полеdata.transfers[].toOperatorId Типnumber | null ОписаниеОператор, которому перешёл диалог. null, если в очередь. Сотрудник — GET /v1/users
Полеdata.transfers[].fromConfigId Типnumber ОписаниеЛиния-источник. Описание линии — GET /v1/openline-configs/:id
Полеdata.transfers[].toConfigId Типnumber | null ОписаниеЛиния-назначение, если перевод в другую линию. Описание линии — GET /v1/openline-configs/:id
Полеdata.transfers[].reason Типstring ОписаниеПричина: manual / auto
Полеdata.transfers[].mode Типstring ОписаниеРежим: MANUAL / AUTO
Полеdata.transfers[].type Типstring ОписаниеТип: USER / QUEUE
Полеdata.transfers[].initiatorId Типnumber | null ОписаниеИнициатор перевода. Может прийти null. При reason: auto поле тоже бывает заполнено. Сотрудник — GET /v1/users

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

Сессия 805 дважды вернулась в очередь, сессию 809 оператор вручную перевёл коллеге:

JSON
{
  "success": true,
  "data": {
    "transfers": [
      { "sessionId": 805, "date": "2026-10-14T18:41:13+03:00", "fromOperatorId": 1, "toOperatorId": null, "fromConfigId": 59, "toConfigId": null, "reason": "auto", "mode": "MANUAL", "type": "QUEUE", "initiatorId": 1 },
      { "sessionId": 805, "date": "2026-10-14T18:41:14+03:00", "fromOperatorId": 1, "toOperatorId": null, "fromConfigId": 59, "toConfigId": null, "reason": "auto", "mode": "MANUAL", "type": "QUEUE", "initiatorId": 1 },
      { "sessionId": 809, "date": "2026-10-14T19:07:47+03:00", "fromOperatorId": 1, "toOperatorId": 1295, "fromConfigId": 59, "toConfigId": null, "reason": "manual", "mode": "MANUAL", "type": "USER", "initiatorId": 1 }
    ]
  }
}

Пример ответа при ошибке

400 — в запросе больше 50 идентификаторов:

JSON
{
  "success": false,
  "error": { "code": "BATCH_LIMIT_EXCEEDED", "message": "sessionId batch must not exceed 50 unique ids (got 51)" }
}

Ошибки

HTTP Код Описание
HTTP400 КодINVALID_JSON_BODY ОписаниеТело запроса не разобралось как JSON. JSON разбирается до проверки полей, поэтому про отсутствующие параметры ответ ничего не говорит
HTTP400 КодMISSING_PARAMS ОписаниеsessionId пустой массив или не передан
HTTP400 КодINVALID_PARAMS ОписаниеЭлемент sessionId не целое положительное число. Тот же код, когда тело запроса не объект
HTTP400 КодBATCH_LIMIT_EXCEEDED ОписаниеБольше 50 уникальных идентификаторов (повторы считаются один раз)
HTTP401 КодTOKEN_MISSING ОписаниеУ ключа нет настроенных токенов
HTTP403 КодSCOPE_DENIED ОписаниеУ ключа нет скоупа imopenlines
HTTP403 КодB24_TARIFF_RESTRICTION ОписаниеТариф не включает статистику Открытых линий (report_open_lines)
HTTP422 КодMETHOD_NOT_YET_AVAILABLE ОписаниеОбновление imopenlines 26.700.0 ещё не пришло на портал. Ответ содержит поле error.release со значением imopenlines 26.700.0

Полный список общих ошибок API — Ошибки.

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