能否通过编程方式将手机号从AWS SNS退订?
编程实现AWS SNS手机号退订的方法
要通过代码实现AWS SNS手机号退订,核心是使用SNS的Unsubscribe API,但前提是你需要获取目标手机号对应的订阅ARN。以下是具体步骤和代码示例:
步骤1:获取目标手机号的订阅ARN
因为Unsubscribe需要订阅ARN作为参数,你需要先通过ListSubscriptionsByTopic接口遍历目标主题下的订阅,筛选出对应手机号的ARN:
import boto3 # 初始化SNS客户端 sns_client = boto3.client('sns', region_name='your-region') # 替换为你的主题ARN和目标手机号(E.164格式,带国家码) target_topic_arn = 'arn:aws:sns:us-east-1:123456789012:your-topic-name' target_phone = '+1234567890' subscription_arn = None # 遍历主题下的所有订阅 response = sns_client.list_subscriptions_by_topic(TopicArn=target_topic_arn) for sub in response['Subscriptions']: if sub['Endpoint'] == target_phone and sub['Protocol'] == 'sms': subscription_arn = sub['SubscriptionArn'] break # 处理分页(如果订阅数量超过100条) while 'NextToken' in response and not subscription_arn: response = sns_client.list_subscriptions_by_topic( TopicArn=target_topic_arn, NextToken=response['NextToken'] ) for sub in response['Subscriptions']: if sub['Endpoint'] == target_phone and sub['Protocol'] == 'sms': subscription_arn = sub['SubscriptionArn'] break
步骤2:调用Unsubscribe完成退订
拿到订阅ARN后,直接调用unsubscribe方法即可:
if subscription_arn: sns_client.unsubscribe(SubscriptionArn=subscription_arn) print(f"手机号 {target_phone} 已成功退订") else: print(f"未找到手机号 {target_phone} 在主题 {target_topic_arn} 下的有效订阅")
注意事项
- 手机号必须严格遵循E.164格式(例如
+1234567890),否则无法匹配到订阅 - 如果目标手机号已经处于退订状态,调用
Unsubscribe不会返回错误,但也不会产生任何变更 - 确保执行代码的IAM角色拥有
sns:ListSubscriptionsByTopic和sns:Unsubscribe的权限
内容的提问来源于stack exchange,提问作者Sethuraman Srinivasan
相关产品推荐
相关产品推荐

