You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需验证手机号,通过AWS Pinpoint+Node.js发送SMS OTP?

解决方案:绕过Pinpoint沙盒模式限制发送SMS OTP

你遇到的问题根源是Pinpoint默认处于沙盒模式,这个模式为防止垃圾短信滥用,仅允许向预先验证的手机号发送消息。要实现无需添加验证手机号即可发送OTP,核心是将Pinpoint项目升级到生产模式,具体操作和代码示例如下:

1. 升级Pinpoint到生产模式

  • 登录AWS控制台进入Pinpoint项目管理页
  • 左侧导航栏选择设置 > 短信设置
  • 点击请求升级到生产,按提示提交信息:
    • 说明业务用途(如用户身份验证OTP发送)
    • 提供预计月发送量
    • 确认遵守目标地区短信合规要求(如国内短信规范、美国TCPA等)
  • AWS审核通过后,项目将切换到生产模式,此时无需预先验证接收手机号即可发送SMS

2. Node.js SDK发送OTP代码示例(AWS SDK v3)

使用@aws-sdk/client-pinpoint包,直接指定符合E.164格式的目标手机号(如+8613xxxxxxxxx)发送OTP:

import { PinpointClient, SendMessagesCommand } from "@aws-sdk/client-pinpoint";

// 初始化Pinpoint客户端
const client = new PinpointClient({ region: "你的AWS区域(如us-east-1)" });

async function sendOtp(phoneNumber, otpCode) {
  const params = {
    ApplicationId: "你的Pinpoint项目ID",
    MessageRequest: {
      Addresses: {
        [phoneNumber]: {
          ChannelType: "SMS"
        }
      },
      MessageConfiguration: {
        SMSMessage: {
          Body: `你的验证码是:${otpCode},请在5分钟内完成验证。`,
          MessageType: "TRANSACTIONAL", // 事务型短信,适配OTP验证场景
          OriginationNumber: "你的Pinpoint已验证发送号码/短代码"
        }
      }
    }
  };

  try {
    const command = new SendMessagesCommand(params);
    const response = await client.send(command);
    console.log("OTP发送成功:", response);
    return response;
  } catch (error) {
    console.error("发送失败:", error);
    throw error;
  }
}

// 调用示例
sendOtp("+8613xxxxxxxxx", "123456");

注意事项

  • 确保IAM角色/用户拥有pinpoint:SmsPublish权限
  • 生产模式下仍需验证发送号码,但接收号码无需预先验证
  • 严格遵守目标地区短信法规,比如国内需报备短信模板避免被拦截

内容的提问来源于stack exchange,提问作者Langesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:34:27