## Перехватить диалог

`POST /v1/openlines/sessions/intercept`

Переводит диалог открытой линии на текущего оператора: прежний оператор перестаёт быть ведущим по этой сессии. Работает на любом портале и не ждёт обновления `imopenlines 26.700.0`.

**Важно:** вызов меняет живой диалог с клиентом — после него оператор становится участником переписки. Права проверяет Битрикс24, и администратор портала проходит эту проверку для любого диалога портала.

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

| Поле | Тип | Обяз. | Описание |
|------|-----|:-----:|----------|
| `chatId` | number \| string | да | Идентификатор чата открытой линии: число (`4531`) или строка формы `chat4531`. Вместо `chatId` принимается `CHAT_ID`, а `dialogId` не принимается. Источники: [`GET /v1/openlines/crm/chats`](/docs/openlines/crm-chats) по карточке CRM, поле `sessions[].chatId` в ответе [`POST /v1/openlines/sessions/search`](/docs/openlines/sessions/search) |

## Примеры

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

```bash
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 }'
```

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

```bash
curl -X POST https://vibecode.bitrix24.tech/v1/openlines/sessions/intercept \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "chatId": 4531 }'
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/openlines/sessions/intercept', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ chatId: 4531 }),
})

const { success, data, error } = await res.json()
if (!success) throw new Error(`${error.code}: ${error.message}`)
console.log('Перехвачен:', data.intercepted)
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/openlines/sessions/intercept', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ chatId: 4531 }),
})

const { success, data } = await res.json()
```

## Поля ответа

| Поле | Тип | Описание |
|------|-----|----------|
| `success` | boolean | `true` при успешном перехвате |
| `data.chatId` | number | Идентификатор чата из запроса. Форма `chat4531` возвращается числом |
| `data.intercepted` | boolean | Всегда `true` |

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

```json
{
  "success": true,
  "data": {
    "chatId": 4531,
    "intercepted": true
  }
}
```

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

400 — `chatId` не разбирается в идентификатор чата:

```json
{
  "success": false,
  "error": {
    "code": "INVALID_PARAMS",
    "message": "chatId must be a positive whole number within the safe integer range — either 2043 or the \"chat2043\" form. Take it from `data.chat.id` of the bot event (its `data.dialogId` twin is the same id prefixed with `chat`), or from `sessions[].chatId` of POST /v1/openlines/sessions/search."
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|:----:|-----|---------|
| 400 | `MISSING_PARAMS` | Не передан `chatId` |
| 400 | `INVALID_PARAMS` | `chatId` не разбирается в идентификатор чата: принимаются положительное целое и форма `chat<N>`. Тот же код, когда тело запроса не JSON-объект |
| 400 | `INVALID_JSON_BODY` | Тело запроса не разбирается как JSON |
| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |
| 401 | `INVALID_API_KEY` | Ключ не опознан |
| 401 | `TOKEN_MISSING` | У личного ключа нет доступа к порталу Битрикс24, у ключа приложения не передан токен сессии в `Authorization` |
| 403 | `SCOPE_DENIED` | У ключа нет скоупа `imopenlines` |
| 403 | `WRITE_BLOCKED_READONLY_KEY` | Ключ работает только на чтение, а `sessions/intercept` меняет диалог |
| 403 | `BITRIX_ACCESS_DENIED` | У пользователя ключа нет доступа к диалогу |
| 422 | `BITRIX_ERROR` | Битрикс24 отказал, его код приходит в `error.b24Code`. Чата с таким идентификатором нет или чат не является открытой линией — оба случая дают `OPERATOR_WRONG`. Текст `error.message` приходит от Битрикс24 дословно, по-английски |
| 429 | `RATE_LIMITED` | Код возвращают два источника. Первый — собственный лимит операций: потолок платформы 120 запросов в минуту на портал, а не на ключ, делится на реплики. Действующее значение берите из заголовка `x-ratelimit-limit`, остаток и время сброса — из `x-ratelimit-remaining` и `x-ratelimit-reset`, они приходят с каждым ответом. Второй — Битрикс24, отклонивший вызов по лимиту частоты: приходит заголовок `Retry-After` |
| 502 | `OPENLINE_SESSION_FAILED` | Битрикс24 ответил без подтверждения — `result` не `true`, при этом ошибку не вернул |
| 502 | `BITRIX_UNAVAILABLE` | Битрикс24 недоступен или вернул ответ неожиданной формы |
| 503 | `BITRIX_TIMEOUT` | Битрикс24 принял вызов, но не ответил за отведённое время. Вызов при этом мог выполниться |

Полный список общих ошибок API — [Ошибки](/docs/errors).

## Известные особенности

- **Завершённость диалога не проверяется.** Перехват проходит и на диалоге, сессия которого давно закрыта: оператор добавляется в участники чата, ответ — `intercepted: true`. Хотите работать только с открытыми диалогами — берите `chatId` из [`GET /v1/openlines/crm/chats`](/docs/openlines/crm-chats) без `activeOnly=false`.

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

- [Войти в диалог](/docs/openlines/sessions/join)
- [Чаты по карточке CRM](/docs/openlines/crm-chats)
- [Поиск сессий](/docs/openlines/sessions/search)
- [История сессии](/docs/openlines/history)
- [Сессии открытых линий](/docs/openlines/sessions)
