Amazon Api网关与Twilio集成

时间:2017-06-26 16:04:38

标签: twilio aws-api-gateway twilio-api

尝试使用Twilio,Aws API网关和AWS lambda帮助创建SMS机器人。

我已经设置了twilio电话号码,AWS API和lambda。我配置了twilio来为我发送的每个短信调用我的API。

我可以看到twilio使用以下详细信息调用我的API网关。

网址 https://XXXXXXX.execute-api.us-west-2.amazonaws.com/latest/

参数:: ApiVersion = 2010-04-01&安培; SmsSid = SM446302f23feac00bdd980eb94af16431&安培; SmsStatus =接收&安培; SmsMessageSid = SM446302f23feac00bdd980eb94af16431&安培; NumSegments = 1&安培;从=%2B18563135226&安培;使用toState = NJ&安培; MessageSid = SM446302f23feac00bdd980eb94af16431&安培; AccountSid = AC056ba4aedfd58f83ad1f8d1827351d3b&安培; ToZip = 08057&安培; FromCountry = US&安培; ToCity = Moorestown的&安培; FromCity = Moorestown的&安培;为了=%2B18569246402&安培; FromZip = 08057&安培;机体=你好&安培; ToCountry = US&安培; FromState = NJ&安培; NumMedia = 0

消息文字:: MSG =坏+请求&安培; sourceComponent = 14100&安培;错误码= 11200&安培; EmailNotification =假安培;的HttpResponse = 400安培; LogLevel的= ERROR&安培; URL = HTTPS%3A%2F%2Fzwnu2wzf07.execute-api.us-west-2.amazonaws.com% 2Flatest%2F

API网关无法处理消息.Below是来自API网关的响应。

{“message”:“无法将请求体解析为json:无法识别的标记\'ToCountry \':期待(\'true \',\'false \'或\'null \')\ n在[来源:[B @ 6cbe391e; line:1,column:11]“}

3 个答案:

答案 0 :(得分:1)

感谢上面的所有评论。 Twilio以" application / www-x-form-urlencoded"的格式发送请求。因此,我们需要在Api网关集成请求中进行以下操作。

Integration Request in Api Gateway to send Twilio request to AWS LAmbda

在响应方面,Twilio接受" application / xml"下面需要在Api网关的集成响应中进行配置。我刚刚对响应进行了硬编码,但我们可以在响应框中配置更多

Integration Response in Api Gateway to send back to twilio from lambda

答案 1 :(得分:0)

我参加聚会有点晚了,但是我使用了以下映射模板:

{ #foreach( $token in $input.body.split('&') ) #set( $keyVal = $token.split('=') ) #set( $keyValSize = $keyVal.size() ) #if( $keyValSize >= 1 ) #set( $key = $util.urlDecode($keyVal[0]) ) #set($key = $key.substring(0,1).toLowerCase() + $key.substring(1)) #if( $keyValSize >= 2 ) #set( $val = $util.urlDecode($keyVal[1]) ) #else #set( $val = '' ) #end "$key": "$util.escapeJavaScript($val)"#if($foreach.hasNext),#end #end #end }

请求主体将进行url解码,并作为JSON提交给您的Lambda。如果您使用的是Java,则只需创建一个POJO即可使用实际值。

答案 2 :(得分:0)

在经历Lambda - API Gateway tutorial并在集成响应中使用$input.path('$')时,我遇到了这个问题。

在看到this tutorial中的内容之后,我将“集成响应”更改为以下内容。

#set($inputRoot = $input.path('$'))
$inputRoot.body