我正在尝试为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数据吗?
发布于 2011-06-04 06:12:19
您的第二个代码块非常接近。
rule sns_json {
select when webhook sometopic
pre {
body = event:param('request_body').decode();
msg_type = body.pick("Type");
signature = body.pick("Signature");
...
}
if msg_type eq "SubscriptionConfirmation" && valid(signature) then
{
confirm_subscription(...);
}
}如果您先有了这个规则,我会记得在fired的postlude块中添加一个last。
您还可以使用已解码的消息作为事件参数引发一个显式事件,并包括消息的类型,以便您可以编写显式处理不同类型的规则,而不是多次解码正文。
https://stackoverflow.com/questions/6231151
复制相似问题