Передача
Передача бота (со всеми его кампаниями) или отдельной кампании другому аккаунту — в одной атомарной операции. Смотрите также: Руководство по передаче.
Все запросы аутентифицированы (ваш API-ключ). Эндпоинты
token и resolve доступны на любом тарифе; bot и camp требуют, чтобы у самого
отправителя была активная платная подписка. Любой ответ — это HTTP 200 с телом
application/json; успех или ошибка определяются полем status, а не HTTP-кодом.
Как работает передача
Передача использует токен передачи — буквенно-цифровой код из 32 символов у каждого пользователя, отдельный от API-ключа. Он идентифицирует получателя, не раскрывая его Telegram ID или username. Отправитель получает токен передачи получателя вне системы (например, в личном сообщении), проверяет его через resolve для подтверждения возможности передачи, затем вызывает эндпоинт передачи.
Условия приёма проверяются перед перемещением данных:
- У получателя должна быть платная подписка в истории аккаунта — бесплатный / ни разу не плативший аккаунт не может принять ботов или кампании (вернётся ошибка
unpaid). - У получателя должно быть достаточно свободных слотов для кампаний, которые передаются.
Кроме того, сам отправитель должен быть на активной платной подписке: эндпоинты
bot и camp закрыты платным шлюзом и до их выполнения вернут ошибку unpaid, если
подписка отправителя неактивна.
Судьба лидов управляется параметром leads, который необязателен и по умолчанию
равен 0:
leads=1(любое ненулевое значение) — все лиды, статистика и история переатрибутируются получателю.leads=0(значение по умолчанию, если параметр опущен) — все лиды передаваемых кампаний и связанные с ними записи удаляются навсегда. Чтобы сохранить лиды, обязательно передавайтеleads=1явно.
Все операции записи выполняются в одной транзакции базы данных.
CRM при передаче. Если у передаваемого бота включён CRM, его диалоги и кастомные
события следуют тому же выбору leads (переходят получателю или удаляются) и
отвязываются от ваших операторов; бот исключается из ваших команд (операторы сразу
теряют к нему доступ), а режим CRM на нём выключается — получатель включит его заново.
При передаче отдельной кампании диалоги остаются у прежнего бота (он остаётся у
вас) — переезжают только привязанные к лидам события.
Получить свой токен передачи
GET /api/transfer/token.json
Возвращает ваш текущий токен передачи. Если токен ещё не был сгенерирован, он создаётся и сохраняется при первом обращении. Поделитесь им с тем, кто хочет передать вам бота или кампанию.
{ "status": "ok", "token": "Hk3mP9qL2xVnT7wRcZ8aBdFgJ4sYuE6" }| Ошибка | Значение |
|---|---|
db | Ошибка базы данных при чтении или сохранении токена |
Сбросить токен передачи
POST /api/transfer/token.json
Генерирует новый токен передачи из 32 символов. Старый токен перестаёт работать
немедленно — любая передача, которую отправитель инициировал со старым токеном,
завершится ошибкой notfound.
{ "status": "ok", "token": "Qz5tNb1cW8yMr3kHdLpX7vJ2aFgUeS9o" }| Ошибка | Значение |
|---|---|
db | Ошибка базы данных при обновлении токена |
Найти получателя
GET /api/transfer/resolve.json
Получает имя аккаунта по токену передачи и проверяет готовность к приёму. Вызывайте перед transfer/bot или transfer/camp, чтобы убедиться в возможности передачи.
| Параметр | Обязательный | Описание |
|---|---|---|
token | ✓ | Токен передачи получателя |
{
"status": "ok",
"name": "Иван Петров",
"paid": true,
"slots": 12
}name — отображаемое имя аккаунта получателя. paid показывает, есть ли у получателя
платная подписка в истории аккаунта — это не
проверка активного окна, поэтому ранее оплачивавший аккаунт с уже истёкшим окном всё
равно вернёт true; false бывает только у бесплатного / ни разу не платившего
аккаунта. slots — количество свободных слотов для кампаний:
Значение slots | Значение |
|---|---|
-1 | Безлимитный тариф (у получателя есть платная подписка в истории) |
0 | Свободных слотов нет: либо бесплатный / ни разу не плативший аккаунт (paid: false), либо лимитный тариф уже заполнен |
> 0 | Лимит тарифа минус число неудалённых кампаний получателя |
| Ошибка | Значение |
|---|---|
func | Параметр token не передан или пуст |
notfound | Аккаунт с этим токеном передачи не найден |
db | Ошибка базы данных при поиске |
Передать бота
POST /api/transfer/bot.json
Передаёт бота и все его неудалённые кампании получателю. Лиды каждой кампании
переатрибутируются или удаляются в зависимости от leads, а история журнала следует
за ботом к новому владельцу.
| Параметр | Обязательный | Описание |
|---|---|---|
bot | ✓ | ID бота (вы должны быть его владельцем) |
token | ✓ | Токен передачи получателя |
leads | 1 — переатрибутировать лиды получателю; 0 (по умолчанию) — удалить их навсегда |
{ "status": "ok" }| Ошибка | Значение |
|---|---|
func | Не передан bot или token |
self | Это ваш собственный токен передачи — передать самому себе нельзя |
access | Вы не являетесь владельцем этого бота |
notfound | Токен передачи не соответствует ни одному аккаунту |
unpaid | Подписка отправителя неактивна, либо получатель — бесплатный / ни разу не плативший аккаунт |
limit | У получателя недостаточно свободных слотов для передаваемых кампаний |
held | Бот или какая-либо из его кампаний заморожены модерацией |
db | Ошибка базы данных или транзакции |
Передать кампанию
POST /api/transfer/camp.json
Передаёт одну кампанию получателю. У получателя должен быть активный бот, являющийся администратором чата кампании — подходящий бот выбирается автоматически и становится новым ботом кампании.
Если выбранный бот получателя отличается от прежнего бота, приветственное медиа перезагружается на нового бота (file_id в Telegram привязан к боту): медиа на короткое время отправляется в чат кампании и сразу удаляется — в канале возможна кратковременная вспышка сообщения. Если перезагрузка не удалась, она не прерывает передачу: медиа очищается, и новому владельцу потребуется загрузить его заново.
| Параметр | Обязательный | Описание |
|---|---|---|
camp | ✓ | ID кампании (вы должны быть её владельцем) |
token | ✓ | Токен передачи получателя |
leads | 1 — переатрибутировать лиды (и привязать их к новому боту); 0 (по умолчанию) — удалить их навсегда |
{ "status": "ok" }| Ошибка | Значение |
|---|---|
func | Не передан camp или token |
self | Это ваш собственный токен передачи — передать самому себе нельзя |
access | Вы не являетесь владельцем этой кампании |
notfound | Токен передачи не соответствует ни одному аккаунту |
unpaid | Подписка отправителя неактивна, либо получатель — бесплатный / ни разу не плативший аккаунт |
limit | У получателя нет свободного слота для кампании |
nobot | У получателя нет активного бота, являющегося администратором чата этой кампании |
held | Кампания заморожена модерацией |
db | Ошибка базы данных или транзакции |
Перенос кампании между своими ботами
Переносит кампанию на другого вашего бота (тот же владелец) — например, если
прежний бот перестал работать (потерял права администратора или его токен отозван), а
другой ваш бот уже администрирует ту же группу/канал. Получатель не меняется, поэтому
токен и проверки оплаты/слотов не нужны, а лиды всегда сохраняются (параметр
leads здесь не используется).
В одной транзакции на нового бота переносятся: сама кампания, органическая история
журнала чата, CRM-диалоги подписчиков кампании (чтобы чат оператора продолжал работать,
новый бот должен входить в команду оператора) и любая идущая чистка группы.
Приветственное медиа перезагружается через прежнего бота (работает, даже если он
лишь потерял админку в группе); если прежний бот недоступен, перенос всё равно проходит,
а медиа очищается (media_lost: true — загрузите его заново). Замороженная модерацией
кампания (или её бот) к переносу не допускается.
Доступные боты для переноса
GET /api/transfer/targets.json
Возвращает ваших других активных ботов, администрирующих чат кампании — допустимые адресаты для переноса.
| Параметр | Обязательный | Описание |
|---|---|---|
camp | ✓ | ID кампании (вы должны быть её владельцем) |
{
"status": "ok",
"data": [
{ "id": 9, "name": "Backup Bot", "username": "mybackupbot" }
]
}data — массив (может быть пустым, если подходящих ботов нет).
| Ошибка | Значение |
|---|---|
func | camp равен 0 |
access | Кампания не принадлежит вам |
db | Ошибка базы данных |
Перенести кампанию на своего бота
POST /api/transfer/move.json
Перенаправляет кампанию на указанного вашего бота (из числа доступных).
| Параметр | Обязательный | Описание |
|---|---|---|
camp | ✓ | ID кампании (вы должны быть её владельцем) |
bot | ✓ | ID вашего активного бота — администратора чата кампании, отличного от текущего |
{ "status": "ok", "media_lost": false }media_lost — true, если приветственное медиа перенести не удалось (загрузите заново).
| Ошибка | Значение |
|---|---|
func | Не передан camp или bot, либо указан тот же бот (перенос-пустышка) |
access | Кампания не принадлежит вам |
held | Кампания или её текущий бот заморожены модерацией |
notadmin | Целевой бот не является активным администратором чата |
db | Ошибка базы данных или транзакции |