# Use a integração Scheduled Blocking

**Scheduled Blocking** da Azion é uma integração *serverless* disponível no **Marketplace** da Azion.

Essa integração permite controlar o acesso à sua aplicação com base em um cronograma, de acordo com suas necessidades.

---

## Obtenha a integração

Para usar a integração **Scheduled Blocking** fornecida pelo **Marketplace** da Azion, você deve seguir os passos:

1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Marketplace**.
2. Na homepage do Marketplace, selecione o card da integração.
3. Quando a página da integração abrir, clique no botão **Install**, localizado no canto inferior da direita.

Aparecerá uma mensagem indicando que sua integração foi instalada com sucesso.

:::tip
Você pode procurar qualquer integração navegando pelos cards, usando os filtros ou digitando uma palavra-chave na barra de busca.
:::

---

## Configure a integração

### Configure um firewall

Para instanciar a integração **Scheduled Blocking**, siga as etapas:

1. Em **Products menu**, selecione **Firewall** dentro da seção **SECURE**.
2. Clique no botão **+ Firewall**.
3. Dê um nome fácil de lembrar para o seu firewall.
4. Habilite o switch **Functions** para que você rode functions no seu firewall.
5. Clique no botão **Save**.

Pronto. Agora você instanciou o firewall para sua função.

### Instancie a integração

Para instanciar a integração **Scheduled Blocking**, ainda na página do **Firewall**:

1. Selecione a aba **Functions Instances**.
2. Clique no botão **+ Function Instance**.
3. Dê um nome fácil de lembrar para a sua instância.
4. No menu suspenso, selecione a função **Scheduled Blocking**.
  - Esta ação irá carregar a aba **Arguments**.

A aba **Args** carregará um arquivo `JSON` que se parece com o mostrado abaixo:

```json
{
  "schedule": [
    {
      "action": "deny",
      "execute_action_when": "in_interval",
      "interval": {
        "starts_at_utc": "00:00",
        "finishes_at_utc": "00:59"
      },
      "week_days": {
        "Sun": true,
        "Mon": true,
        "Tue": true,
        "Wed": true,
        "Thu": true,
        "Fri": false,
        "Sat": true
      }
    },
    {
      "action": "drop",
      "execute_action_when": "not_in_interval",
      "interval": {
        "starts_at_utc": "01:00",
        "finishes_at_utc": "20:00"
      },
      "week_days": {
        "Mon": true,
        "Tue": true
      }
    },
    {
      "action": "static_response",
      "execute_action_when": "in_interval",
      "static_response_data": {
        "status": 503,
        "message": "You can write a custom message here",
        "html": "<!-- Some HTML can go here -->"
      },
      "interval": {
        "starts_at_utc": "20:00",
        "finishes_at_utc": "23:59"
      },
      "week_days": {
        "Sun": true,
        "Sat": true
      }
    }
  ]
}
```

Os argumentos que você pode passar para este arquivo JSON são os seguintes:

| Atributo | Tipo de dado | Descrição |
|---|---|---|
| `action` | String | Define a ação que a função executará sempre que uma requisição corresponder aos critérios de disparo. <br /><br />Os valores possíveis são: <br />`Deny`: fechará a requisição com uma resposta HTTP 403 Proibida.<br />`Drop`: encerra o pedido sem enviar qualquer resposta ao cliente.<br />`static_response`: encerrará a requisição com uma resposta estática a ela. |
| `execute_action_when` | String | Os valores possíveis são:<br />`in_interval`<br />`not_in_interval` <br /><br />Quando este argumento é definido como `in_interval`, a `action` será executada sempre que esta função for chamada durante o intervalo de tempo definido. <br /> Quando o argumento é definido como `not_in_interval` a `action` será executada mesmo que a função seja chamada fora do intervalo de tempo definido. |
| `interval` | Dicionário de Strings | Define o intervalo de tempo. <br />Os valores devem estar no formato "HH:MM", com base em um relógio de 24 horas. <br />Esta função é usada no fuso horário UTC. |
| `interval.starts_at_utc` | String | Define a hora de início do intervalo. |
| `interval.finishes_at_utc` | String | Define a hora final do intervalo. |
| `week_days` | Dicionário de Booleanos | Define os dias da semana em que a função será executada. <br />Os índices do dicionário representam cada dia da semana. Espera-se que eles usem um formato de data EEE, de 3 letras, começando com maiúsculas. Por exemplo: "Sun" para domingo, "Mon" para segunda.<br />Se um dia inválido for usado, ele será ignorado. Se um dia não estiver presente no dicionário, ele será considerado `falso`. |
| `static_response_data` | Dicionário de Strings | Permite a personalização da página de resposta estática que será retornada sempre que a ação for definida como `static_response`. |
| `static_response_data.status` | Número | O código de status usado na resposta estática. |
| `static_response_data.message` | String | Este argumento permite que você personalize a mensagem exibida na página de resposta estática. |
| `static_response_data.html` | String | Permite que você forneça um HTML personalizado para ser usado ao fornecer a resposta estática. |

:::note
É importante notar que os valores de data são repassados em inglês, assim, atente-se ao fato de que as três letras devem ser condizentes com os dias da semana em inglês.

Para o valor `Static Response` no parâmetro action, você pode definir o código de status que será usado na resposta, bem como definir uma página HTML personalizada que será entregue aos seus usuários.
:::

5. Clique no botão **Save**. Sua integração está instanciada.

### Configure o Rules Engine

Para concluir, você precisa configurar o [Rules Engine](/pt-br/documentacao/produtos/secure/firewall/rules-engine/) para determinar o *behavior* (comportamento) e os *criteria* (critérios) para executar a função.

Ainda na página **Firewall**:

1. Selecione a aba **Rules Engine**.
2. Clique no botão **+ Rule Engine**.
3. Dê um nome fácil de lembrar à sua nova regra.
4. Selecione um *criteria* (critério) para executar a integração.
  - Exemplo: if `Host` *matches* `yourdomain.com`.
5. Abaixo, selecione um *behavior* (comportamento) para os *criteria* (critérios). Neste caso, será **Run Function**.
   - Selecione a função adequada de acordo com o nome que você deu na etapa de instanciação.
6. Clique no botão **Save**.

Agora, no Console, você deve configurar seu domínio para que ele seja protegido pelo seu firewall.

7. No **Products menu**, selecione **Workloads**.
8. Clique no domínio que você deseja proteger com sua função **Scheduled Blocking**.
9. Na seção **Settings**, clique no seletor de `Firewall` e escolha o firewall que você acabou de criar.
10. Clique no botão **Save**.

Pronto. Agora, a integração **Scheduled Blocking** está em execução para cada requisição feita ao domínio que você indicou.

---