> ## 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.

# Automatizaciones

> Programa tareas recurrentes y activa funciones automáticamente según eventos de la base de datos o eventos webhook de conectores

<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 automatizaciones en el editor de apps, consulta <a href="/Building-your-app/Creating-automations">Crear automatizaciones para tu app</a>.
    </div>
  </div>
</div>

Las automatizaciones permiten que las [funciones de backend](/developers/backend/resources/backend-functions/overview) se ejecuten automáticamente según un calendario, en respuesta a eventos de la base de datos o cuando una integración conectada envía un evento webhook. Usa automatizaciones para procesar datos a intervalos regulares, gestionar cambios en entidades, reaccionar a eventos de servicios externos o ejecutar tareas únicas en momentos específicos.

Cada función de backend puede tener varias automatizaciones asociadas, configuradas en el archivo `function.jsonc` de la función. Si solo tienes un archivo `entry.ts` o `entry.js`, deberás añadir este archivo de configuración para usar automatizaciones. Las automatizaciones se [despliegan atómicamente con el código de la función](#deploy-automations) cuando ejecutas [`deploy`](/developers/references/cli/commands/deploy) o [`functions deploy`](/developers/references/cli/commands/functions-deploy).

## Tipos de automatización

Base44 admite 4 tipos de automatizaciones:

* **[Automatizaciones programadas con cron](#cron)**: Usa expresiones cron para un control preciso de la programación.
* **[Automatizaciones programadas con horarios simples](#simple-schedule)**: Configura tareas recurrentes por intervalo sin expresiones cron.
* **[Automatizaciones por eventos de entidad](#entity-events)**: Activa funciones cuando se crean, actualizan o eliminan registros de la base de datos.
* **[Automatizaciones de conectores](#connector-automations)**: Responde a eventos de servicios conectados en tiempo real, como un nuevo email en Gmail o un cambio de archivo en Google Drive.

## Campos comunes

### Campos comunes para todas las automatizaciones

Todos los tipos de automatización comparten los siguientes campos:

| Campo           | Tipo      | Obligatorio | Descripción                                                                                                   |
| --------------- | --------- | ----------- | ------------------------------------------------------------------------------------------------------------- |
| `type`          | `string`  | Sí          | El tipo de automatización. Valores posibles: `"scheduled"`, `"entity"` o `"connector"`.                       |
| `name`          | `string`  | Sí          | Identificador único de la automatización.                                                                     |
| `description`   | `string`  | No          | Descripción legible para humanos.                                                                             |
| `function_args` | `object`  | No          | Argumentos que se pasan a la función cuando se activa. Consulta [Argumentos de función](#function-arguments). |
| `is_active`     | `boolean` | No          | Si la automatización está habilitada. Por defecto es `true`.                                                  |

### Campos comunes para automatizaciones programadas

Tanto las automatizaciones programadas con cron como las simples comparten estos campos adicionales:

| Campo              | Tipo     | Obligatorio | Descripción                                                                                                                                                                         |
| ------------------ | -------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `schedule_mode`    | `string` | Sí          | Si el horario se repite. Valores posibles: `"recurring"` o `"one-time"`.                                                                                                            |
| `schedule_type`    | `string` | Sí          | Método de programación a usar. Valores posibles: `"cron"` o `"simple"`.                                                                                                             |
| `ends_type`        | `string` | No          | Cuándo debe detenerse el horario recurrente. Valores posibles: `"never"`, `"on"` o `"after"`. Por defecto es `"never"`.                                                             |
| `ends_on_date`     | `string` | Condicional | Fecha en la que termina el horario recurrente, inclusive, en UTC. Obligatorio cuando `ends_type` es `"on"`. Formato: `YYYY-MM-DDTHH:MM:SSZ`. Por ejemplo, `"2026-12-31T23:59:59Z"`. |
| `ends_after_count` | `number` | Condicional | Número de ejecuciones después de las cuales se detiene el horario recurrente. Obligatorio cuando `ends_type` es `"after"`.                                                          |

## Configuración de automatizaciones

Configura las automatizaciones en tu archivo `function.jsonc` usando uno de los siguientes enfoques. Todas las automatizaciones usan los [campos comunes para todas las automatizaciones](#common-fields-for-all-automations) listados arriba, además de los campos específicos de cada tipo.

### Cron

Usa los [campos comunes para todas las automatizaciones](#common-fields-for-all-automations) y los [campos comunes para automatizaciones programadas](#common-fields-for-scheduled-automations) junto con los campos específicos de cron listados aquí.

Establece `type` en `"scheduled"` y `schedule_type` en `"cron"` para usar expresiones cron y obtener un control preciso de la programación.

Las automatizaciones cron usan la sintaxis estándar de 5 campos: `minute hour day-of-month month day-of-week`. Consulta [crontab.guru](https://crontab.guru/) para un editor interactivo de expresiones cron y referencia de sintaxis.

| Campo             | Tipo     | Obligatorio | Descripción                 |
| ----------------- | -------- | ----------- | --------------------------- |
| `cron_expression` | `string` | Sí          | Expresión cron de 5 campos. |

#### Ejemplo de cron

Este ejemplo ejecuta una función todos los días a medianoche UTC:

```jsonc theme={null}
{
  "name": "sendDailyReport",
  "entry": "entry.ts",
  "automations": [
    {
      "type": "scheduled",
      "name": "daily_midnight_report",
      "description": "Runs every day at midnight UTC",
      "function_args": { "mode": "full_sync" },
      "is_active": true,

      "schedule_mode": "recurring",
      "schedule_type": "cron",
      "cron_expression": "0 0 * * ?"
    }
  ]
}
```

### Horario simple

Usa los [campos comunes para todas las automatizaciones](#common-fields-for-all-automations) y los [campos comunes para automatizaciones programadas](#common-fields-for-scheduled-automations) junto con los campos de horario simple listados aquí.

Establece `type` en `"scheduled"` y `schedule_type` en `"simple"` para necesidades de programación sencillas.

Configura tareas recurrentes por intervalo, como minutos, horas, días, semanas o meses, sin escribir expresiones cron.

| Campo                    | Tipo       | Obligatorio | Descripción                                                                                                                                                                                   |
| ------------------------ | ---------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `one_time_date`          | `string`   | Condicional | Fecha y hora en que la automatización se ejecuta una vez, en UTC. Obligatorio cuando `schedule_mode` es `"one-time"`. Formato: `YYYY-MM-DDTHH:MM:SSZ`. Por ejemplo, `"2026-02-15T10:00:00Z"`. |
| `repeat_unit`            | `string`   | Condicional | Unidad de tiempo para automatizaciones recurrentes. Obligatorio cuando `schedule_mode` es `"recurring"`. Valores posibles: `"minutes"`, `"hours"`, `"days"`, `"weeks"` o `"months"`.          |
| `repeat_interval`        | `number`   | Condicional | Intervalo entre ejecuciones. Obligatorio cuando `repeat_unit` es `"minutes"`, `"hours"` o `"days"`.                                                                                           |
| `start_time`             | `string`   | Condicional | Hora del día en que se ejecuta la automatización, en UTC. Obligatorio cuando `repeat_unit` es `"days"`, `"weeks"` o `"months"`. Formato: `HH:MM`.                                             |
| `repeat_on_days`         | `number[]` | Condicional | Días de la semana en que se ejecuta la automatización. Obligatorio cuando `repeat_unit` es `"weeks"`. Array de números de día de la semana, donde `0` es domingo y `6` es sábado.             |
| `repeat_on_day_of_month` | `number`   | Condicional | Día del mes en que se ejecuta la automatización. Obligatorio cuando `repeat_unit` es `"months"`. Valores válidos: `1`-`31`.                                                                   |

#### Ejemplos de horario simple

Los siguientes ejemplos muestran distintas formas de programar automatizaciones con horarios simples:

<CodeGroup>
  ```jsonc Every 30 minutes theme={null}
  {
    "type": "scheduled",
    "name": "every_30_minutes",
    "description": "Runs every 30 minutes.",
    "is_active": true,

    "schedule_mode": "recurring",
    "schedule_type": "simple",
    "repeat_unit": "minutes",
    "repeat_interval": 30
  }
  ```

  ```jsonc Weekdays at 9am theme={null}
  {
    "type": "scheduled",
    "name": "weekday_morning_report",
    "description": "Runs at 9 AM Monday through Friday.",
    "is_active": true,

    "schedule_mode": "recurring",
    "schedule_type": "simple",
    "repeat_unit": "weeks",
    "repeat_interval": 1,
    "start_time": "09:00",
    "repeat_on_days": [1, 2, 3, 4, 5],

    "ends_type": "after",
    "ends_after_count": 52
  }
  ```

  ```jsonc One-time execution theme={null}
  {
    "type": "scheduled",
    "name": "one_time_cleanup",
    "description": "Runs once at a specific date and time.",
    "function_args": { "cleanup": true },
    "is_active": true,

    "schedule_mode": "one-time",
    "schedule_type": "simple",
    "one_time_date": "2026-02-15T10:00:00Z"
  }
  ```
</CodeGroup>

### Eventos de entidad

Usa los [campos comunes para todas las automatizaciones](#common-fields-for-all-automations) junto con los campos de eventos de entidad listados aquí.

Establece `type` en `"entity"` para activar funciones automáticamente cuando se crean, actualizan o eliminan registros de la base de datos.

Las automatizaciones de entidad pueden escuchar uno o más tipos de evento en una entidad específica.

| Campo         | Tipo       | Obligatorio | Descripción                                                                                                                   |
| ------------- | ---------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `entity_name` | `string`   | Sí          | Nombre de la entidad a monitorizar.                                                                                           |
| `event_types` | `string[]` | Sí          | Eventos de la base de datos a los que escuchar. Valores posibles: `"create"`, `"update"`, `"delete"`. Al menos uno requerido. |

#### Ejemplos de eventos de entidad

Los siguientes ejemplos muestran cómo activar funciones según eventos de entidad:

<CodeGroup>
  ```jsonc All order events theme={null}
  {
    "name": "processOrders",
    "entry": "entry.ts",
    "automations": [
      {
        "type": "entity",
        "name": "on_order_changes",
        "description": "Triggered on order create, update, or delete.",
        "function_args": { "notify_slack": true },
        "is_active": true,

        "entity_name": "orders",
        "event_types": ["create", "update", "delete"]
      }
    ]
  }
  ```

  ```jsonc New records only theme={null}
  {
    "type": "entity",
    "name": "on_customer_create",
    "description": "Triggered when a new customer is created.",
    "is_active": true,

    "entity_name": "customers",
    "event_types": ["create"]
  }
  ```
</CodeGroup>

### Automatizaciones de conectores

Usa los [campos comunes para todas las automatizaciones](#common-fields-for-all-automations) junto con los campos específicos de conectores listados aquí.

Establece `type` en `"connector"` para activar funciones cuando una integración conectada envía un evento webhook. Úsalas para reaccionar a la actividad de servicios externos en tiempo real. Por ejemplo, puedes analizar un nuevo email, sincronizar un cambio de calendario o responder a una actualización de archivo en Google Drive.

Opcionalmente puedes añadir [condiciones de activación](#trigger-conditions) para filtrar eventos de modo que tu función solo se ejecute cuando el payload cumpla las reglas que definas.

Cuando se activa una automatización de conector, tu función recibe un [payload de webhook](#webhook-payload) estructurado que contiene el tipo de evento, los detalles de la integración y los datos sin procesar del servicio externo.

<Note>
  El conector debe estar configurado en tu proyecto y autorizado antes del despliegue. Consulta [Conectores compartidos](/developers/backend/resources/connectors/shared-connectors) para instrucciones de configuración.
</Note>

| Campo                | Tipo       | Obligatorio | Descripción                                                                                                                                                                                                                                                                    |
| -------------------- | ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `integration_type`   | `string`   | Sí          | El identificador del tipo de conector al que escuchar. Consulta [integraciones compatibles](#supported-integrations-and-events) para los valores aceptados.                                                                                                                    |
| `events`             | `string[]` | Sí          | Uno o más nombres de evento webhook a los que suscribirse. Consulta [integraciones compatibles](#supported-integrations-and-events) para los eventos disponibles por conector.                                                                                                 |
| `resource_id`        | `string`   | Condicional | Limita el alcance de la automatización a un recurso específico. El formato esperado depende del conector. Consulta [Formatos de resource ID](#resource-id-formats) más abajo. Obligatorio para los eventos a nivel de archivo de Google Drive. Opcional para otros conectores. |
| `trigger_conditions` | `object`   | No          | Reglas que deben coincidir con el evento entrante antes de que se ejecute tu función. Si el evento no coincide, la ejecución se omite. Consulta [Condiciones de activación](#trigger-conditions) para la referencia completa.                                                  |

#### Integraciones y eventos compatibles

| Conector             | `integration_type` | Valor de `events`       | Descripción                                                                                                                  |
| -------------------- | ------------------ | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Gmail                | `gmail`            | `mailbox`               | Cualquier cambio en el buzón, incluidos los nuevos mensajes, actualizaciones de etiquetas y cambios en el estado de lectura. |
| Google Calendar      | `googlecalendar`   | `events`                | Cualquier cambio en un evento del calendario, incluidos los creados, actualizados y eliminados.                              |
| Google Drive         | `googledrive`      | `changes`               | Cualquier cambio en el drive, incluidos los archivos añadidos, modificados o eliminados.                                     |
| Google Drive         | `googledrive`      | `file`                  | Cualquier cambio en un archivo específico (requiere `resource_id`).                                                          |
| Google Drive         | `googledrive`      | `file.update`           | El contenido o las propiedades del archivo han cambiado (requiere `resource_id`).                                            |
| Google Drive         | `googledrive`      | `file.trash`            | Archivo movido a la papelera (requiere `resource_id`).                                                                       |
| Google Drive         | `googledrive`      | `file.untrash`          | Archivo restaurado de la papelera (requiere `resource_id`).                                                                  |
| Google Drive         | `googledrive`      | `file.delete`           | Archivo eliminado permanentemente (requiere `resource_id`).                                                                  |
| Microsoft OneDrive   | `one_drive`        | `updated`               | Cualquier cambio en un archivo o carpeta, incluidos los creados, modificados y eliminados.                                   |
| Microsoft Outlook    | `outlook`          | `created`               | Se crea un nuevo email, evento de calendario o contacto.                                                                     |
| Microsoft Outlook    | `outlook`          | `updated`               | Se actualiza un email, evento de calendario o contacto.                                                                      |
| Microsoft Outlook    | `outlook`          | `deleted`               | Se elimina un email, evento de calendario o contacto.                                                                        |
| Microsoft SharePoint | `share_point`      | `updated`               | Cuando se crea, modifica o elimina un elemento de lista o documento.                                                         |
| Microsoft Teams      | `microsoft_teams`  | `created`               | Cuando se publica un nuevo mensaje de chat.                                                                                  |
| Microsoft Teams      | `microsoft_teams`  | `updated`               | Cuando se actualiza un mensaje de chat.                                                                                      |
| Microsoft Teams      | `microsoft_teams`  | `deleted`               | Cuando se elimina un mensaje de chat.                                                                                        |
| Slack                | `slack`            | `message`               | Cuando se publica un mensaje en un canal.                                                                                    |
| Slack                | `slack`            | `message.im`            | Cuando se publica un mensaje directo.                                                                                        |
| Slack                | `slack`            | `message.groups`        | Cuando se publica un mensaje en un canal privado.                                                                            |
| Slack                | `slack`            | `message.channels`      | Cuando se publica un mensaje en un canal público.                                                                            |
| Slack                | `slack`            | `message.mpim`          | Cuando se publica un mensaje en un IM de varios participantes.                                                               |
| Slack                | `slack`            | `reaction_added`        | Cuando se añade una reacción a un mensaje.                                                                                   |
| Slack                | `slack`            | `reaction_removed`      | Cuando se elimina una reacción de un mensaje.                                                                                |
| Slack                | `slack`            | `member_joined_channel` | Cuando un usuario se une a un canal.                                                                                         |
| Slack                | `slack`            | `member_left_channel`   | Cuando un usuario abandona un canal.                                                                                         |
| Slack                | `slack`            | `file_shared`           | Cuando se comparte un archivo.                                                                                               |

<Tip>
  El evento `mailbox` de Gmail se dispara con cualquier cambio en el buzón, no solo con los nuevos mensajes. Para que tu función solo se ejecute cuando lleguen nuevos emails, añade una condición de activación: `{ "field": "has_new_messages", "operator": "equals", "value": true }`.
</Tip>

<Note>
  Las automatizaciones de conectores de Slack requieren condiciones de activación. El despliegue fallará si no se establecen condiciones para las automatizaciones de conectores de Slack.
</Note>

#### Formatos de resource ID

El valor esperado para `resource_id` varía según el conector:

* **Google Drive:** El ID del archivo. Obligatorio para eventos a nivel de archivo (`file`, `file.update`, `file.trash`, `file.untrash`, `file.delete`).
* **Gmail:** Una lista separada por comas de IDs de etiqueta a observar. Por defecto es `"INBOX"` si se omite.
* **Microsoft Teams:** `{teamId}/{channelId}` para observar un canal específico, o `{chatId}` para observar un chat específico.
* **SharePoint:** `{siteId}/{listId}` para observar una lista específica.

#### Condiciones de activación

Usa `trigger_conditions` para filtrar eventos webhook de modo que tu función solo se ejecute cuando el payload cumpla las reglas que definas. Si no se establecen condiciones, la función se ejecuta para cada evento entrante. Consulta [Ejemplos de automatizaciones de conectores](#connector-automation-examples) para configuraciones completas.

<ResponseField name="logic" type="string">
  Cómo combinar las condiciones. Valores posibles: `"and"` (todas deben coincidir), `"or"` (cualquiera debe coincidir). Por defecto es `"and"`.
</ResponseField>

<ResponseField name="conditions" type="array" required>
  Uno o más objetos de condición o grupos de condiciones anidados. Máximo 20 condiciones hoja y 5 niveles de anidación.

  <Expandable title="Campos del objeto condition">
    <ResponseField name="field" type="string" required>
      Ruta separada por puntos al payload del webhook. Por ejemplo, `"status"` lee `payload.data.status`, y `"sender.email"` lee `payload.data.sender.email`.
    </ResponseField>

    <ResponseField name="operator" type="string" required>
      Cómo comparar el valor del campo.

      <Expandable title="Operadores compatibles">
        | Operador       | Descripción                                                                                    |
        | -------------- | ---------------------------------------------------------------------------------------------- |
        | `equals`       | El valor del campo coincide exactamente con `value`.                                           |
        | `not_equals`   | El valor del campo no coincide con `value`.                                                    |
        | `contains`     | El valor del campo contiene `value` como substring.                                            |
        | `not_contains` | El valor del campo no contiene `value` como substring.                                         |
        | `starts_with`  | El valor del campo empieza por `value`.                                                        |
        | `ends_with`    | El valor del campo termina con `value`.                                                        |
        | `gt`           | El valor del campo es mayor que `value`.                                                       |
        | `gte`          | El valor del campo es mayor o igual que `value`.                                               |
        | `lt`           | El valor del campo es menor que `value`.                                                       |
        | `lte`          | El valor del campo es menor o igual que `value`.                                               |
        | `in_list`      | El valor del campo es uno de los elementos de `value` (un array).                              |
        | `not_in_list`  | El valor del campo no es uno de los elementos de `value` (un array).                           |
        | `exists`       | El campo está presente y no es null. No se requiere `value`.                                   |
        | `not_exists`   | El campo es null o no está. No se requiere `value`.                                            |
        | `is_empty`     | El campo es null, una cadena vacía, un array vacío o un objeto vacío. No se requiere `value`.  |
        | `is_not_empty` | El campo no es null, ni cadena vacía, ni array vacío, ni objeto vacío. No se requiere `value`. |
      </Expandable>
    </ResponseField>

    <ResponseField name="value" type="any">
      El valor con el que comparar. No es obligatorio para `exists`, `not_exists`, `is_empty` e `is_not_empty`.
    </ResponseField>
  </Expandable>
</ResponseField>

#### Payload del webhook

Cuando una automatización de conector activa tu función, el cuerpo de la solicitud contiene un objeto `payload` con la siguiente estructura. Consulta [Ejemplos de automatizaciones de conectores](#connector-automation-examples) para una función que lea el payload.

| Campo                               | Tipo      | Descripción                                                                                                            |
| ----------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------- |
| `payload.automation.id`             | `string`  | ID de la automatización que activó esta ejecución.                                                                     |
| `payload.automation.name`           | `string`  | Nombre de la automatización.                                                                                           |
| `payload.automation.type`           | `string`  | Siempre `"connector"`.                                                                                                 |
| `payload.event.type`                | `string`  | El nombre del evento webhook. Por ejemplo, `"mailbox"`, `"events"` o `"changes"`.                                      |
| `payload.event.integration_type`    | `string`  | El tipo de conector. Por ejemplo, `"gmail"` o `"googlecalendar"`.                                                      |
| `payload.event.provider_identifier` | `string`  | El identificador de cuenta del proveedor usado para el enrutamiento.                                                   |
| `payload.data`                      | `object`  | El payload sin procesar del webhook del servicio externo. Se establece en `null` cuando `payload_too_large` es `true`. |
| `payload.payload_too_large`         | `boolean` | Es `true` cuando el payload del webhook supera \~200 KB y `data` es `null`.                                            |

#### Ejemplos de automatizaciones de conectores

<CodeGroup>
  ```jsonc Basic connector automation theme={null}
  // Triggers the function whenever a new email arrives in Gmail.

  {
    "name": "processInboundEmails",
    "entry": "entry.ts",
    "automations": [
      {
        "type": "connector",
        "name": "on_new_gmail",
        "description": "Runs when a new email arrives in Gmail.",
        "is_active": true,

        "integration_type": "gmail",
        "events": ["mailbox"]
      }
    ]
  }
  ```

  ```jsonc Single trigger condition theme={null}
  // Triggers only when a Google Calendar event has status "cancelled".

  {
    "type": "connector",
    "name": "on_event_cancelled",
    "description": "Runs only when a Google Calendar event is cancelled.",
    "is_active": true,

    "integration_type": "googlecalendar",
    "events": ["events"],
    "trigger_conditions": {
      "logic": "and",
      "conditions": [
        { "field": "status", "operator": "equals", "value": "cancelled" }
      ]
    }
  }
  ```

  ```jsonc Nested trigger conditions theme={null}
  // Triggers only for Gmail messages that are both in the inbox and unread.

  {
    "type": "connector",
    "name": "on_unread_inbox_email",
    "description": "Runs only for unread emails in the inbox.",
    "is_active": true,

    "integration_type": "gmail",
    "events": ["mailbox"],
    "trigger_conditions": {
      "logic": "and",
      "conditions": [
        { "field": "labelIds", "operator": "contains", "value": "INBOX" },
        { "field": "labelIds", "operator": "contains", "value": "UNREAD" }
      ]
    }
  }
  ```

  ```typescript Reading the payload theme={null}
  // Reads the structured payload from the request body.

  Deno.serve(async (req) => {
    const body = await req.json();
    const { payload } = body;

    const eventType = payload.event.type;            
    const integration = payload.event.integration_type; 

    if (payload.payload_too_large) {
      console.warn("Webhook payload was too large and was not included.");
      return Response.json({ ok: false, reason: "payload_too_large" });
    }

    const data = payload.data; 
    
    // Your function logic
    console.log(`Received ${eventType} event from ${integration}`, data);

    return Response.json({ ok: true });
  });
  ```
</CodeGroup>

### Argumentos de función

Pasa datos a tu función cuando se active incluyendo el campo `function_args` en la configuración de tu automatización. Esto es útil cuando una función gestiona varias automatizaciones con comportamientos diferentes, como una función de sincronización que se ejecuta de forma incremental cada 15 minutos pero hace una sincronización completa a diario.

Accede a estos argumentos en el código de tu función a través del cuerpo de la solicitud.

#### Ejemplo de argumentos de función

Este ejemplo muestra una función que gestiona los modos de sincronización incremental y completa según la configuración de la automatización:

<CodeGroup>
  ```typescript Function code theme={null}
  Deno.serve(async (req) => {
    const body = await req.json();
    const args = body.args ?? {};

    // Use the arguments from automation config
    const mode = args.mode ?? "incremental";

    // Your function logic
  });
  ```

  ```jsonc Automation config theme={null}
  {
    "name": "syncData",
    "entry": "entry.ts",
    "automations": [
      {
        "type": "scheduled",
        "name": "incremental_sync",
        "description": "Runs every 15 minutes with incremental mode.",
        "function_args": { "mode": "incremental" },
        "is_active": true,
        "schedule_mode": "recurring",
        "schedule_type": "simple",
        "repeat_unit": "minutes",
        "repeat_interval": 15
      },
      {
        "type": "scheduled",
        "name": "full_sync",
        "description": "Runs daily at midnight with full sync mode.",
        "function_args": { "mode": "full" },
        "is_active": true,
        "schedule_mode": "recurring",
        "schedule_type": "cron",
        "cron_expression": "0 0 * * ?"
      }
    ]
  }
  ```
</CodeGroup>

## Desplegar automatizaciones

Despliega funciones de backend con sus automatizaciones usando el comando del CLI [`functions deploy`](/developers/references/cli/commands/functions-deploy) o el comando unificado [`deploy`](/developers/references/cli/commands/deploy). Puedes desplegar funciones específicas por nombre con `functions deploy <names...>`.

El despliegue es atómico por función. Una función solo se considera desplegada si tanto el despliegue de Deno como todas sus automatizaciones se realizan correctamente. Si alguna automatización falla al desplegarse, se revierte todo el despliegue de la función.

Después de desplegar, el CLI muestra el estado por función: deployed, unchanged o error.

## Gestionar automatizaciones en el panel

<Warning>
  Cualquier cambio realizado en el panel se sobrescribirá la próxima vez que ejecutes [`functions deploy`](/developers/references/cli/commands/functions-deploy). No hay sincronización bidireccional entre el panel y tus archivos locales. Las automatizaciones definidas en tus archivos `function.jsonc` locales son la fuente de verdad.

  Si quieres realizar cambios en tus automatizaciones, actualiza tus archivos `function.jsonc` locales y vuelve a desplegar. Usa el panel para monitorizar los logs de ejecución y activar manualmente las automatizaciones cuando sea necesario.
</Warning>

Visualiza y gestiona tus automatizaciones en el panel de Base44 en la pestaña **Automations**. Desde el panel, puedes:

* Ver logs e historial de ejecución
* Ejecutar automatizaciones manualmente para pruebas
* Monitorizar el estado de las automatizaciones

## Ver también

* [Funciones de backend](/developers/backend/resources/backend-functions/overview): Aprende sobre las funciones de backend
* [`functions deploy`](/developers/references/cli/commands/functions-deploy): Despliega funciones con automatizaciones
* [`deploy`](/developers/references/cli/commands/deploy): Despliega todos los recursos a la vez
* [`logs`](/developers/references/cli/commands/logs): Visualiza los logs de funciones

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