Методы Public API виджета
Когда нужен Public API
Обычное подключение и настройка канала выполняются по инструкции «Виджет на сайте». Public API нужен после установки кода, если сайт должен сам открывать чат, менять контекст, выбирать диалог, отправлять подготовленный вопрос или реагировать на события виджета.
Отдельно включать Public API в кабинете не нужно: методы появляются в window.SenlerWidget после загрузки кода канала. Настройки, для которых нужен интерфейс кабинета, показаны со скриншотами в связанной инструкции; на этой странице приведены только действия, выполняемые из кода сайта.
Инициализация
Примеры рассчитаны на SDK v3. На основном сервере используйте загрузчик https://widget.senler.io/v3/widget-loader.js; для локального или тестового окружения — его адрес /v3/widget-loader.js. Загрузчик и iframe должны поддерживать протокол 10, а API — v3.
Для обычного JavaScript достаточно подключить загрузчик через <script>: он предоставляет window.SenlerWidget, установка пакета не требуется. Для импортов TypeScript или React установите стабильный пакет @senlerio/widget@3.0.0. Оба способа используют тот же API виджета. Установка пакета не обновляет серверы.
Создайте канал по инструкции со скриншотами, затем скопируйте скрипт-загрузчик и channel_id из раздела «Код для встраивания». На одной странице один раз вызовите SenlerWidget.init(config):
<script src="URL_ИЗ_ГОТОВОГО_КОДА" crossorigin="anonymous"></script>
<script>
SenlerWidget.init({
channel_id: "xxx",
});
</script>
Замените оба плейсхолдера значениями из кабинета; не подставляйте адрес скрипта-загрузчика из примера другого проекта или окружения. Параметры init, режимы размещения, пользователь и тема описаны в «Параметрах инициализации». Инициализация создаёт один экземпляр. Успешный повторный init заменяет текущий экземпляр новым, поэтому после запуска управляйте им методами SenlerWidget, не пересоздавая iframe и не теряя состояние диалога.
Методы
| Метод | Возвращает | Результат |
|---|---|---|
SenlerWidget.open() | undefined | Показывает виджет без отправки сообщения или изменения настроек. |
SenlerWidget.close() | undefined | Скрывает виджет, сохраняя iframe и состояние диалога. |
SenlerWidget.toggle() | undefined | Переключает видимость. |
SenlerWidget.isOpen() | boolean | Показывает, открыт ли виджет. |
SenlerWidget.selectDialog(dialogId) | undefined | Выбирает существующий диалог без отправки сообщения и без автоматического открытия скрытого виджета. |
SenlerWidget.setPageContext(items) | undefined | Заменяет постоянный контекст страницы. |
SenlerWidget.configure(settings) | undefined | Меняет настройки текущего экземпляра, не сохраняя их в настройках канала. |
SenlerWidget.refreshRuntime() | undefined | Повторно вычисляет настройки через resolveRuntime, например после перехода на другую страницу сайта. Пример. |
SenlerWidget.createTextEdit(config) | контроллер | Запрашивает и применяет правки текста после подтверждения. |
SenlerWidget.create(config) | экземпляр | Создаёт независимый виджет; несколько embedded-экземпляров требуют разных контейнеров. |
SenlerWidget.uploadFile(file, options) | Promise вложения | Загружает файл в указанный диалог, не отправляя сообщение. |
SenlerWidget.updateLead(profile) | Promise | Сохраняет контактные данные текущего лида без повторной инициализации. |
SenlerWidget.setDraft(options) | Promise | Заполняет поле ввода без отправки; по умолчанию защищает уже введённый текст. |
SenlerWidget.resetSession() | Promise | Очищает авторизацию и уничтожает экземпляр, сохраняя историю на сервере. |
SenlerWidget.ask(options) | Promise результата | Отправляет вопрос и возвращает ответы и статусы. |
SenlerWidget.getOrCreateDialog(options) | Promise диалога | Находит или создаёт диалог посетителя по ref. |
SenlerWidget.startNewDialog(options?) | Promise ID | Создаёт и выбирает пустой диалог без сообщения. |
SenlerWidget.setContext(context) | undefined | Заменяет JSON-контекст сайта; каждый ask получает его снимок. |
SenlerWidget.setAnalytics(analytics) | Promise | Передаёт идентификаторы аналитики и данные визита. |
SenlerWidget.registerAction(name, definition) | функция удаления | Добавляет действие сайта без замены остальных. |
SenlerWidget.on(event, handler) | функция отписки | Подписывает на события экземпляра. |
SenlerWidget.destroy() | undefined | Полностью удаляет iframe, кнопку и обработчики. Переданный сайтом embedded-контейнер остаётся на странице. |
Для обычного скрытия используйте close(), а не destroy(). После close() достаточно вызвать open(); после destroy() нужен новый SenlerWidget.init(...).
До готовности экземпляра isOpen() возвращает false. В режимах button_only и headless методы открытия и закрытия ничего не показывают; подробности приведены в настройках.
После загрузки скрипта-загрузчика в SenlerWidget.runtimeProtocolVersion доступен номер текущего протокола (number). Это диагностическое значение для проверки совместимости; не связывайте с конкретным номером бизнес-логику сайта.
Данные для собственного чата
Эти методы доступны у готового экземпляра с обычным интерфейсом и с headless: true. В таблице options означает объект параметров; ? обозначает необязательное поле. Последовательный пример показывает выбор диалога, историю, отправку и подписку.
| Метод | Возвращает | Параметры и результат |
|---|---|---|
SenlerWidget.getSettings(options?) | Promise настроек | Функции чата, доступность агента и кредитов, приветствие и начальные вопросы. |
SenlerWidget.getDialogs(options?) | Promise страницы | limit?, before?, query?, offset?: список видимых диалогов посетителя. |
SenlerWidget.getMessages(options) | Promise страницы | dialogId, limit?, before? или after?: сообщения от старых к новым. |
SenlerWidget.getDialogState(options) | Promise состояния | dialogId, ref?: непрочитанные, набор ответа, очередь вопросов и причина паузы. |
SenlerWidget.getWelcome(options?) | Promise приветствия | Предпросмотр приветствия без создания диалога. |
SenlerWidget.subscribeDialog(options) | функция отписки | dialogId, ref?, limit?, onUpdate, onError: начальная история и дальнейшие изменения диалога. |
SenlerWidget.markRead(options) | Promise<void> | dialogId: отмечает текущие сообщения прочитанными, когда сайт действительно показывает их посетителю. |
SenlerWidget.setTyping(options) | Promise<void> | dialogId, typing: начало или окончание набора сообщения. |
SenlerWidget.clickButton(options) | Promise<void> | dialogId, eventId, button, pollSelectedInstanceIds?: выполняет действие возвращённой сервером кнопки. |
SenlerWidget.updateQueuedQuestion(options) | Promise<void> | dialogId, questionId, revision, text: изменяет ожидающий вопрос с проверкой его версии. |
SenlerWidget.cancelQueuedQuestion(options) | Promise<void> | dialogId, questionId: удаляет ещё не отправленный вопрос из очереди. |
SenlerWidget.sendQueuedQuestion(options) | Promise<void> | dialogId, questionId: выполняет команду «Отправить сейчас» для вопроса в очереди. |
SenlerWidget.getScheduledActions(options) | Promise страницы | dialogId, cursor?: доступные посетителю отложенные действия. |
SenlerWidget.cancelScheduledAction(options) | Promise<void> | dialogId, actionId: отменяет ожидающее отложенное действие, если сервер разрешает отмену. |
Все методы этой таблицы принимают signal для отмены ожидания и timeoutMs: по умолчанию 30 000 мс, максимум 300 000 мс. Для subscribeDialog тайм-аут действует до начальной синхронизации; далее подписка работает до отписки, отмены, сброса сессии или уничтожения экземпляра. Остановка ожидания не гарантирует отмену уже принятого сервером действия. Тайм-аут ожидания ответов ask описан отдельно.
Настройки и события
- Изменение настроек во время работы: параметры
configure. - События виджета: готовность, ошибки и обратные вызовы.
- Отправка сообщений с сайта: подготовка текста, отправка и получение статуса результата.
- Собственный интерфейс чата: режим
headless, страницы истории, потоковая выдача и очередь. - Встраивание в контейнер: сворачивание чата и обработка мобильного жеста.
Связанные страницы
-
Параметры инициализации — режим размещения, пользователь, тема и функции.
-
Контекст страницы — постоянные и одноразовые данные сообщения.
-
Custom actions — действия сайта через кнопки или вызовы агента с возвратом результата.
-
Inline-правки — AI-правка текста с preview.
-
TypeScript и React: Используйте официальные типы виджета, React-компонент и хуки из пакета
@senlerio/widget. -
Пополнение лимита посетителя: Свяжите запрос на пополнение кредитов из виджета с оплатой на вашем сайте.
-
Виджет во встроенной странице: Свяжите действия виджета со встроенной страницей приложения, чтобы помощник мог находить нужные элементы.