尝试使用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]“}
答案 0 :(得分:1)
感谢上面的所有评论。 Twilio以" application / www-x-form-urlencoded"的格式发送请求。因此,我们需要在Api网关集成请求中进行以下操作。
在响应方面,Twilio接受" application / xml"下面需要在Api网关的集成响应中进行配置。我刚刚对响应进行了硬编码,但我们可以在响应框中配置更多
答案 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