Перейти к содержимому

syncStateChanged

Обновлено 18 октября 2026

Gratio начал или закончил первую полную загрузку истории канала. По этому уведомлению приложение показывает «Синхронизация» и начинает перенос переписки, когда история готова, — опрашивать getSyncStatus по таймеру не нужно.

typeWebhook syncStateChanged
typeMessage —
Флаг настроек stateWebhook
Каналы MAX, Telegram, WhatsApp, почта, чат на сайте

Пример

Загрузка истории закончилась, все 128 чатов догружены до начала:

{
  "typeWebhook": "syncStateChanged",
  "instanceData": {"idInstance": 7100000001, "wid": "79990000001", "typeInstance": "max", "channel": "max"},
  "timestamp": 1792300000,
  "syncState": "synced",
  "chats": {"total": 128, "done": 128},
  "messages": 112300
}

Поля

Поле Описание
syncState syncing — загрузка началась, synced — закончилась
chats.total, chats.done сколько чатов загружается и сколько догружено до начала
messages сколько сообщений в истории канала
timestamp когда состояние сменилось

Уведомление приходит дважды: в начале первой полной загрузки и в её конце. Новые чаты потом догружаются без уведомлений, ход загрузки в любой момент — getSyncStatus.

У уведомления нет idMessage, senderData, messageData и eventId. Ключ от повторной обработки — пара timestamp + syncState.

Сообщения, загруженные из истории, уведомлениями не приходят — их читают getChatHistory.

Как обработать

Когда история готова, перенести переписку всех чатов в свою систему:

def on_sync(body: dict) -> None:
    if body["typeWebhook"] != "syncStateChanged":
        return
    channel = body["instanceData"]["idInstance"]
    if body["syncState"] == "syncing":
        show_status(channel, f"Синхронизация · {body['chats']['done']} из {body['chats']['total']} чатов")
    elif body["syncState"] == "synced":
        show_status(channel, "История загружена")
        start_import(channel)  # пройти getChats и листать getChatHistory каждого чата

show_status и start_import — ваш код.

Что дальше

Была ли статья полезна?