Управляемые серверные функции
Как безопасно обращаться к внешним API с приватными ключами через backend Vixy.
Для чего нужны функции
Управляемая функция — декларативное описание HTTPS-запроса, который выполняется на сервере Vixy. Приватный ключ не попадает в браузер посетителя или исходный код сайта.
Функция хранится в проекте как _functions/<name>.json, а frontend вызывает её через:
const result = await vixy.functions.invoke("function-name", input);
AI может создать декларацию по обычному запросу, например: Подключи отправку заявки в API моей CRM. Для этого потребуется описание метода API, URL и названия полей. Сам секрет добавляется пользователем отдельно в «Данные → Секреты».
Что разрешено
Функция может описывать URL, HTTP-метод, заголовки, тело запроса и подстановки из входных данных и секретов. Vixy предоставляет серверную подстановку ключей, Basic Auth, таймауты и защиту от SSRF.
Пример структуры:
{
"name": "send-to-crm",
"method": "POST",
"url": "https://api.example.com/leads",
"headers": {
"Authorization": "Bearer {{secret.CRM_API_TOKEN}}"
},
"body": {
"name": "{{input.name}}",
"phone": "{{input.phone}}"
}
}
Перед сохранением Vixy проверяет схему, адрес назначения и допустимые подстановки.
Когда их использовать
Управляемые функции подходят для редких внешних API, которых пока нет в каталоге интеграций. Для ЮKassa и Telegram используйте готовые подключения в «Данные → Интеграции».
Хорошие сценарии: отправка лида в CRM, создание задачи, запрос статуса доставки или обращение к закрытому корпоративному API по HTTPS.
Ограничения
Это не среда выполнения произвольного Node.js-кода. Нельзя загружать серверные пакеты, запускать процессы, обращаться к файловой системе сервера или создавать собственный Express-сервер.
Также запрещены локальные и служебные адреса, произвольные перенаправления на внутреннюю сеть и выполнение JavaScript из ответа. Функция должна иметь ограниченный, понятный контракт. Для сложной бизнес-логики, очередей и длительных фоновых задач потребуется отдельный backend.
Диагностика
Если вызов завершился ошибкой, проверьте имя функции, обязательные входные поля, наличие секретов и доступность внешнего API. Не выводите полный токен в сообщения об ошибке. Сначала протестируйте минимальный запрос, затем добавляйте дополнительные поля.