Функция
Нода Функция выполняет пользовательскую 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_id | ID проекта |
context.execution_id | ID текущего запуска |
context.user_id | ID пользователя |
context.thread_id | ID потока |
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 результата и будут видны на технической шкале выполнения.