Эндпоинты рассылок
Настройка триггерных дожимов по статусам кампании и создание и запуск ручных массовых рассылок. Концепции — в руководстве по рассылкам; эта страница — справочник по API.
Все эндпоинты рассылок требуют активной оплаченной сессии и функции рассылки
на тарифе. Включение триггерного блока или запуск ручной рассылки на тарифе без этой
функции вернёт error: broadcasts.
Конфигурация триггерных
Блоки сообщений по кампании и статусу. Пять статусов, по одному блоку:
0 wait · 1 hold · 2 approve · 3 cancel · 4 trash.
Получить блоки кампании
GET /api/camp/broadcast.json
Возвращает все пять блоков. Статусы без блока приходят как нулевой блок (on: 0).
| Параметр | Описание |
|---|---|
id | ID кампании |
{
"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 видео.
Сохранить один блок
POST /api/camp/broadcast.json
Создаёт/обновляет блок одного статуса.
| Параметр | Обязателен | Описание |
|---|---|---|
id | ✓ | ID кампании |
status | ✓ | Статус лида 0–4 |
on | 1 включить, 0 выключить | |
delay | Секунды после попадания в статус до отправки | |
text | Текст сообщения (Telegram Markdown) | |
media | Ссылка на медиа из media/upload; "" если нет | |
media_type | 1 фото, 2 видео (из ответа загрузки) | |
button | Подпись кнопки | |
link | URL кнопки (можно с макросами) |
{ "status": "ok" }Включение блока (on=1) требует функции рассылок → иначе error: broadcasts.
Выключение или правка уже выключенного блока разрешены всегда (чтобы при понижении
тарифа блок можно было выключить).
Отправить блок себе
POST /api/camp/btest.json
Доставляет превью одного сохранённого блока статуса в Telegram авторизованного пользователя через сервисного бота (только текст и кнопка — медиа не включается).
| Параметр | Обязателен | Описание |
|---|---|---|
id | ✓ | ID кампании |
status | ✓ | Статус лида 0–4 |
{ "status": "ok" }Ручные рассылки
Рассылка создаётся как черновик, редактируется, затем запускается. Статусы:
0 черновик · 1 идёт · 2 готово · 3 отменена · 4 пауза.
Список рассылок
GET /api/broadcast/list.json
Возвращает рассылки пользователя, новые сверху, с живыми счётчиками.
{
"status": "ok",
"data": [
{
"id": 5,
"name": "Майский возврат",
"status": 1,
"statuses": 24,
"campaigns": [],
"total": 1240,
"sent": 800,
"queued": 440,
"failed": 0,
"started": 1717500000,
"created": 1717490000
}
]
}statuses — битовая маска целевых статусов лида (бит 0 wait … бит 4 trash);
24 = биты 3+4 = cancel + trash. campaigns — список кампаний-области (пусто = все).
Время — unix-секунды (0 = не задано).
Шкала дневного лимита
GET /api/broadcast/quota.json
{ "status": "ok", "data": { "cap": 500, "used": 120, "queued": 440 } }| Поле | Значение |
|---|---|
cap | Дневной лимит ручных отправок из тарифа; 0 = без ограничений |
used | Ручных сообщений отправлено сегодня (день по UTC) |
queued | Сообщений (обоих видов), ждущих в очереди отправки |
Получить одну рассылку
GET /api/broadcast/get.json
Возвращает рассылку целиком, включая область кампаний и фильтры. Для незапущенной
рассылки также пересчитывает total (живая аудитория) и remaining (размер
Доделать — лиды, ещё не охваченные).
| Параметр | Описание |
|---|---|
id | ID рассылки |
{
"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
}
}Создать черновик
POST /api/broadcast/add.json
| Параметр | Описание |
|---|---|
name | Необязательное название |
{ "status": "ok", "data": { "id": 5 } }Изменить рассылку
POST /api/broadcast/edit.json
Заменяет поля рассылки и область кампаний. Разрешено в любом состоянии — тело берётся в момент отправки, поэтому правка идущей рассылки влияет на ещё не ушедшие сообщения.
| Параметр | Описание |
|---|---|
id | ID рассылки |
name | Название |
statuses | Битовая маска целевых статусов (бит 0 wait … бит 4 trash) |
campaigns | ID кампаний через запятую; пусто = все ваши кампании |
created_from / created_to | Фильтр по времени появления лида (unix; 0 = без границы) |
status_from / status_to | Фильтр по времени смены статуса лида (unix; 0 = без границы) |
text | Текст сообщения (Telegram Markdown) |
media / media_type | Ссылка на медиа из media/upload и её тип |
button / link | Подпись кнопки + URL (можно с макросами) |
{ "status": "ok" }Запуск (всегда «доделать»)
POST /api/broadcast/start.json
Ставит аудиторию в очередь и переводит рассылку в идёт. Это всегда доделать:
в очередь попадают только лиды, которых рассылка ещё не охватила, поэтому повторный
запуск готово/отменена рассылки уйдёт только новым лидам. Разрешено из
черновик/готово/отменена; рассылка в состоянии идёт/пауза вернёт
error: state.
| Параметр | Описание |
|---|---|
id | ID рассылки |
{ "status": "ok", "data": { "queued": 60 } }queued — число поставленных в очередь сообщений. 0 означает, что охватывать было
некого, и статус рассылки не меняется.
Пауза / Продолжить
POST /api/broadcast/pause.json — идёт → пауза; неотправленные сообщения
паркуются и сохраняются.
POST /api/broadcast/resume.json — пауза → идёт; запаркованные сообщения снова
становятся актуальными, и отправка продолжается ровно с места остановки.
| Параметр | Описание |
|---|---|
id | ID рассылки |
{ "status": "ok" }Пауза для не идущей рассылки вернёт error: state.
Остановить (отмена)
POST /api/broadcast/cancel.json
идёт/пауза → отменена; сбрасывает остаток сообщений в очереди. Множество уже
охваченных лидов сохраняется, поэтому будущий запуск Доделать им не напишет
повторно.
| Параметр | Описание |
|---|---|
id | ID рассылки |
{ "status": "ok" }Сбросить
POST /api/broadcast/reset.json
Очищает множество охваченных лидов и счётчики и возвращает готово/отменена
рассылку в черновик, сохраняя название, фильтры и тело. Следующий запуск тогда
переотправит всей аудитории.
| Параметр | Описание |
|---|---|
id | ID рассылки |
{ "status": "ok" }Удалить
POST /api/broadcast/del.json
Удаляет не идущую рассылку и её область, очередь и записи об охвате. Идущую рассылку нужно сначала остановить.
| Параметр | Описание |
|---|---|
id | ID рассылки |
{ "status": "ok" }Отправить себе
POST /api/broadcast/test.json
Доставляет превью тела рассылки авторизованному пользователю через сервисного бота (только текст и кнопка — медиа не включается).
| Параметр | Описание |
|---|---|
id | ID рассылки |
{ "status": "ok" }Ошибки
| Ошибка | Значение |
|---|---|
broadcasts | Функция рассылок не включена на тарифе — повысьте тариф |
state | Действие недопустимо для текущего статуса рассылки (например, запуск идущей) |
access | Рассылка или кампания не ваша |
func | Отсутствует или неверен обязательный параметр |
unpaid | Подписка неактивна |