使用Twilio和AWS处理特殊字符



我已经设置了一个Twilio SMS POST webhook,该webhook调用AWS API网关端点。在API网关方面,我是这样设置的:

集成请求:

  • 类型:Lambda函数
  • 映射模板:application/x-www-form-urlencoded
#set($httpPost = $input.path('$').split("&"))
{
#foreach( $kvPair in $httpPost )
#set($kvTokenised = $kvPair.split("="))
#if( $kvTokenised.size() > 1 )
"$kvTokenised[0]" : "$kvTokenised[1]"#if( $foreach.hasNext ),
#end
#else
"$kvTokenised[0]" : ""#if( $foreach.hasNext ),
#end
#end
#end
}

上面为我的AWS Lambda处理程序提供了一个JSONified的event

我的Lambda函数基本上读取event并对其进行一些处理。问题是,当我向我的Twilio电话号码发送文本时,如下所示:

嘿!

Lambda解释为:

Hey+有%21

我如何处理特殊字符/表情符号以使其正常显示?同样的事情也发生在电话号码(+1XXXXXXXXXX(变成(%2XXXXXXXXXX(时。

您已经将url编码请求中的键和值变成了一个看起来像JSON对象的对象,但您没有解码url编码的值。

我认为您需要在键和值上使用$util.urlDecode(),以确保数据都是纯文本。

尝试:

#set($httpPost = $input.path('$').split("&"))
{
#foreach( $kvPair in $httpPost )
#set($kvTokenised = $kvPair.split("="))
#if( $kvTokenised.size() > 1 )
"$util.urlDecode($kvTokenised[0])" : "$util.urlDecode($kvTokenised[1])"#if( $foreach.hasNext ),
#end
#else
"$util.urlDecode($kvTokenised[0])" : ""#if( $foreach.hasNext ),
#end
#end
#end
}

最新更新