# Бот в открытой линии

Бот может передать сессию сотруднику, перевести её в выбранную очередь, завершить или запросить автоматическое сообщение линии. Нужны **оба скоупа `imbot` и `imopenlines`** и ключ, которому принадлежит бот. READONLY-ключ не выполняет эти действия.

| Действие | Маршрут |
|---|---|
| [Передать оператору](./openlines/operator.md) | `POST /v1/bots/:botId/openlines/session/operator` |
| [Перевести](./openlines/transfer.md) | `POST /v1/bots/:botId/openlines/session/transfer` |
| [Завершить](./openlines/finish.md) | `POST /v1/bots/:botId/openlines/session/finish` |
| [Автосообщение](./openlines/auto-message.md) | `POST /v1/bots/:botId/openlines/session/auto-message` |

## Передача человеку

Оставьте `welcomeBotId` в настройках линии: он определяет бота, который начинает диалог. Вместо `/v1/bots/:botId/chats/:dialogId/leave` вызывайте `.../session/operator` для передачи оператору или `.../session/transfer` с `queueId` для выбранной очереди. `/leave` меняет состав участников IM-чата и не передаёт сессию в очередь.

У `transfer` есть явный `leave: true`, чтобы бот покинул чат после перевода; без него бот остаётся. У `operator` параметра `leave` нет. `welcomeBotLeft: "queue"` задаёт момент выхода в нативном сценарии; его влияние на API-переход не установлено, поэтому для управляемого выхода используйте `transfer` с `leave`.

## Идентификаторы и права

`botId` — числовой идентификатор Б24. `chatId` берите из `event.data.chat.id` либо `sessions[].chatId` в поиске сессий. Принимаются положительное безопасное целое, числовая строка или `chat<N>`. `dialogId` принимается только в форме `chat<N>`: голое число обозначает личный диалог с сотрудником, а не сессию линии. Алиас `CHAT_ID` читается после `chatId` и `dialogId`; null пропускается, ошибочное присутствующее значение вызывает 400.

Права на сессию проверяет Б24. Наша проверка владения относится к боту из пути, а не к принадлежности чата. Все четыре действия и операторские `answer`/`finish` делят лимит 30 запросов в минуту на портал; лимит на процессе делится на число активных реплик.

Секрет бота хранится на сервере; передавать его в запросе не нужно. `CLIENT_ID` нужен только внутреннему вызову `transfer`/`finish` на вебхуке. При `BOT_ID_ERROR` сервер один раз пробует альтернативную композицию; прочие отказы не повторяются.

Аудит фиксирует успешные вызовы и отказы Б24, идентификатор ключа, бота, чата и цель перевода. Текст автосообщения в аудит не записывается. Бот из пути в аудите не гарантирует, что Б24 резолвил именно его под OAuth.
