Amazon SNS の Webhook をセットアップしようとしています。SNS は JSON オブジェクトを Webhook に送信します。KRL ドキュメントに基づいて、event:param('name') を使用してイベント パラメータを取得できます。これはフォーム エンコードされたデータでは機能しますが、JSON ではどうでしょうか。
postbin.org に電話をかけたところ、postbin は次のように報告しました。
body {
"Message": "You have ...",
"MessageId": "958....",
"Signature": "vo3v5f....",
...
}
KRLで書きたいことは次のとおりです。
rule sns_webhook {
select when webhook sometopic Type "SubscriptionConfirmation"
pre {
topic_arn = event:param("TopicARN");
signature = event:param("Signature");
message = event:param("Message");
subscribe_url = event:param("SubscribeURL");
}
if valid_signature(signature) then {
confirm_subscription(subscribe_url);
}
}
これはおそらく HTTP フォームでエンコードされたデータに対しては機能しますが、JSON では次のものが必要になると思います。
rule sns_json {
select when webhook sometopic
pre {
body = event:param('body').decode();
msg_type = body.pick("Type");
signature = body.pick("Signature");
...
}
if msg_type eq "SubscriptionConfirmation" && valid(signature) then
{
confirm_subscription(...);
}
}
ここで説明されている 2 番目の方法を使用する必要がありますか? event:param('body') は SNS メッセージから JSON データを取得しますか?