Skip to content

Рассылки ​

Раздел «Маркетинг → Рассылки»: кампании по клиентам компании через Telegram-бот и SMS. Кампания сохраняется черновиком, аудитория считается заранее, а отправка — отдельный шаг, после которого кампанию уже нельзя изменить.

МетодАдресНазначение
POST/company/company/campaign/audienceПосчитать аудиторию
POST/company/company/campaign/{model}/sendОтправить кампанию
POST/company/company/campaign/{model}/cancelОтменить кампанию
GET/company/company/campaignСписок кампаний
GET/company/company/campaign/{model}Просмотр кампании
POST/company/company/campaignСоздать кампанию
PUT/company/company/campaign/{model}Изменить кампанию
DELETE/company/company/campaign/{model}Удалить кампанию

Посчитать аудиторию ​

POST/company/company/campaign/audience

Считает аудиторию ещё не сохранённой кампании: total клиентов в сегменте, сколько из них достижимо по каждому каналу (reachable.telegram — подписаны на бота, reachable.sms — есть телефон) и, если передан text, число SMS-частей и стоимость sms_cost. Сегменты: all, new (добавлены за new_client_days, по умолчанию 30), active (покупали за active_client_days, по умолчанию 90), debtors, selected (по client_ids).

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Тело запроса ​

ПолеТипОбязательноОписание
segmentstringДаСегмент. Допустимые значения: all, new, active, debtors, selected
new_client_daysintegerНетНе меньше 1. Не больше 3650
active_client_daysintegerНетНе меньше 1. Не больше 3650
client_idsarrayНетID клиентов для сегмента selected
client_ids[]integerНетID клиента
textstringНетТекст. Макс. 1000 символов
json
{
    "segment": "all",
    "text": "Скидки до 50% всю неделю!"
}
bash
curl -X POST "https://api.wasyt.uz/company/company/campaign/audience" \
  -H "Accept: application/json" \
  -H "Accept-Language: ru" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"segment":"all","text":"Скидки до 50% всю неделю!"}'

Ответ · 200 ​

Поля ответа
ПолеТипОписание
segmentstringСегмент
new_client_daysinteger
active_client_daysinteger
totalintegerВсего записей
reachableobject
reachable.telegraminteger
reachable.smsintegerSMS
sms_partsinteger
sms_costinteger
json
{
    "segment": "all",
    "new_client_days": 30,
    "active_client_days": 90,
    "total": 2,
    "reachable": {
        "telegram": 0,
        "sms": 2
    },
    "sms_parts": 1,
    "sms_cost": 220
}

Отправить кампанию ​

POST/company/company/campaign/{model}/send

Без scheduled_at ставит кампанию в очередь отправки сейчас (status = sending), с датой в будущем — планирует (scheduled). Отклоняется, если кампания уже не черновик/запланированная, Telegram-бот не подключён, интеграция SMS выключена или шаблон не одобрен, в сегменте нет достижимых клиентов или SMS-баланса не хватает на рассылку.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Тело запроса ​

ПолеТипОбязательноОписание
scheduled_atstring (date)НетДата отправки. Позже now

Ответ ​

Пример ответа пока не записан тестами.

Отменить кампанию ​

POST/company/company/campaign/{model}/cancel

Отменяет черновик или запланированную кампанию (status = canceled). Уже отправляемую или отправленную кампанию отменить нельзя.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Ответ ​

Пример ответа пока не записан тестами.

Список кампаний ​

GET/company/company/campaign

Рассылки компании со статусом (draft, scheduled, sending, sent, failed, canceled) и счётчиками доставки.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры запроса ​

ПараметрОписание
filter[id]ID — точное значение
filter[creator_id]Создатель — точное значение
filter[company_id]Компания — точное значение
filter[segment]Сегмент — одно значение или список filter[segment][]
filter[status]Статус — одно значение или список filter[status][]
filter[channels]содержит любое из значений
filter[name]Название — поиск по части строки
filter[created_at]Создано — период: [0] — с, [1] — по (Y-m-d)
filter[scheduled_at]Дата отправки — период: [0] — с, [1] — по (Y-m-d)
sort[]Сортировка, - — по убыванию: id, -id, name, -name, scheduled_at, -scheduled_at, created_at, -created_at
with[]Подгрузить связи: creator.profile, company
pageНомер страницы, с 1
page-sizeЗаписей на странице, не больше 20

Ответ ​

Пример ответа пока не записан тестами.

Просмотр кампании ​

GET/company/company/campaign/{model}

Одна кампания: текст, каналы, сегмент, статус и результаты отправки.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Ответ ​

Пример ответа пока не записан тестами.

Создать кампанию ​

POST/company/company/campaign

Сохраняет кампанию черновиком (draft), ничего не отправляя. Для SMS обязателен одобренный оператором шаблон message_template_id — текст кампании тогда берётся из шаблона; Telegram-кампании шаблон не нужен. Для сегмента selected нужен хотя бы один клиент, для остальных сегментов client_ids сбрасывается.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Тело запроса ​

ПолеТипОбязательноОписание
namestringДаНазвание. Макс. 255 символов
message_template_idintegerНетШаблон из библиотеки; обязателен, если среди каналов есть sms
textstringДаТекст. Макс. 1000 символов
channelsarrayДаМин. 1 элементов
channels[]stringНетДопустимые значения: telegram, sms
segmentstringДаСегмент. Допустимые значения: all, new, active, debtors, selected
new_client_daysintegerНетНе меньше 1. Не больше 3650
active_client_daysintegerНетНе меньше 1. Не больше 3650
client_idsarrayНетID клиентов для сегмента selected
client_ids[]integerНетID клиента
scheduled_atstring (date)НетДата отправки
json
{
    "name": "Скидки недели",
    "message_template_id": 241,
    "text": "Скидки до 50% всю неделю!",
    "channels": [
        "sms",
        "telegram"
    ],
    "segment": "debtors"
}
bash
curl -X POST "https://api.wasyt.uz/company/company/campaign" \
  -H "Accept: application/json" \
  -H "Accept-Language: ru" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"name":"Скидки недели","message_template_id":241,"text":"Скидки до 50% всю неделю!","channels":["sms","telegram"],"segment":"debtors"}'

Ответ · 200 ​

Поля ответа
ПолеТипОписание
idintegerID
company_idintegerКомпания
creator_idintegerСоздатель
namestringНазвание
message_template_idinteger
textstringТекст
channelsarray
segmentstringСегмент
segment_labelstring
new_client_daysinteger
active_client_daysinteger
client_idsarray
statusstringСтатус
status_labelstring
is_editableboolean
scheduled_atnullДата отправки
recipients_countnull
sent_countinteger
failed_countinteger
failure_reasonnull
started_atnull
finished_atnullЗавершено
charactersinteger
sms_countinteger
created_atstringСоздано
json
{
    "id": 1,
    "company_id": 1,
    "creator_id": 2,
    "name": "Скидки недели",
    "message_template_id": 241,
    "text": "Скидки до 50% всю неделю!",
    "channels": [
        "sms",
        "telegram"
    ],
    "segment": "debtors",
    "segment_label": "Должники",
    "new_client_days": 30,
    "active_client_days": 90,
    "client_ids": [],
    "status": "draft",
    "status_label": "Черновик",
    "is_editable": true,
    "scheduled_at": null,
    "recipients_count": null,
    "sent_count": 0,
    "failed_count": 0,
    "failure_reason": null,
    "started_at": null,
    "finished_at": null,
    "characters": 25,
    "sms_count": 1,
    "created_at": "2026-09-30T07:21:07.000000Z"
}

Изменить кампанию ​

PUT/company/company/campaign/{model}

Меняет кампанию по тем же правилам, что и создание. Изменить можно только черновик или запланированную кампанию; статус при сохранении не меняется.

Из формы (multipart/form-data) метод PUT отправляется как POST с параметром ?_method=PUT.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Тело запроса ​

ПолеТипОбязательноОписание
namestringДаНазвание. Макс. 255 символов
message_template_idintegerНетШаблон из библиотеки; обязателен, если среди каналов есть sms
textstringДаТекст. Макс. 1000 символов
channelsarrayДаМин. 1 элементов
channels[]stringНетДопустимые значения: telegram, sms
segmentstringДаСегмент. Допустимые значения: all, new, active, debtors, selected
new_client_daysintegerНетНе меньше 1. Не больше 3650
active_client_daysintegerНетНе меньше 1. Не больше 3650
client_idsarrayНетID клиентов для сегмента selected
client_ids[]integerНетID клиента
scheduled_atstring (date)НетДата отправки

Ответ ​

Пример ответа пока не записан тестами.

Удалить кампанию ​

DELETE/company/company/campaign/{model}

Удаляет кампанию (мягкое удаление).

Из формы (multipart/form-data) метод DELETE отправляется как POST с параметром ?_method=DELETE.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Ответ ​

Пример ответа пока не записан тестами.