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

stateInstanceChanged

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

Канал сменил состояние: подключился к мессенджеру, начал переподключаться или потерял сеанс. По этому уведомлению приложение узнаёт, что отправка временно не работает или нужна новая привязка номера.

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

Пример

Канал MAX снова на связи после переподключения:

{
  "typeWebhook": "stateInstanceChanged",
  "instanceData": {"idInstance": 7100000001, "wid": "79990000001@c.us", "typeInstance": "v3", "channel": "max"},
  "timestamp": 1791826035,
  "stateInstance": "authorized"
}

Поля

Поле Описание
stateInstance новое состояние — таблица ниже
timestamp когда состояние сменилось
instanceData.wid номер или адрес аккаунта канала; "", пока площадка его не сообщила

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

Состояния

stateInstance Что значит Что делать
authorized канал на связи, отправка и приём работают ничего
starting канал подключается или переподключается — обычно несколько секунд подождать; отправка в это время отвечает с задержкой или 400 not_authorized
notAuthorized сеанса нет: номер не привязан, сеанс завершили на телефоне, площадка его отозвала или почта перестала принимать вход привязать номер или ящик заново в кабинете
wrongAccount к каналу подключили не тот аккаунт, что был привязан раньше; отправка закрыта выйти из этого аккаунта в кабинете и привязать прежний

Текущее состояние в любой момент — getStateInstance.

Переподключение — обычное дело: перезапуск, сеть, обновление. Пока канал в starting, входящие не теряются: после подключения Gratio дочитает пропущенное сам. Не дочитал всё — придёт syncGap.

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

Предупредить оператора, если канал потерял сеанс, и не тревожить из-за коротких переподключений:

def on_state(body: dict) -> None:
    if body["typeWebhook"] != "stateInstanceChanged":
        return
    channel = body["instanceData"]["idInstance"]
    state = body["stateInstance"]
    set_channel_state(channel, state, since=body["timestamp"])
    if state in ("notAuthorized", "wrongAccount"):
        notify_admin(f"Канал {channel}: нужна привязка в кабинете ({state})")
    elif state == "starting":
        schedule_check(channel, after_seconds=120)   # всё ещё starting через 2 минуты — проверить

Для повторной проверки вызовите getStateInstance. Канал застрял в starting — reboot.

Что дальше

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