我们有一个非常简单的用例,当系统警报发生时,python应用程序会向待命用户发送短信。我已经在AWS API中创建了访问id/密钥,并通过Pinpoint创建了一个免费号码。
我的发布函数如下所示:
try:
sns = boto3.client('sns',
aws_access_key_id='<our api id>',
aws_secret_access_key='<our api key>',
endpoint_url='https://sns-fips.us-east-2.amazonaws.com',
config=Config(region_name='us-east-2',
proxies={'https': '<our proxy>'}))
for o in users:
number = getattr(o,'number') if getattr(o,'number').startswith('+') else '+1' + getattr(o,'number').replace("-","").replace("(","").replace(")","")
print('Sending message ' + msg + ' to contact ' + getattr(o,'name') + ' at number ' + number)
result = sns.publish(PhoneNumber=number, Message=msg, MessageAttributes={'AWS.MM.SMS.OriginationNumber': {'DataType': 'String', 'StringValue': '+1<our tollfree>'}})
print(result)
except Exception as ex:
print("SMS API EXCEPTION: {0}".format(ex), flush=True)如果我没有包含MessageAttributes,消息就会正常发送,但会得到亚马逊网络服务分配的长数字(很快就会消失)。如果我进入我的SNS仪表盘,使用我们的免费电话手动发送一条消息,它就会通过。如果将免费费用更改为其他费用,则无法通过。所以我知道这种关联是存在的。
我还尝试更改代码以使用Boto精确定位客户端,并获得相同的行为,没有发生消息传递,也没有错误。
使用sns发布,我的结果返回一个状态代码200,一个请求id,0个重试尝试,等等。所以看起来消息正在被发送。我在短信发送日志里什么也看不到。
我是不是漏掉了什么?提前感谢您的指点。
发布于 2021-05-14 22:29:33
哇,简单的解决方案。east-2不提供Pinpoint,east-1才提供。切换了区域,它起作用了。
https://stackoverflow.com/questions/67525947
复制相似问题