AWS SNS无效参数电话号码。

5

我正在尝试学习使用AWS SNS服务从我的Web应用程序发送短信。 我目前正在本地服务器上操作。

$params = array(
    'credentials' => array(
        'key' => 'iam_key',
        'secret' => 'iam_secret',
    ),
    'region' => 'ap-south-1', // < your aws from SNS Topic region
    'version' => 'latest',
    'http' => ['verify'=>false]
);
$sns = \Aws\Sns\SnsClient::factory($params);

$msgattributes = [
        'AWS.SNS.SMS.SenderID' => [
            'DataType' => 'String',
            'StringValue' => 'Klassroom',
        ],
        'AWS.SNS.SMS.SMSType' => [
            'DataType' => 'String',
            'StringValue' => 'Transactional',
        ]
    ];

$payload = array(
        'Message' => "HK test",
        "PhoneNumber" => "1234567890",
        'MessageAttributes' => $msgattributes
    );

$result = $sns->publish($payload);

我想直接向手机号发送短信。这段代码出现了以下错误:
致命错误:未捕获异常 'Aws\Sns\Exception\SnsException',消息为'在"https://sns.ap-south-1.amazonaws.com"上执行“发布”时出错;AWS HTTP错误:客户端错误:POST https://sns.ap-south-1.amazonaws.com导致400 Bad Request响应: 发送者InvalidParameter(已截断...)无效参数(客户端):无效参数:PhoneNumber 原因:+1234567890不适用于发布到 - 发送者InvalidParameter无效参数:PhoneNumber原因:+1234567890不适用于发布到13e181c2-a20f-5e77-9c8e-d38c55c50266 异常'GuzzleHttp\Exception\ClientException',消息为'客户端错误:POST https://sns.ap-south-1.amazonaws.com导致400 Bad Request

我不知道为什么会出现这个错误...

我猜手机号码首先必须注册SNS通知。 - ceejayoz
使用AWS SNS服务,我们不能直接向号码发送短信吗? - Harshit Kudeshiya
4个回答

0

0

我相信AWS的电话号码必须包含国家代码。

例如,如果我的电话号码是(999) 365-6721,那么它应该是+19993656721(美国)。


0

SMS沙盒模式

当您第一次使用SNS发送短信时,它会以所谓的“沙盒模式”启动。

在此模式下,您必须验证要使用的电话号码

如果您正在沙盒模式下使用短信,并尝试通过SNS向未经验证的号码发送短信,则会收到错误提示。

SMS Sandbox Mode

这可以防止未经请求的短信。

如果您尝试创建一个SMS订阅到SNS主题,而没有验证过的电话号码,您将确实收到以下错误:

Enter a valid mobile number

电话号码有效。在您可以在SNS中创建此订阅之前,您需要按照上述描述先验证它。

Enter a valid mobile number

当然,如果你想通过编程实现这一点,同样的原则也适用。


0

我遇到了完全相同的问题,即使我使用正确的国家代码前缀和有效的电话号码(例如+57xxxxxxxxxx)调用API。

后来我在网上阅读了一些帖子后发现,这是因为在实例化SNSClient类时使用了错误的REGION_CODE(例如us-west-1而不是us-east-1)。

    @Bean
public AmazonSNS snsClient() {
    return AmazonSNSClientBuilder.standard().withRegion("us-east-1").withCredentials(new AWSStaticCredentialsProvider(credentials())).build();
}

请参考链接以找到适合您情况的正确区域代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接