Документация → SMS-рассылки
SMS-рассылки
Черновик по сегменту, отправка с защитой от повтора, статус и отмена.
SMS-рассылка по сегменту: черновик → отправка (с защитой от повтора) → статус и доставка.
Отписавшиеся, гости без телефона и попавшие под частотный лимит ресторана исключаются
автоматически. Счётчики stats только растут; доставка досчитывается ещё сутки после sent.
Объект campaign
SMS-рассылка по сегменту, созданная через API
| Поле | Тип | Описание |
|---|---|---|
id | string | Неизменный id |
object | string | Тип объекта |
name | string | Название; если не передано при создании — по сегменту |
status | enum | draft → scheduled → sending → sent; failed — отправка не состоялась. Значения: draft, scheduled, sending, sent, failed |
segment_id | string | Аудитория — id сегмента |
text | string | Текст SMS |
scheduled_at | datetime | null | Когда отправить, UTC; null — сразу после send |
audience_count | integer | Сколько получат. В draft — прогноз; после send — замороженный состав |
sms_parts | integer | Частей SMS на одного получателя — зависит от длины и алфавита текста |
cost | money | null | В draft и scheduled — оценка, после sent — по факту шлюза |
cost_final | boolean | true — cost фактический и больше не изменится |
stats | CampaignStats | null | Счётчики получателей; null до начала отправки |
failure_reason | enum | null | Почему отправка не состоялась; только при failed, иначе null. Значения: sending_disabled, empty_audience, gateway_rejected |
created_at | datetime | Когда создана, UTC |
sent_at | datetime | null | Когда отправка завершена, UTC; null — ещё не завершена |
updated_at | datetime | Последнее изменение, UTC |
{
"id": "cmp_Q4n8Rt2v",
"object": "campaign",
"name": "Вернуть уснувших",
"status": "draft",
"segment_id": "seg_at_risk",
"text": "Анна, скучаем! −15% по коду BACK15",
"scheduled_at": "2026-10-15T08:00:00Z",
"audience_count": 1412,
"sms_parts": 2,
"cost": {
"amount": "15400.00",
"currency": "RUB"
},
"cost_final": false,
"stats": {
"sent": 1405,
"delivered": 1371,
"failed": 34
},
"failure_reason": null,
"created_at": "2026-10-14T09:30:00Z",
"sent_at": null,
"updated_at": "2026-10-14T09:30:00Z"
}Создать черновик SMS-рассылки
POST /v1/campaigns · право campaigns:write
Черновик по сегменту: в ответе прогноз аудитории и оценка стоимости. Ничего не отправляет —
для отправки POST /v1/campaigns/{campaign_id}/send. Причины 422 в errors[]:
unknown_segment, text_empty, text_too_long, scheduled_at_in_past, invalid_datetime.
| Параметр | Где | Обязателен | Описание | Пример |
|---|---|---|---|---|
Idempotency-Key | заголовок | Ключ повтора, например UUID; повтор с тем же ключом вернёт сохранённый ответ | 6f1c2b8e-1d4a-4c55-9b0e-0f6d1a2c3b4d |
Тело — объект CampaignCreate:
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
segment_id | string | да | Аудитория — id сегмента из GET /v1/segments |
text | string | да | Текст SMS, от 1 до 1000 символов |
name | string | null | Название рассылки; не передано — по сегменту | |
scheduled_at | datetime | null | Когда отправить, RFC 3339 с поясом; null — сразу после send |
curl -X POST https://app.lazycrm.ru/v1/campaigns \
-H "Authorization: Bearer lcrm_live_…" \
-H "Idempotency-Key: 6f1c2b8e-1d4a-4c55-9b0e-0f6d1a2c3b4d" \
-H "Content-Type: application/json" \
-d '{"segment_id": "seg_at_risk", "text": "Анна, скучаем! −15% по коду BACK15", "name": "Вернуть уснувших", "scheduled_at": "2026-10-15T08:00:00Z"}'Ошибки: 400 unknown_parameter, 401 missing_api_key, 401 invalid_api_key, 403 insufficient_scope, 409 idempotency_request_in_progress, 422 validation_error, 422 idempotency_key_reused, 429 rate_limited, 500 internal_error, 503 upstream_unavailable.
Получить рассылку
GET /v1/campaigns/{campaign_id} · право campaigns:read
Статус, счётчики доставки и стоимость рассылки, созданной через API.
| Параметр | Где | Обязателен | Описание | Пример |
|---|---|---|---|---|
campaign_id | путь | да | Id рассылки | cmp_Q4n8Rt2v |
curl https://app.lazycrm.ru/v1/campaigns/cmp_Q4n8Rt2v \
-H "Authorization: Bearer lcrm_live_…"Ошибки: 400 unknown_parameter, 401 missing_api_key, 401 invalid_api_key, 403 insufficient_scope, 404 not_found, 429 rate_limited, 500 internal_error, 503 upstream_unavailable.
Отправить рассылку
POST /v1/campaigns/{campaign_id}/send · право campaigns:write
Замораживает состав получателей на момент вызова и ставит рассылку в очередь: без
scheduled_at SMS уходят в течение нескольких минут (status: sending), иначе
status: scheduled. Подтверждения человеком нет. Тело пустое.
Заголовок Idempotency-Key обязателен: повтор с тем же ключом вернёт тот же ответ и вторую
рассылку не создаст. После обрыва сети запрос можно смело повторить тем же ключом.
| Параметр | Где | Обязателен | Описание | Пример |
|---|---|---|---|---|
campaign_id | путь | да | Id рассылки | cmp_Q4n8Rt2v |
Idempotency-Key | заголовок | да | Ключ повтора, например UUID; без него — 400 idempotency_key_required | 0b7e3f52-8a61-4f2d-a3c9-5e8d7b6a1f20 |
curl -X POST https://app.lazycrm.ru/v1/campaigns/cmp_Q4n8Rt2v/send \
-H "Authorization: Bearer lcrm_live_…" \
-H "Idempotency-Key: 0b7e3f52-8a61-4f2d-a3c9-5e8d7b6a1f20"Ошибки: 400 unknown_parameter, 400 idempotency_key_required, 401 missing_api_key, 401 invalid_api_key, 403 insufficient_scope, 404 not_found, 409 campaign_already_sent, 409 empty_audience, 409 idempotency_request_in_progress, 422 validation_error, 422 idempotency_key_reused, 429 rate_limited, 429 send_limit_reached, 500 internal_error, 503 sending_disabled, 503 upstream_unavailable.
Отменить отправку
POST /v1/campaigns/{campaign_id}/cancel · право campaigns:write
Снимает запланированную рассылку до начала отправки и возвращает её в draft. Если SMS уже
уходят или рассылка не запланирована — 409 campaign_not_cancelable.
| Параметр | Где | Обязателен | Описание | Пример |
|---|---|---|---|---|
campaign_id | путь | да | Id рассылки | cmp_Q4n8Rt2v |
Idempotency-Key | заголовок | Ключ повтора, например UUID; повтор с тем же ключом вернёт сохранённый ответ | 6f1c2b8e-1d4a-4c55-9b0e-0f6d1a2c3b4d |
curl -X POST https://app.lazycrm.ru/v1/campaigns/cmp_Q4n8Rt2v/cancel \
-H "Authorization: Bearer lcrm_live_…" \
-H "Idempotency-Key: 6f1c2b8e-1d4a-4c55-9b0e-0f6d1a2c3b4d"Ошибки: 400 unknown_parameter, 401 missing_api_key, 401 invalid_api_key, 403 insufficient_scope, 404 not_found, 409 campaign_not_cancelable, 409 idempotency_request_in_progress, 422 validation_error, 422 idempotency_key_reused, 429 rate_limited, 500 internal_error, 503 upstream_unavailable.
