

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# フィルタルールを使用して 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 のフィルタルールには、次のような制限があります。
+ 文字列の完全一致にのみ対応しています。
+ フィルタルールの合計サイズは 2 KB です。
+ メッセージ属性の合計サイズは 1 KB です。
+ 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 ロジックを使用する場合、メッセージは、適用されるフィルタ条件の 1 つを満たす必要があります。

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

上記が設定されたアプリインスタンスユーザーは、次のメッセージ属性を持つチャネルメッセージを受信します。

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

上記が設定されたアプリインスタンスユーザーは、次のメッセージ属性を持つチャネルメッセージを受信します。

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