我正在尝试为 Amazon SNS 设置 Webhook。SNS 将向 webhook 发送一个 JSON 对象。根据 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(...);
}
}
我需要使用这里描述的第二种方法吗?event:param('body') 会从 SNS 消息中获取 JSON 数据吗?