Рассылки
Раздел «Маркетинг → Рассылки»: кампании по клиентам компании через 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} | Удалить кампанию |
Посчитать аудиторию
/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).
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Тело запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
segment | string | Да | Сегмент. Допустимые значения: all, new, active, debtors, selected |
new_client_days | integer | Нет | Не меньше 1. Не больше 3650 |
active_client_days | integer | Нет | Не меньше 1. Не больше 3650 |
client_ids | array | Нет | ID клиентов для сегмента selected |
client_ids[] | integer | Нет | ID клиента |
text | string | Нет | Текст. Макс. 1000 символов |
{
"segment": "all",
"text": "Скидки до 50% всю неделю!"
}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
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
segment | string | Сегмент |
new_client_days | integer | |
active_client_days | integer | |
total | integer | Всего записей |
reachable | object | |
reachable.telegram | integer | |
reachable.sms | integer | SMS |
sms_parts | integer | |
sms_cost | integer |
{
"segment": "all",
"new_client_days": 30,
"active_client_days": 90,
"total": 2,
"reachable": {
"telegram": 0,
"sms": 2
},
"sms_parts": 1,
"sms_cost": 220
}Отправить кампанию
/company/company/campaign/{model}/sendБез scheduled_at ставит кампанию в очередь отправки сейчас (status = sending), с датой в будущем — планирует (scheduled). Отклоняется, если кампания уже не черновик/запланированная, Telegram-бот не подключён, интеграция SMS выключена или шаблон не одобрен, в сегменте нет достижимых клиентов или SMS-баланса не хватает на рассылку.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры пути
| Параметр | Описание |
|---|---|
model | ID записи |
Тело запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
scheduled_at | string (date) | Нет | Дата отправки. Позже now |
Ответ
Пример ответа пока не записан тестами.
Отменить кампанию
/company/company/campaign/{model}/cancelОтменяет черновик или запланированную кампанию (status = canceled). Уже отправляемую или отправленную кампанию отменить нельзя.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры пути
| Параметр | Описание |
|---|---|
model | ID записи |
Ответ
Пример ответа пока не записан тестами.
Список кампаний
/company/company/campaignРассылки компании со статусом (draft, scheduled, sending, sent, failed, canceled) и счётчиками доставки.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: 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 |
Ответ
Пример ответа пока не записан тестами.
Просмотр кампании
/company/company/campaign/{model}Одна кампания: текст, каналы, сегмент, статус и результаты отправки.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры пути
| Параметр | Описание |
|---|---|
model | ID записи |
Ответ
Пример ответа пока не записан тестами.
Создать кампанию
/company/company/campaignСохраняет кампанию черновиком (draft), ничего не отправляя. Для SMS обязателен одобренный оператором шаблон message_template_id — текст кампании тогда берётся из шаблона; Telegram-кампании шаблон не нужен. Для сегмента selected нужен хотя бы один клиент, для остальных сегментов client_ids сбрасывается.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Тело запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
name | string | Да | Название. Макс. 255 символов |
message_template_id | integer | Нет | Шаблон из библиотеки; обязателен, если среди каналов есть sms |
text | string | Да | Текст. Макс. 1000 символов |
channels | array | Да | Мин. 1 элементов |
channels[] | string | Нет | Допустимые значения: telegram, sms |
segment | string | Да | Сегмент. Допустимые значения: all, new, active, debtors, selected |
new_client_days | integer | Нет | Не меньше 1. Не больше 3650 |
active_client_days | integer | Нет | Не меньше 1. Не больше 3650 |
client_ids | array | Нет | ID клиентов для сегмента selected |
client_ids[] | integer | Нет | ID клиента |
scheduled_at | string (date) | Нет | Дата отправки |
{
"name": "Скидки недели",
"message_template_id": 241,
"text": "Скидки до 50% всю неделю!",
"channels": [
"sms",
"telegram"
],
"segment": "debtors"
}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
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
id | integer | ID |
company_id | integer | Компания |
creator_id | integer | Создатель |
name | string | Название |
message_template_id | integer | |
text | string | Текст |
channels | array | |
segment | string | Сегмент |
segment_label | string | |
new_client_days | integer | |
active_client_days | integer | |
client_ids | array | |
status | string | Статус |
status_label | string | |
is_editable | boolean | |
scheduled_at | null | Дата отправки |
recipients_count | null | |
sent_count | integer | |
failed_count | integer | |
failure_reason | null | |
started_at | null | |
finished_at | null | Завершено |
characters | integer | |
sms_count | integer | |
created_at | string | Создано |
{
"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"
}Изменить кампанию
/company/company/campaign/{model}Меняет кампанию по тем же правилам, что и создание. Изменить можно только черновик или запланированную кампанию; статус при сохранении не меняется.
Из формы (
multipart/form-data) методPUTотправляется какPOSTс параметром?_method=PUT.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры пути
| Параметр | Описание |
|---|---|
model | ID записи |
Тело запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
name | string | Да | Название. Макс. 255 символов |
message_template_id | integer | Нет | Шаблон из библиотеки; обязателен, если среди каналов есть sms |
text | string | Да | Текст. Макс. 1000 символов |
channels | array | Да | Мин. 1 элементов |
channels[] | string | Нет | Допустимые значения: telegram, sms |
segment | string | Да | Сегмент. Допустимые значения: all, new, active, debtors, selected |
new_client_days | integer | Нет | Не меньше 1. Не больше 3650 |
active_client_days | integer | Нет | Не меньше 1. Не больше 3650 |
client_ids | array | Нет | ID клиентов для сегмента selected |
client_ids[] | integer | Нет | ID клиента |
scheduled_at | string (date) | Нет | Дата отправки |
Ответ
Пример ответа пока не записан тестами.
Удалить кампанию
/company/company/campaign/{model}Удаляет кампанию (мягкое удаление).
Из формы (
multipart/form-data) методDELETEотправляется какPOSTс параметром?_method=DELETE.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры пути
| Параметр | Описание |
|---|---|
model | ID записи |
Ответ
Пример ответа пока не записан тестами.

