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

AWS SNS对接印度手机号遇问题:属性报错与SenderID不生效

AWS SNS向印度手机号发送短信时SenderID不显示,显示随机短码的解决方法

我正在集成AWS SNS向印度手机号发送短信,已经完成DLT的SenderID注册并获得AWS批准。最初按照AWS指引在代码中添加EntityID和TemplateID时,出现错误提示以AWS.或Amazon.开头的消息属性名称为亚马逊保留。去掉前缀后该错误解决,但接收短信时显示随机短码而非注册的SenderID,请问该如何解决?

附原Node.js代码:

const sendSnsMessage = async (message, phone) => {
  try {
    let params = {
      Message: message,
      PhoneNumber: phone,
      MessageAttributes: {
        "AWS.SNS.SMS.SMSType": {
          DataType: "String",
          StringValue: "Transactional",
        },
        "AWS.SNS.SMS.SenderID": {
          DataType: "String",
          StringValue: <my-sender-id>,
        },
        "AWS.SNS.SMS.EntityID": {
          DataType: "String",
          StringValue: <entity-id>,
        },
        "AWS.SNS.SMS.TemplateID": {
          DataType: "String",
          StringValue: <template-id>,
        },
      },
    };

    let publishCmd = new PublishCommand(params);
    let sentMsg = await SNS.send(publishCmd);
    return sentMsg;
  } catch (error) {
    console.log("errrr",error.message);
  }
};

注:已移除EntityID和TemplateID的AWS前缀,且收到AWS的SenderID批准邮件,但短信仍显示短码。


解决方法

  1. 修正DLT相关属性的命名格式
    印度地区的DLT属性不能用AWS.SNS.SMS.EntityID/AWS.SNS.SMS.TemplateID这种前缀,正确的属性名应该是:

    • AWS.SNS.SMS.DLT.EntityId(对应你的EntityID)
    • AWS.SNS.SMS.DLT.TemplateId(对应你的TemplateID)
      而SenderID的属性名AWS.SNS.SMS.SenderID是合规的,不需要修改。
  2. 确保短信内容与审核通过的模板完全一致
    发送的消息内容必须和你在DLT平台注册、且AWS已批准的模板一字不差,包括变量的占位符格式。只要内容和模板有差异,AWS就会自动切换为随机短码发送,不会显示你的SenderID。

  3. 验证SenderID与EntityID的绑定关系
    确认AWS批准邮件里的SenderID状态是ACTIVE,并且该SenderID绑定的EntityID和你代码中填写的完全一致。

  4. 修正后的代码示例

    const sendSnsMessage = async (message, phone) => {
      try {
        let params = {
          Message: message,
          PhoneNumber: phone,
          MessageAttributes: {
            "AWS.SNS.SMS.SMSType": {
              DataType: "String",
              StringValue: "Transactional",
            },
            "AWS.SNS.SMS.SenderID": {
              DataType: "String",
              StringValue: "<my-sender-id>",
            },
            "AWS.SNS.SMS.DLT.EntityId": {
              DataType: "String",
              StringValue: "<entity-id>",
            },
            "AWS.SNS.SMS.DLT.TemplateId": {
              DataType: "String",
              StringValue: "<template-id>",
            },
          },
        };
    
        let publishCmd = new PublishCommand(params);
        let sentMsg = await SNS.send(publishCmd);
        return sentMsg;
      } catch (error) {
        console.log("errrr", error.message);
      }
    };
    
  5. 额外检查项

    • 手机号格式要正确:必须带+91国家代码,无多余符号或空格;
    • 使用正确的AWS区域:推荐用ap-south-1(孟买),该区域对印度DLT支持最完善;
    • 检查账户权限:确保执行SNS Publish操作的IAM角色有sns:Publish权限。

内容的提问来源于stack exchange,提问作者sumanth.js

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:10:12