Для AI-агентов: markdown этой страницы — /docs-content/openlines/crm-chats.md индекс документации — /llms.txt
Чаты по карточке CRM
GET /v1/openlines/crm/chats · POST /v1/openlines/sessions/intercept · POST /v1/openlines/sessions/join
Три эндпоинта закрывают путь виджета в карточке CRM: найти диалоги открытой линии, привязанные к лиду, сделке, компании или контакту, а затем подключить к найденному диалогу текущего оператора. Все три требуют скоуп imopenlines, доступны на любом портале и не ждут обновления imopenlines 26.700.0.
Идентификатор chatId из ответа первого эндпоинта передаётся во второй и третий без преобразования. Второй источник того же идентификатора — поле sessions[].chatId в ответе Списка сессий.
Важно: sessions/intercept и sessions/join пишут в живой диалог с клиентом: после вызова оператор становится участником переписки. Права проверяет Битрикс24, и администратор портала проходит эту проверку для любого диалога портала.
Чаты карточки CRM
GET /v1/openlines/crm/chats
Параметры запроса (query)
| Параметр | Тип | Описание |
|---|---|---|
crmEntityType |
string | Обязателен. Один из lead, deal, company, contact. Регистр не важен |
crmEntityId |
number | Обязателен. Идентификатор объекта CRM, положительное целое |
activeOnly |
boolean | string | Необязателен. true, false, Y, N, 1, 0. Без параметра приходят только открытые диалоги, false добавляет к ним завершённые |
Каждый параметр передаётся ровно один раз и плоским именем: повтор (crmEntityId=1&crmEntityId=2) и скобочная форма (crmEntityId[]=1) отклоняются ответом 400 INVALID_PARAMS, а не разрешаются в пользу одного из значений.
Поля ответа
data — массив строк. У объекта без диалогов открытой линии он пустой, и это не ошибка. Так же пустым он приходит, когда объекта с таким crmEntityId нет.
| Поле | Тип | Описание |
|---|---|---|
chatId |
number | Идентификатор чата открытой линии. Передаётся в sessions/intercept и sessions/join как есть |
connectorId |
string | null | Идентификатор канала, из которого пришёл диалог |
connectorTitle |
string | null | Название канала для показа человеку |
Пример
curl "https://vibecode.bitrix24.tech/v1/openlines/crm/chats?crmEntityType=lead&crmEntityId=1001213" \
-H "X-Api-Key: YOUR_API_KEY"
{
"success": true,
"data": [
{ "chatId": 4531, "connectorId": "telegrambot", "connectorTitle": "Telegram" }
]
}
Тот же запрос с activeOnly=false по объекту, у которого диалоги уже завершены, отдаёт их в той же форме — например { "chatId": 31, "connectorId": "network", "connectorTitle": "Битрикс24 Network" }.
Перехват диалога
POST /v1/openlines/sessions/intercept
Переводит диалог на текущего оператора: прежний оператор перестаёт быть ведущим по этой сессии.
curl -X POST "https://vibecode.bitrix24.tech/v1/openlines/sessions/intercept" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "chatId": 4531 }'
Ответ при успехе: { "success": true, "data": { "chatId": 4531, "intercepted": true } }.
Вход в диалог
POST /v1/openlines/sessions/join
Добавляет текущего оператора в диалог ещё одним участником, не снимая прежнего.
curl -X POST "https://vibecode.bitrix24.tech/v1/openlines/sessions/join" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "chatId": 4531 }'
Ответ при успехе: { "success": true, "data": { "chatId": 4531, "joined": true } }.
Оба эндпоинта принимают chatId числом (4531) и строкой формы chat4531, в ответе идентификатор всегда число. Имя поля — chatId или CHAT_ID, dialogId не принимается.
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | MISSING_PARAMS |
Не передан обязательный параметр: crmEntityType, crmEntityId или chatId |
| 400 | INVALID_PARAMS |
Значение параметра недопустимо: crmEntityType вне списка, crmEntityId не положительное целое, chatId не разбирается в идентификатор чата (принимаются положительное целое и форма chat<N>), activeOnly вне набора допустимых значений. Тот же код, когда параметр запроса передан дважды или в скобочной форме |
| 401 | TOKEN_MISSING |
У ключа нет настроенных токенов |
| 403 | SCOPE_DENIED |
У ключа нет скоупа imopenlines |
| 403 | WRITE_BLOCKED_READONLY_KEY |
Ключ работает только на чтение, а sessions/intercept и sessions/join меняют диалог |
| 403 | BITRIX_ACCESS_DENIED |
У пользователя ключа нет доступа к объекту CRM или к диалогу |
| 422 | BITRIX_ERROR |
Битрикс24 отказал, его код приходит в error.b24Code. У sessions/join: CHAT_ID — чата с таким идентификатором нет, CHAT_TYPE — чат не является открытой линией. У sessions/intercept оба случая дают OPERATOR_WRONG. Текст error.message приходит от Битрикс24 дословно: для CHAT_ID и CHAT_TYPE — на языке портала, для OPERATOR_WRONG — по-английски |
| 429 | RATE_LIMITED |
Код отдают два источника. Первый — собственный лимит операций, считается на портал, а не на ключ: 300 запросов в минуту у crm/chats, 120 — у sessions/intercept и sessions/join. Действующее значение берите из заголовка X-RateLimit-Limit, остаток и время сброса — из X-RateLimit-Remaining и X-RateLimit-Reset, они приходят с каждым ответом. Второй — Битрикс24, отбивший вызов по лимиту частоты: приходит заголовок Retry-After |
| 502 | OPENLINE_SESSION_FAILED |
Битрикс24 ответил без подтверждения — result не true, при этом ошибку не вернул. Завершённость диалога такого ответа не даёт: вход и перехват на завершённом диалоге проходят успешно |
| 502 | BITRIX_UNAVAILABLE |
Битрикс24 вернул ответ неожиданной формы |
Опечатка в crmEntityType отбивается до вызова Битрикс24 — ответом 400 INVALID_PARAMS со списком допустимых значений.
Полный список общих ошибок API — Ошибки.
Известные особенности
- Завершённость диалога не проверяется.
sessions/interceptиsessions/joinпроходят и на диалоге, сессия которого давно закрыта: оператор добавляется в участники чата, ответ —intercepted: trueиjoined: true. Хотите работать только с открытыми диалогами — беритеchatIdизcrm/chatsбезactiveOnly=false. - Повторный вход не ошибка.
sessions/joinдля оператора, который уже участвует в диалоге, снова отвечаетjoined: true. - Вход виден в списке участников. После
joinоператор появляется среди участников чата открытой линии — это и есть проверка, что вызов подействовал.