为什么印度电话号码收不到我通过 Amazon SNS 发送的 SMS 消息?

问题描述 投票:0回答:2

我正在尝试在 Springboot 应用程序中使用 Amazon SNS 发送文本短信。

这是配置类:

@Configuration
@ConfigurationProperties("aws")
public class AwsConfig {

    private String accessKeyId;
    private String secretAccessKey;

    public String getAccessKeyId() {
        return accessKeyId;
    }

    public void setAccessKeyId(String accessKeyId) {
        this.accessKeyId = accessKeyId;
    }

    public String getSecretAccessKey() {
        return secretAccessKey;
    }

    public void setSecretAccessKey(String secretAccessKey) {
        this.secretAccessKey = secretAccessKey;
    }

    public AWSStaticCredentialsProvider awsCredentials() {
        BasicAWSCredentials credentials = new BasicAWSCredentials(accessKeyId, secretAccessKey );
        return new AWSStaticCredentialsProvider(credentials);
    }

    @Bean
    public AmazonSimpleEmailService getAmazonSimpleEmailService() {
        return AmazonSimpleEmailServiceClientBuilder.standard().withCredentials(awsCredentials())
                .withRegion("us-east-1").build();
    }
    
    @Bean
    public AmazonSNS getAmazonSNS() {
        return AmazonSNSClientBuilder.standard().withCredentials(awsCredentials())
                .withRegion("us-east-1").build();
    }
}

这是发送消息的类:

@Service
public class SmsSendingServiceImpl {

    @Autowired
    private AmazonSNS amazonSNS;
    
    public void sendSMS()
    {
        Map<String, MessageAttributeValue> smsAttributes = new HashMap<String, MessageAttributeValue>();
         smsAttributes.put("AWS.SNS.SMS.SenderID", new MessageAttributeValue()
                    .withStringValue("SENDER") 
                    .withDataType("String"));
         smsAttributes.put("AWS.SNS.SMS.SMSType", new MessageAttributeValue()
                    .withStringValue("Transactional")
                    .withDataType("String"));
         
         try {
                PublishResult result = amazonSNS.publish(new PublishRequest()
                        .withMessage("This is a test sms.")
                        .withPhoneNumber("+91-**********").withMessageAttributes(smsAttributes));
                
                System.out.println("Messsage Sent. "+result.getMessageId());

            } catch (Exception ex) {
                ex.printStackTrace();
            }
             
    }
}

拨打

sendSMS()
时,我确实在控制台输出中收到
Message Sent.
消息,但所提到的电话号码上没有收到任何短信。

我为此尝试了几个不同的电话号码。他们都没有收到任何消息。

值得一提的是,所有这些数字都是印度的。

有人可以指出这可能是什么原因吗?

这是我指的YouTube 视频

amazon-web-services amazon-sns
2个回答
1
投票

您面临的问题是印度是一个对使用非数字发件人 ID 发送短信有特殊要求的国家。


基于支持的地区和国家 SNS 文档:

Country or region       ISO code        Supports sender IDs     Supports two-way SMS (Amazon Pinpoint only)
India                   IN              Yes3                    Yes

请注意,印度的支持发件人 ID 列标记为 3

注释部分指出:

  1. 发件人必须使用预先注册的字母发件人 ID。需要执行其他注册步骤。 有关详细信息,请参阅向印度收件人发送 SMS 消息的特殊要求。

对于您的来源身份,您可以拥有来源号码发件人ID

就您而言,您不能选择使用始发号码,因为印度法律要求使用发件人 ID

相反的情况也存在,加拿大、中国、美国等国家要求使用始发号码(阅读:美国产品号码比较不同号码类型您需要购买的号码以及短信费用)计算器)。

来自 AWS

向以下国家/地区发送短信时,此功能(始发号码)不适用:当地限制、法律或法规要求在发件人号码中使用发件人 ID,例如印度

因此,您必须遵循向印度收件人发送短信的特殊要求指南。这就是上面的需要额外的注册步骤的意思。


不幸的是,AWS 显然需要遵守当地国家法律,但没有解决方法。

也就是说,“可能”有一些国内服务可以“规避”AWS 的法律限制(因为它们是国内服务/可能与电信公司等有特殊合同)。如果您不想/无法注册发件人 ID,其他服务也可能值得一看。


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.