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

# Automations

> Agende tarefas recorrentes e dispare funções automaticamente com base em eventos do banco de dados ou eventos de webhook de conectores

<div className="dev-docs-banner">
  <div className="dev-docs-banner-content">
    <div className="dev-docs-banner-title">
      Você está vendo a documentação para desenvolvedores
    </div>

    <div className="dev-docs-banner-text">
      Esta documentação é para desenvolvedores que trabalham com a plataforma para desenvolvedores Base44. Para informações sobre automations no editor de apps, veja <a href="/Building-your-app/Creating-automations">Criando automations para seu app</a>.
    </div>
  </div>
</div>

As Automations permitem que [funções de backend](/developers/backend/resources/backend-functions/overview) sejam executadas automaticamente em um cronograma, em resposta a eventos do banco de dados ou quando uma integração conectada envia um evento de webhook. Use as automations para processar dados em intervalos regulares, lidar com mudanças de entidade, reagir a eventos de serviços externos ou executar tarefas únicas em horários específicos.

Cada função de backend pode ter múltiplas automations anexadas, configuradas no arquivo `function.jsonc` da função. Se você só tem um arquivo `entry.ts` ou `entry.js`, precisará adicionar este arquivo de configuração para usar automations. Automations são [implantadas atomicamente com o código da função](#deploy-automations) quando você executa [`deploy`](/developers/references/cli/commands/deploy) ou [`functions deploy`](/developers/references/cli/commands/functions-deploy).

## Tipos de automation

A Base44 suporta 4 tipos de automations:

* **[Automations agendadas com cron](#cron)**: Use expressões cron para controle preciso de agendamento.
* **[Automations agendadas com cronogramas simples](#simple-schedule)**: Configure tarefas recorrentes por intervalo sem expressões cron.
* **[Automations de eventos de entidade](#entity-events)**: Dispare funções quando registros do banco de dados são criados, atualizados ou excluídos.
* **[Connector automations](#connector-automations)**: Responda a eventos de serviços conectados em tempo real, como um novo e-mail no Gmail ou uma mudança de arquivo no Google Drive.

## Campos comuns

### Campos comuns para todas as automations

Todos os tipos de automation compartilham os seguintes campos:

| Campo           | Tipo      | Obrigatório | Descrição                                                                                        |
| --------------- | --------- | ----------- | ------------------------------------------------------------------------------------------------ |
| `type`          | `string`  | Sim         | O tipo de automation. Valores possíveis: `"scheduled"`, `"entity"` ou `"connector"`.             |
| `name`          | `string`  | Sim         | Identificador único da automation.                                                               |
| `description`   | `string`  | Não         | Descrição legível.                                                                               |
| `function_args` | `object`  | Não         | Argumentos passados à função quando disparada. Veja [Argumentos de função](#function-arguments). |
| `is_active`     | `boolean` | Não         | Se a automation está habilitada. O padrão é `true`.                                              |

### Campos comuns para automations agendadas

Tanto automations agendadas com cron quanto com cronograma simples compartilham estes campos adicionais:

| Campo              | Tipo     | Obrigatório | Descrição                                                                                                                                                                        |
| ------------------ | -------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `schedule_mode`    | `string` | Sim         | Se o cronograma se repete. Valores possíveis: `"recurring"` ou `"one-time"`.                                                                                                     |
| `schedule_type`    | `string` | Sim         | Método de agendamento a usar. Valores possíveis: `"cron"` ou `"simple"`.                                                                                                         |
| `ends_type`        | `string` | Não         | Quando o cronograma recorrente deve parar. Valores possíveis: `"never"`, `"on"` ou `"after"`. O padrão é `"never"`.                                                              |
| `ends_on_date`     | `string` | Condicional | Data em que o cronograma recorrente termina, inclusiva, em UTC. Obrigatório quando `ends_type` é `"on"`. Formato: `YYYY-MM-DDTHH:MM:SSZ`. Por exemplo, `"2026-12-31T23:59:59Z"`. |
| `ends_after_count` | `number` | Condicional | Número de execuções após o qual o cronograma recorrente para. Obrigatório quando `ends_type` é `"after"`.                                                                        |

## Configuração de automation

Configure automations no seu arquivo `function.jsonc` usando uma das abordagens a seguir. Todas as automations usam os [campos comuns para todas as automations](#common-fields-for-all-automations) listados acima, mais os campos específicos de cada tipo.

### Cron

Use os [campos comuns para todas as automations](#common-fields-for-all-automations) e os [campos comuns para automations agendadas](#common-fields-for-scheduled-automations) junto com os campos específicos de cron listados aqui.

Defina `type` como `"scheduled"` e `schedule_type` como `"cron"` para usar expressões cron para controle preciso de agendamento.

Automations cron usam a sintaxe padrão de 5 campos: `minute hour day-of-month month day-of-week`. Veja [crontab.guru](https://crontab.guru/) para um editor interativo e referência de sintaxe de expressões cron.

| Campo             | Tipo     | Obrigatório | Descrição                   |
| ----------------- | -------- | ----------- | --------------------------- |
| `cron_expression` | `string` | Sim         | Expressão cron de 5 campos. |

#### Exemplo de cron

Este exemplo executa uma função todos os dias à meia-noite 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 * * ?"
    }
  ]
}
```

### Cronograma simples

Use os [campos comuns para todas as automations](#common-fields-for-all-automations) e os [campos comuns para automations agendadas](#common-fields-for-scheduled-automations) junto com os campos de cronograma simples listados aqui.

Defina `type` como `"scheduled"` e `schedule_type` como `"simple"` para necessidades de agendamento mais simples.

Configure tarefas recorrentes por intervalo como minutos, horas, dias, semanas ou meses sem escrever expressões cron.

| Campo                    | Tipo       | Obrigatório | Descrição                                                                                                                                                                               |
| ------------------------ | ---------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `one_time_date`          | `string`   | Condicional | Data e hora em que a automation é executada uma vez, em UTC. Obrigatório quando `schedule_mode` é `"one-time"`. Formato: `YYYY-MM-DDTHH:MM:SSZ`. Por exemplo, `"2026-02-15T10:00:00Z"`. |
| `repeat_unit`            | `string`   | Condicional | Unidade de tempo para automations recorrentes. Obrigatório quando `schedule_mode` é `"recurring"`. Valores possíveis: `"minutes"`, `"hours"`, `"days"`, `"weeks"` ou `"months"`.        |
| `repeat_interval`        | `number`   | Condicional | Intervalo entre execuções. Obrigatório quando `repeat_unit` é `"minutes"`, `"hours"` ou `"days"`.                                                                                       |
| `start_time`             | `string`   | Condicional | Hora do dia em que a automation é executada, em UTC. Obrigatório quando `repeat_unit` é `"days"`, `"weeks"` ou `"months"`. Formato: `HH:MM`.                                            |
| `repeat_on_days`         | `number[]` | Condicional | Dias da semana em que a automation é executada. Obrigatório quando `repeat_unit` é `"weeks"`. Array de números de dia da semana, onde `0` é domingo e `6` é sábado.                     |
| `repeat_on_day_of_month` | `number`   | Condicional | Dia do mês em que a automation é executada. Obrigatório quando `repeat_unit` é `"months"`. Valores válidos: `1`-`31`.                                                                   |

#### Exemplos de cronograma simples

Os exemplos a seguir mostram diferentes maneiras de agendar automations com cronogramas 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 entidade

Use os [campos comuns para todas as automations](#common-fields-for-all-automations) junto com os campos de evento de entidade listados aqui.

Defina `type` como `"entity"` para disparar funções automaticamente quando registros do banco de dados são criados, atualizados ou excluídos.

Automations de entidade podem escutar 1 ou mais tipos de evento em uma entidade específica.

| Campo         | Tipo       | Obrigatório | Descrição                                                                                                             |
| ------------- | ---------- | ----------- | --------------------------------------------------------------------------------------------------------------------- |
| `entity_name` | `string`   | Sim         | Nome da entidade a monitorar.                                                                                         |
| `event_types` | `string[]` | Sim         | Eventos do banco de dados a escutar. Valores possíveis: `"create"`, `"update"`, `"delete"`. Pelo menos 1 obrigatório. |

#### Exemplos de eventos de entidade

Os exemplos a seguir mostram como disparar funções com base em eventos de entidade:

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

### Connector automations

Use os [campos comuns para todas as automations](#common-fields-for-all-automations) junto com os campos específicos de conector listados aqui.

Defina `type` como `"connector"` para disparar funções quando uma integração conectada envia um evento de webhook. Use estes para reagir à atividade de serviços externos em tempo real. Por exemplo, você pode analisar um novo e-mail, sincronizar uma mudança de calendário ou responder a uma atualização de arquivo no Google Drive.

Você pode opcionalmente adicionar [condições de gatilho](#trigger-conditions) para filtrar eventos para que sua função só rode quando o payload corresponder a regras que você define.

Quando uma connector automation dispara, sua função recebe um [payload de webhook](#webhook-payload) estruturado contendo o tipo de evento, detalhes da integração e os dados brutos do serviço externo.

<Note>
  O conector deve estar configurado no seu projeto e autorizado antes do deploy. Veja [Conectores compartilhados](/developers/backend/resources/connectors/shared-connectors) para instruções de configuração.
</Note>

| Campo                | Tipo       | Obrigatório | Descrição                                                                                                                                                                                                                                             |
| -------------------- | ---------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `integration_type`   | `string`   | Sim         | O identificador do tipo de conector para escutar. Veja [integrações suportadas](#supported-integrations-and-events) para valores aceitos.                                                                                                             |
| `events`             | `string[]` | Sim         | Um ou mais nomes de evento de webhook para assinar. Veja [integrações suportadas](#supported-integrations-and-events) para eventos disponíveis por conector.                                                                                          |
| `resource_id`        | `string`   | Condicional | Restringe a automation a um recurso específico. O formato esperado depende do conector. Veja [Formatos de Resource ID](#resource-id-formats) abaixo. Obrigatório para eventos de Google Drive com escopo de arquivo. Opcional para outros conectores. |
| `trigger_conditions` | `object`   | Não         | Regras que devem corresponder ao evento recebido antes que sua função seja executada. Se o evento não corresponder, a execução é pulada. Veja [Condições de gatilho](#trigger-conditions) para a referência completa.                                 |

#### Integrações e eventos suportados

| Conector             | `integration_type` | Valor de `events`       | Descrição                                                                                                              |
| -------------------- | ------------------ | ----------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| Gmail                | `gmail`            | `mailbox`               | Qualquer mudança na caixa de e-mail, incluindo novas mensagens, atualizações de label e mudanças de status de leitura. |
| Google Calendar      | `googlecalendar`   | `events`                | Qualquer mudança em evento de calendário, incluindo criado, atualizado e excluído.                                     |
| Google Drive         | `googledrive`      | `changes`               | Qualquer mudança no drive, incluindo arquivos adicionados, modificados ou excluídos.                                   |
| Google Drive         | `googledrive`      | `file`                  | Qualquer mudança em um arquivo específico (requer `resource_id`).                                                      |
| Google Drive         | `googledrive`      | `file.update`           | Conteúdo ou propriedades do arquivo mudaram (requer `resource_id`).                                                    |
| Google Drive         | `googledrive`      | `file.trash`            | Arquivo movido para a lixeira (requer `resource_id`).                                                                  |
| Google Drive         | `googledrive`      | `file.untrash`          | Arquivo restaurado da lixeira (requer `resource_id`).                                                                  |
| Google Drive         | `googledrive`      | `file.delete`           | Arquivo excluído permanentemente (requer `resource_id`).                                                               |
| Microsoft OneDrive   | `one_drive`        | `updated`               | Qualquer mudança em arquivo ou pasta, incluindo criado, modificado e excluído.                                         |
| Microsoft Outlook    | `outlook`          | `created`               | Um novo e-mail, evento de calendário ou contato é criado.                                                              |
| Microsoft Outlook    | `outlook`          | `updated`               | Um e-mail, evento de calendário ou contato é atualizado.                                                               |
| Microsoft Outlook    | `outlook`          | `deleted`               | Um e-mail, evento de calendário ou contato é excluído.                                                                 |
| Microsoft SharePoint | `share_point`      | `updated`               | Quando um item de lista ou documento é criado, modificado ou excluído.                                                 |
| Microsoft Teams      | `microsoft_teams`  | `created`               | Quando uma nova mensagem de chat é postada.                                                                            |
| Microsoft Teams      | `microsoft_teams`  | `updated`               | Quando uma mensagem de chat é atualizada.                                                                              |
| Microsoft Teams      | `microsoft_teams`  | `deleted`               | Quando uma mensagem de chat é excluída.                                                                                |
| Slack                | `slack`            | `message`               | Quando uma mensagem é postada em um canal.                                                                             |
| Slack                | `slack`            | `message.im`            | Quando uma mensagem direta é postada.                                                                                  |
| Slack                | `slack`            | `message.groups`        | Quando uma mensagem é postada em um canal privado.                                                                     |
| Slack                | `slack`            | `message.channels`      | Quando uma mensagem é postada em um canal público.                                                                     |
| Slack                | `slack`            | `message.mpim`          | Quando uma mensagem é postada em um IM multipartido.                                                                   |
| Slack                | `slack`            | `reaction_added`        | Quando uma reação é adicionada a uma mensagem.                                                                         |
| Slack                | `slack`            | `reaction_removed`      | Quando uma reação é removida de uma mensagem.                                                                          |
| Slack                | `slack`            | `member_joined_channel` | Quando um usuário entra em um canal.                                                                                   |
| Slack                | `slack`            | `member_left_channel`   | Quando um usuário sai de um canal.                                                                                     |
| Slack                | `slack`            | `file_shared`           | Quando um arquivo é compartilhado.                                                                                     |

<Tip>
  O evento `mailbox` do Gmail dispara para qualquer mudança na caixa de e-mail, não apenas novas mensagens. Para executar sua função somente quando novos e-mails chegarem, adicione uma condição de gatilho: `{ "field": "has_new_messages", "operator": "equals", "value": true }`.
</Tip>

<Note>
  Connector automations do Slack exigem condições de gatilho. O deploy falhará se nenhuma condição for definida para connector automations do Slack.
</Note>

#### Formatos de Resource ID

O valor esperado para `resource_id` varia por conector:

* **Google Drive:** O ID do arquivo. Obrigatório para eventos com escopo de arquivo (`file`, `file.update`, `file.trash`, `file.untrash`, `file.delete`).
* **Gmail:** Uma lista separada por vírgulas de IDs de label para observar. Padrão é `"INBOX"` se omitido.
* **Microsoft Teams:** `{teamId}/{channelId}` para observar um canal específico, ou `{chatId}` para observar um chat específico.
* **SharePoint:** `{siteId}/{listId}` para observar uma lista específica.

#### Condições de gatilho

Use `trigger_conditions` para filtrar eventos de webhook para que sua função só rode quando o payload corresponder a regras que você define. Se nenhuma condição for definida, a função roda para cada evento recebido. Veja [Exemplos de connector automation](#connector-automation-examples) para configurações completas.

<ResponseField name="logic" type="string">
  Como combinar as condições. Valores possíveis: `"and"` (todas devem corresponder), `"or"` (qualquer deve corresponder). O padrão é `"and"`.
</ResponseField>

<ResponseField name="conditions" type="array" required>
  Um ou mais objetos de condição ou grupos de condição aninhados. Máximo de 20 condições folha e 5 níveis de aninhamento.

  <Expandable title="Campos do objeto de condição">
    <ResponseField name="field" type="string" required>
      Caminho separado por pontos no payload do webhook. Por exemplo, `"status"` lê `payload.data.status`, e `"sender.email"` lê `payload.data.sender.email`.
    </ResponseField>

    <ResponseField name="operator" type="string" required>
      Como comparar o valor do campo.

      <Expandable title="Operadores suportados">
        | Operador       | Descrição                                                                              |
        | -------------- | -------------------------------------------------------------------------------------- |
        | `equals`       | Valor do campo corresponde exatamente a `value`.                                       |
        | `not_equals`   | Valor do campo não corresponde a `value`.                                              |
        | `contains`     | Valor do campo contém `value` como substring.                                          |
        | `not_contains` | Valor do campo não contém `value` como substring.                                      |
        | `starts_with`  | Valor do campo começa com `value`.                                                     |
        | `ends_with`    | Valor do campo termina com `value`.                                                    |
        | `gt`           | Valor do campo é maior que `value`.                                                    |
        | `gte`          | Valor do campo é maior ou igual a `value`.                                             |
        | `lt`           | Valor do campo é menor que `value`.                                                    |
        | `lte`          | Valor do campo é menor ou igual a `value`.                                             |
        | `in_list`      | Valor do campo é um dos itens em `value` (um array).                                   |
        | `not_in_list`  | Valor do campo não é um dos itens em `value` (um array).                               |
        | `exists`       | Campo está presente e não é null. Não é necessário `value`.                            |
        | `not_exists`   | Campo é null ou ausente. Não é necessário `value`.                                     |
        | `is_empty`     | Campo é null, string vazia, array vazio ou objeto vazio. Não é necessário `value`.     |
        | `is_not_empty` | Campo não é null, string vazia, array vazio ou objeto vazio. Não é necessário `value`. |
      </Expandable>
    </ResponseField>

    <ResponseField name="value" type="any">
      O valor para comparar. Não é necessário para `exists`, `not_exists`, `is_empty` e `is_not_empty`.
    </ResponseField>
  </Expandable>
</ResponseField>

#### Payload do webhook

Quando uma connector automation dispara sua função, o corpo da requisição contém um objeto `payload` com a seguinte estrutura. Veja [Exemplos de connector automation](#connector-automation-examples) para uma função que lê o payload.

| Campo                               | Tipo      | Descrição                                                                                                |
| ----------------------------------- | --------- | -------------------------------------------------------------------------------------------------------- |
| `payload.automation.id`             | `string`  | ID da automation que disparou esta execução.                                                             |
| `payload.automation.name`           | `string`  | Nome da automation.                                                                                      |
| `payload.automation.type`           | `string`  | Sempre `"connector"`.                                                                                    |
| `payload.event.type`                | `string`  | O nome do evento do webhook. Por exemplo, `"mailbox"`, `"events"` ou `"changes"`.                        |
| `payload.event.integration_type`    | `string`  | O tipo de conector. Por exemplo, `"gmail"` ou `"googlecalendar"`.                                        |
| `payload.event.provider_identifier` | `string`  | O identificador da conta do provedor usado para roteamento.                                              |
| `payload.data`                      | `object`  | O payload bruto do webhook do serviço externo. Definido como `null` quando `payload_too_large` é `true`. |
| `payload.payload_too_large`         | `boolean` | É `true` quando o payload do webhook excedeu \~200 KB e `data` é `null`.                                 |

#### Exemplos de connector automation

<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 função

Passe dados para sua função quando ela é disparada incluindo o campo `function_args` na sua configuração de automation. Isso é útil quando uma função lida com múltiplas automations com comportamentos diferentes, como uma função de sincronização que roda incrementalmente a cada 15 minutos, mas faz uma sincronização completa diariamente.

Acesse esses argumentos no código da sua função através do corpo da requisição.

#### Exemplo de argumentos de função

Este exemplo mostra uma função que lida com modos de sincronização incremental e completa com base no config da automation:

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

## Implante automations

Implante funções de backend com suas automations usando o comando da CLI [`functions deploy`](/developers/references/cli/commands/functions-deploy) ou o comando unificado [`deploy`](/developers/references/cli/commands/deploy). Você pode implantar funções específicas pelo nome com `functions deploy <names...>`.

O deploy é atômico por função. Uma função só é considerada implantada se tanto o deploy do Deno quanto todas as suas automations forem bem-sucedidas. Se qualquer automation falhar ao implantar, todo o deploy da função é revertido.

Após implantar, a CLI mostra o status por função: deployed, unchanged ou error.

## Gerencie automations no dashboard

<Warning>
  Qualquer mudança feita no dashboard será sobrescrita na próxima vez que você executar [`functions deploy`](/developers/references/cli/commands/functions-deploy). Não há sincronização bidirecional entre o dashboard e seus arquivos locais. Automations definidas nos seus arquivos `function.jsonc` locais são a fonte da verdade.

  Se você quiser fazer mudanças nas suas automations, atualize seus arquivos `function.jsonc` locais e faça redeploy. Use o dashboard para monitorar logs de execução e disparar automations manualmente quando necessário.
</Warning>

Veja e gerencie suas automations no dashboard da Base44 na aba **Automations**. No dashboard, você pode:

* Ver logs e histórico de execução
* Executar automations manualmente para testes
* Monitorar o status das automations

## Veja também

* [Funções de backend](/developers/backend/resources/backend-functions/overview): Saiba sobre funções de backend
* [`functions deploy`](/developers/references/cli/commands/functions-deploy): Implante funções com automations
* [`deploy`](/developers/references/cli/commands/deploy): Implante todos os recursos de uma vez
* [`logs`](/developers/references/cli/commands/logs): Veja logs de função

<Note>Esta página foi traduzida usando IA. Para informações mais precisas e atualizadas, consulte a [versão em inglês](/). </Note>
