

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 필터 규칙을 사용하여 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 필터 규칙 내의 개별 제약 조건은 최대 다섯 개입니다.
+ 전체 필터 규칙의 최대 복잡도는 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"]
    }
}
```