# Como criar device groups

import Tabs from '~/components/tabs/Tabs'


Agrupe usuários finais com base em seus dispositivos, sistemas operacionais ou navegadores com informações fornecidas pelo cabeçalho de requisição HTTP `User-Agent`. Ao usar [Device Groups](/pt-br/documentacao/produtos/build/applications/device-groups/) para categorizar requisições, você pode tornar sua aplicação mais responsiva.

Com este guia, você irá criar e ativar um novo device group para identificar dispositivos móveis que acessam sua aplicação.

---

<Tabs client:visible>
    <Fragment slot="tab.console">Console</Fragment>
    <Fragment slot="tab.api">API</Fragment>

<Fragment slot="panel.console">
1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Applications**.
2. Clique na application para a qual você deseja criar um novo device group.
3. Selecione a aba **Device Groups**.
4. Clique no botão **+ Device Group**.
5. Nomeie seu device group. O nome do seu device group não pode conter espaços e deve ter apenas caracteres alfanuméricos. Por exemplo: `Mobile`.
6. No campo **Match to User-Agent**, especifique uma expressão regular que atenda aos critérios desejados. Por exemplo: `(Mobile|iPhone|Android)`.
7. Clique no botão **Save**.

:::caution[atenção]
O procedimento descrito abaixo é uma solução temporária para verificar a validade do seu device group. Uma vez que os testes tenham sido feitos com sucesso, você deve desativar a regra.
:::

Agora que seu device group está configurado, você pode usar o **Rules Engine** para determinar qual ação deve ser tomada se a expressão for correspondida a um cabeçalho `User-Agent`. Neste caso, um cabeçalho personalizado `Device-Is` será recebido na resposta:

1. Navegue até a aba **Rules Engine**.
2. Clique em **+ Rule**.
3. Dê um nome à sua regra. Por exemplo: `Device Group: Mobile`.
4. Selecione **Response Phase**.
5. Na seção **Criteria**, selecione a variável `${device_group}`.
6. Selecione o operador **is equal**.
7. Adicione o nome do device group conforme configurado nas instruções anteriores. Por exemplo: `Mobile`.
8. Na seção **Behavior**, selecione o comportamento **Add Response Header**.
9. Como argumento, adicione `Device-Is: Mobile`.
10. Clique no botão **Save**.
11. Aguarde alguns minutos para que as alterações se propaguem pelo edge.

Se o seu navegador atual enviar um cabeçalho `User-Agent` semelhante ao exemplo, você pode testar se a requisição passou [acessando sua aplicação](/pt-br/documentacao/produtos/guias/build/trabalhar-com-rules-engine/) de um dispositivo móvel ou injetando o cabeçalho e seu valor à requisição usando o seguinte comando:

```bash
curl -I https://xxxxxxxxxx.map.azionedge.net/ -H "User-Agent: iPhone Android"
```

Você deve receber uma lista de cabeçalhos incluindo o cabeçalho personalizado adicionado pela regra: `device-is: Mobile`. Agora que você verificou que os dispositivos estão sendo corretamente categorizados, você pode [personalizar o comportamento desejado](/pt-br/documentacao/produtos/guias/build/trabalhar-com-rules-engine/) usando a mesma regra.
</Fragment>

<Fragment slot="panel.api">
1. Execute a seguinte requisição `POST` no seu terminal, substituindo `[TOKEN VALUE]` pelo seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/) e a variável `<application_id>` pelo [ID da sua application](/pt-br/documentacao/produtos/guias/build/definir-configuracoes-principais/):

```bash
curl --location 'https://api.azionapi.net/edge_applications/<application_id>/device_groups' \
--header 'Accept: application/json; version=3' \
--header 'Content-Type: application/json' \
--header 'Authorization: Token [TOKEN VALUE]' \
--data '{
    "name": "Mobile",
    "user_agent": "(Mobile|iPhone|Android)"
}'
```

  | Chave | Descrição |
  | --- | --- |
  | `name` | O nome do device group. Deve ser alfanumérico. |
  | `user_agent` | A expressão regular que deve ser correspondida ao conteúdo do cabeçalho `User-Agent` da requisição. |

2. Você receberá uma resposta semelhante a esta:

```json
{
    "results": {
        "id": <device_group_id>,
        "name": "Mobile",
        "user_agent": "(Mobile|iPhone|Android)"
    }
}
```

:::caution[Atenção]
O procedimento descrito abaixo é uma solução temporária para verificar a validade do seu device group. Uma vez que os testes tenham sido feitos com sucesso, você deve desativar ou modificar a regra.
:::

3. Execute a seguinte requisição `POST` no seu terminal, substituindo `[TOKEN VALUE]` pelo seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/), a variável `<application_id>` pelo [ID da sua application](/pt-br/documentacao/produtos/guias/build/definir-configuracoes-principais/), e a variável `input_value` pelo nome do seu device group:

```bash
curl --location 'https://api.azionapi.net/edge_applications/<application_id>/rules_engine/response/rules' \
--header 'Accept: application/json; version=3' \
--header 'Content-Type: application/json' \
--header 'Authorization: Token [TOKEN VALUE]' \
--data '{
    "name": "DG - Mobile",
    "behaviors": [
        {
            "name": "add_response_header",
            "target": "Device-Is: Mobile device"
        }
    ],
    "criteria": [
        [
            {
                "variable": "${device_group}",
                "operator": "is_equal",
                "conditional": "if",
                "input_value": "Mobile"
            }
        ]
    ]
}'
```

4. Você receberá uma resposta semelhante a esta:

```json
{
    "results": {
        "id": <rule_id>,
        "name": "DG - Mobile",
        "phase": "response",
        "behaviors": [
            {
                "name": "add_response_header",
                "target": "Device-Is: Mobile device"
            }
        ],
        "criteria": [
            [
                {
                    "variable": "${device_group}",
                    "operator": "is_equal",
                    "conditional": "if",
                    "input_value": "Mobile"
                }
            ]
        ],
        "is_active": true,
        "order": 3,
        "description": ""
    },
}
```

5. Aguarde alguns minutos para que as alterações se propaguem para os edge nodes.
6. Execute a seguinte requisição cURL manipulando o cabeçalho `User-Agent` para corresponder ao device group:

```bash
curl -I https://xxxxxxxxxx.map.azionedge.net/ -H "User-Agent: Android"
```

7. Se você receber uma resposta semelhante à seguinte, seu device group foi categorizado com sucesso:

```bash
HTTP/2 200 
content-type: text/html; charset=utf-8
content-length: 9593
device-is: Mobile device
```

Agora você pode desativar a regra ou [criar uma regra diferente](/pt-br/documentacao/produtos/guias/build/trabalhar-com-rules-engine/) para ajustar as configurações da aplicação às suas necessidades.

:::tip
Confira a [documentação da API da Azion](https://api.azion.com/) e a [especificação OpenAPI](https://github.com/aziontech/azionapi-openapi/) para saber mais sobre todos os recursos disponíveis via API.
:::
</Fragment>

</Tabs>

---