enВойти в Senler

События виджета

Задавайте callbacks при инициализации, а обработчики событий страницы подключайте до действия, результат которого нужно получить.

Функции обратного вызова и события

В SenlerWidget.init доступны:

  • contextProvider() — синхронно возвращает постоянный контекст страницы; Promise не поддерживается;
  • resolveRuntime(context) — синхронно выбирает настройки по состоянию посетителя и диалогов;
  • onCollapse(detail) — сообщает о нажатии кнопки shell.collapse_button.
  • onReady(detail) — один раз сообщает об успешной инициализации и авторизации чата. detail содержит channel_id, display_mode, button_only. Для button_only это готовность кнопки без загрузки чата.
  • onError(error) — сообщает о первой ошибке запуска экземпляра; ошибки отправки сообщений и переподключения после готовности сюда не поступают.
SenlerWidget.init({
  channel_id: "CHANNEL_ID",
  onReady(detail) {
    console.log("Виджет готов", detail);
  },
  onError(error) {
    console.error(error.code, error.message, error.retryable);
  },
});

error — объект Error с именем SenlerWidgetInitializationError. Код code: invalid_config, iframe_load_failed, startup_failed, authentication_failed, init_failed, init_timeout или protocol_mismatch. retryable показывает, имеет ли смысл повторить запуск без изменения конфигурации. Если результат запуска не получен за 90 секунд, приходит init_timeout; конкретная ошибка может прийти раньше. При некорректной конфигурации init также синхронно выбрасывает ту же ошибку.

При прямом вызове init существующие повторы загрузки продолжаются после onError: если запуск восстановится, следом придёт onReady. Каждый callback вызывается не более одного раза на экземпляр. После destroy() или замены экземпляра через init его отложенные callbacks подавляются. Исключение внутри callback не прерывает работу виджета.

В SDK createSenlerWidgetSession(...).ready ждёт готовности чата. При первой ошибке Promise отклоняется и экземпляр освобождается; для повтора создайте новую сессию или измените retryKey в React. Уничтожение ожидающей сессии отклоняет Promise с AbortError. Ошибка загрузки самого скрипта отклоняет Promise загрузчика/сессии до вызова init.

Кнопки customActions обрабатываются через handler каждого действия, а не через общий callback.

События страницы

Событие windowКогда приходит
senler-widget:collapse-requestПользователь нажал кнопку сворачивания.
senler-widget:mobile-edge-swipeПользователь сделал разрешённый свайп от левого края.
senler-widget:credit-purchase-requestedПользователь запросил покупку дополнительных кредитов; в detail находятся channel_id и lead_id.
senler-widget:runtime-message-resultRuntime-сообщение принято, завершено или завершилось ошибкой.
senler-widget:stageИзменился диагностический этап загрузки, соединения, отправки, истории или файла. Используйте для наблюдаемости, не для бизнес-логики.

У senler-widget:stage в detail всегда есть area, phase и timestamp; дополнительно могут прийти attempt, duration_ms и итог result: "success" | "error" | "timeout".

areaВозможные phase
loaderinstance-created, iframe-created, iframe-loading, iframe-loaded, app-mounted, ready-timeout, error
bootstraploading, success, error, timeout, interactive
dialogsidle, loading, refetching, success, empty, error
historyidle, loading, refetching, loading-more, success, empty, error
realtimedisabled, token-loading, connecting, connected, reconnecting, disconnected, error
messageoptimistic, sending, queued, sent, failed, waiting, typing, streaming, done, error
uploadrequesting-url, uploading, confirming, ready, error

Это диагностический поток, а не конечный автомат бизнес-процесса. Набор этапов может расширяться, а отдельные фазы — повторяться или пропускаться, поэтому бизнес-сценарий не должен зависеть от их конкретной последовательности.

Обработку крестика и свайпа смотрите во встраивании в контейнер, а статусы отправки — в отправке сообщений с сайта.