Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Wstęp
Funkcja zarabiania udostępnia zestaw interfejsów API, których możesz używać do testowania konfiguracji powiadomień. W tym celu możesz:
- Przetestuj wykonanie webhooków, aby mieć pewność, że powiadomienia są wysyłane
- Sprawdzanie i ponowne przetwarzanie powiadomień
Testowanie webhooków
Webhook definiuje moduł obsługi wywołania zwrotnego HTTP, który jest aktywowany przez zdarzenie. Informacje o konfigurowaniu webhooków znajdziesz w artykule Konfigurowanie powiadomień za pomocą webhooków.
Aby przetestować webhooki, wykonaj te czynności:
- Wyświetlanie dostępnych typów aktywatorów powiadomień webhooka
- Wyświetlanie przykładowego ładunku żądania na potrzeby testowania powiadomień webhooka
- Testowanie wykonania webhooka
Wyświetlanie dostępnych typów reguł powiadomień webhooka
Wyświetl dostępne typy aktywatorów powiadomień webhooka, wysyłając żądanie GET do tego zasobu:
/organizations/{org_name}/webhooks/{webhook_id}/test/{developer_email_or_id}/{app_id}/{product_id}/{rateplan_id}
Gdzie:
{org_name}
określa nazwę organizacji.{webhook_id}
określa identyfikator webhooka. Aby wyświetlić listę webhooków i uzyskać identyfikator webhooka, przeczytaj sekcję Wyświetlanie wszystkich webhooków przy użyciu interfejsu API.{developer_email_or_id}
określa identyfikator dewelopera. Listę deweloperów znajdziesz w sekcji Lista deweloperów.{app_id}
określa identyfikator aplikacji, dla której testujesz aktywator webhooka. Listę identyfikatorów aplikacji w organizacji znajdziesz w artykule Wyświetlanie listy identyfikatorów aplikacji w organizacji.{product_id}
określa identyfikator usługi API, w której przypadku testujesz aktywator webhooka. Aby wyświetlić listę usług API dostępnych w organizacji, zobacz Wyświetlanie listy usług interfejsu API.{rateplan_id}
określa identyfikator abonamentu, w którego przypadku testujesz aktywator webhooka. Identyfikator planu stawek różni się od wyświetlanej nazwy. Szczegóły abonamentu, w tym jego identyfikator, znajdziesz w sekcji Informacje o stronie z planami stawek.
Na przykład to wywołanie cURL zwraca RATEPLANQUOTAUSAGE
jako typ aktywatora powiadomień webhooka.
curl -H "Content-Type: application/json" -X GET \ "https://api.enterprise.apigee.com/v1/mint/organizations/myorg/webhooks/0a07eb1f-f485-4539-8beb-01be449699b3/test/joe@example.com/e759c119-510c-49a8-886c-f184091944bd/myproduct/mypackage_anrp" \ -u email:password
Poniżej znajdziesz przykładową odpowiedź:
[ "RATEPLANQUOTAUSAGE" ]
Następnie musisz określić schemat ładunku żądania dla typu aktywatora powiadomień webhooka.
Wyświetlanie przykładowego ładunku żądania na potrzeby testowania powiadomień webhooka
Wyświetl przykładowy ładunek żądania, którego możesz użyć do testowania powiadomień webhooka, wysyłając żądanie GET do tego zasobu:
/organizations/{org_name}/webhooks/{webhook_id}/test/{developer_email_or_id}/{app_id}/{product_id}/{rateplan_id}/{trigger_type}
Gdzie:
{org_name}
określa nazwę organizacji.{webhook_id}
określa identyfikator webhooka. Aby wyświetlić listę webhooków i uzyskać identyfikator webhooka, przeczytaj sekcję Wyświetlanie wszystkich webhooków przy użyciu interfejsu API.{developer_email_or_id}
określa identyfikator dewelopera. Listę deweloperów znajdziesz w sekcji Lista deweloperów.{app_id}
określa identyfikator aplikacji, dla której testujesz aktywator webhooka. Listę identyfikatorów aplikacji w organizacji znajdziesz w artykule Wyświetlanie listy identyfikatorów aplikacji w organizacji.{product_id}
określa identyfikator usługi API, w której przypadku testujesz aktywator webhooka. Aby wyświetlić listę usług API dostępnych w organizacji, zobacz Wyświetlanie listy usług interfejsu API.{rateplan_id}
określa identyfikator abonamentu, w którego przypadku testujesz aktywator webhooka. Identyfikator planu stawek różni się od wyświetlanej nazwy. Szczegóły abonamentu, w tym jego identyfikator, znajdziesz w sekcji Informacje o stronie z planami stawek.{trigger_type}
określa nazwę typu aktywatora powiadomień webhooka, który został zwrócony w poprzednim kroku (podaj dostępne typy reguł powiadomień webhooka).
Na przykład to wywołanie cURL zwraca przykładowy ładunek żądania dla typu aktywatora powiadomienia webhooka RATEPLANQUOTAUSAGE
:
curl -H "Content-Type: application/json" -X GET \ "https://api.enterprise.apigee.com/v1/mint/organizations/myorg/webhooks/0a07eb1f-f485-4539-8beb-01be449699b3/test/joe@example.com/e759c119-510c-49a8-886c-f184091944bd/myproduct/mypackage_anrp/RATEPLANQUOTAUSAGE" \ -u email:password
Poniżej znajdziesz przykładowy ładunek żądania:
{ "eventTriggerReason": "RATEPLANQUOTAUSAGE", "properties": [ { "key": "quotaPercentUsed", "value": "100" } ] }
Następnie odpowiednio zmodyfikuj zwracany przykładowy ładunek żądania i użyj go do przetestowania wykonania webhooka.
Testowanie wykonania webhooka
Przetestuj wykonanie webhooka, wysyłając żądanie POST do tego zasobu:
/organizations/{org_name}/webhooks/{webhook_id}/test/{developer_email_or_id}/{app_id}/{product_id}/{rateplan_id}
.
Gdzie:
{org_name}
określa nazwę organizacji.{webhook_id}
określa identyfikator webhooka. Aby wyświetlić listę webhooków i uzyskać identyfikator webhooka, przeczytaj sekcję Wyświetlanie wszystkich webhooków przy użyciu interfejsu API.{developer_email_or_id}
określa identyfikator dewelopera. Listę deweloperów znajdziesz w sekcji Lista deweloperów.{app_id}
określa identyfikator aplikacji, dla której testujesz aktywator webhooka. Listę identyfikatorów aplikacji w organizacji znajdziesz w artykule Wyświetlanie listy identyfikatorów aplikacji w organizacji.{product_id}
określa identyfikator usługi API, w której przypadku testujesz aktywator webhooka. Aby wyświetlić listę usług API dostępnych w organizacji, zobacz Wyświetlanie listy usług interfejsu API.{rateplan_id}
określa identyfikator abonamentu, w którego przypadku testujesz aktywator webhooka. Identyfikator planu stawek różni się od wyświetlanej nazwy. Szczegóły abonamentu, w tym jego identyfikator, znajdziesz w sekcji Informacje o stronie z planami stawek.
Zmodyfikuj ładunek przykładowego żądania zwrócony w poprzednim kroku (Wyświetlanie przykładowego ładunku żądania na potrzeby testowania powiadomień webhooka) i przekaż go w ładunku żądania.
Na przykład to wywołanie cURL testuje wykonanie określonego webhooka:
curl -H "Content-Type: application/json" -X POST -d \ '{ "eventTriggerReason": "RATEPLANQUOTAUSAGE", "properties": [ { "key": "quotaPercentUsed", "value": "120" } ] }' \ "https://api.enterprise.apigee.com/v1/mint/organizations/myorg/webhooks/0a07eb1f-f485-4539-8beb-01be449699b3/test/joe@example.com/e759c119-510c-49a8-886c-f184091944bd/myproduct/mypackage_anrp" \ -u email:password
Poniżej znajdziesz przykład odpowiedzi wskazującej, że powiadomienie zostało wysłane do webhooka:
{ "original": { "createdDate": 1463619959930, "createdTimeStamp": 1463616000000, "notificationType": "WEBHOOK", "orgId": "myorg", "rawMessage": "{\"orgName\":\"myorg\",\"developerEmail\":\"joe@example.com\",\"developerFirstName\":\"Joe\",\"developerLastName\":\"Smith\",\"applicationName\":\"myapp\",\"packageName\":\"MyPackage\",\"packageId\":\"mypackage\",\"ratePlanId\":\"mypackage_anrp\",\"ratePlanName\":\"anrp\",\"ratePlanType\":\"STANDARD\",\"developerRatePlanQuotaTarget\":200,\"quotaPercentUsed\":\"120\",\"ratePlanStartDate\":1463616000000,\"ratePlanEndDate\":null,\"nextBillingCycleStartDate\":null,\"products\":[\"myproduct\"],\"developerCustomAttributes\":[]\"triggerTime\":1463619959929,\"triggerReason\":\"RATEPLANQUOTAUSAGE\",\"developerQuotaResetDate\":null}", "retryCount": 0, "retryStatuses": [], "source": "MailTo: [36112720-1304-4e0b-9b17-991f5e121ebb], Org: [myorg], TransactionId: [], LimitId: [], Key: []", "toEmail": "http://123.45.67.89/webhook", "updatedDate": 1463619959930 }, "raw": "This is the response", "responseCode": 200, "status": "NOTIFICATION_SENT" }
Wyświetlanie i ponowne przetwarzanie powiadomień
Funkcja zarabiania umożliwia skonfigurowanie powiadomień, które będą generowane przez określone zdarzenia. Informacje o konfigurowaniu powiadomień znajdziesz w artykule na temat konfigurowania powiadomień.
W przypadku każdego wysłanego powiadomienia zapisywane są te informacje:
- Liczba ponowień
- Kod odpowiedzi
- Nagłówek odpowiedzi
- Treść odpowiedzi (tylko pierwsze 1000 znaków)
Możesz wyświetlić i ponownie przetworzyć powiadomienia, wykonując te czynności:
- Wyświetlanie wysłanych powiadomień
- Wyświetlanie szczegółów powiadomienia
- Ponowne przetwarzanie powiadomienia
Wyświetlanie wysłanych powiadomień
Wyświetl powiadomienia wysłane w imieniu organizacji, wysyłając żądanie GET do tego zasobu:
/organizations/{org_name}/notification-service-items
Gdzie {org_name}
określa nazwę organizacji.
Opcjonalnie możesz podać co najmniej 1 z tych parametrów zapytania, aby filtrować listę powiadomień zwracanych w odpowiedzi:
Parametr zapytania | Opis |
---|---|
startdate |
Data rozpoczęcia w formacie YYYY-MM-DD HH:mm:ss . |
enddate |
Data zakończenia w formacie YYYY-MM-DD HH:mm:ss . |
status |
Stan powiadomień. Prawidłowe wartości to m.in.:
|
toemail |
Identyfikator e-maila lub webhooka, na który wysłano powiadomienie. |
Zwracanych jest maksymalnie 1000 powiadomień.
W odpowiedzi flaga hasMoreItems
wskazuje, czy liczba powiadomień na określonej liście wynosi więcej niż 1000. Jeśli hasMoreItems
to true
, co oznacza, że powiadomień jest więcej, niż można wyświetlić, a chcesz wyświetlić pozostałe powiadomienia, musisz doprecyzować filtry parametrów zapytania, aby przetwarzać mniejsze grupy powiadomień na żądanie. Możesz na przykład wysyłać wiele żądań, używając kilku krótszych zakresów dat, lub zwracać powiadomienia tylko z określonymi wartościami stanu.
Na przykład to wywołanie cURL zawiera listę powiadomień, które NIE POWIODŁO SIĘ dla określonego webhooka w podanym zakresie dat:
curl -H "Content-Type: application/json" -X GET \ "https://api.enterprise.apigee.com/v1/mint/organizations/myorg/notification-service-items?enddate=2016-05-19 12:00:00&startdate=2016-05-18 12:00:00&status=FAILED&toemail=http://123.45.6789:8000/webhook" \ -u email:password
Poniżej znajdziesz przykładową odpowiedź:
{ "hasMoreItems": false, "notifications": [ { "createdDate": 1463626865974, "createdTimeStamp": 1463616000000, "id": "9d87c6ea-1394-495b-bfb7-1d2e7ef3f837", "notificationType": "WEBHOOK", "orgId": "Org_d40f6c2e-1d6d-11e6-a4ed-af8444f24e4f", "rawMessage": "{\"orgName\":\"Org_d40f6c2e-1d6d-11e6-a4ed-af8444f24e4f\",\"developerEmail\":\"joe@example.com\",\"developerFirstName\":\"Joe\",\"developerLastName\":\"Smith\",\"applicationName\":\"MyApp\", \"packageName\":\"test-package\",\"packageId\":\"myorg@@@test-package-9ubo\",\"ratePlanId\":\"myorg@@@test-package-9ubo_anrp\",\"ratePlanName\":\"anrp\",\"ratePlanType\":\"STANDARD\", \"developerRatePlanQuotaTarget\":10,\"quotaPercentUsed\":\"20\",\"ratePlanStartDate\":1463616000000,\"ratePlanEndDate\":null,\"nextBillingCycleStartDate\":1464739200000,\"products\":[\"product1\"], \"developerCustomAttributes\":[],\"triggerTime\":1463626865907,\"triggerReason\":\"RatePlanQuotaUsage\",\"developerQuotaResetDate\":\"1464810145000\"}", "retryCount": 3, "retryStatuses": [ { "responseCode": 500, "responseMessage": "{\"Headers\":\"[{\"name\":\"Content-length\",\"buffer\":{\"empty\":false,\"full\":false},\"valuePos\":15,\"value\":\"20\",\"elements\":[{\"name\":\"20\",\"value\":null,\"parameters\":[],\"parameterCount\":0}]},{\"name\":\"Date\",\"buffer\":{\"empty\":false,\"full\":false},\"valuePos\":5,\"value\":\"Thu, 19 May 2016 03:01:09 GMT\",\"elements\":[{\"name\":\"Thu\",\"value\":null,\"parameters\":[],\"parameterCount\":0},{\"name\":\"19 May 2016 03:01:09 GMT\",\"value\":null,\"parameters\":[],\"parameterCount\":0}]}]\",\"StatusCode\":\"500\",\"Content : \":\"This is the response\"}", "retriedAt": 1463626869184, "retryAttempt": 1 }, { "responseCode": 500, "responseMessage": "{\"Headers\":\"[{\"name\":\"Content-length\",\"buffer\":{\"empty\":false,\"full\":false},\"valuePos\":15,\"value\":\"20\",\"elements\":[{\"name\":\"20\",\"value\":null,\"parameters\":[],\"parameterCount\":0}]},{\"name\":\"Date\",\"buffer\":{\"empty\":false,\"full\":false},\"valuePos\":5,\"value\":\"Thu, 19 May 2016 03:01:09 GMT\",\"elements\":[{\"name\":\"Thu\",\"value\":null,\"parameters\":[],\"parameterCount\":0},{\"name\":\"19 May 2016 03:01:09 GMT\",\"value\":null,\"parameters\":[],\"parameterCount\":0}]}]\",\"StatusCode\":\"500\",\"Content : \":\"This is the response\"}", "retriedAt": 1463626869318, "retryAttempt": 2 }, { "responseCode": 500, "responseMessage": "{\"Headers\":\"[{\"name\":\"Content-length\",\"buffer\":{\"empty\":false,\"full\":false},\"valuePos\":15,\"value\":\"20\",\"elements\":[{\"name\":\"20\",\"value\":null,\"parameters\":[],\"parameterCount\":0}]},{\"name\":\"Date\",\"buffer\":{\"empty\":false,\"full\":false},\"valuePos\":5,\"value\":\"Thu, 19 May 2016 03:01:09 GMT\",\"elements\":[{\"name\":\"Thu\",\"value\":null,\"parameters\":[],\"parameterCount\":0},{\"name\":\"19 May 2016 03:01:09 GMT\",\"value\":null,\"parameters\":[],\"parameterCount\":0}]}]\",\"StatusCode\":\"500\",\"Content : \":\"This is the response\"}", "retriedAt": 1463626869378, "retryAttempt": 3 } ], "source": "MailTo: [6c3cde37-a8f1-4077-adbe-e9f6605a7299], Org: [myorg], TransactionId: [b8d763be-7185-450d-b421-df38c870fabd], LimitId: [RatePlan-Limit:myorg@@@test-package-9ubo_anrp], Key: [myorg@@@kjGSxEGtZeekBEyI~myorg@@@test-package-9ubo_anrp~Transactions~Calls~20]", "status": "FAILED", "toEmail": "http://123.45.67.89:8000/webhook", "updatedDate": 1463626865974 } ] }
Wyświetlanie szczegółów powiadomienia
Aby wyświetlić szczegóły konkretnego powiadomienia, wyślij żądanie GET do tego zasobu:
/organizations/{org_name}/notification-service-items/{notification_id}
Gdzie:
{org_name}
określa nazwę organizacji.{notification_id}
określa identyfikator powiadomienia, którego szczegóły chcesz wyświetlić. Identyfikator powiadomienia możesz uzyskać z wyników odpowiedzi podczas wyświetlania wysłanych powiadomień.
Na przykład to wywołanie cURL zawiera szczegóły powiadomienia o identyfikatorze 4b3dfadf-3a96-4a92-9512-1feff22f74f3
:
curl -H "Content-Type: application/json" -X GET \ "https://api.enterprise.apigee.com/v1/mint/organizations/myorg/notification-service-items/faa8e6a8-754e-40e8-9e0c-4dee6c9aca23" \ -u email:password
Poniżej znajdziesz przykładową odpowiedź:
{ "createdDate": 1461062402871, "createdTimeStamp": 1461024000000, "id": "faa8e6a8-754e-40e8-9e0c-4dee6c9aca23", "notificationType": "WEBHOOK", "orgId": "myorg", "rawMessage": "{\"orgName\":\"myorg\",\"developerEmail\":\"joe@example.com\",\"developerFirstName\":\"Joe\",\"developerLastName\":\"Smith\",\"applicationName\":\"myapp\",\"packageName\":\"mypackage\",\"ratePlanName\":\"anrp\",\"ratePlanType\":\"STANDARD\",\"developerRatePlanQuotaTarget\":54000,\"quotaPercentUsed\":\"1\",\"ratePlanStartDate\":1460419200000,\"ratePlanEndDate\":null,\"nextBillingCycleStartDate\":null,\"products\":[\"myproduct\"],\"developerCustomAttributes\":[],\"triggerTime\":1461062395966,\"triggerReason\":\"RatePlanQuotaUsage\"}", "retryCount": 0, "retryStatuses": [], "source": "MailTo: [c9e42fcd-9632-4376-b92d-0fa27f178a3b], Org: [myorg], TransactionId: [0352e568-2724-42d9-a264-1b62586d5948], LimitId: [RatePlan-Limit:amyorg@@@mypackage-a0y9_anrp], Key: [myorg@@@PPXsQbkyO1bBhQOh~myorg@@@mypackage-a0y9_anrp~Transactions~Calls~1]", "status": "NOTIFICATION_SENT", "toEmail": "http://123.45.67.89:8000/webhook", "updatedDate": 1461062402871 }
Ponowne przetwarzanie powiadomienia
Przetwórz powiadomienie ponownie, wysyłając żądanie POST do następującego zasobu:
/organizations/{org_name}/notification-service-items/{notification_id}/reprocess
Gdzie:
{org_name}
określa nazwę organizacji.{notification_id}
określa identyfikator elementu powiadomienia, którego szczegóły chcesz wyświetlić. Identyfikator powiadomienia możesz uzyskać z wyników odpowiedzi podczas wyświetlania wysłanych powiadomień.
Na przykład to wywołanie cURL przetwarza ponownie powiadomienie o identyfikatorze 4b3dfadf-3a96-4a92-9512-1feff22f74f3
:
curl -H "Content-Type: application/json" -X POST \ "https://api.enterprise.apigee.com/v1/mint/organizations/myorg/notification-service-items/faa8e6a8-754e-40e8-9e0c-4dee6c9aca23/reprocess" \ -u email:password
{ "createdDate": 1461062402871, "createdTimeStamp": 1461024000000, "id": "faa8e6a8-754e-40e8-9e0c-4dee6c9aca23", "notificationType": "WEBHOOK", "orgId": "myorg", "rawMessage": "{\"orgName\":\"myorg\",\"developerEmail\":\"joe@example.com\",\"developerFirstName\":\"Joe\",\"developerLastName\":\"Smith\",\"applicationName\":\"myapp\",\"packageName\":\"mypackage\",\"ratePlanName\":\"anrp\",\"ratePlanType\":\"STANDARD\",\"developerRatePlanQuotaTarget\":54000,\"quotaPercentUsed\":\"1\",\"ratePlanStartDate\":1460419200000,\"ratePlanEndDate\":null,\"nextBillingCycleStartDate\":null,\"products\":[\"myproduct\"],\"developerCustomAttributes\":[],\"triggerTime\":1461062395966,\"triggerReason\":\"RatePlanQuotaUsage\"}", "retryCount": 0, "retryStatuses": [ { "responseCode": 200, "responseMessage": "{\"Headers\":\"[{\"name\":\"Accept-Encoding\",\"buffer\":{\"full\":false,\"empty\":false},\"valuePos\":16,\"elements\":[{\"name\":\"gzip\",\"value\":null,\"parameters\":[],\"parameterCount\":0},{\"name\":\"deflate\",\"value\":null,\"parameters\":[],\"parameterCount\":0}],\"value\":\"gzip,deflate\"},{\"name\":\"Content-Type\",\"buffer\":{\"full\":false,\"empty\":false},\"valuePos\":13,\"elements\":[{\"name\":\"application/json\",\"value\":null,\"parameters\":[{\"name\":\"charset\",\"value\":\"UTF-8\"}],\"parameterCount\":1}],\"value\":\"application/json; charset=UTF-8\"},{\"name\":\"Date\",\"buffer\":{\"full\":false,\"empty\":false},\"valuePos\":5,\"elements\":[{\"name\":\"Mon\",\"value\":null,\"parameters\":[],\"parameterCount\":0},{\"name\":\"23 May 2016 21:46:37 GMT\",\"value\":null,\"parameters\":[],\"parameterCount\":0}],\"value\":\"Mon, 23 May 2016 21:46:37 GMT\"},{\"name\":\"Server\",\"buffer\":{\"full\":false,\"empty\":false},\"valuePos\":7,\"elements\":[{\"name\":\"Apigee Router\",\"value\":null,\"parameters\":[],\"parameterCount\":0}],\"value\":\"Apigee Router\"},{\"name\":\"User-Agent\",\"buffer\":{\"full\":false,\"empty\":false},\"valuePos\":11,\"elements\":[{\"name\":\"Apache-HttpClient/4.3.5 (java 1.5)\",\"value\":null,\"parameters\":[],\"parameterCount\":0}],\"value\":\"Apache-HttpClient/4.3.5 (java 1.5)\"},{\"name\":\"X-Forwarded-For\",\"buffer\":{\"full\":false,\"empty\":false},\"valuePos\":16,\"elements\":[{\"name\":\"54.200.58.80\",\"value\":null,\"parameters\":[],\"parameterCount\":0}],\"value\":\"54.200.58.80\"},{\"name\":\"X-Forwarded-Port\",\"buffer\":{\"full\":false,\"empty\":false},\"valuePos\":17,\"elements\":[{\"name\":\"80\",\"value\":null,\"parameters\":[],\"parameterCount\":0}],\"value\":\"80\"},{\"name\":\"X-Forwarded-Proto\",\"buffer\":{\"full\":false,\"empty\":false},\"valuePos\":18,\"elements\":[{\"name\":\"http\",\"value\":null,\"parameters\":[],\"parameterCount\":0}],\"value\":\"http\"},{\"name\":\"Content-Length\",\"buffer\":{\"full\":false,\"empty\":false},\"valuePos\":15,\"elements\":[{\"name\":\"1173\",\"value\":null,\"parameters\":[],\"parameterCount\":0}],\"value\":\"1173\"},{\"name\":\"Connection\",\"buffer\":{\"full\":false,\"empty\":false},\"valuePos\":11,\"elements\":[{\"name\":\"keep-alive\",\"value\":null,\"parameters\":[],\"parameterCount\":0}],\"value\":\"keep-alive\"}]\",\"StatusCode\":\"200\",\"Content : \":\"{\"orgName\":\"myorg\",\"developerEmail\":\"joe@example.com\",\"developerFirstName\":\"Joe\",\"developerLastName\":\"Smith\",\"applicationName\":\"MyApp\",\"packageName\":\"mypackage\",\"ratePlanName\":\"anrp\",\"ratePlanType\":\"STANDARD\",\"developerRatePlanQuotaTarget\":54000,\"quotaPercentUsed\":\"1\",\"ratePlanStartDate\":1460419200000,\"ratePlanEndDate\":null,\"nextBillingCycleStartDate\":null,\"products\":[\"product1\"],\"developerCustomAttributes\":[], "source": "MailTo: [c9e42fcd-9632-4376-b92d-0fa27f178a3b], Org: [myorg], TransactionId: [0352e568-2724-42d9-a264-1b62586d5948], LimitId: [RatePlan-Limit:amyorg@@@mypackage-a0y9_anrp], Key: [myorg@@@PPXsQbkyO1bBhQOh~myorg@@@mypackage-a0y9_anrp~Transactions~Calls~1]", "status": "NOTIFICATION_SENT", "toEmail": "http://123.45.67.89:8000/webhook", "updatedDate": 1461062402871 }