# Configuração de Filtro

É possível realizar a filtragem dos dados indexados via [configuracao-de-indexacao](https://docs-firehose.blip.ai/configuracoes/configuracao-de-indexacao "mention") no Firehose.

Essa configuração é útil em casos onde uma configuração recupera dados de uma fonte comum e permite que filtros sejam aplicados em cima desses dados garantindo que somente o que for necessário seja enviado para a sindicância de saída.

{% @mermaid/diagram content="flowchart LR
subgraph Config 1
Input1("Input")-->Index1("Index")
end
subgraph Config 2
F2("Filter")-->O2("Output")
end
subgraph Config 3
F3("Filter")-->O3("Output")
end

```
Index1 -- Index-ID -->F2
Index1 -- Index-ID -->F3" %}
```

## Parâmetros

Parâmetros aceitos na configuração de filtro:

| Campo                     | Descrição                                            | Valor                                                                                                                                                         |
| ------------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| filter.groups             | IDs dos grupos a serem filtrados                     | <p>Tipo: \[]string<br>Obrigatório</p>                                                                                                                         |
| filter.indexes            | IDs dos indexes a serem filtrados                    | <p>Tipo: \[]string<br>Obrigatório</p>                                                                                                                         |
| filter.description        | Descrição do estágio de filtro                       | Tipo: string                                                                                                                                                  |
| filter.filter             | Configurações do filtro                              | <p>Tipo: object<br>Obrigatório</p>                                                                                                                            |
| filter.filter.op          | Tipo de operação a ser aplicado no filtro            | <p>Tipo: enum\[AND GT LT GE LE EQ CONTAINS IN REGEX]<br>Obrigatório</p>                                                                                       |
| filter.filter.field\_name | Nome do campo a ser filtrado                         | <p>Tipo: enum\[type channel bot\_id tenant to from content]<br>Obrigatório se o campo <code>op</code> for diferente de <code>OR</code> e <code>AND</code></p> |
| filter.filter.value       | Valor a ser utilizado na aplicação do filtro         | <p>Tipo: string<br>Obrigatório se o campo <code>op</code> for diferente de <code>OR</code> e <code>AND</code></p>                                             |
| filter.filter.value\_type | Tipo do valor a ser utilizado na aplicação do filtro | <p>Tipo: enum\[string number bool]<br>Obrigatório se o campo <code>op</code> for diferente de <code>OR</code> e <code>AND</code></p>                          |
| filter.filter.filters     | Filtros a serem realizados                           | <p>Tipo: \[]filter<br>Obrigatório se o campo <code>op</code> for <code>OR</code> ou <code>AND</code></p>                                                      |

## Requisição

Para habilitar essa indexação a seguinte requisição pode ser realizada:

```bash
curl --location '<HOST>/v1/configs' \
--header 'Content-Type: application/json' \
--header 'Authorization: <ACCESS-TOKEN>' \
--data '{
    "filter": {
        "groups": [
            "GROUP-ID"
        ],
        "indexes": [
            "123"
        ],
        "description": "FILTER-DESCRIPTION",
        "filter": {
            "op": "AND",
            "filters": [
                {
                    "op": "EQ",
                    "field_name": "type",
                    "value": "command",
                    "value_type": "string"
                },
                {
                    "op": "EQ",
                    "field_name": "bot_id",
                    "value": "123",
                    "value_type": "string"
                }
            ]
        }
    },
    "output": {
        "target": "https://localhost",
        "type": "HTTP",
        "http": {
            "verify_token": "VERIFY-TOKEN",
            "verb": "POST"
        }
    }
}'
```

No exemplo acima foi gerada uma configuração do Firehose que filtra os dados gerados por [configuracao-de-indexacao](https://docs-firehose.blip.ai/configuracoes/configuracao-de-indexacao "mention") no grupo `GROUP-ID` e que possuem o campo `type` igual a `command` e o campo `bot_id` igual à `123`. Os dados filtrados são enviados para um endpoint HTTP configurado na saída.

## Limitações

* O usuário precisa ter permissão para filtrar os dados que pode ser solicitada ao time do Firehose. Além da permissão de filtro o usuário precisa ter permissão em cada campo a ser filtrado.
* O filtro não pode ser utilizado junto com uma [configuracao-de-indexacao](https://docs-firehose.blip.ai/configuracoes/configuracao-de-indexacao "mention").
* O usuário tem que pertencer ao grupo passado no filtro ou ter permissão para filtrar dados daquele grupo.
* O operador `REGEX` pode ser utilizado apenas quando o `field_name` for `content`.
