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批准邮件,但短信仍显示短码。
解决方法
修正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是合规的,不需要修改。
确保短信内容与审核通过的模板完全一致
发送的消息内容必须和你在DLT平台注册、且AWS已批准的模板一字不差,包括变量的占位符格式。只要内容和模板有差异,AWS就会自动切换为随机短码发送,不会显示你的SenderID。验证SenderID与EntityID的绑定关系
确认AWS批准邮件里的SenderID状态是ACTIVE,并且该SenderID绑定的EntityID和你代码中填写的完全一致。修正后的代码示例
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); } };额外检查项
- 手机号格式要正确:必须带
+91国家代码,无多余符号或空格; - 使用正确的AWS区域:推荐用
ap-south-1(孟买),该区域对印度DLT支持最完善; - 检查账户权限:确保执行SNS Publish操作的IAM角色有
sns:Publish权限。
- 手机号格式要正确:必须带
内容的提问来源于stack exchange,提问作者sumanth.js
相关产品推荐
相关产品推荐

