Перейти к основному содержимому

Функция

Нода Функция выполняет пользовательскую JavaScript-функцию через изолированный сервис js-executor. Это основной способ добавить произвольную логику в рабочий процесс: трансформация данных, вычисления, вызовы внешних API, работа с памятью.

Назначение

  • Трансформация и обработка данных между нодами
  • Вызов внешних API через axios
  • Фильтрация, сортировка и агрегация массивов
  • Работа с датой и временем
  • Чтение и запись в память рабочего процесса

Настройки

Выбор функции

Из выпадающего списка выберите ранее созданную функцию. Список показывает все функции, доступные в текущем проекте.

Если нужной функции нет, нажмите ссылку + Создать новую функцию внизу панели -- откроется редактор функций в новой вкладке.

Карточка выбранной функции

После выбора функции отображается карточка с:

  • Имя -- название функции
  • Описание -- если задано при создании
  • Тайм-аут -- время выполнения в секундах
  • Код -- раскрывающийся блок с исходным кодом функции

Ссылка Редактировать открывает функцию в редакторе кода.

Контекст выполнения

Функция получает объект context со следующими полями:

ПолеОписание
context.inputВходные данные текущей ноды
context.lastOutputРезультат предыдущей ноды
context.stateВсе переменные рабочего процесса
context.nodeOutputsВыходы всех выполненных нод (по ID ноды)
context.memoryДанные из памяти (user, project, thread, organization)
context.memoryOpsМассив для записи операций с памятью
context.project_idID проекта
context.execution_idID текущего запуска
context.user_idID пользователя
context.thread_idID потока
context.metaМетаданные выполнения (startedAt, currentNode, executionCount)

Доступные библиотеки

  • axios -- HTTP-запросы
  • moment -- работа с датой и временем

Работа с памятью

Для чтения памяти используйте context.memory:

const userName = context.memory.user.name;
const projectSettings = context.memory.project.settings;

Для записи в память добавляйте операции в context.memoryOps:

context.memoryOps.push({
action: 'set',
scope: 'user', // user, project, thread, organization
key: 'last_query',
value: context.input
});

Входные данные

Нода получает данные от предыдущей ноды через context.input.

Выходные данные

Результат в формате:

{
"__success": true,
"__error": false,
"result": "значение, возвращенное функцией",
"data": "алиас для result",
"logs": ["записи console.log"],
"events": [],
"facts": {}
}

При ошибке:

{
"__success": false,
"__error": true,
"error": "описание ошибки",
"errorType": "ExecutionError",
"logs": [],
"input": "исходные входные данные"
}

Подключения

  • Вход: один вход (слева)
  • Выход «Успех»: зеленая точка -- функция выполнена успешно
  • Выход «Ошибка»: красная точка -- функция завершилась с ошибкой

Это позволяет строить разные ветки обработки для успешного и неуспешного сценариев.

Примеры использования

Трансформация данных

// Извлечь имена из массива объектов
const items = context.input.results || [];
return items.map(item => item.name);

HTTP-запрос через axios

const response = await axios.get('https://api.example.com/data', {
params: { query: context.input }
});
return response.data;

Форматирование даты

const date = moment(context.input.date);
return {
formatted: date.format('DD MMMM YYYY'),
relative: date.fromNow(),
isToday: date.isSame(moment(), 'day')
};

Сохранение в память

// Сохранить результат анализа в память потока
context.memoryOps.push({
action: 'set',
scope: 'thread',
key: 'analysis_result',
value: context.lastOutput
});
return context.lastOutput;
Тайм-аут выполнения

Каждая функция имеет настроенный тайм-аут. Если функция не завершится за это время, она будет принудительно остановлена с ошибкой. Значение тайм-аута настраивается в редакторе функций.

Отладка функций

Используйте console.log() внутри функции -- все записи отобразятся в поле logs результата и будут видны на технической шкале выполнения.