AWS Cognito ap-southeast-2区域注册新用户时无法向美国手机号发送验证短信
AWS Cognito ap-southeast-2区域发送美国手机号验证短信失败排查方案
1. 检查Cognito用户池短信发送配置
- 确认是否已将Cognito用户池的短信发送方从默认Cognito短信服务切换为Amazon SNS:ap-southeast-2区域的默认Cognito短信服务仅支持向澳大利亚本地手机号发送,且每月仅有10条免费额度,跨国号码发送必须切换到SNS服务
- 检查Cognito绑定的SNS IAM角色权限:确认角色具备
sns:Publish权限,且资源规则没有限制+1开头的美国号码作为发送目的地
2. 检查SNS国际短信配置
- 确认和Cognito同区域(ap-southeast-2)的SNS服务开通了国际短信发送权限,进入SNS控制台「短信」-「文本消息偏好设置」:
- 检查短信支出限额是否足够,超出限额后国际短信会被直接拦截
- 确认默认短信类型设置为
Transactional,交易类短信在美国地区的送达率远高于推广类短信
- 查看SNS「禁止发送列表」,确认目标美国手机号没有因之前的退订、发送失败记录被加入拦截名单
3. 直接调用SNS接口测试定位问题
你可以通过AWS CLI直接调用同区域SNS接口发送测试短信,定位问题所属层级,示例命令如下:
aws sns publish \ --region ap-southeast-2 \ --phone-number "+1替换为目标美国手机号" \ --message "Test verification code" \ --message-attributes '{"AWS.SNS.SMS.SMSType": {"DataType": "String", "StringValue": "Transactional"}}'
- 如果直接调用SNS也无法收到短信,问题出在SNS配置或运营商拦截层面
- 如果SNS发送正常,问题出在Cognito配置层面,可进一步检查用户池是否开启了手机号验证、注册触发器是否拦截了短信发送请求
4. 运营商拦截排查
- 确认目标美国手机号没有开启国际短信拦截功能
- 检查Cognito短信模板内容,避免包含营销类敏感关键词,这类内容会被美国运营商直接拦截
内容的提问来源于stack exchange,提问作者Edison Mojares
相关产品推荐
相关产品推荐

