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

AWS SNS发送SMS时部分手机号丢失问题求助(Node.js环境)

AWS SNS发送SMS时部分手机联系电话显示异常的排查方案

可能的原因及解决办法

1. 短信编码与分段导致的截断

SMS存在两种编码模式:7位GSM编码(单条最多160字符)和16位Unicode编码(单条最多70字符)。你的消息包含法语特殊字符(如é、à),会触发Unicode编码,若消息长度接近阈值,电话号码可能刚好落在分段位置,部分设备解析时会丢失这部分内容。

解决:

  • 在params中明确指定短信类型为事务性短信,避免运营商的过滤或分段干扰:
    const params = {
      Message: mess,
      PhoneNumber: number,
      MessageAttributes: {
        'AWS.SNS.SMS.SMSType': {
          DataType: 'String',
          StringValue: 'Transactional'
        }
      }
    };
    
  • 调整消息内容,把电话号码放在短信开头或结尾,避免被分段拆分;或者给电话号码添加视觉分隔,比如写成04 00 00 00 00,降低被截断的概率。

2. 运营商的号码解析规则差异

不同运营商对短信内的数字串处理逻辑不同,有些会自动识别电话号码并格式化,但部分运营商可能把连续长数字当成潜在广告/恶意内容截断,或者对本地号码格式(无国际区号)识别错误。

解决:

  • 把电话号码改成国际格式,比如+33400000000,统一格式后运营商识别更稳定;
  • 在电话号码前后添加明确标识,比如写成联系电话:0400000000,让运营商明确这是有效联系信息,减少误截断。

3. 消息参数传递时的遗漏

检查发送前mess变量的完整度,确认电话号码没有在构造过程中被转义或截断。

解决:

  • 在调用publish前打印console.log('待发送消息:', mess),确认消息内容完整包含电话号码;
  • 检查params的Message字段是否直接赋值mess,没有额外的字符串处理导致内容丢失。

4. 设备与运营商的兼容性问题

你自己的手机可能和出现问题的用户设备/运营商存在差异,导致显示效果不同。

解决:

  • 收集出现问题的用户的运营商和设备型号,针对性测试;
  • 用不同运营商的测试号码发送相同消息,定位是特定运营商的问题,再针对性调整内容格式。

调试建议

  • 保存发送记录时,确保messageSms字段是完整的待发送内容,对比用户实际收到的信息,确认问题出在发送端还是接收端;
  • 查看AWS CloudWatch的SNS日志,检查消息是否完整传递到SNS服务,排除服务端的发送异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:41:36