Рассылки

Настройка триггерных дожимов по статусам кампании и создание и запуск ручных массовых рассылок. Концепции — в руководстве по рассылкам; эта страница — справочник по API.

Все эндпоинты рассылок требуют активной оплаченной сессии (иначе error: unpaid). Функцию рассылки на тарифе проверяют только действия, создающие отправки: add, edit, start ручных рассылок и включение триггерного блока (on=1) — без неё они вернут error: broadcasts. Просмотр и сворачивание уже существующих рассылок (list, quota, get, pause, resume, reset, cancel, del, test) функции не требуют, поэтому при понижении тарифа существующие рассылки можно доглядеть и аккуратно завершить.

Все ответы — HTTP 200 с application/json; успех или ошибка указаны в теле. Время — unix-секунды (0 = не задано).


Получить блоки кампании

GET /api/camp/broadcast.json

Блоки сообщений по кампании и статусу. Пять статусов, по одному блоку: 0 wait · 1 hold · 2 approve · 3 cancel · 4 trash. Возвращает все пять блоков; статусы без блока приходят как нулевой блок (on: 0).

ПараметрОбязательныйОписание
idID кампании
{
  "status": "ok",
  "data": [
    { "status": 0, "on": 1, "delay": 1800,
      "text": "Добро пожаловать! Жмите кнопку ниже 👇",
      "media": "", "media_type": 0,
      "button": "Открыть", "link": "https://example.com/l?click={click}" },
    { "status": 1, "on": 0, "delay": 0, "text": "", "media": "", "media_type": 0, "button": "", "link": "" },
    { "status": 2, "on": 0, "delay": 0, "text": "", "media": "", "media_type": 0, "button": "", "link": "" },
    { "status": 3, "on": 0, "delay": 0, "text": "", "media": "", "media_type": 0, "button": "", "link": "" },
    { "status": 4, "on": 0, "delay": 0, "text": "", "media": "", "media_type": 0, "button": "", "link": "" }
  ]
}

delay — в секундах после попадания лида в статус. media_type: 0 нет, 1 фото, 2 видео.

ОшибкаЗначение
funcid не задан (0)
accessКампания не ваша
dbОшибка базы данных

Сохранить один блок

POST /api/camp/broadcast.json

Создаёт или обновляет блок одного статуса.

ПараметрОбязательныйОписание
idID кампании
statusСтатус лида 04
on1 включить, 0 выключить
delayСекунды после попадания в статус до отправки
textТекст сообщения (Telegram Markdown)
mediaСсылка на медиа из media/upload; "" если нет. Проверяется на принадлежность вам
media_type1 фото, 2 видео (из ответа загрузки)
buttonПодпись кнопки
linkURL кнопки (можно с макросами); проверяется на корректность
{ "status": "ok" }

Включение блока (on=1) требует функции рассылок → иначе error: broadcasts. Выключение или правка уже выключенного блока разрешены всегда (чтобы при понижении тарифа блок можно было выключить). Смена медиа сбрасывает кэшированный file_id.

ОшибкаЗначение
funcid/status неверны, либо ссылка некорректна, либо медиа не ваше
broadcastsВключение блока на тарифе без функции рассылок
accessКампания не ваша
dbОшибка базы данных

Отправить блок себе

POST /api/camp/btest.json

Доставляет превью одного сохранённого блока статуса в Telegram авторизованного пользователя через сервисного бота (только текст и кнопка — медиа не включается).

ПараметрОбязательныйОписание
idID кампании
statusСтатус лида 04
{ "status": "ok" }
ОшибкаЗначение
funcid/status неверны
accessКампания не ваша
dbОшибка базы данных

Список рассылок

GET /api/broadcast/list.json

Возвращает ручные рассылки пользователя, новые сверху, со сохранёнными счётчиками. Статусы рассылки: 0 черновик · 1 идёт · 2 готово · 3 отменена · 4 пауза.

Параметров нет. Каждая карточка содержит полный набор полей (тот же, что у get), но без живого пересчёта: remaining всегда 0, total — сохранённое значение, а campaignsnull (список кампаний заполняет только get).

{
  "status": "ok",
  "data": [
    {
      "id": 5,
      "name": "Майский возврат",
      "status": 1,
      "statuses": 24,
      "campaigns": null,
      "created_from": 0, "created_to": 0,
      "status_from": 1714521600, "status_to": 1717113600,
      "text": "Мы скучаем — держите скидку 20% 🎁",
      "media": "", "media_type": 0,
      "button": "Забрать", "link": "https://example.com/back?click={click}",
      "total": 1240, "remaining": 0,
      "queued": 440, "sent": 800, "failed": 0,
      "started": 1717500000, "created": 1717490000
    }
  ]
}

statusesбитовая маска целевых статусов лида (бит 0 wait … бит 4 trash); 24 = биты 3+4 = cancel + trash.

ОшибкаЗначение
dbОшибка базы данных

Шкала дневного лимита

GET /api/broadcast/quota.json

Дневной бюджет ручных отправок: лимит из тарифа, ручные отправки за сегодня (день по UTC) и текущая глубина очереди отправки. Параметров нет.

{ "status": "ok", "data": { "cap": 500, "used": 120, "queued": 440 } }
ПолеЗначение
capДневной лимит ручных отправок из тарифа; 0 = без ограничений
usedРучных сообщений отправлено сегодня (день по UTC); 0, если строки за день ещё нет
queuedВсе ждущие в очереди сообщения пользователя (триггерные + ручные)
ОшибкаЗначение
dbОшибка базы данных

Получить одну рассылку

GET /api/broadcast/get.json

Возвращает рассылку целиком, включая область кампаний и фильтры. Для незапущенной рассылки (не в статусе идёт) пересчитывает total (живая аудитория) и remaining (размер Доделать — лиды, ещё не охваченные). Для идущей рассылки сохранённые счётчики оставлены как есть.

ПараметрОбязательныйОписание
idID рассылки
{
  "status": "ok",
  "data": {
    "id": 5, "name": "Майский возврат", "status": 2, "statuses": 24,
    "campaigns": [12, 18],
    "created_from": 0, "created_to": 0,
    "status_from": 1714521600, "status_to": 1717113600,
    "text": "Мы скучаем — держите скидку 20% 🎁",
    "media": "", "media_type": 0,
    "button": "Забрать", "link": "https://example.com/back?click={click}",
    "total": 1300, "remaining": 60,
    "queued": 0, "sent": 1240, "failed": 0,
    "started": 1717500000, "created": 1717490000
  }
}

campaigns нормализуется к [] (никогда не null); пустой список = все ваши кампании.

ОшибкаЗначение
funcid не задан (0)
accessРассылка не ваша или не найдена
dbОшибка базы данных

Создать черновик

POST /api/broadcast/add.json

Создаёт пустой черновик рассылки. Требует функции рассылок. На пользователя действует мягкий лимит в 100 рассылок: при достижении вернётся error: limit — удалите ненужную, чтобы освободить место.

ПараметрОписание
nameНеобязательное название
{ "status": "ok", "id": 5 }

id приходит верхним полем рядом со status, не внутри data.

ОшибкаЗначение
broadcastsФункция рассылок не включена на тарифе
limitУже 100 рассылок — удалите одну, чтобы создать новую
dbОшибка базы данных

Изменить рассылку

POST /api/broadcast/edit.json

Заменяет поля рассылки и область кампаний. Требует функции рассылок. Разрешено в любом состоянии — тело берётся в момент отправки, поэтому правка идущей рассылки влияет на ещё не ушедшие сообщения. Ссылка проверяется на корректность, а медиа — на принадлежность вам; иначе error: func.

ПараметрОбязательныйОписание
idID рассылки
nameНазвание
statusesБитовая маска целевых статусов (бит 0 wait … бит 4 trash)
campaignsID кампаний через запятую; пусто = все ваши кампании. Чужие ID молча отбрасываются
created_from / created_toФильтр по времени появления лида (unix; 0 = без границы)
status_from / status_toФильтр по времени смены статуса лида (unix; 0 = без границы)
textТекст сообщения (Telegram Markdown)
media / media_typeСсылка на медиа из media/upload и её тип (1 фото, 2 видео)
button / linkПодпись кнопки + URL (можно с макросами)
{ "status": "ok" }
ОшибкаЗначение
funcid не задан, либо ссылка некорректна, либо медиа не ваше
broadcastsФункция рассылок не включена на тарифе
accessРассылка не ваша
dbОшибка базы данных

Запуск (всегда «доделать»)

POST /api/broadcast/start.json

Ставит аудиторию в очередь и переводит рассылку в идёт. Требует функции рассылок. Это всегда доделать: в очередь попадают только лиды, которых рассылка ещё не охватила, поэтому повторный запуск готово/отменена рассылки уйдёт только новым лидам. Разрешено из черновик/готово/отменена; рассылка в состоянии идёт/пауза вернёт error: state.

ПараметрОбязательныйОписание
idID рассылки
{ "status": "ok", "queued": 60 }

queued приходит верхним полем — число поставленных в очередь сообщений. 0 означает, что охватывать было некого, и статус рассылки не меняется:

{ "status": "ok", "queued": 0 }
ОшибкаЗначение
funcid не задан (0)
broadcastsФункция рассылок не включена на тарифе
stateРассылка идёт или пауза — используйте pause/cancel или resume
accessРассылка не ваша
dbОшибка базы данных

Пауза

POST /api/broadcast/pause.json

идёт → пауза: неотправленные сообщения паркуются и сохраняются (отправщик их пропускает, но не теряет).

ПараметрОбязательныйОписание
idID рассылки
{ "status": "ok" }
ОшибкаЗначение
funcid не задан (0)
stateРассылка не идёт или не ваша
dbОшибка базы данных

Продолжить

POST /api/broadcast/resume.json

пауза → идёт: запаркованные сообщения снова становятся актуальными, и отправка продолжается ровно с места остановки.

ПараметрОбязательныйОписание
idID рассылки
{ "status": "ok" }
ОшибкаЗначение
funcid не задан (0)
stateРассылка не на паузе или не ваша
dbОшибка базы данных

Сбросить

POST /api/broadcast/reset.json

Очищает множество охваченных лидов и счётчики и возвращает черновик/готово/отменена рассылку в черновик, сохраняя название, фильтры и тело. Следующий запуск тогда переотправит всей аудитории. Рассылку в состоянии идёт/пауза нужно сначала отменить.

ПараметрОбязательныйОписание
idID рассылки
{ "status": "ok" }
ОшибкаЗначение
funcid не задан (0)
stateРассылка идёт/пауза (сначала отмените) или не ваша
dbОшибка базы данных

Остановить (отмена)

POST /api/broadcast/cancel.json

идёт/пауза → отменена: сбрасывает остаток сообщений в очереди. Множество уже охваченных лидов сохраняется, поэтому будущий запуск Доделать им не напишет повторно.

ПараметрОбязательныйОписание
idID рассылки
{ "status": "ok" }
ОшибкаЗначение
funcid не задан (0)
stateРассылка не идёт/пауза или не ваша
dbОшибка базы данных

Удалить

POST /api/broadcast/del.json

Удаляет рассылку и её область, очередь и записи об охвате. Рассылку пауза удалить можно (её запаркованные сообщения уходят вместе с ней); заблокировано только состояние идёт — её сначала нужно отменить.

ПараметрОбязательныйОписание
idID рассылки
{ "status": "ok" }
ОшибкаЗначение
funcid не задан (0)
stateРассылка идёт (сначала отмените) или не ваша
dbОшибка базы данных

Отправить себе

POST /api/broadcast/test.json

Доставляет превью тела рассылки авторизованному пользователю через сервисного бота (только текст и кнопка — медиа не включается). Функции рассылок не требует — можно проверить существующую рассылку и на тарифе без неё.

ПараметрОбязательныйОписание
idID рассылки
{ "status": "ok" }
ОшибкаЗначение
funcid не задан (0)
accessРассылка не ваша
dbОшибка базы данных

Ошибки

ОшибкаЗначение
broadcastsФункция рассылок не включена на тарифе — повысьте тариф
limitДостигнут лимит в 100 рассылок на пользователя
stateДействие недопустимо для текущего статуса рассылки (например, запуск идущей)
accessРассылка или кампания не ваша / не найдена
funcОтсутствует или неверен обязательный параметр (либо некорректна ссылка / чужое медиа)
unpaidПодписка неактивна
dbОшибка базы данных