You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Twilio与AWS集成中处理特殊字符?

解决Twilio SMS Webhook特殊字符/表情符号编码问题

你遇到的问题本质是application/x-www-form-urlencoded格式的请求参数被URL编码了,下面两种方法可以直接解决:

方法1:在API Gateway映射模板中直接解码

修改你当前的映射模板,用API Gateway内置的$util.urlDecode()工具函数处理每个字段,直接把编码后的内容转成原始字符串。

比如原来的模板可能是:

{
  "Body": "$input.params('Body')",
  "From": "$input.params('From')"
}

修改后:

{
  "Body": "$util.urlDecode($input.params('Body'))",
  "From": "$util.urlDecode($input.params('From'))"
}

这样Lambda收到的Body和From就是解码后的原始内容,空格、感叹号、加号和表情符号都会自动还原。

方法2:在Lambda函数中解码

如果不想改动API Gateway的配置,也可以在Lambda里做解码处理,不同语言的实现如下:

Python 示例

import urllib.parse

def lambda_handler(event, context):
    # 解码短信内容和电话号码
    decoded_body = urllib.parse.unquote(event['Body'])
    decoded_from = urllib.parse.unquote(event['From'])
    
    # 这里写你的业务逻辑
    print(f"解码后的短信:{decoded_body}")
    print(f"发送方号码:{decoded_from}")
    
    return {
        'statusCode': 200,
        'body': '处理完成'
    }

Node.js 示例

注意:Node.js的decodeURIComponent不会自动把+转成空格,所以要先替换再解码:

exports.handler = async (event) => {
    // 解码短信内容
    const decodedBody = decodeURIComponent(event.Body.replace(/\+/g, ' '));
    // 解码发送方号码
    const decodedFrom = decodeURIComponent(event.From.replace(/\+/g, ' '));
    
    // 业务逻辑处理
    console.log(`解码后的短信:${decodedBody}`);
    console.log(`发送方号码:${decodedFrom}`);
    
    return {
        statusCode: 200,
        body: JSON.stringify('处理完成')
    };
};

注意事项

  • 表情符号的处理:上述两种方法默认都是用UTF-8解码,Twilio传递的表情符号是UTF-8的URL编码值,解码后能完美还原。
  • 其他字段:如果还有To、MessageSid等需要处理的字段,按同样的方式解码即可。

内容的提问来源于stack exchange,提问作者sgerbhctim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 04:18:15