2016-11-25 119 views
0

如何使用boto(或其他python | perl库)通过AWS SNS将SMS直接发送到手机号码?使用boto通过AWS SNS发送SMS的示例脚本

约束:

  • 没有使用AWS lambda函数
  • 不使用SNS主题订阅手机号码直接

我的使用情况:使用AWS SNS从Nagios的发送短信提醒使用AWS短信作为端点协议。

+0

你不需要拉姆达或SNS主题,并且在该文档的例子,它是在Java中,但很容易转化。 – polku

回答

7

下面是使用boto3通过SNS直接发布到电话号码的代码。如果您收到有关PhoneNumber参数的错误,则需要升级版本boto。请务必记住,SNS当前支持直接发布到电话号码(PhoneNumber)或推送通知端点(targetArn)。还要注意TopicArn,PhoneNumber和TargetArn都是互斥的,因此每个发布只能指定其中的一个。

import boto3 

sns_client = boto3.client('sns') 

response = sns_client.publish(
    PhoneNumber='+12065551212', 
    Message='This is a test SMS message', 
    #TopicArn='string', (Optional - can't be used with PhoneNumer) 
    #TargetArn='string', (Optional - can't be used with PhoneNumer) 
    #Subject='string', (Optional - not used with PhoneNumer) 
    #MessageStructure='string' (Optional) 
) 

print(response) 
+0

谢谢,丹尼斯! –

+0

喜丹尼斯, 我想你的代码,但结束了以下错误: 提高error_class(parsed_response,OPERATION_NAME) botocore.exceptions.ClientError:发生错误(OptInRequired)调用的发布操作时:在AWS访问密钥Id需要订阅服务 –

+0

我知道我错过了某些权限,但我已经为此用户添加了SNSFull访问权限。除此之外还有什么需要做的吗? –

0
#!/usr/bin/python 
#sns to sms notification script. 
import datetime 
import boto3 
import sys 
body=[] 
log_file="/var/log/sns2sms.log" 
logf=open(log_file,"a") 
mobile_number=str(sys.argv[1]) 
subject=str(sys.argv[2]) 
body.append(subject) 
for line in sys.stdin: 
body.append(line) 
message_body="\n".join(body) 
now = str(datetime.datetime.now()) 
log_string=now+" "+mobile_number+" "+message_body+" " 
client = boto3.client('sns') 
client.publish(
PhoneNumber = mobile_number, 
Message = message_body 
) 
logf.write(log_string) 
logf.write("\n") 
logf.close() 
0

在必填字段只需更换,你会得到这个工作。

import boto3 
# Create an SNS client 
client = boto3.client(
    "sns", 
    aws_access_key_id="your_access_key_id", 
    aws_secret_access_key="you_secret_access_key", 
    region_name="us-east-1" 
) 

# Send your sms message. 
client.publish(
    PhoneNumber="your_phone_number", 
    Message="Hello World!" 
) 

要发送给多个联系人,请参阅here