← Все статьи
Гайд

В списке диалогов WhatsApp не хватает чатов? Проверьте фильтр метки

Если список диалогов WhatsApp в UnifyPort короче ожидаемого, сначала проверьте запрос, а не переподключайте аккаунт. Согласно документации, без label_id WhatsApp возвращает только диалоги, отмеченные звёздочкой / «特别关注». Завершение пагинации не превращает выбранное представление в перечень всех чатов. Поиск диалогов, чтение адресной книги и получение истории сообщений — разные задачи.

Главное

  • Отсутствие label_id не означает «все чаты WhatsApp».
  • Каталог меток содержит определения меток, а не записи диалогов.
  • Во время одного прохода пагинации сохраняйте аккаунт обмена сообщениями и фильтры.
  • Не удаляйте локальные диалоги только потому, что их нет в отфильтрованной выдаче.

Какой именно список вы запросили?

Справочный центр WhatsApp описывает списки как настраиваемые фильтры чатов. Это помогает понять принцип интерфейса, но не определяет поведение API UnifyPort и не означает, что у каждого списка приложения есть API-аналог.

Контракт интеграции задаёт справочник List conversations. Это запрос к провайдеру в реальном времени, а не чтение архива из локальной базы UnifyPort.

Операция чтенияЧто возвращаетЧего из этого не следует
Список диалогов WhatsApp без label_idОтмеченные звёздочкой / особо выделенные диалогиВсе чаты аккаунта
Список с выбранным label_idПредставление выбранной меткиПолный реестр диалогов аккаунта
Список меток диалоговОбъекты с id и nameЧаты, относящиеся к каждой метке
Список контактовЗаписи адресной книги провайдераВсе диалоги или сообщения
Список группГруппы, в которых состоит аккаунт, включая неактивныеЛичные чаты или история сообщений групп

Получите ID метки из каталога меток нужного аккаунта. Не подставляйте вместо него отображаемое имя. Июньское обновление API представляет операции создания меток и управления их составом. Здесь задача другая: прочитать нужное представление и не принять его за полный реестр.

Как проверить отсутствующие диалоги WhatsApp

1. Уточните аккаунт и область запроса

Проверьте учётные данные рабочего пространства и account_id в запросе. ID метки, полученный для другого аккаунта обмена сообщениями, нельзя считать надёжным фильтром для текущего. Храните API-ключи на сервере и исключайте секреты из диагностических записей.

Зафиксируйте, отсутствует ли label_id или содержит реальный ID. Не предполагайте, что пустая строка, подстановочный символ или придуманное значение «all» выбирает все диалоги: такой селектор здесь не документирован.

Необязательный type принимает точные значения user, group и channel через запятую, без удаления пробелов. Например, user,group соответствует документированному синтаксису; не формируйте user, group. Если запрошены только группы, отсутствие личных чатов не указывает на сбой соединения.

2. Продолжайте пагинацию с теми же условиями

Диапазон limit — 1–100, значение по умолчанию — 20. Пока data.has_more указывает на продолжение, используйте data.next_cursor, не меняя аккаунт, метку и типы. Считайте курсор непрозрачным значением: не расшифровывайте, не редактируйте и не переносите между разными запросами.

Недействительный или просроченный курсор может быть отклонён либо начать пагинацию заново — это зависит от провайдера. Рекомендуемые меры на стороне клиента: обнаруживать повторение курсоров, объединять повторные записи по conversation_id в области аккаунта и останавливать цикл с понятной диагностикой. Если проход нужно начать заново, используйте те же фильтры и повторно устраняйте дубликаты.

has_more: false завершает пагинацию конкретного запроса. Это не доказывает включение других меток, невыбранных чатов или старых сообщений. Поскольку чтение выполняется в реальном времени, набор страниц также нельзя считать гарантированно неизменяемым снимком.

3. Проверьте известный чат напрямую

Если приложение уже получило идентификатор диалога из доверенного события или предыдущего ответа API, вызовите Get conversation, передав conversation_id в параметре запроса. Формируйте строку запроса средствами URL-кодирования, а не помещайте идентификатор провайдера в сегмент пути.

Успешное прямое чтение при отсутствии записи в списке — повод проверить область выборки, а не объявлять аккаунт отключённым. Ответ «не найдено» тоже требует проверки аккаунта и ID; он не разрешает удалять локальную историю. Не конструируйте ID диалога из имени или номера телефона.

4. Выберите чтение под конкретную задачу

Для адресной книги используйте List contacts. Операция охватывает контакты независимо от истории переписки. Для действий с чатом используйте возвращённое соответствие conversation_id, не предполагая, что id контакта равнозначен ему. Руководство по синхронизации имён контактов подробнее объясняет эту границу идентичности.

List groups может показать группы, в которых аккаунт состоит, даже если в них ещё не переписывались. Ни одна из этих операций не заменяет архив сообщений. Объединение их результатов также не доказывает, что найдены все личные диалоги.

Показывайте реальную область общего входящего ящика

Разделяйте в приложении три понятия: уже наблюдавшиеся диалоги, текущую отфильтрованную выдачу провайдера и сохранённые сообщения. Это рекомендуемые границы локальных данных, а не новые поля API.

Называйте представление «Выбранная метка» или «Отмеченные диалоги», а не «Все диалоги», если это его реальная область. Исчезновение записи из фильтра должно убирать её из этого представления, а не автоматически удалять локальный диалог и сообщения. Ошибку чтения показывайте отдельно от успешного пустого результата.

Для постоянного приёма UnifyPort предоставляет неофициальный интерфейс с нормализованными событиями, например message.received. Следуйте контракту доставки: настройте signing_secret, проверяйте HMAC-SHA256 от X-Device-Timestamp, точки и исходного тела запроса, контролируйте свежесть времени и надёжно сохраняйте событие до ответа 2xx. Храните наблюдавшиеся ID аккаунтов и диалогов для последующих запросов.

Это не гарантирует обнаружение чатов, трафик которых вы не наблюдали. UnifyPort не предоставляет REST API чтения истории сообщений и не гарантирует повторную доставку пропущенных данных. Отдельный процесс запроса истории WhatsApp асинхронно запрашивает доступные старые сообщения для известного подходящего личного диалога. Он не перечисляет все чаты.

Вопросы и ответы

Увеличение limit покажет все чаты WhatsApp?

Нет. Оно меняет размер страницы в рамках текущего запроса, а не отменяет выборку отмеченных диалогов по умолчанию.

Можно использовать ID меток как ID диалогов?

Нет. Метки обозначают категории, а диалоги — чаты. Это разные ресурсы.

Пустой список означает, что нужна повторная авторизация?

Нет. Сначала проверьте выбор аккаунта, фильтры, пагинацию и возвращённые ошибки. Не запускайте авторизацию только из-за пустого отфильтрованного представления.

Следующий шаг и источники

На контролируемом тестовом аккаунте сопоставьте запрос со справочником List conversations, затем сравните прямое чтение известного чата с его видимостью в фильтре. Прежде чем использовать список для сверки общего входящего ящика, проверьте смену меток, повторные курсоры и пустую выдачу. Это предлагаемые проверки, а не результаты эксплуатации.

Источники проверены 2026-10-03:

UnifyPort API

Превратите интеграцию сообщений в стабильный продуктовый pipeline.

Начните с отправки через единый API, затем возвращайте входящие сообщения в бизнес-систему стандартными событиями.