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

# Conectores compartidos

> Conecta una única cuenta de servicio que comparten todos los usuarios de la app

<div className="dev-docs-banner">
  <div className="dev-docs-banner-content">
    <div className="dev-docs-banner-title">
      Estás viendo la documentación para desarrolladores
    </div>

    <div className="dev-docs-banner-text">
      Esta documentación es para desarrolladores que trabajan con la plataforma para desarrolladores de
      Base44. Para información sobre conectores en el editor de apps, consulta{" "}
      <a href="/Integrations/Connectors">Usar conectores</a>.
    </div>
  </div>
</div>

Un conector compartido conecta una cuenta para toda la app. Todos los usuarios de la app comparten el mismo token OAuth. Usa esto para cuentas de servicio, como publicar en un canal de Slack de empresa, leer un Google Calendar compartido o consultar un workspace compartido de Notion.

**Para configurar un conector compartido:**

1. [**Configura**](#configure) un archivo JSONC para cada servicio que necesites
2. [**Despliega y autoriza**](#deploy-and-authorize) vía el CLI
3. [**Úsalo en funciones de backend**](#use-in-backend-functions) llamando a [`getConnection()`](/developers/references/sdk/docs/interfaces/connectors#getconnection) para conectores OAuth, o usando la [API REST de Stripe](#stripe) directamente para pagos

## Configurar

Cada conector es un archivo JSONC en el directorio de conectores de tu proyecto. El archivo define el tipo de integración y los scopes que tu app necesita. Por defecto, el directorio es `base44/connectors/`, pero puedes personalizar la ruta en tu [configuración del proyecto](/developers/backend/overview/project-structure#config-jsonc).

<Tree>
  <Tree.Folder name="connectors" defaultOpen>
    <Tree.File name="googlecalendar.jsonc" />

    <Tree.File name="slack.jsonc" />

    <Tree.File name="slackbot.jsonc" />

    <Tree.File name="notion.jsonc" />
  </Tree.Folder>
</Tree>

### Ejemplo

Este ejemplo configura un conector de Google Calendar con scopes de lectura y gestión de eventos:

```jsonc theme={null}
{
  "type": "googlecalendar",
  "scopes": [
    "https://www.googleapis.com/auth/calendar.readonly",
    "https://www.googleapis.com/auth/calendar.events",
  ],
}
```

### Referencia de campos

<ResponseField name="type" type="string" required>
  El identificador del tipo de integración. Consulta la tabla de [servicios compatibles](/developers/backend/resources/connectors#supported-services) para la lista completa de valores aceptados.

  Cada tipo de conector solo puede definirse una vez en tu proyecto.
</ResponseField>

<ResponseField name="scopes" type="array" required>
  Array de scopes OAuth requeridos para tu integración. Los scopes específicos
  dependen del servicio externo y de qué operaciones necesita realizar tu app.
  Consulta la documentación de [permisos y
  scopes de conectores](/Integrations/Connectors#connector-permissions) para los
  scopes disponibles para cada servicio.
</ResponseField>

## Desplegar y autorizar

Despliega conectores con [`connectors push`](/developers/references/cli/commands/connectors-push) o [`deploy`](/developers/references/cli/commands/deploy). Para descargar conectores existentes desde Base44, usa [`connectors pull`](/developers/references/cli/commands/connectors-pull).

Cuando haces push, el CLI gestiona cada conector según su tipo:

* **Conectores OAuth:** El CLI te pide autorizar cada conector uno a uno. Sugiere abrir tu navegador automáticamente y, si aceptas, recorre las páginas de autorización de cada integración secuencialmente. Después de que se complete la autorización, tus tokens OAuth se almacenan de forma segura y puedes recuperarlos usando el SDK.
* **Stripe:** El CLI aprovisiona un sandbox de Stripe para tu app y devuelve una URL de reclamación para completar el onboarding. No se necesita flujo OAuth.

## Usar en funciones de backend

Una vez desplegado y autorizado, usa el conector en tus [funciones de backend](/developers/backend/resources/backend-functions/overview). El enfoque depende del modelo de auth del conector:

<Tabs>
  <Tab title="OAuth connectors">
    Llama a [`connectors.getConnection()`](/developers/references/sdk/docs/interfaces/connectors#getconnection) con el tipo de conector para recuperar un `accessToken` para realizar llamadas autenticadas a la API. Algunos conectores también devuelven un `connectionConfig` con parámetros adicionales (por ejemplo, un subdominio o ID de cuenta).

    Este ejemplo recupera una conexión de Google Calendar y obtiene los próximos eventos:

    ```typescript theme={null}
    const { accessToken } =
      await base44.asServiceRole.connectors.getConnection("googlecalendar");

    const timeMin = new Date().toISOString();
    const url = `https://www.googleapis.com/calendar/v3/calendars/primary/events?maxResults=10&orderBy=startTime&singleEvents=true&timeMin=${timeMin}`;

    const response = await fetch(url, {
      headers: { Authorization: `Bearer ${accessToken}` },
    });

    const events = await response.json();
    ```
  </Tab>

  <Tab title="Stripe">
    Stripe no usa `getConnection()`. En su lugar, la plataforma almacena tus claves de API de Stripe como secretos de la app cuando aprovisionas el conector. En tus funciones de backend, lee `STRIPE_SECRET_KEY` desde el entorno y llama a la [API REST de Stripe](https://docs.stripe.com/api) directamente.

    Este ejemplo crea una sesión de Stripe Checkout y devuelve la URL de pago:

    ```typescript theme={null}
    const STRIPE_SECRET_KEY = Deno.env.get("STRIPE_SECRET_KEY");

    Deno.serve(async (req) => {
      const { priceId, successUrl, cancelUrl } = await req.json();

      const response = await fetch("https://api.stripe.com/v1/checkout/sessions", {
        method: "POST",
        headers: {
          Authorization: `Bearer ${STRIPE_SECRET_KEY}`,
          "Content-Type": "application/x-www-form-urlencoded",
        },
        body: new URLSearchParams({
          "payment_method_types[]": "card",
          "line_items[0][price]": priceId,
          "line_items[0][quantity]": "1",
          mode: "payment",
          success_url: successUrl || `${req.headers.get("origin")}?success=true`,
          cancel_url: cancelUrl || `${req.headers.get("origin")}?canceled=true`,
        }),
      });

      const session = await response.json();
      return Response.json({ url: session.url });
    });
    ```
  </Tab>
</Tabs>

## Automatizaciones de conectores

Las automatizaciones de conectores permiten que tus funciones de backend respondan a eventos de servicios conectados en tiempo real. Por ejemplo, puedes ejecutar una función cuando llega un nuevo email a Gmail o cuando cambia un archivo en Google Drive.

Configura las automatizaciones de conectores en tu archivo `function.jsonc` junto a tus otras automatizaciones. Consulta [Automatizaciones de conectores](/developers/backend/resources/backend-functions/automations#connector-automations) para la referencia completa de campos, eventos compatibles y documentación del payload.

## Ver también

* [Resumen de conectores](/developers/backend/resources/connectors)
* [Conectores de usuario de app](/developers/backend/resources/connectors/app-user-connectors)
* [Referencia de conectores del SDK](/developers/references/sdk/docs/interfaces/connectors#getconnection)
* [connectors push](/developers/references/cli/commands/connectors-push)
* [connectors pull](/developers/references/cli/commands/connectors-pull)
* [deploy](/developers/references/cli/commands/deploy)
* [Funciones de backend](/developers/backend/resources/backend-functions/overview)
* [Automatizaciones](/developers/backend/resources/backend-functions/automations)

<Note>Esta página se tradujo con IA. Para información más precisa y actualizada, consulta la [versión en inglés](/). </Note>
