

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Amazon Chime SDK 消息传递中使用筛选规则来筛选消息
<a name="filter-msgs"></a>

Amazon Chime SDK 支持对应用程序实例用户的通道成员资格设置筛选规则，以限制他们将收到的消息。筛选规则在通道成员资格上设置，并根据消息属性映射运行。消息属性映射必须是字符串键到字符串值的映射。筛选规则支持包含和专属精确字符串匹配。

**重要**  
Amazon Chime SDK 仅支持将转义的 JSON 字符串作为筛选规则。
通知通道的所有成员都会收到推送通知，包括消息发送者。要防止发生这种情况，请参阅下面的第一个示例规则。

要对通道成员资格设置筛选规则，请使用 [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) 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) API 调用的一部分。

**Topics**
+ [筛选规则类型](#filter-rule-types)
+ [筛选规则限制](#filter-rule-limits)
+ [筛选规则示例](#example-preference-rule)

## 筛选规则类型
<a name="filter-rule-types"></a>

Amazon Chime SDK 支持以下筛选规则类型：
+ 包含精确字符串匹配
+ 专属精确字符串匹配
+ 使用 AND 或 OR 的多重筛选规则

## 筛选规则限制
<a name="filter-rule-limits"></a>

Amazon Chime SDK 对筛选规则施加了以下限制：
+ 我们只支持精确字符串匹配。
+ 筛选规则的总大小为 2KB。
+ 消息属性的总大小为 1KB。
+ OR 筛选规则中最多有五 (5) 个单独的约束。
+ 整个筛选规则的最大复杂度为 20。*复杂度*是根据筛选规则中键值数量的总和计算得出的：

  例如，此筛选规则的复杂度为 4。

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

  我们按如下方式计算该值：

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

## 筛选规则示例
<a name="example-preference-rule"></a>

以下示例显示了使用通道成员资格首选项和筛选规则的几种方法。

**防止邮件发送给发件人**  
此筛选规则会向除消息发送者之外的所有通道成员发送消息。

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

具有上述首选项的应用实例用户会收到包含以下属性的通道消息：

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

**包含字符串匹配**  
 此筛选规则允许包含如下消息属性的任何消息：键为“mention”且值为“Bob”。

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

具有上述首选项的应用实例用户会收到包含以下消息属性的通道消息：

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

但是，应用程序实例用户不会收到包含以下属性的通道消息：

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

**专属字符串匹配**  
 此筛选规则允许除包含如下属性的消息以外的任何消息：键为“type”且值为“Room”。

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

具有这些首选项的应用实例用户会收到包含以下消息属性的通道消息：

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

但是，应用程序实例用户看不到包含以下属性的通道消息：

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

**采用 AND 逻辑的多重筛选规则**  
当您将筛选规则与 AND 逻辑组合使用时，消息必须满足该筛选的所有筛选条件才能应用。

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

具有上述首选项的应用实例用户会收到包含以下消息属性的通道消息：

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

**采用 OR 逻辑的多重筛选规则**  
您可以使用 `$or` 来组合筛选规则与 OR 逻辑。当您使用 OR 逻辑时，消息必须满足筛选条件之一才能应用。

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

具有上述首选项的应用实例用户会收到包含以下消息属性的通道消息：

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

具有上述首选项的应用实例用户会收到包含以下消息属性的通道消息：

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