Amazon SNSでメッセージフィルタリングポリシーに合致したサブスクリプションにのみSMSを送信する

2021.10.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部 IoT事業部の若槻です。

今回は、Amazon SNSでメッセージフィルタリングポリシーに合致したサブスクリプションにのみSMSを送信してみました。

メッセージフィルタリングポリシーとは

Amazon SNSでは既定ではメッセージを受信したらそのトピックのすべてのサブスクリプションにメッセージ送信が行われますが、サブスクリプションにメッセージフィルタリングポリシーを設定することにより、メッセージの件名や属性値によってそのメッセージを受信するかどうかの条件を設定できます。

メッセージの内容によって通知先を変えたい場合に便利です。

やってみる

トピックの作成

myTopicを作成します。

サブスクリプションの作成

1つ目のサブスクリプションの作成(SIM01とします。)

  • プロトコル:SMS
  • エンドポイント:+8170XXXXXXXX
  • サブスクリプションフィルターポリシー:{"target:["SIM01"]"}

2つ目のサブスクリプションの作成(SIM02とします。)

  • プロトコル:SMS
  • エンドポイント:+8180XXXXXXXX
  • サブスクリプションフィルターポリシー:{"target:["SIM02"]"}

トピックにSMSをエンドポイントとするサブスクリプションを2つ作成できました。

トピックへのメッセージ発行

SIM01にのみ送信

コンソールで以下の属性を設定したメッセージを発行します。

  • メッセージ属性
    • タイプ:String
    • 名前:target
    • 値:SIM01

SIM01のスマートフォンでのみSMSを受信しました。

SIM02にのみ送信

コンソールで以下の属性を設定したメッセージを発行します。

  • メッセージ属性
    • タイプ:String
    • 名前:target
    • 値:SIM02

SIM02のスマートフォンでのみSMSを受信しました。

SIM01およびSIM02に送信

コンソールで以下の属性を設定したメッセージを発行します。

  • メッセージ属性
    • タイプ:String.Array
    • 名前:target
    • 値:["SIM01","SIM02"]

SIM01SIM02の両方のスマートフォンでSMSを受信できました。

備考

  • サブスクリプションフィルターポリシーの条件にエンドポイントの値を使用できればポリシーを一律にそうだったのですが、現状できないようです。
  • 送信先を頻繁に変更する場合はサブスクリプションのメンテナンスが大変なので、Amazon Connectを使った方が良さそうです。

参考

以上