Пользовательские функции
Пользовательские функции — это мощный инструмент для расширения стандартных возможностей платформы. Они позволяют вам писать собственный код на JavaScript или Python для решения уникальных задач: от сложных вычислений до интеграции со сторонними API.
Каждая созданная вами функция становится многоразовым компонентом, который можно использовать в качестве отдельного шага в процессе, в виде инструмента для AI-агента, а также вызывать из кода. Подробнее об этом в разделе Использование функций в процессе.
JavaScript и Python
Вы можете использовать оба языка в одном проекте, с учетом ограничений:
- JavaScript-функции и Python-функции не могут вызывать друг друга.
- Внутри одной пользовательской коллекции все функции должны быть написаны на одном языке.
- Если вам нужен доступ ко всем встроенным коллекциям, используйте JavaScript. В Python пока доступны только
reactionsиcontext. - Если вам необходимы библиотеки из экосистемы Python, выбирайте Python.
Коллекции
Функции группируются в коллекции. При вызове функции в коде необходимо указывать коллекцию:
// Вызов функции myFunction из коллекции MyCollection
MyCollection.myFunction();
Пользовательские функции можно добавить только в пользовательские коллекции. Если в проекте еще нет таких коллекций, потребуется создать коллекцию при добавлении функции. Для JavaScript- и Python-функций требуется создать отдельные коллекции.
Чтобы добавить сразу все функции коллекции на холст, просто перетащите туда коллекцию.
Создание и настройка функции
Создание пользовательской функции включает несколько шагов:
- Добавление функции.
- Настройка параметров.
- Написание кода.
- Добавление зависимостей.
- Тестирование в редакторе.
Добавление функции
Добавить функцию можно в левом меню или непосредственно на холсте — эти способы эквивалентны.
- В меню
- На холсте
-
В левом меню выберите , затем нажмите Добавить → функцию.
-
Выберите или создайте коллекцию.
Для новой коллекции заполните поля:
- Название коллекции для отображения в интерфейсе. Должно быть уникальным среди пользовательских коллекций.
- Идентификатор коллекции для использования в коде. Должен быть уникальным в рамках проекта и не может совпадать со встроенными коллекциями.
- Язык — JavaScript (по умолчанию) или Python. Язык фиксируется для всей коллекции.
- Описание для отображения на странице Функции.
-
Для новой функции заполните поля:
- Название функции для отображения в интерфейсе.
- Идентификатор функции для использования в коде.
- Описание — особенно важно, если функция будет использоваться в качестве инструмента для AI-агента. Помогает агенту понять, для чего следует вызывать эту функцию.
-
Нажмите Сохранить. После сохранения откроется окно настроек функции.
-
Чтобы развернуть список блоков, нажмите в левом верхнем углу холста.
-
В списке блоков выберите Функции, затем в разделе Пользовательские нажмите .
-
Выберите или создайте коллекцию.
Для новой коллекции заполните поля:
- Название коллекции для отображения в интерфейсе. Должно быть уникальным среди пользовательских коллекций.
- Идентификатор коллекции для использования в коде. Должен быть уникальным в рамках проекта и не может совпадать со встроенными коллекциями.
- Язык — JavaScript (по умолчанию) или Python. Язык фиксируется для всей коллекции.
- Описание для отображения на странице Функции.
-
Для новой функции заполните поля:
- Название функции для отображения в интерфейсе.
- Идентификатор функции для использования в коде.
- Описание — особенно важно, если функция будет использоваться в качестве инструмента для AI-агента, и помогает агенту понять, для чего следует вызывать эту функцию.
-
Нажмите Сохранить. После сохранения откроется окно настроек функции.
Настройка параметров
Если вы только что создали функцию, редактор параметров откроется автоматически. Чтобы открыть настройки созданной ранее функции, используйте один из способов:
- В меню
- На холсте
- В левом меню выберите
- На странице Функции нажмите .
- Перетащите функцию на холст.
- На холсте дважды нажмите на блок этой функции, чтобы открыть ее настройки.
- Нажмите Посмотреть код.
На вкладке Параметры укажите:
-
Параметры функции:
- Тип параметра. Поддерживаются как простые типы (
string,number,boolean), так и структуры (object,array) до 5 уровней вложенности. - Название для использования в коде.
- Описание — помогает AI-агенту понять, что именно следует передавать в параметре.
подсказкаВы можете загрузить параметры в виде JSON-схемы: нажмите Импортировать и скачайте образец.
- Тип параметра. Поддерживаются как простые типы (
-
Описание ответа: помогает AI-агенту правильно интерпретировать результат работы функции.
Написание кода
На вкладке Код напишите тело функции. Встроенный редактор поддерживает подсветку синтаксиса, автодополнение, подсказки при наведении на функцию и отображение ошибок.
Чтобы быстро добавлять в свой код вызовы функций — как встроенных, так и пользовательских, и MCP, используйте панель функций:
- Чтобы открыть панель и посмотреть доступные функции, нажмите .
- Чтобы вставить вызов функции в код, дважды нажмите на ее название в панели.
- Чтобы посмотреть описание и параметры функции, выберите ее в панели и нажмите .
- JavaScript
- Python
Особенности и рекомендации:
- Все пользовательские функции являются асинхронными (
async). Это позволяет использовать в их кодеawaitдля асинхронных операций, например для выполнения HTTP-запросов с помощьюfetch(). - Не вставляйте учетные данные и другие секреты в код функции.
Добавьте их в хранилище и используйте в коде с помощью встроенной функции
Credentials.get(). Подробнее смотрите в разделе Учетные данные для интеграций.
Особенности:
-
Все пользовательские функции являются асинхронными.
-
Доступна глобальная переменная
sdkи функцииsdk.reactions.*иsdk.context.*. Подробнее смотрите в разделе Встроенные функции. -
При вызове функций
sdk.*параметры передаются в виде Python-словаря, ключи указываются в кавычках:await sdk.reactions.send_text({"text": "Привет!"}) -
Импортировать внешние библиотеки нужно прямо в коде функции.
Пример:
async def get_weather(city):
import requests
response = requests.get(
"https://api.example.com/weather",
params={ "q": city }
)
temp = response.json()["current"]["temp_c"]
await sdk.reactions.send_text({"text": f"Температура: {temp}°C"})
Зависимости
Если для работы вашего кода требуются внешние пакеты npm (например, axios или lodash) или Python (например, requests или pandas), добавьте их на вкладке Зависимости.
Подключение внешних npm-пакетов в JavaScript-коллекциях пока поддерживается только для движка версии 1.
Добавленные пакеты доступны для использования во всех функциях из той же коллекции. Вместе с тем, управление зависимостями выполняется на уровне проекта в целом. В частности, изменение версии пакета автоматически применяется ко всем коллекциям.
Agent Platform использует версию Python 3.12. Библиотеки, которые используют конструкции, удаленные в Python 3.12, могут не работать.
Тестирование функции в редакторе
Редактор позволяет запустить функцию с мок-данными прямо в интерфейсе и сразу увидеть результат, ошибки и логи — без запуска всего процесса на холсте.
Тестирование функции в редакторе доступно только для JavaScript-функций и только в проектах на движке версии 2.
Чтобы запустить тестирование:
-
На вкладке Код нажмите .
-
На вкладке Аргументы укажите входные значения.
-
На вкладке Данные введите JavaScript-код, который создает мок-данные. Этот код будет выполнен перед тестовым запуском функции.
Например, если внутри функции вызывается
Context.getMessageContent().text, добавьте следующий объект:const Context = {
getMessageContent: function() {
return { text: "Тестовое сообщение от пользователя" };
},
};Когда функция вызовет
Context.getMessageContent().text, она получит ответ из мок-данных. -
Включите опцию Запомнить значения для следующих запусков, чтобы аргументы и данные были доступны при следующем открытии редактора.
-
Нажмите Запустить.
После тестирования:
- В панели тестирования появится результат выполнения функции: возвращаемое значение или ошибка.
- В нижней панели на вкладке Логи будут отображаться записи, которые функция вывела через
console.log().