Переписка
Сохраненные сообщения переписки аккаунта с лидом: исходящие шаги цепочки, ручные сообщения и ответы.
Маршруты
#Объект Message
Сообщение из сохраненной переписки с лидом. Архив может быть неполным: см. meta.completeness.
Поля
objectstringТип объекта, всегдаmessage.idstringНепрозрачный устойчивый идентификатор сообщения. Не разбирайте его формат.directionstringoutbound: от аккаунта к лиду;inbound: от лида. Значения:outboundinboundauthorstringcampaign: шаг цепочки;manager: ручное сообщение;lead: ответ лида;unknown: не определено. Значения:campaignmanagerleadunknownsent_atstring (date-time) или nullКогда сообщение отправлено или получено.null, если неизвестно.statestringsent: отправка подтверждена;received: входящее сохранено;unknown: исход не подтвержден. Значения:sentreceivedunknownmedia_kindstringВид вложения. Файлы и ссылки на них не выдаются. Значения:nonephotovideovoiceaudiodocumentstickeranimationvideo_notecontactlocationpollotherunknowntextstring или nullСохраненный текст, до 4000 знаков.null, если текст недоступен. До 4000 знаков.text_truncatedboolean или nulltrue: текст сокращен;false: текст полный;null: полнота неизвестна.
Message
{
"object": "message",
"id": "m_6b2e9f403a7c4d158e921c5a7f3b9d08",
"direction": "outbound",
"author": "campaign",
"sent_at": "2026-10-26T07:30:00.000Z",
"state": "sent",
"media_kind": "none",
"text": "Добрый день, Анна! Пишу из Примера: подскажите, кто у вас отвечает за аутрич?",
"text_truncated": false,
"text_unavailable": false,
"text_unavailable_reason": null
}#Переписка с лидом
GET/v1/leads/{id}/messages
Сохраненные сообщения переписки с лидом, от ранних к поздним. Нужны право messages:read и включенный у ключа «Текст сообщений». Архив может быть неполным: смотрите meta.completeness.
Параметры
- Идентификатор лида.
- Сколько объектов вернуть на странице. От 1 до 100. По умолчанию
50. - Значение
next_cursorиз предыдущего ответа. Остальные фильтры должны совпадать с первым запросом.
Ответ
Список: object, data (массив объектов Message), has_more, next_cursor, meta. Подробнее в руководстве Пагинация.
Поле meta
completenessobjectНасколько полон сохраненный архив переписки с лидом. Сейчас полнота не вычисляется:overallиinboundприходят какpartial,outboundкакunknown.Вложенные поля
overallstringОбщая полнота:complete,partialилиunknown. Значения:completepartialunknowninboundstringПолнота входящих сообщений. Значения:completepartialunknownoutboundstringПолнота исходящих сообщений. Значения:completepartialunknownavailable_fromstring (date-time) или nullНачало периода, за который есть данные.null, если неизвестно.available_tostring (date-time) или nullКонец периода, за который есть данные.null, если неизвестно.observed_atstring (date-time)Время чтения данных сервером.
Особые ошибки
cursor_mismatch: Курсор поврежден, выдан для другого маршрута или фильтров, либо права и охват ключа изменились.scope_required: Ключ не имеет права на это чтение. Для текстов нужен также включенный «Текст сообщений».not_found: Объект не найден или находится вне охвата ключа. Неизвестный путь тоже дает 404.cursor_expired: Срок курсора истек: 15 минут для списков, 30 суток для ленты событий.
Общие ошибки описаны в руководстве Ошибки.
Запрос
curl https://api.melioralab.io/v1/leads/5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31/messages \
-H "Authorization: Bearer $MELIORA_API_KEY"const res = await fetch('https://api.melioralab.io/v1/leads/5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31/messages', {
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/leads/5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31/messages",
headers={"Authorization": f"Bearer {os.environ['MELIORA_API_KEY']}"},
timeout=15,
)
resp.raise_for_status()
body = resp.json()Ответ
{
"object": "list",
"data": [
{
"object": "message",
"id": "m_6b2e9f403a7c4d158e921c5a7f3b9d08",
"direction": "outbound",
"author": "campaign",
"sent_at": "2026-10-26T07:30:00.000Z",
"state": "sent",
"media_kind": "none",
"text": "Добрый день, Анна! Пишу из Примера: подскажите, кто у вас отвечает за аутрич?",
"text_truncated": false,
"text_unavailable": false,
"text_unavailable_reason": null
},
{
"object": "message",
"id": "m_c7a1d3e59b2f4a68b4d05e8f2a6c1b97",
"direction": "inbound",
"author": "lead",
"sent_at": "2026-10-26T09:12:00.000Z",
"state": "received",
"media_kind": "none",
"text": "Здравствуйте! Это я, давайте созвонимся завтра.",
"text_truncated": null,
"text_unavailable": false,
"text_unavailable_reason": null
},
{
"object": "message",
"id": "m_a3f8c6e27d1b4e949c058b2d4f7a6e13",
"direction": "inbound",
"author": "lead",
"sent_at": "2026-10-26T09:13:30.000Z",
"state": "received",
"media_kind": "photo",
"text": null,
"text_truncated": null,
"text_unavailable": true,
"text_unavailable_reason": "not_saved"
}
],
"has_more": false,
"next_cursor": null,
"meta": {
"completeness": {
"overall": "partial",
"inbound": "partial",
"outbound": "unknown",
"available_from": "2026-10-26T07:30:00.000Z",
"available_to": "2026-10-27T09:15:42.000Z",
"observed_at": "2026-10-27T09:15:42.000Z"
}
}
}