> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jelou.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Supabase

> Consulta y modifica datos, explora tablas y ejecuta funciones RPC de Supabase desde tus flujos en Brain Studio.

**Supabase** es una plataforma backend open-source construida sobre **PostgreSQL** que permite gestionar bases de datos, autenticación y funciones desde una sola interfaz. A diferencia de integraciones con CRMs o ERPs (que trabajan sobre modelos predefinidos), Supabase conecta Brain Studio directamente con **tus propias tablas y funciones**, respetando las políticas de acceso y la lógica que ya definiste en la base.

En **Brain Studio**, la integración permite que tus flujos consulten datos, inserten y actualicen registros, y ejecuten funciones RPC desde la conversación. El control sigue en Supabase: permisos, RLS y lógica centralizada.

## Qué habilita Supabase

Al conectar **Supabase**, puedes:

* **Responder con datos reales de tu base** — consultar tablas con filtros para que el agente no invente ni pida información que ya existe
* **Registrar eventos del negocio en el momento** — insertar filas cuando la conversación genera un lead, pedido, solicitud o cualquier hecho relevante
* **Actualizar estados operativos** — cambiar columnas (estado de pedido, etapa de onboarding, resultado de verificación) según lo que ocurre en el flujo
* **Ejecutar lógica de negocio centralizada** — llamar funciones RPC de PostgreSQL para cálculos, validaciones o transacciones que no deben vivir en el flujo
* **Explorar estructura antes de operar** — listar tablas y revisar columnas para que el agente sepa dónde escribir

***

## Instalación

### Requisitos previos

1. Un **proyecto de Supabase** activo (hosted) con las tablas y funciones que vayas a usar.
2. Los **dos valores** que pide el modal de Brain Studio, coherentes con ese proyecto:
   * **Supabase url**
   * **Api Key**
3. **Políticas RLS (Row Level Security)** y permisos alineados con lo que el flujo debe poder hacer con la clave que configures.

### Cómo obtener credenciales

Para conectar **Supabase** en Brain Studio necesitas dos datos del proyecto:

* **Supabase url** — la URL del proyecto, también mostrada por Supabase como **Project URL**
* **Api Key** — una clave pública de acceso al API del proyecto

En el dashboard de Supabase, abre tu proyecto y ve a **Settings → API** o **API Keys**.

<Steps>
  <Step title="Copia la Supabase url">
    Busca la **Project URL** de tu proyecto (por ejemplo `https://<tu-proyecto>.supabase.co`) y pégala en el campo **Supabase url** de Brain Studio.
  </Step>

  <Step title="Copia la Api Key correcta">
    Usa una clave de **bajo privilegio**, asociada al acceso público del proyecto:

    * **`anon` public key** si tu proyecto usa las claves heredadas
    * **Publishable key** (`sb_publishable_...`) si tu proyecto ya usa el esquema nuevo de claves

    Ese valor va en el campo **Api Key** del modal de instalación.

    <Warning>
      No uses la **`service_role`** ni una **secret key** en esta integración. Esas claves tienen privilegios elevados, pueden saltarse políticas RLS y no deben exponerse en flujos conversacionales.
    </Warning>
  </Step>

  <Step title="Verifica permisos y RLS">
    Antes de conectar en producción, revisa que las **políticas RLS** y permisos del proyecto permitan exactamente las operaciones que tu flujo necesita ejecutar.
  </Step>
</Steps>

<Check>
  Con **Supabase url** y **Api Key** ya puedes completar el modal de conexión de Supabase en Brain Studio.
</Check>

### Cómo conectarla

La forma más directa es usar [**Jelou Agent**](/guides/getting-started/jelou-agent): describe lo que necesitas y el agente conecta **Supabase** automáticamente dentro del flujo.

Si prefieres instalar manualmente, abre el **Marketplace** y sigue estos pasos con la URL y API Key que obtuviste en el paso anterior.

<Steps>
  <Step title="Abrir el Marketplace">
    En Brain Studio, abre **Marketplace** desde el menú lateral.
  </Step>

  <Step title="Buscar Supabase">
    Encuentra la integración y haz clic en **Conectar**.
  </Step>

  <Step title="Completar Supabase url y Api Key">
    Pega la **Supabase url** (Project URL) y la **Api Key** (**anon** o **Publishable**, nunca `service_role` ni secret key para este uso).
  </Step>

  <Step title="Confirmar instalación">
    La integración aparecerá como **conectada**.

    <Check>
      Puedes usarla en **Canvas** o agregarla como herramienta en **AI Agent**.
    </Check>
  </Step>
</Steps>

***

## Tools disponibles

La integración expone **7 tools** en Brain Studio. Los nombres coinciden con los del editor de nodos. Los JSON son **orientativos**: confirma siempre los campos exactos en el panel de la tool.

<AccordionGroup>
  <Accordion title="Listar tablas">
    Enumera las tablas del proyecto. Úsala al **inicio** de un flujo o cuando el agente deba **confirmar** sobre qué tablas puede actuar.

    **Inputs en prosa:** según el editor del nodo (a menudo sin cuerpo o objeto vacío).

    **Ejemplo orientativo:**

    ```json theme={null}
    {}
    ```
  </Accordion>

  <Accordion title="Describir Tabla">
    Devuelve la estructura de una tabla (columnas, tipos, restricciones relevantes). Úsala antes de **insertar o actualizar** para no fallar por tipos u obligatoriedad.

    **Inputs en prosa:** nombre de la tabla; valida el identificador exacto en el editor.

    **Ejemplo orientativo:**

    ```json theme={null}
    {
      "table_name": "customers"
    }
    ```
  </Accordion>

  <Accordion title="Tabla de consultas">
    Lee filas con filtros y límite. Es la herramienta base para **responder con datos** o **ramificar** según lo guardado en Supabase.

    **Inputs en prosa:** tabla; filtros (igualdad u otros operadores si el editor los ofrece); límite opcional.

    **Ejemplo orientativo:**

    ```json theme={null}
    {
      "table_name": "orders",
      "filters": {
        "status": "paid"
      },
      "limit": 25
    }
    ```
  </Accordion>

  <Accordion title="Insertar Fila">
    Crea un registro nuevo. Encaja con **altas** desde el chat (leads, eventos, filas de hechos).

    **Inputs en prosa:** tabla y objeto `data` con columnas y valores.

    **Ejemplo orientativo:**

    ```json theme={null}
    {
      "table_name": "leads",
      "data": {
        "name": "Ana Pérez",
        "email": "ana@example.com",
        "source": "whatsapp"
      }
    }
    ```
  </Accordion>

  <Accordion title="Actualizar fila">
    Modifica filas que cumplan los filtros. Encaja con **cambios de estado** o correcciones tras validar con el usuario.

    **Inputs en prosa:** tabla; filtros que seleccionen el registro; `data` con campos a actualizar.

    **Ejemplo orientativo:**

    ```json theme={null}
    {
      "table_name": "orders",
      "filters": {
        "id": "ord_987"
      },
      "data": {
        "status": "fulfilled"
      }
    }
    ```
  </Accordion>

  <Accordion title="Eliminar fila">
    Elimina filas que cumplan los filtros. Operación **destructiva**: úsala solo con criterios muy acotados y, si puedes, delega borrados sensibles en una **RPC** con comprobaciones adicionales.

    **Inputs en prosa:** tabla y filtros; revisa operadores disponibles en el editor.

    <Warning>
      Un filtro demasiado amplio puede borrar más filas de las previstas. Prueba primero en entornos de desarrollo y revisa políticas RLS.
    </Warning>

    **Ejemplo orientativo:**

    ```json theme={null}
    {
      "table_name": "draft_sessions",
      "filters": {
        "session_id": "sess_tmp_001"
      }
    }
    ```
  </Accordion>

  <Accordion title="Llamar a la función RPC">
    Ejecuta una función PostgreSQL expuesta como RPC en Supabase. Centraliza **lógica de negocio** (cálculos, validaciones, transacciones) en la base.

    **Inputs en prosa:** nombre de función y parámetros según la firma en PostgreSQL.

    **Ejemplo orientativo:**

    ```json theme={null}
    {
      "function_name": "get_customer_summary",
      "parameters": {
        "customer_id": "cst_123"
      }
    }
    ```
  </Accordion>
</AccordionGroup>

***

## Cómo usar en Brain

En **Supabase**, lo normal es usar **AI Agent** cuando el flujo debe decidir dinámicamente qué consultar o actualizar, y **Canvas** cuando el proceso sigue una secuencia fija, por ejemplo: consultar registro → validar estado → actualizar fila → notificar.

### En AI Agent

Úsalo cuando la conversación sea **abierta**: el usuario puede pedir datos, registrar algo o disparar una función sin un guion fijo. El agente elige la tool dentro del subconjunto que habilites.

<Steps>
  <Step title="Abre el nodo AI Agent">
    En el Canvas, selecciona o añade el nodo **AI Agent**.
  </Step>

  <Step title="Abre Herramientas">
    En el panel derecho, entra a la pestaña **Herramientas**.
  </Step>

  <Step title="Agrega Supabase">
    Usa **Agregar tool**, busca **Supabase** y actívala.
  </Step>

  <Step title="Configura las tools">
    Limita acciones sensibles (por ejemplo sin **Eliminar fila** en agentes públicos).

    <Check>
      **Supabase** aparece en la lista de herramientas del agente; ajusta desde el icono de ajustes de la integración.
    </Check>
  </Step>
</Steps>

### En Canvas

Úsalo cuando el proceso sea **determinista**: por ejemplo listar tablas → describir → consultar → ramificar → insertar o actualizar, con validaciones explícitas entre nodos.

<Steps>
  <Step title="Arrastra Supabase al Canvas">
    En el panel lateral, abre **Marketplace** y arrastra **Supabase** al flujo.
  </Step>

  <Step title="Selecciona la tool">
    Con el nodo seleccionado, en **Tools** elige la acción (por ejemplo **Tabla de consultas** o **Insertar Fila**).
  </Step>

  <Step title="Configura el cuerpo y la memoria">
    Completa el JSON en el editor del nodo y **Guardar respuesta** en memoria cuando el siguiente paso dependa del resultado.
  </Step>

  <Step title="Conecta el flujo">
    Enlaza **Finalizó la tarea** y **Hubo un error** con la lógica de negocio o mensajes al usuario.

    <Check>
      Cada nodo ejecuta una sola tool; el orden del Canvas define tu proceso.
    </Check>
  </Step>
</Steps>

Ejemplo **orientativo** para **Insertar Fila** (ajusta nombres de columnas y memoria a tu flujo):

```json theme={null}
{
  "table_name": "leads",
  "data": {
    "name": "{{$memory.nombre}}",
    "email": "{{$memory.correo}}",
    "source": "whatsapp"
  }
}
```

***

## Casos de uso

<AccordionGroup>
  <Accordion title="Captación de leads y registros directamente en tu base">
    Cuando un prospecto, solicitud o evento relevante ocurre en la conversación, el flujo lo persiste en Supabase al instante. No hay API intermedia ni integración adicional: los datos van directo a tus tablas.

    **Ejemplo concreto:** un SaaS que capta leads por WhatsApp. El prospecto se identifica y muestra interés. El flujo valida los datos mínimos e inserta una fila en la tabla `leads` con nombre, email y canal de origen. El equipo comercial lo encuentra en su dashboard al momento.

    **Ideal para:** productos digitales, startups y equipos que usan Supabase como base principal y no quieren duplicar datos en otro sistema.
  </Accordion>

  <Accordion title="Conversaciones personalizadas con datos del usuario">
    En lugar de pedir información que ya existe, el flujo consulta Supabase antes de responder. Si el usuario ya tiene pedidos, un plan activo o un proceso en curso, el agente lo sabe antes de hablar.

    **Ejemplo concreto:** un e-commerce con soporte por WhatsApp. El cliente pregunta "¿dónde está mi pedido?". El flujo consulta la tabla `orders` filtrando por email, encuentra el pedido más reciente y responde con estado, fecha estimada y número de seguimiento. El cliente no tuvo que dar ningún dato que ya estaba en la base.

    **Ideal para:** SaaS, e-commerce, onboarding y cualquier flujo donde el contexto del usuario mejora la calidad de la respuesta.
  </Accordion>

  <Accordion title="Cambios de estado operativo desde la conversación">
    Cuando el usuario confirma una acción — aceptar una propuesta, completar un paso de onboarding, aprobar un ticket — el flujo actualiza la columna correspondiente en Supabase. El estado del sistema refleja lo que realmente pasó.

    **Ejemplo concreto:** una plataforma de logística con confirmación por WhatsApp. El repartidor confirma la entrega. El flujo actualiza el campo `status` del pedido a "entregado" en Supabase. El dashboard del operador y las notificaciones automáticas se actualizan al instante.

    **Ideal para:** operaciones, fulfillment, customer success y procesos internos con estados transaccionales.
  </Accordion>

  <Accordion title="Lógica de negocio centralizada con funciones RPC">
    Para cálculos, validaciones complejas o transacciones que involucran varias tablas, la lógica debe vivir en PostgreSQL, no en el flujo. El flujo llama a la función RPC y usa el resultado para responder, decidir o continuar.

    **Ejemplo concreto:** una fintech que calcula elegibilidad crediticia. El flujo llama a `get_credit_score` con el ID del usuario. PostgreSQL ejecuta la lógica (consulta historial, calcula score, verifica restricciones) y devuelve el resultado. El agente responde al usuario con la decisión, sin exponer la lógica en el flujo.

    **Ideal para:** fintech, scoring, pricing, validaciones complejas y productos con lógica fuerte en PostgreSQL.
  </Accordion>
</AccordionGroup>

***

## Integraciones que combinan bien con Supabase

<AccordionGroup>
  <Accordion title="Slack">
    Cada vez que un registro crítico se crea o cambia de estado en Supabase, el flujo puede notificar al canal correspondiente en Slack. El equipo se entera del evento sin monitorear la base.

    **Flujo combinado:** nuevo lead insertado en Supabase → alerta a #ventas en Slack con nombre y canal de origen.

    [Documentación de Slack](/guides/integraciones/productividad/slack)
  </Accordion>

  <Accordion title="Gmail">
    Después de insertar o actualizar un registro en Supabase, el flujo puede enviar un correo transaccional al usuario: confirmación de registro, cambio de estado, próximos pasos. Los datos del correo salen directamente de la fila que acabas de escribir.

    **Flujo combinado:** pedido actualizado a "enviado" en Supabase → correo al cliente con número de seguimiento.

    [Documentación de Gmail](/guides/integraciones/productividad/gmail)
  </Accordion>

  <Accordion title="Google Sheets">
    Para reporting, revisión manual o compartir datos con stakeholders que no tienen acceso a Supabase, el flujo puede exportar consultas a una hoja compartida sin exponer la base directamente.

    **Flujo combinado:** consultar métricas de la semana en Supabase → actualizar hoja de indicadores en Sheets.

    [Documentación de Google Sheets](/guides/integraciones/productividad/google-sheets)
  </Accordion>

  <Accordion title="HubSpot">
    Cuando Supabase guarda la operación del producto (actividad, uso, onboarding) y HubSpot gestiona el ciclo comercial, el flujo puede pasar hitos del backend al CRM para que ventas o customer success trabaje con contexto real.

    **Flujo combinado:** usuario completa onboarding en Supabase → actualizar contacto en HubSpot con fecha de activación y plan.

    [Documentación de HubSpot](/guides/integraciones/crm/hubspot)
  </Accordion>
</AccordionGroup>

***

## Artículos relacionados

<CardGroup cols={2}>
  <Card title="Integraciones" href="/guides/integraciones/integraciones" icon="grid">
    Catálogo de integraciones disponibles en el Marketplace.
  </Card>

  <Card title="Cómo usar integraciones en Brain" href="/guides/integraciones/como-usar-integraciones-en-brain" icon="book-open">
    Flujo general para instalar y usar integraciones en Brain Studio.
  </Card>
</CardGroup>
