如何使用Amazon SNS和Python以及boto3发送带有自定义发件人ID的SMS

时间:2016-07-13 14:54:28

标签: python amazon-web-services sms amazon-sns boto3

documentation建议使用消息属性,但我似乎无法弄清楚要使用的属性名称。

到目前为止这是有效的:

sns = boto3.client('sns', region_name='eu-west-1')

sns.publish(
  PhoneNumber='+491701234567',
  Message='hi there',
  MessageAttributes={
    'AWS.SNS.SMS.SenderID': {
      'DataType': 'String',
      'StringValue': 'MySenderID'   
    }    
  }   
)  

SMS已发送,但发件人ID字段中包含一些(随机?)值。所以我的消息属性设置似乎被忽略了。设置自定义发件人ID的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

检查目的地国家/地区是否支持发件人ID

http://docs.aws.amazon.com/sns/latest/dg/sms_supported-countries.html

答案 1 :(得分:1)

Adam Owczarczyk所述,某些国家/地区不允许您在短信中发送发件人ID。在这种情况下,API会使用您的电话号码并将其替换为字符串,以使您的消息能够得到传递。尝试解决它通常只会使该号码被列入黑名单。您可以通过输入简短的测试人员ID的描述性字符串来测试它,然后查看是否通过测试。

答案 2 :(得分:0)

发件人ID必须为1-11个字母数字字符,不能包含空格;例如:

  • THISISME-✅
  • TestForSO-✅
  • StackOverflow-(太长,最多11个字符)
  • Some one-(无空格)

正如其他人所述,发件人ID的自定义取决于国家/移动电话提供商,因此请确保对其进行测试。

示例代码段

import boto3

access_key = '....'
secret = '....'
region = "us-east-1"

number = '+972...<your number>'

sender_id = 'TestForSO'
sms_message = 'Your code: 123456'

sns = boto3.client('sns', aws_access_key_id=access_key, aws_secret_access_key=secret, region_name=region)
sns.publish(PhoneNumber=number, Message=sms_message, MessageAttributes={'AWS.SNS.SMS.SenderID': {'DataType': 'String', 'StringValue': sender_id}, 'AWS.SNS.SMS.SMSType': {'DataType': 'String', 'StringValue': 'Promotional'}})
  

enter image description here