# Configuração de Indexação

É possível realizar a indexação dos dados que são trafegados no Firehose para que sejam filtrados por uma [configuracao-de-filtro](https://docs-firehose.blip.ai/configuracoes/configuracao-de-filtro "mention").

Essa configuração é útil em casos onde uma configuração gera dados comuns à N configurações diferentes do Firehose, permitindo a realização de filtros em cima desses dados.

{% @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 indexação:

| Campo             | Descrição                                    | Valor                                                                                                                                                 |
| ----------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| index.description | Descrição do estágio de indexação            | Tipo: string                                                                                                                                          |
| index.key         | Nome do campo a ser indexado                 | <p>Tipo: enum\[type channel bot\_id group tenant to from content]<br>Obrigatório</p>                                                                  |
| index.value       | Valor a ser indexado no campo                | <p>Tipo: string\*<br>Obrigatório se o campo <code>values</code> não for informado</p>                                                                 |
| index.values      | Valores a serem indexados no campo           | <p>Tipo: \[]string\*<br>Obrigatório se o campo <code>value</code> não for informado ou se o campo <code>key</code> for igual a <code>group</code></p> |
| index.required    | Indica se o campo é obrigatório na indexação | <p>Tipo: boolean<br>Obrigatório</p>                                                                                                                   |

\* Aceita notação [JsonPath](https://goessner.net/articles/JsonPath/) para buscar campos do json. [Ferramenta](https://jsonpath.com/) útil para testar a notação.

## 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 '{
    "input": {
        "type": "HTTP"
    },
    "index": [
        {
            "description": "INDEX-DESCRIPTION-1",
            "key": "group",
            "values": [
                "GROUP-ID"
            ],
            "required": true
        },
        {
            "description": "INDEX-DESCRIPTION-2",
            "key": "type",
            "value": "command",
            "required": true
        },
        {
            "description": "INDEX-DESCRIPTION-3",
            "key": "bot_id",
            "value": "$..from",
            "required": true
        }
    ]
}'
```

No exemplo acima foi gerada uma configuração do Firehose que recebe dados via entrada [http](https://docs-firehose.blip.ai/configuracoes/configuracao-de-entrada/http "mention") e indexa os campos `group` com o valor `GROUP-ID`, `type` com o valor `command` e `bot_id` com o valor recuperado de forma dinâmica da mensagem json (usando [JsonPath](https://goessner.net/articles/JsonPath/)) a partir do campo no primeiro nível `from`.

## Limitações

O usuário precisa ter permissão de indexação dos dados que pode ser solicitada ao time do Firehose. Além da permissão de indexação o usuário precisa ter permissão de cada campo a ser indexado.

A indexação pode ser utilizada em configurações que possuem apenas entrada e não pode ser utilizada junto com uma [configuracao-de-filtro](https://docs-firehose.blip.ai/configuracoes/configuracao-de-filtro "mention").

O grupo sempre precisa ser indexado e o usuário tem que pertencer a ele ou ter permissão de indexar dados naquele grupo.
