Я использую AWS SDK 3.0 для отправки SMS через AWS SNS на индийские номера. Я создал экземпляр ec2 на AWS.
Пожалуйста, используйте код ниже:
$params = array(
'credentials' => array(
'key' => 'XXXXXX',
'secret' => 'XXXXXXX',
),
'region' => 'us-west-2', // < your aws from SNS Topic region
'version' => 'latest',
'http' => [ 'verify' => false ]
);
$sns = new \Aws\Sns\SnsClient($params);
$args = array(
'MessageAttribute' => [
'AWS.SNS.SMS.SenderID' => [
'DataType' => 'String',
'StringValue' => 'Sender',
],
'AWS.SNS.SMS.SMSType' => [
'DataType' => 'String',
'StringValue' => 'Transactional',
]
],
"Message" => "Test Message",
"PhoneNumber" => "+91XXXXXX",
'MessageStructure' => 'string',
);
$result = $sns->publish($args);
Этот код отправляет смс. Тем не менее, SMS регистрируются как рекламные SMS, а не транзакционные. Таким образом, доставляется только с 9 утра до 8 вечера.
Буду признателен за любую оказанную помощь.
Ваша логика программирования в порядке. В вашем скрипте есть опечатка. MessageAttributes не MessageAttribute. Из-за этой опечатки он игнорирует атрибуты Message, которые вы передаете и принимаете default message type
установить в вашем Text messaging preferences
раздел в консоли SNS AWS, который является Promotional
,
Правильный код:
$args = array( 'MessageAttributes' => [ 'AWS.SNS.SMS.SenderID' => [ 'DataType' => 'String', 'StringValue' => 'Sender', ], 'AWS.SNS.SMS.SMSType' => [ 'DataType' => 'String', 'StringValue' => 'Transactional', ] ], "Message" => "Test Message", "PhoneNumber" => "+91XXXXXX", 'MessageStructure' => 'string', );
Других решений пока нет …