Все ноды/Integrations/Widget

Функция виджета

Вызывает JS-функцию, объявленную в коде встраивания виджета (iternaWidget.defineFunction). Отправляет сигнал в браузер посетителя, ждёт результат (по умолчанию 30 с) и передаёт его на выход. Работает только в режиме виджета; при таймауте/закрытой вкладке — ошибка (on_error).

Функция виджета▶
ВходЗначение

Тип в графе: widget_function

Exec

Можно включить выход ошибки и обработать сбой отдельным путём.

Порты можно разделить на исполнение и данные (split ports).

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

Минимальный рабочий сценарий

Вход
Функция виджета▶
Выход▶
  • Исполнение + данные
Нажмите «Скопировать ноды», откройте редактор и нажмите Ctrl+V на холсте.

Запускается сразу

Как применять

Нода вызывает JS-функцию на странице, где стоит виджет: узнать состав корзины, прочитать поля формы, подсветить элемент, открыть модальное окно. Берите её, когда вызов должен происходить всегда и ровно в этом месте графа. Если решать должна модель — ставьте Widget tools: та же связь с браузером, но функции отдаются агенту как инструменты. Code (JavaScript) к странице посетителя отношения не имеет — этот код исполняется на сервере в изолированной среде.

Как это работает

Функция должна быть объявлена в коде встраивания виджета через iternaWidget.defineFunction (см. Встраиваемый виджет). Платформа не знает списка объявленных имён во время проектирования, поэтому Имя функции сверяется побайтово уже на запуске: опечатка, другой регистр или лишний пробел уедут в браузер как неизвестная функция.

На исполнении нода отправляет запрос в браузер посетителя по уже открытому соединению чата и ждёт ответ — до значения Таймаут (секунды) (от 1 до 300, по умолчанию 30). Что вернул обработчик, то и уходит на выход.

Поле Аргументы (JSON / шаблон) перекрывает порт Вход: пустое поле — аргументами станет значение, пришедшее на порт; непустое — оно рендерится как шаблон и разбирается как JSON. Целиком шаблонное значение ({{ nodes.<id>.output }}) передаётся как объект, а не как строка; если разобрать JSON не удалось, отправится текст как есть.

Частые ошибки

  • Запуск не из виджета. В тестовой панели редактора, в чате и в Telegram отвечать некому — нода падает сразу с явным сообщением. Проверять её нужно на странице с установленным виджетом.
  • Закрытая вкладка. Ответа не будет, и нода честно выждет весь таймаут.
  • Выход ошибок выключен. Переключатель «Вывод ошибок» по умолчанию выключен, а без проведённой ветки Ошибка отказ функции обрывает весь запуск.
  • Тяжёлый обработчик. Поднимайте таймаут (до 300 с), но помните, что общие ограничения запуска никуда не деваются.
  • Крупные аргументы. Сериализованные аргументы ограничены 256 КБ — передавайте идентификатор, а не весь массив данных.

Входы

ПортПроводДанныеПримечания
ВходinputИсполнение + данныеexecute_data—

Запускает шаг; принесённое значение используется как аргументы, если они не заданы.

Выходы

ПортПроводДанныеПримечания
ЗначениеoutputИсполнение + данныеexecute_dataany

Настройки

ПолеТипПо умолчаниюОписание
Имя функцииfunction_namestring""

Имя (`name`), которое ваш сайт передал в iternaWidget.defineFunction({ name, handler, … }) в коде встраивания. Платформа не видит список объявленных имён заранее, поэтому сверка идёт побайтово: опечатка, другой регистр или лишний пробел доедут до браузера как неизвестная функция, и нода упадёт.

Аргументы (JSON / шаблон)argumentsstring""

Аргументы, передаваемые функции как объект. Поддерживает шаблоны ({{inputs.input}}, {{nodes.x.output}}). Непустое значение ЗАМЕНЯЕТ то, что пришло на порт Input; оставьте пустым, чтобы передать это значение как аргументы.

поддерживает шаблоны

Дополнительно
Таймаут (секунды)timeout_secondsinteger30

Сколько ждать результат от браузера до ошибки.

Общие поля

Эти три поля есть у каждой ноды: платформа добавляет их сама, а не автор ноды.

  • expose_error_output — Если включено, показывает выход выполнения для подключения нод, которые запускаются при сбое этой ноды.
  • split_ports_in — Показывать отдельные порты входа для выполнения и данных вместо одного объединённого.
  • split_ports_out — Показывать отдельные порты выхода для выполнения и данных вместо одного объединённого.

Готовые примеры с этой нодой