2017-10-08 7 views
0

J'utilise AWS SDK 3.0 pour envoyer des SMS via AWS SNS pour les numéros indiens. J'ai une instance ec2 créée sur AWS. S'il vous plaît se référer le code ci-dessous:AWS SMS SNS pour les numéros indiens

$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); 

Ce code est l'envoi de SMS. Cependant, les SMS sont enregistrés en tant que SMS promotionnels au lieu de Transactional. Ainsi, se faire livrer entre 9h et 20h seulement.

Toute aide est très appréciée.

Répondre

3

Votre logique de programmation est correcte. Il y a une faute de frappe dans votre script. C'est MessageAttributes pas MessageAttribute. En raison de cette faute de frappe, il ignore les attributs Message que vous transmettez et prend le default message type défini dans votre section Text messaging preferences dans la console SNS aws qui est Promotional.

code correct:

$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', 
);