enВойти в Senler

Форма настройки шага

Подключите собственную форму настройки шага через Senler Bridge.

Сначала создайте шаг и выберите режим со встроенной страницей.

Настройте встроенную страницу, если она нужна

Если вы выбрали «Конструктор настроек», собственная форма не нужна. Перейдите к обработке webhook.

В режимах «Встроенная страница в панели» и «Встроенная страница во всплывающем окне» кабинет открывает URL страницы с bootstrap-параметрами версии 2 (senler_mode=automation_step_configurator, тема и язык) и подключает Senler Bridge.

В context.launch приходят тип automation_step_configurator, идентификаторы приложения, проекта, установки, автоматизации и узла, данные шага (id, name, continuation_mode), сохранённый объект configuration и текущие ветки. Зарегистрируйте обработчик сохранения:

import { createSenlerBridgeClient } from "@senlerio/bridge";

const allowedParentOrigins = new Set(["https://senler.io", "https://aibot.local"]);
const parentOrigin = new URL(document.referrer).origin;
if (!allowedParentOrigins.has(parentOrigin)) {
  throw new Error("Unknown Senler parent origin");
}

const bridge = createSenlerBridgeClient({ parentOrigin });
const context = await bridge.connect();

if (context.launch.type !== "automation_step_configurator") {
  throw new Error("Expected automation step configurator launch");
}

const savedConfiguration = context.launch.configuration;

const currentBranchIds = new Map(
  context.launch.branches.map((branch) => [branch.key, branch.branch_id]),
);
const branchId = (key) => currentBranchIds.get(key) ?? crypto.randomUUID();

const unsubscribeSubmit = bridge.onAutomationStepConfiguratorSubmit(
  async () => ({
    kind: "automation_step_configurator",
    configuration: {
      ...savedConfiguration,
      pipeline_id: "sales",
    },
    branches: [
      { branch_id: branchId("created"), key: "created", title: "Сделка создана" },
      { branch_id: branchId("skipped"), key: "skipped", title: "Создание пропущено" },
    ],
  }),
);

Синхронизация высоты включена в createSenlerBridgeClient по умолчанию. Кабинет использует её для режима «Встроенная страница в панели»; во всплывающем окне высота управляется самим окном. Отключайте syncFrameSize только для формы с намеренно фиксированной высотой: createSenlerBridgeClient({ parentOrigin, syncFrameSize: false }).

Сохранение данных формы

configuration сохраняется в узле и передаётся webhook при каждом выполнении. Помимо данных приложения, при открытии формы в нём есть четыре служебных поля: _senler_parameters и _senler_result_fields описывают объявленный контракт, а _senler_parameter_values и _senler_result_bindings содержат текущие значения параметров и привязки результатов к переменным процесса. Покажите их пользователю в своей форме и верните обновлённые _senler_parameter_values и _senler_result_bindings вместе с остальной конфигурацией. Senler сохранит только значения объявленных полей и передаст их webhook отдельно в parameters; служебные ключи в webhook-конфигурацию не попадут.

Для «Веток после настройки» верните хотя бы одну ветку с постоянными branch_id и key. При повторном открытии используйте context.launch.configuration и context.launch.branches, чтобы не терять сохранённые значения и связи на схеме.

Если обработчик выбросит ошибку или вернёт данные неправильной формы, кабинет не сохранит конфигурацию. При размонтировании страницы вызовите unsubscribeSubmit() и bridge.destroy().