N8n Supabase Node: Полное руководство по интеграции и автоматизации
N8n Supabase Node — это специализированный узел в платформе автоматизации рабочих процессов n8n, предназначенный для прямого взаимодействия с базой данных и сервисами Supabase. Он позволяет выполнять операции Create, Read, Update, Delete (CRUD), вызывать функции PostgreSQL, управлять файлами в хранилище и работать с аутентификацией, не прибегая к написанию пользовательского кода. Этот узел выступает в роли моста между визуальным редактором рабочих процессов n8n и мощной бэкенд-инфраструктурой Supabase.
Архитектура и принцип работы узла
Узел Supabase в n8n реализован как узел с учетными данными (Credentialed Node). Это означает, что для его работы необходимо сначала создать и сохранить набор учетных данных (Credentials), который затем можно повторно использовать в различных рабочих процессах. Подключение осуществляется через RESTful API Supabase, используя Project URL и Service Role Key (или анонимный ключ для публичных операций). Узел поддерживает динамические операции, что позволяет выбирать тип действия (операцию) в процессе конфигурации, изменяя набор доступных полей для ввода параметров.
Основной принцип работы заключается в преобразовании настроек, заданных пользователем в интерфейсе узла, в корректный HTTP-запрос к соответствующему эндпоинту API Supabase. Узел обрабатывает ответ, преобразует его в формат, понятный n8n, и передает данные на выход для использования в последующих узлах рабочего процесса.
Типы операций, поддерживаемые узлом Supabase
Узел Supabase в n8n предлагает широкий спектр операций, сгруппированных по категориям. Выбор операции определяет, какие поля и параметры будут доступны для настройки.
Операции с таблицами базы данных (Database)
- Create: Вставка одной или нескольких записей в указанную таблицу. Поддерживает операцию вставки нескольких строк за один запрос.
- Delete: Удаление записей. Требует указания условий (where clause) для выбора удаляемых строк. Без условия операция не выполняется в целях безопасности.
- Get: Получение одной записи по ее первичному ключу (ID).
- Get Many: Получение множества записей с поддержкой фильтрации, сортировки, пагинации и ограничения количества возвращаемых строк. Использует мощный синтаксис фильтров Supabase (eq, gt, like, in и т.д.).
- Update: Модификация существующих записей. Как и для Delete, требует обязательного условия Where.
- Upload a File: Загрузка файла в указанный бакет (bucket). Файл может поступать из предыдущего узла n8n (например, Read Binary File, URL, или вложения email).
- Delete a File: Удаление файла по его пути в бакете.
- Get a File: Скачивание файла. Результат может быть передан в следующий узел для дальнейшей обработки или сохранения.
- Get Many Files: Получение списка файлов в указанном бакете, с опциональным ограничением по префиксу пути.
- Invoke a Function: Вызов PostgreSQL функции, развернутой в Supabase. Позволяет передавать аргументы в формате JSON и получать результат ее выполнения. Это ключевая операция для выполнения сложной бизнес-логики, которая реализована на уровне базы данных.
- Column: status, Operator: equals, Value: active, Condition: AND
- Column: created_at, Operator: greater than, Value: 2024-01-01, Condition: OR
- Column: email, Operator: equals, Value: admin@example.com
- Узел Webhook (n8n): Принимает HTTP-запрос с данными формы (имя, email, сообщение).
- Узел Supabase (Операция: Create): Вставляет данные из выходного JSON Webhook в таблицу `leads`. Используются выражения вида `{{ $json.body.name }}`.
- Узел Slack (n8n): Отправляет сообщение в заданный канал, используя ID новой записи из Supabase (`{{ $json.id }}`) и другие данные.
- Узел Schedule (n8n): Триггерит рабочий процесс каждый день в 9:00.
- Узел Supabase (Операция: Invoke a Function): Вызывает PostgreSQL функцию `get_yesterday_sales()`, которая возвращает сводные данные.
- Узел Code (n8n): Преобразует полученный JSON в строку формата CSV.
- Узел Supabase (Операция: Upload a File): Загружает сформированный CSV-файл в бакет Storage `reports` с именем, содержащим текущую дату.
- Триггер от Supabase (через вебхук) или n8n Schedule, проверяющий бакет через Get Many Files.
- Узел Supabase (Операция: Get a File): Скачивает новый файл.
- Узел Image (n8n): Изменяет размер изображения, создавая миниатюру.
- Узел Supabase (Операция: Upload a File): Загружает миниатюру в бакет `thumbnails`.
- Узел Supabase (Операция: Create): Создает запись в таблице `assets` с путями к оригиналу и миниатюре.
- Project URL: Ваш URL проекта Supabase (например, https://xyzcompany.supabase.co).
- Service Role Key: Секретный ключ, который можно найти в настройках проекта Supabase: Settings > API. Используйте его для операций с полными правами.
- В конфигурации узла для операций Delete и Update задано хотя бы одно условие фильтрации.
- Используемый API-ключ (Service Role) имеет достаточные права, либо условие соответствует политикам RLS, если используется публичный ключ.
- Проверьте логи Supabase в разделе «Database > Logs» для детального анализа запроса.
- Limit: Максимальное количество строк в одном ответе (макс. 1000 по умолчанию в Supabase).
- Offset: Количество строк, которые нужно пропустить.
- В n8n создайте рабочий процесс, начинающийся с узла Webhook. Скопируйте его публичный URL.
- В Supabase создайте новую функцию PostgreSQL или настройте триггер, который при наступлении события (INSERT, UPDATE) будет выполнять HTTP-запрос (с помощью `pg_networking` или `http` расширения) на URL вебхука n8n, передавая данные в теле запроса.
- Рабочий процесс n8n получит данные и сможет их обработать.
Операции с хранилищем файлов (Storage)
Операции с функциями PostgreSQL (Edge Functions)
Детальная настройка параметров и фильтрация данных
Для операций с данными, особенно для Get Many, Update и Delete, критически важна настройка фильтров (Where Clause). N8n предоставляет гибкий интерфейс для построения запросов.
| Поле | Описание | Пример значения | Соответствующий оператор Supabase |
|---|---|---|---|
| Column | Имя столбца таблицы, к которому применяется условие. | email, created_at, status | — |
| Operator | Оператор сравнения или логический оператор. | equals (eq), greater than (gt), like, in | .eq(), .gt(), .like(), .in() |
| Value | Значение для сравнения. Может быть выражением n8n. | user@mail.com, {{ $json.timestamp }}, [«active», «pending»] | — |
| Condition | Логическая связка с предыдущим условием (AND/OR). | AND, OR | .or() |
Пример построения сложного фильтра: Получить всех пользователей с статусом «active», зарегистрированных после 1 января 2024 года, или пользователей с определенным email. В интерфейсе это будет выглядеть как набор условий:
Интеграция в рабочие процессы n8n: Практические примеры
Пример 1: Автоматическая синхронизация данных из формы в базу и отправка уведомления
Цель: При получении данных из веб-формы (через узел Webhook) создать запись в таблице `leads` Supabase, после чего отправить детали в Slack.
Пример 2: Ежедневный отчет на основе данных из базы
Цель: Каждый день в 9:00 получать агрегированные данные о продажах за предыдущий день и формировать CSV-файл.
Пример 3: Обработка файлов и обновление записей
Цель: При загрузке изображения в бакет `uploads` создать запись в таблице `assets` и сгенерировать миниатюру.
Управление ошибками и отладка
При работе с Supabase Node в n8n важно корректно обрабатывать ошибки API. Узел имеет два выхода: первый (Output) для успешного выполнения, второй (Error) для обработки сбоев. Рекомендуется всегда подключать узел Error Trigger или отправлять уведомления об ошибках (например, через Email или Telegram) для мониторинга.
Для отладки используйте встроенный режим выполнения (Execute Node) в редакторе n8n. Он позволяет просмотреть точные данные, отправляемые на вход узла, сформированный запрос к Supabase и полный ответ API, включая коды статусов и тела ошибок. Частые ошибки: неверный API-ключ, отсутствие прав RLS (Row Level Security), синтаксические ошибки в фильтрах или несуществующие имена таблиц/столбцов.
Безопасность и Row Level Security (RLS)
Supabase использует механизм Row Level Security (RLS) для контроля доступа к данным на уровне строк. При использовании Service Role Key в учетных данных n8n, запросы выполняются в обход политик RLS, что дает полный доступ ко всем данным. Это подходит для внутренней автоматизации, но требует строгого контроля за доступом к самому рабочему процессу n8n.
Для сценариев, где автоматизация должна соблюдать пользовательские права доступа, можно использовать анонимный ключ или динамически генерировать JWT-токен пользователя в рабочем процессе (через узел HTTP Request для аутентификации) и передавать его в узел Supabase. Однако, стандартный узел Supabase в n8n не поддерживает передачу кастомных заголовков авторизации напрямую, что может потребовать использования общего узла HTTP Request для таких сложных сценариев.
Ответы на часто задаваемые вопросы (FAQ)
Как добавить учетные данные Supabase в n8n?
В редакторе рабочего процесса нажмите на узел Supabase. В панели свойств узла найдите раздел «Credentials». Нажмите «Create New». Выберите тип «Supabase API». В открывшейся форме укажите:
Сохраните учетные данные. Теперь их можно выбирать для любого узла Supabase в этом и других рабочих процессах.
Чем отличается Service Role Key от анонимного (public) ключа?
| Ключ | Уровень доступа | Обход RLS | Рекомендуемое использование |
|---|---|---|---|
| Service Role Key | Полные права администратора (как суперпользователь PostgreSQL). | Да, полностью игнорирует политики RLS. | Внутренняя автоматизация, бэкенд-процессы, управление данными без ограничений. |
| Анонимный (public) Key | Ограничен политиками Row Level Security (RLS), определенными для роли `anon`. | Нет, строго соблюдает RLS. | Публичные операции, когда рабочий процесс должен имитировать права неавторизованного пользователя. |
Как выполнить сложный запрос с JOIN или агрегатными функциями?
Стандартные операции узла Supabase (Get Many, Create и т.д.) работают с одной таблицей. Для выполнения сложных запросов, включающих JOIN, GROUP BY или пользовательскую агрегацию, используйте операцию Invoke a Function. Предварительно необходимо создать и развернуть в Supabase PostgreSQL функцию, которая будет выполнять нужный SQL-запрос и возвращать результат. Затем вызовите эту функцию через узел n8n, передав при необходимости аргументы.
Почему операция Delete или Update не выполняется и не возвращает ошибки?
Наиболее вероятная причина — отсутствие условия (Where Clause) или слишком широкое условие, которое блокируется политиками Row Level Security (RLS). Убедитесь, что:
Как обрабатывать пагинацию при выборке большого количества записей (Get Many)?
Операция Get Many имеет встроенные параметры пагинации:
Для автоматической обработки большого набора данных используйте комбинацию узла Supabase и цикла (Loop Node) в n8n. На первой итерации запрашивайте данные с Limit и Offset = 0. Обработав данные, увеличивайте Offset на значение Limit и повторяйте операцию, пока количество возвращенных записей не станет меньше Limit (что означает достижение конца выборки).
Можно ли использовать узел для работы с аутентификацией Supabase (регистрация, вход пользователей)?
Нет, текущая реализация стандартного узла Supabase в n8n не включает операции с Auth API (signUp, signIn, signOut). Для работы с аутентификацией пользователей необходимо использовать общий узел HTTP Request в n8n, чтобы отправлять POST-запросы на эндпоинты Supabase Auth (например, `auth/v1/signup` или `auth/v1/token`), корректно формируя заголовки и тело запроса.
Как организовать триггер (вебхук) от Supabase на запуск рабочего процесса n8n?
Supabase позволяет настраивать вебхуки на события в базе данных (через функции PostgreSQL или логическую репликацию). Для этого:
Альтернативно, можно использовать встроенные Database Webhooks в Supabase (в разделе Database > Webhooks), но их функциональность может быть ограничена.
Комментарии