Кампании
Кампания: цепочка сообщений, которую аккаунты Telegram отправляют контактам по расписанию.
#Объект Campaign
Кампания: цепочка сообщений, которую аккаунты Telegram отправляют контактам.
Поля
objectstringТип объекта, всегдаcampaign.idstring (uuid)Идентификатор кампании.workspace_idstring (uuid)Пространство, которому принадлежит кампания.namestringНазвание кампании.statusstringСтатус кампании. Неизвестное значение приходит какunknown. Значения:draftscheduledactivepausedstoppedcompletedarchivedlaunchingfailedpaused_no_creditsunknownfirst_message_modestringОткуда берется первое сообщение. В v1 всегдаtemplate: из шаблона кампании.accepts_api_leadsbooleanПринимает ли кампания контакты через API. В v1 всегдаfalse.reasonobjectПочему кампания сейчас не отправляет сообщения, если это известно.Вложенные поля
reason_codestringКод причины. Значения:noneschedule_windowdaily_limitqueue_pendingtelegram_waitaccount_unavailableaccount_restrictedcampaign_pausedsubscription_inactivemanual_holdautomation_stoppedservice_unavailableunknownreason_observed_atstring (date-time) или nullКогда причина была зафиксирована.null, если неизвестно.next_attempt_atstring (date-time) или nullКогда ожидается следующая попытка.null, если срок неизвестен.requires_customer_actionboolean или nullНужны ли действия в кабинете, чтобы отправка продолжилась.null, если неизвестно.
created_atstring (date-time)Когда кампания создана.observed_atstring (date-time)Время чтения данных сервером.
Campaign
{
"object": "campaign",
"id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"workspace_id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"name": "Пример кампании",
"status": "active",
"first_message_mode": "template",
"accepts_api_leads": false,
"reason": {
"reason_code": "none",
"reason_observed_at": null,
"next_attempt_at": null,
"requires_customer_action": null
},
"created_at": "2026-10-20T08:00:00.000Z",
"observed_at": "2026-10-27T09:15:42.000Z"
}#Список кампаний
GET/v1/campaigns
Кампании в охвате ключа, от старых к новым по created_at.
Параметры
- Сколько объектов вернуть на странице. От 1 до 100. По умолчанию
50. - Значение
next_cursorиз предыдущего ответа. Остальные фильтры должны совпадать с первым запросом. - Только объекты этого пространства.
- Только кампании с этим статусом. Значения:
draftscheduledactivepausedstoppedcompletedarchivedlaunchingfailedpaused_no_creditsunknown
Ответ
Список: object, data (массив объектов Campaign), has_more, next_cursor. Подробнее в руководстве Пагинация.
Особые ошибки
cursor_mismatch: Курсор поврежден, выдан для другого маршрута или фильтров, либо права и охват ключа изменились.scope_required: Ключ не имеет права на это чтение. Для текстов нужен также включенный «Текст сообщений».not_found: Объект не найден или находится вне охвата ключа. Неизвестный путь тоже дает 404.cursor_expired: Срок курсора истек: 15 минут для списков, 30 суток для ленты событий.
Общие ошибки описаны в руководстве Ошибки.
Запрос
curl -G https://api.melioralab.io/v1/campaigns \
-H "Authorization: Bearer $MELIORA_API_KEY" \
-d workspace_id=3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43 \
-d status=activeconst url = new URL('https://api.melioralab.io/v1/campaigns');
url.searchParams.set('workspace_id', '3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43');
url.searchParams.set('status', 'active');
const res = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.MELIORA_API_KEY}` },
});
if (!res.ok) throw new Error(`Meliora API: ${res.status}`);
const body = await res.json();import os
import requests
resp = requests.get(
"https://api.melioralab.io/v1/campaigns",
headers={"Authorization": f"Bearer {os.environ['MELIORA_API_KEY']}"},
params={"workspace_id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43", "status": "active"},
timeout=15,
)
resp.raise_for_status()
body = resp.json()Ответ
{
"object": "list",
"data": [
{
"object": "campaign",
"id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"workspace_id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"name": "Пример кампании",
"status": "active",
"first_message_mode": "template",
"accepts_api_leads": false,
"reason": {
"reason_code": "none",
"reason_observed_at": null,
"next_attempt_at": null,
"requires_customer_action": null
},
"created_at": "2026-10-20T08:00:00.000Z",
"observed_at": "2026-10-27T09:15:42.000Z"
},
{
"object": "campaign",
"id": "6e3a9c15-2b7d-4f80-9a64-3c1d8e5f7b29",
"workspace_id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"name": "Повторное касание",
"status": "paused",
"first_message_mode": "template",
"accepts_api_leads": false,
"reason": {
"reason_code": "campaign_paused",
"reason_observed_at": "2026-10-25T16:40:00.000Z",
"next_attempt_at": null,
"requires_customer_action": true
},
"created_at": "2026-10-22T11:15:00.000Z",
"observed_at": "2026-10-27T09:15:42.000Z"
}
],
"has_more": true,
"next_cursor": "v1.k1.Qm9hcmRfMWZ4.c3RyaWN0bHlfb3BhcXVl.dGFnX2V4YW1wbGU.bWFjX2V4YW1wbGVfdmFsdWU"
}#Получить кампанию
GET/v1/campaigns/{id}
Одна кампания по идентификатору. Кампания вне охвата ключа дает 404, как несуществующая.
Параметры
- Идентификатор кампании.
Ответ
Объект Campaign.
Особые ошибки
scope_required: Ключ не имеет права на это чтение. Для текстов нужен также включенный «Текст сообщений».not_found: Объект не найден или находится вне охвата ключа. Неизвестный путь тоже дает 404.
Общие ошибки описаны в руководстве Ошибки.
Запрос
curl https://api.melioralab.io/v1/campaigns/4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14 \
-H "Authorization: Bearer $MELIORA_API_KEY"const res = await fetch('https://api.melioralab.io/v1/campaigns/4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14', {
headers: { Authorization: `Bearer ${process.env.MELIORA_API_KEY}` },
});
if (!res.ok) throw new Error(`Meliora API: ${res.status}`);
const body = await res.json();import os
import requests
resp = requests.get(
"https://api.melioralab.io/v1/campaigns/4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
headers={"Authorization": f"Bearer {os.environ['MELIORA_API_KEY']}"},
timeout=15,
)
resp.raise_for_status()
body = resp.json()Ответ
{
"object": "campaign",
"id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"workspace_id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"name": "Пример кампании",
"status": "active",
"first_message_mode": "template",
"accepts_api_leads": false,
"reason": {
"reason_code": "none",
"reason_observed_at": null,
"next_attempt_at": null,
"requires_customer_action": null
},
"created_at": "2026-10-20T08:00:00.000Z",
"observed_at": "2026-10-27T09:15:42.000Z"
}