2016-01-28 16 views
7

पर यूआरएल एन्कोडेड फॉर्म पोस्ट करें मैं तृतीय पक्ष सेवा से अधिसूचनाएं प्राप्त करने के लिए एक वेबहूक बना रहा हूं, उन्होंने सामग्री प्रकार application/x-www-form-urlencoded के साथ एक पोस्ट के शरीर में डेटा भेजा है।अमेज़ॅन एपीआई गेटवे

लेकिन यह एक ही त्रुटि उत्पन्न:

{"message": "Could not parse request body into json: Unrecognized token \'name\': was expecting \'null\', \'true\', \'false\' or NaN\n at [Source: [[email protected]; line: 1, column: 6]"} 

मैं निम्नलिखित कर्ल कॉल के साथ त्रुटि पुन: पेश कर सकते हैं:

% curl -v -X POST -d 'name=Ignacio&city=Tehuixtla' https://rl9b6lh8gk.execute-api.us-east-1.amazonaws.com/prod/mandrillListener 
* Trying 54.230.227.63... 
* Connected to rl9b6lh8gk.execute-api.us-east-1.amazonaws.com (54.230.227.63) port 443 (#0) 
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 
* Server certificate: *.execute-api.us-east-1.amazonaws.com 
* Server certificate: Symantec Class 3 Secure Server CA - G4 
* Server certificate: VeriSign Class 3 Public Primary Certification Authority - G5 
> POST /prod/mandrillListener HTTP/1.1 
> Host: rl9b6lh8gk.execute-api.us-east-1.amazonaws.com 
> User-Agent: curl/7.43.0 
> Accept: */* 
> Content-Length: 27 
> Content-Type: application/x-www-form-urlencoded 
> 
* upload completely sent off: 27 out of 27 bytes 
< HTTP/1.1 400 Bad Request 
< Content-Type: application/json 
< Content-Length: 180 
< Connection: keep-alive 
< Date: Thu, 28 Jan 2016 12:29:40 GMT 
< x-amzn-RequestId: cd4d9232-c5ba-11e5-a158-b9b39f0b0599 
< X-Cache: Error from cloudfront 
< Via: 1.1 1915b8b49d2fbff532431a79650103eb.cloudfront.net (CloudFront) 
< X-Amz-Cf-Id: cxU2_b5DzIw4M_n3hJBFXTu9AVRBL3GpbQqUId9IxgS004DfLYqYmg== 
< 
* Connection #0 to host rl9b6lh8gk.execute-api.us-east-1.amazonaws.com left intact 
{"message": "Could not parse request body into json: Unrecognized token \'name\': was expecting \'null\', \'true\', \'false\' or NaN\n at [Source: [[email protected]; line: 1, column: 6]"} 

अगर मैं डबल उद्धरण यह ठीक काम करता है के साथ शरीर में लपेट:

:
% curl -v -X POST -d '"name=Ignacio&city=Tehuixtla"' https://rl9b6lh8gk.execute-api.us-east-1.amazonaws.com/prod/mandrillListener 
* Trying 54.230.227.19... 
* Connected to rl9b6lh8gk.execute-api.us-east-1.amazonaws.com (54.230.227.19) port 443 (#0) 
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 
* Server certificate: *.execute-api.us-east-1.amazonaws.com 
* Server certificate: Symantec Class 3 Secure Server CA - G4 
* Server certificate: VeriSign Class 3 Public Primary Certification Authority - G5 
> POST /prod/mandrillListener HTTP/1.1 
> Host: rl9b6lh8gk.execute-api.us-east-1.amazonaws.com 
> User-Agent: curl/7.43.0 
> Accept: */* 
> Content-Length: 29 
> Content-Type: application/x-www-form-urlencoded 
> 
* upload completely sent off: 29 out of 29 bytes 
< HTTP/1.1 200 OK 
< Content-Type: application/json 
< Content-Length: 6 
< Connection: keep-alive 
< Date: Thu, 28 Jan 2016 12:33:20 GMT 
< x-amzn-RequestId: 50610606-c5bb-11e5-b140-5d837ffe26ed 
< X-Cache: Miss from cloudfront 
< Via: 1.1 a670cda0e28541e40881b95b60c672b7.cloudfront.net (CloudFront) 
< X-Amz-Cf-Id: mCLKL4eOnpUMd15IXQZw0RStJHw9Vdf3ivdCl37dcmno2JFOfxw0Vg== 
< 
* Connection #0 to host rl9b6lh8gk.execute-api.us-east-1.amazonaws.com left intact 
"true"% 

लांबा केवल एक ही लाइन है

context.succeed('true'); 

मैं एपीआई गेटवे कैसे शरीर को जेसन के रूप में नहीं मान सकता?

मैंने बिना किसी सफलता के टेम्पलेट मैपिंग के बारे में प्रलेखन की कोशिश की, मैंने इसे एक स्थिर टेम्पलेट में बदलने की भी कोशिश की, बिना किसी चर के! सभी मामलों में त्रुटि मेरे कोड पर जाने से पहले होती है।

उत्तर

7

निम्नलिखित के रूप में मानचित्रण खाका तैयार करने के लिए प्रयास करें:

{ 
    "body" : $input.json('$') 
} 

यह json में आप स्ट्रिंग बदलने और लैम्ब्डा के पास चला जाएगा।

अमेज़ॅन docs: $input.json(x) फ़ंक्शन एक JSONPath अभिव्यक्ति का मूल्यांकन करता है और परिणामों को JSON स्ट्रिंग के रूप में देता है।

+2

जैसा कि @ हैड्यूक ने उत्तर दिया, इस बदलाव के बाद इसे लागू करने के लिए एपीआई को तैनात करना महत्वपूर्ण है। – jfredys

+0

@jfredys +1 +1 +1 +1 मैपिंग टेम्पलेट को बदलने के बाद मैं पूरी तरह तैनाती खो रहा था। दो दिन बर्बाद – droidlabour

1

फॉर्म डेटा कार्य करने के लिए मैपिंग टेम्पलेट बहुत जटिल है। https://gist.github.com/ryanray/668022ad2432e38493df

इसके अलावा, आप इस पोस्ट मैं ने लिखा है कि कैसे स्लैक के साथ एकीकृत करने का एक उदाहरण है देख सकते हैं (उनके हुक एपीआई गेटवे पर फ़ॉर्म डेटा के रूप में एक पोस्ट भेज): http://www.ryanray.me/serverless-slack-integrations

+0

यह एकमात्र टेम्पलेट है जो मेरे लिए काम करता था जब मैं फॉर्म में एक ईमेल पता भेज रहा था। धन्यवाद! –

3

यह वह जगह है यहाँ एक सार है पूरी तरह से संबंधित नहीं है, लेकिन यदि आप अमेज़ॅन एपीआई गेटवे के लिए नए हैं, तो मुझे पता नहीं था कि एक अतिरिक्त चरण मुझे पता था कि मैपिंग टेम्पलेट जोड़ने के बाद आपके एपीआई को तैनात करना था। इसने मुझे डिबगिंग समय का एक गुच्छा लगाया क्योंकि मुझे समझ में नहीं आया कि मुझे यहां पोस्ट किए गए सुझावों के बाद भी यह त्रुटि क्यों मिल रही है।

एडब्ल्यूएस कंसोल का उपयोग करते हैं, तो

  • मेनू से शीर्ष
  • तैनात करें एपीआई पर
  • क्रिया का चयन करें मेनू अपने एपीआई के भीतर किसी भी फलक पर जाएँ, प्रासंगिक मंच चुनें और
  • की पुष्टि
संबंधित मुद्दे