Pleep Docs

Получение диалогов

Получение WhatsApp диалогов по номерам телефонов или диапазону дат через API Pleep

Получение WhatsApp диалогов по номерам телефонов или диапазону дат. Основной сценарий использования — анализ диалогов после рассылки шаблонных сообщений.

Формат thread_id изменился

Раньше метод возвращал в поле thread_id внутренний идентификатор, который не совпадал ни с одним другим идентификатором Pleep. Теперь возвращается общий идентификатор диалога вида thread_<uuid> — тот же, что в ссылке на диалог в мониторе, в теле входящего вебхука, в payload исходящих вебхуков и в автоподстановке Custom Tool. Если вы сохраняли старые значения у себя, их нужно перезапросить.

Эндпоинт

POST https://microservice.pleep.app/api/v1/messages/get-threads

Заголовки

ЗаголовокЗначениеОбязательный
X-API-KeyВаш API-ключДа
Content-Typeapplication/jsonДа

Тело запроса

ПолеТипОбязательноеОписание
bot_idstringДаUUID бота. Скопируйте из настроек интеграции
channelstringДаКанал: waba или waba_coexistence
phonesstring[]НетНомера телефонов для поиска (максимум 500)
created_afterstringНетФильтр по дате создания диалога (формат ISO 8601, например 2026-03-01T00:00:00Z)
created_beforestringНетФильтр по дате создания диалога (формат ISO 8601)
messages_limitintegerНетМаксимум сообщений в каждом диалоге. По умолчанию 100, максимум 500
cursorstringНетКурсор пагинации (только для запросов по датам). Это значение next_cursor из предыдущего ответа, то есть thread_id последнего диалога страницы
limitintegerНетКоличество диалогов на страницу (только для запросов по датам). По умолчанию 100, максимум 200

Правила валидации

  • Необходимо указать хотя бы одно из двух: непустой массив phones или поле created_after
  • Если не указано ни одно из этих полей, API вернёт ошибку 422 VALIDATION_ERROR

Пагинация

Поведение зависит от способа запроса:

По номерам телефонов (phones) — все найденные диалоги возвращаются в одном ответе (максимум 500). Номера, для которых диалог не найден, перечислены в массиве not_found.

По датам (без phones) — используется курсорная пагинация. Если есть ещё страницы, в ответе has_more: true и заполнено поле next_cursor. Передайте значение next_cursor в поле cursor следующего запроса.

Примеры запросов

Запрос по номерам телефонов

{
  "bot_id": "your-bot-id",
  "channel": "waba_coexistence",
  "phones": ["+77001234567", "+77009876543", "+77005551234"],
  "messages_limit": 50
}

Запрос по диапазону дат

{
  "bot_id": "your-bot-id",
  "channel": "waba_coexistence",
  "created_after": "2026-03-01T00:00:00Z",
  "created_before": "2026-03-03T00:00:00Z",
  "limit": 50
}

curl

curl -X POST https://microservice.pleep.app/api/v1/messages/get-threads \
  -H "Content-Type: application/json" \
  -H "X-API-Key: pk_live_ваш_ключ" \
  -d '{
    "bot_id": "your-bot-id",
    "channel": "waba_coexistence",
    "phones": ["+77001234567", "+77009876543", "+77005551234"],
    "messages_limit": 50
  }'

Ответы

Поля ответа

ПолеТипОписание
threadsarrayМассив найденных диалогов
threads[].phonestringНомер телефона
threads[].thread_idstringИдентификатор диалога вида thread_<uuid>. Один и тот же во всех интерфейсах Pleep: ссылка в мониторе, входящие и исходящие вебхуки, автоподстановка Custom Tool
threads[].created_atstringДата создания диалога (ISO 8601)
threads[].updated_atstringДата последней активности (ISO 8601)
threads[].message_handlerstringКто обрабатывает диалог: AI или OPERATOR
threads[].lead_statusobject | nullТекущий этап воронки. null, если этап ещё не присвоен
threads[].lead_status.idstringИдентификатор этапа, его же принимает set-status
threads[].lead_status.namestringНазвание этапа, как в воронке
threads[].lead_status.kindstringТип этапа: active, qualified, awaiting_payment, success или failure
threads[].lead_status.orderintegerПозиция этапа в воронке
threads[].messagesarrayМассив сообщений в хронологическом порядке
threads[].messages[].idstringИдентификатор сообщения
threads[].messages[].rolestringРоль отправителя: AI, USER или OPERATOR
threads[].messages[].textstringТекст сообщения
threads[].messages[].created_atstringДата отправки (ISO 8601)
not_foundstring[]Номера, для которых диалог не найден (только при запросе по phones)
has_morebooleantrue, если есть ещё страницы
next_cursorstring | nullКурсор следующей страницы: thread_id последнего диалога в текущей. null, если страниц больше нет

По номерам телефонов — успех

{
  "ok": true,
  "data": {
    "threads": [
      {
        "phone": "+77001234567",
        "thread_id": "thread_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "created_at": "2026-03-01T10:30:00Z",
        "updated_at": "2026-03-01T10:45:00Z",
        "message_handler": "AI",
        "lead_status": {
          "id": "7f3a1c20-1111-2222-3333-444455556666",
          "name": "Предложение отправлено",
          "kind": "active",
          "order": 4
        },
        "messages": [
          {
            "id": "msg_001",
            "role": "AI",
            "text": "Здравствуйте, Иван! Мы подготовили для вас специальное предложение.",
            "created_at": "2026-03-01T10:30:00Z"
          },
          {
            "id": "msg_002",
            "role": "USER",
            "text": "Расскажите подробнее",
            "created_at": "2026-03-01T10:35:00Z"
          },
          {
            "id": "msg_003",
            "role": "AI",
            "text": "Конечно! Сейчас у нас действует скидка 20% на все тарифы.",
            "created_at": "2026-03-01T10:35:30Z"
          }
        ]
      },
      {
        "phone": "+77009876543",
        "thread_id": "thread_b2c3d4e5-f6a7-8901-bcde-f12345678901",
        "created_at": "2026-03-01T11:00:00Z",
        "updated_at": "2026-03-01T11:20:00Z",
        "message_handler": "OPERATOR",
        "lead_status": {
          "id": "9c8b7a60-7777-8888-9999-000011112222",
          "name": "Продажа",
          "kind": "success",
          "order": 10
        },
        "messages": [
          {
            "id": "msg_004",
            "role": "AI",
            "text": "Добрый день, Мария! У нас для вас новость.",
            "created_at": "2026-03-01T11:00:00Z"
          },
          {
            "id": "msg_005",
            "role": "USER",
            "text": "Хочу поговорить с менеджером",
            "created_at": "2026-03-01T11:10:00Z"
          },
          {
            "id": "msg_006",
            "role": "OPERATOR",
            "text": "Здравствуйте! Меня зовут Алексей, чем могу помочь?",
            "created_at": "2026-03-01T11:15:00Z"
          }
        ]
      }
    ],
    "not_found": ["+77005551234"],
    "has_more": false,
    "next_cursor": null
  }
}

По датам с пагинацией

{
  "ok": true,
  "data": {
    "threads": [
      {
        "phone": "+77001112233",
        "thread_id": "thread_c3d4e5f6-a7b8-9012-cdef-123456789012",
        "created_at": "2026-03-01T08:00:00Z",
        "updated_at": "2026-03-01T08:30:00Z",
        "message_handler": "AI",
        "lead_status": null,
        "messages": [
          {
            "id": "msg_007",
            "role": "AI",
            "text": "Здравствуйте! Готовы обсудить ваш заказ?",
            "created_at": "2026-03-01T08:00:00Z"
          }
        ]
      }
    ],
    "not_found": [],
    "has_more": true,
    "next_cursor": "thread_c3d4e5f6-a7b8-9012-cdef-123456789012"
  }
}

Для получения следующей страницы передайте next_cursor в поле cursor:

{
  "bot_id": "your-bot-id",
  "channel": "waba_coexistence",
  "created_after": "2026-03-01T00:00:00Z",
  "created_before": "2026-03-03T00:00:00Z",
  "cursor": "thread_c3d4e5f6-a7b8-9012-cdef-123456789012",
  "limit": 50
}

Коды ошибок

HTTP-статусКод ошибкиОписание
401UNAUTHORIZEDОтсутствует или недействителен API-ключ
403FORBIDDENAPI-ключ не имеет доступа к этому боту
404BOT_NOT_FOUNDУказанный bot_id не существует
422VALIDATION_ERRORНекорректное тело запроса (не указаны phones или created_after, превышен лимит и т.д.)
429RATE_LIMITEDСлишком много запросов. Лимит — 30 запросов в минуту на API-ключ

Ошибка: не указаны фильтры

{
  "ok": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "At least one of 'phones' (non-empty) or 'created_after' must be provided.",
    "status": 422
  }
}

Ошибка: бот не найден

{
  "ok": false,
  "error": {
    "code": "BOT_NOT_FOUND",
    "message": "Bot with the specified bot_id was not found.",
    "status": 404
  }
}

Ошибка: авторизация

{
  "ok": false,
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Invalid or missing API key.",
    "status": 401
  }
}

Типичный сценарий использования

Отправьте шаблонные сообщения через POST /api/v1/messages/send-template, подождите 1–2 дня, затем вызовите этот эндпоинт с теми же номерами телефонов, чтобы получить все диалоги для анализа.