2016-12-08 2 views
1

В документации предлагается использовать сценарий ниже, но я не могу понять, почему im получает сообщение об ошибке.ОШИБКА, отправляющая SMS с Amazon SNS и Python и boto3

Это то, что им до сих пор с помощью:

sns = boto3.client('sns', region_name='eu-west-1') 
sns.publish(
    PhoneNumber='+5521981554856', 
    Message='hi there', 
    MessageAttributes={ 
         'AWS.SNS.SMS.SenderID': { 
                'DataType': 'String', 
                'StringValue': 'MySenderID' 
}  
} 
) 

Кто-нибудь знает, почему им получать Сообщи ошибку ниже?

raise ParamValidationError(report=report.generate_report()) 
ParamValidationError: Parameter validation failed: 
Unknown parameter in input: "PhoneNumber", must be one of: TopicArn,TargetArn, Message, Subject, MessageStructure, MessageAttributes 

Почему «PhoneNumber» представляет такое неудобное поведение?

+0

Что происходит, когда вы удаляете атрибуты сообщения? Он должен работать нормально. sns.publish (PhoneNumber = '+ 5521981554856', Message = 'hi there') – Patrick

ответ

0

В документации указано, что номер телефона поддерживается. http://boto3.readthedocs.io/en/latest/reference/services/sns.html

К сожалению, это только копия с официальной документацией AWS.

Если посмотреть на исходный код, вы увидите, что Boto3 ожидает либо TargetArn или TopicArn: https://github.com/boto/boto3/blob/master/boto3/data/sns/2010-03-31/resources-1.json

"Publish": { 
     "request": { 
     "operation": "Publish", 
     "params": [ 
      { "target": "TopicArn", "source": "identifier", "name": "Arn" } 
     ] 
     } 
    }, 

...

"Publish": { 
      "request": { 
      "operation": "Publish", 
      "params": [ 
       { "target": "TargetArn", "source": "identifier", "name": "Arn" } 
      ] 
      } 
     }, 

Так что я думаю, вы должны исправить Boto3 самостоятельно или указать проблему на GitHub.

0

Я был в состоянии заставить его работать со следующим кодом:

import boto3 

sns = boto3.client('sns') 
smsattrs = { 
    'AWS.SNS.SMS.SenderID': { 'DataType': 'String', 'StringValue': 'TestSender' }, 
    'AWS.SNS.SMS.SMSType': { 'DataType': 'String', 'StringValue': 'Transactional'} 
} 
sns.publish(
    PhoneNumber = '+35840xxxxxxx', 
    Message = 'Hello world!', 
    MessageAttributes = smsattrs 
) 

Который довольно много выглядит так же, как и то, что вы пробовали.

Смежные вопросы