Виджет во встроенной странице
Свяжите действия виджета со встроенной страницей приложения, чтобы помощник мог находить нужные элементы.
Основной раздел: Public API и события.
Действия во встроенном приложении
Обычным страницам достаточно разметки элементов. Для отдельного приложения со своим протоколом управления можно передать pageElementActions в init. Это локальный адаптер сайта, не инструмент MCP; через updateRuntime он не меняется.
execute(payload)получаетevent_id,attempt_id,action,targetлибоtarget_chainи, для ввода или выбора,value. Цель содержитcontext_id, необязательнуюroleи паруentity_type/entity_idдля конкретной сущности.- Верните
null, если цель не относится к приложению: её обработает загрузчик. Для своей цели верните результат с теми жеevent_id,attempt_id,action, временемexecuted_atи статусомsuccess,not_found,blockedилиfailed. Для отказа добавьтеerror_codeи понятныйerror_message. executeподдерживает Promise и должен завершиться за 2,5 секунды. После исключения, неверного результата или тайм-аута загрузчик сообщает ошибку и не повторяет действие другим способом. Не отбрасывайте ограничения цели: если приложение не умеет выбирать конкретную сущность, вернитеblocked.clear(scope)очищает подсветку адаптера:toolотносится к подсказке агента,selectedк выбранному пользователем элементу,allк обеим. Загрузчик вызывает очистку при новой команде, закрытии подсказки и уничтожении экземпляра.
SenlerWidget.init({
channel_id: "YOUR_CHANNEL_ID",
pageElementActions: {
async execute(payload) {
const target = payload.target ?? payload.target_chain.at(-1);
if (!target?.context_id.startsWith("my-app.")) return null;
return appBridge.execute(payload);
},
clear(scope) {
appBridge.clearHighlights(scope);
},
},
});
appBridge реализует разработчик приложения; это не метод Senler. Его execute должен сохранить полную цель и вернуть результат описанного выше формата. Не подключайте рядом второй слушатель PAGE_ELEMENT_ACTION: загрузчик уже принимает команду и отправляет результат.
При передаче команды дочерним iframe загрузчик ждёт ответ одного окна, прежде чем обращаться к следующему. Продолжить поиск позволяет только not_found; успех, отказ или ошибка завершают попытку. На поиск в дочерних окнах отводится 2,5 секунды. Если к этому моменту текущий iframe не ответил, возвращается failed с кодом child_frame_action_timeout, без повторного выполнения в другом окне. Тайм-аут не доказывает, что действие не произошло: перед повтором проверьте состояние приложения.
Подготовка страницы к подсветке
Необязательный обработчик pageElementActions.navigate(payload, { element, signal, execute }) позволяет подготовить интерфейс сайта перед действием «Показать на странице»: например, свернуть панель, которая закрывает нужный элемент. Он вызывается только для highlight и scroll_to с user_initiated: true, а не для автоматических команд агента, нажатий или заполнения полей.
element содержит найденный до подготовки элемент либо null. После изменения интерфейса вызовите execute() и верните его результат: загрузчик заново найдёт цель с учётом новой разметки. Повторные вызовы этой функции в рамках одной попытки возвращают тот же Promise и не дублируют действие. Используйте signal, чтобы прекращать подготовку при отмене запроса; не выполняйте подсветку самостоятельно по сохранённому element.