KRL Webhooks получают JSON - PullRequest
2 голосов
/ 03 июня 2011

Я пытаюсь настроить Webhook для Amazon SNS.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(...);
  }
}

Нужно ли использовать второй методописано здесь?Будет ли событие: param ('body') получать данные JSON из сообщения SNS?

1 Ответ

2 голосов
/ 04 июня 2011

Ваш второй кодовый блок очень близко. Вот оно, переписано для использования правильного события: param ()

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(...);
  }
}

Если бы у вас было это правило первым, я бы не забыл добавить last в fired блок postlude.

Вместо многократного декодирования тела вы также можете вызвать явное событие с уже декодированным сообщением в качестве параметра события и включить тип сообщения, чтобы вы могли написать правила, которые явно обрабатывают различные типы.

...