我无法使用发件人 ID 通过 Amazon Simple Notification Service(Amazon SNS)向印度号码发送短消息服务(SMS)短信。
简短描述
当您向印度境内的收件人发送短信时,默认情况下,Amazon SNS 使用国际长途运营商(ILDO)路由传输这些短信。这些短信看起来好像是从随机数字 ID 发送的。
**注意:**如果在印度使用 ILDO 连接,则发送短信的价格会高于当地路由。
要通过当地路由发送短信,请在使用 SNS 发布短信时使用预先注册的字母发件人 ID。请务必通过分布式账本技术(DLT)门户向印度电信监管局(TRAI)注册用例和短信模板。有关详细信息,请参阅印度的发件人 ID 注册要求。可以使用 SNS Publish API 请求发送带有注册发件人 ID 的短信。
注意:
- 使用 Amazon SNS 控制台发布短信时,请使用印度的特定于国家/地区的属性,例如实体 ID 和模板 ID。
- 使用 SNS Publish API 时,请添加 MessageAttributes 参数以设置值,例如 AWS.MM.SMS.EntityId 和 AWS.MM.SMS.TemplateId。有关详细信息,请参阅发送短信(AWS SDK)。
解决方法
按照以下步骤查明和解决使用发件人 ID 时出现的短信发送问题。
验证注册发件人 ID 的 AWS 区域和用于发送短信的 AWS 区域
SNS 服务支持多个区域的发件人 ID,请参阅支持的区域和国家/地区。使用注册发件人 ID 的同一 AWS 区域发送短信。
确保包含正确的发件人 ID 以及相应的 EntityId 和 TemplateId
验证 EntityId 和 TemplateId 是否正确。检查从 DLT 门户收到的值。
Python(Boto3) Publish API 调用示例:
import boto3
client = boto3.client('sns')
response = client.publish(
PhoneNumber='+91xxxxxxxxxx',
Message="Registered Test Message",
MessageAttributes={
'AWS.MM.SMS.EntityId': {
'DataType': 'String',
'StringValue': '<EntityId>'
},
'AWS.MM.SMS.TemplateId': {
'DataType': 'String',
'StringValue': '<TemplateId>'
},
'AWS.SNS.SMS.SenderID': {
'DataType': 'String',
'StringValue': '<SenderID>'
},
'AWS.SNS.SMS.SMSType': {
'DataType': 'String',
'StringValue': 'Transactional'
}
}
)
**注意:**请将 <EntityId> 替换为您的注册实体 ID,将 <TemplateId> 替换为您的注册模板 ID,以及将 <SenderID> 替换为您的注册发件人 ID。有关其他语言,请参阅相应的特定于语言的 AWS SDK 页面。
启用 Amazon CloudWatch 日志,然后查看短信发送日志
有关详细信息,请参阅如何访问短信的 Amazon SNS 主题传输日志?在短信发送日志中,查看以下 providerResponse 通知:
- 手机已屏蔽短信
- 被电话运营商屏蔽为垃圾短信
- 电话运营商屏蔽了此短信
如果短信内容与在 DLT 门户中注册的模板不匹配,运营商和提供商可能会屏蔽短信。或者,如果短信包含与注册模板不同的字符,他们可能会屏蔽短信。有关详细信息,请参阅运营商可能屏蔽短信的原因和模板匹配问题。
检查下游提供商和运营商是否存在问题
要排查潜在的下游问题,请为 Amazon SNS 创建支持案例。在支持案例中提供以下信息:
- 注册发件人 ID 以发送短信的 AWS 区域
- 来自 DLT 门户的 CSV 文件,其中包含注册的模板
- 三到四个短信日志示例。日志包括每个不同号码的失败短信的短信 ID(以及时间戳和时区)。这些日志示例的时间不能早于 48 到 72 小时。
**注意:**在印度,促销短信只能在印度标准时间(IST)上午 9 点至晚上 9 点发送。在此时间范围之外发送的任何短信都可能导致无法送达。