

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Usar regras de filtro para filtrar mensagens do sistema de mensagens do SDK do Amazon Chime
<a name="filter-msgs"></a>

O SDK do Amazon Chime suporta a configuração de regras de filtro na associação ao canal do usuário de uma instância de aplicativo para limitar a mensagem que ele receberá. As regras de filtro são definidas na associação do canal e são executadas no mapa de atributos da mensagem. O mapa de atributos da mensagem deve ser um mapa de chaves de string para valores de string. As regras de filtro oferecem suporte à inclusão e exclusão com correspondência exata de strings.

**Importante**  
O SDK do Amazon Chime só oferece suporte a strings JSON escapadas como regra de filtro.
Todos os membros de um canal de notificação recebem as notificações por push, inclusive os remetentes das mensagens. Para evitar que isso aconteça, veja o primeiro exemplo de regra abaixo.

Para definir regras de filtro na associação de canal, use a API [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_PutChannelMembershipPreferences.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_PutChannelMembershipPreferences.html). É possível incluir atributos da mensagem em uma mensagem do canal como parte da chamada de API [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_SendChannelMessage.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_SendChannelMessage.html).

**Topics**
+ [Tipos de regra de filtros](#filter-rule-types)
+ [Limites de regra de filtros](#filter-rule-limits)
+ [Exemplo de regras de filtro](#example-preference-rule)

## Tipos de regra de filtros
<a name="filter-rule-types"></a>

O SDK do Amazon Chime é compatível com os seguintes tipos de regras de filtro: 
+ Correspondência exata inclusiva de strings
+ Correspondência de strings exata exclusiva
+ Várias regras de filtro que usam AND ou OR

## Limites de regra de filtros
<a name="filter-rule-limits"></a>

O SDK do Amazon Chime impõe as seguintes restrições às regras de filtro:
+ Só suportamos a correspondência exata de strings.
+ Um tamanho total de regras de filtro de 2 KB.
+ Um tamanho total doe atributo de mensagem de 1 KB.
+ Um máximo de cinco (5) restrições separadas dentro de uma regra de filtro OR.
+ Uma complexidade máxima de 20 para toda a regra do filtro. A *complexidade* é calculada como a soma do número de chaves e valores na regra do filtro:

  Por exemplo, essa regra de filtro tem uma complexidade de 4.

  ```
  "FilterRule": "{\"type\":[{\"anything-but\": [\"Room\"]}],\"mention\":[\"Bob\"]}
  ```

  Calculamos esse valor da seguinte forma:

  ```
  Keys = “type” and “mention” - Complexity 2
  Values = "Room" and "Bob" -   Complexity 2
  
                        Total complexity = 4
  ```

## Exemplo de regras de filtro
<a name="example-preference-rule"></a>

Os exemplos a seguir mostram várias maneiras de usar as preferências de associação ao canal e as regras de filtro.

**Impedir que as mensagens cheguem aos remetentes**  
Essa regra de filtro envia mensagens a todos os membros do canal, exceto ao remetente da mensagem.

```
{
    "Preferences": {
        "PushNotifications": {
            "FilterRule": "{\"type\":[{\"anything-but\": [\"USER_ARN\"]}]}",
            "AllowNotifications": "FILTERED"
        }
    }
}
```

Os usuários da instância da aplicação com as preferências exibidas acima recebem uma mensagem do canal com os seguintes atributos:

```
"MessageAttributes": {
    "senderId": {
        "StringValues": ["USER_ARN"]
    }
}
```

**Correspondência de string inclusiva**  
 Essa regra de filtro permite qualquer mensagem com a chave de atributo de mensagem “menção” e o valor “Bob”. 

```
{
    "Preferences": {
        "PushNotifications": {
            "FilterRule": "{\"mention\":[\"Bob\"]}",
            "AllowNotifications": "FILTERED"
        }
    }
}
```

Um usuário da instância da aplicação com as preferências mostradas acima recebe uma mensagem do canal com os seguintes atributos:

```
"MessageAttributes": {
    "mention": {
        "StringValues": ["Bob", "Alice"]
    }
}
```

No entanto, o usuário da instância do aplicativo não receberá uma mensagem do canal com os seguintes atributos:

```
"MessageAttributes": {
    "mention": {
        "StringValues": ["Tom"]
    }
}
```

**Correspondência de string exclusiva**  
 Essa regra de filtro permite qualquer mensagem, exceto aquelas que contêm a chave de atributo “tipo” e o valor “Sala”. 

```
{
    "Preferences": {
        "PushNotifications": {
            "FilterRule": "{\"type\":[{\"anything-but\": [\"Room\"]}]}",
            "AllowNotifications": "FILTERED"
        }
    }
}
```

Um usuário da instância do aplicativo com essas preferências recebe uma mensagem de canal com os seguintes atributos da mensagem:

```
"MessageAttributes": {
    "type": {
        "StringValues": ["Conversation"]
    }
}
```

No entanto, o usuário da instância do aplicativo não vê uma mensagem do canal com os seguintes atributos:

```
"MessageAttributes": {
    "type": {
        "StringValues": ["Room"]
    }
}
```

**Uma regra de filtro múltiplo com lógica AND**  
Quando você combina regras de filtro com a lógica AND, uma mensagem deve atender a todos os critérios de filtragem para que o filtro seja aplicado.

```
{
    "Preferences": {
        "PushNotifications": {
            "FilterRule": "{\"type\":[{\"anything-but\": [\"Room\"]}],\"mention\":[\"Bob\"]}",
            "AllowNotifications": "FILTERED"
        }
    }
}
```

Um usuário da instância do aplicativo com as preferências acima recebe uma mensagem de canal com os seguintes atributos da mensagem:

```
"MessageAttributes": {
    "mention": {
        "StringValues": ["Bob"]
    },
    "type": {
        "StringValues": ["Conversation"]
    }
}
```

**Uma regra de filtro múltiplo com lógica OR**  
Use `$or` para combinar regras de filtro com a lógica OR. Quando você usa a lógica OR, uma mensagem deve atender a um dos critérios para que o filtro seja aplicado. 

```
{
    "Preferences": {
        "PushNotifications": {
            "FilterRule": "{\"$or\":[{\"mention\":[\"Bob\"]},{\"type\":[{\"anything-but\": [\"Room\"]}]}]}",
            "AllowNotifications": "FILTERED"
        }
    }
}
```

Um usuário da instância do aplicativo com as preferências acima recebe uma mensagem de canal com os seguintes atributos da mensagem:

```
"MessageAttributes": {
    "mention": {
        "StringValues": ["Bob"]
    }
}
```

Um usuário da instância do aplicativo com as preferências acima recebe uma mensagem de canal com os seguintes atributos da mensagem:

```
"MessageAttributes": {
    "type": {
        "StringValues": ["Conversation"]
    }
}
```