短信发送
腾讯云、阿里云和 Twilio 短信服务集成指南
短信通常配合频率限制(参见 packages/rate-limit/)一起使用,防止一个手机号短时间内被刷爆。具体认证流程参见 核心模块 > 认证系统。
个人开发者推荐:如果你只需要验证码登录(注册/登录/找回密码),强烈推荐使用 阿里云短信认证服务(PNVS)——个人实名即可开通、免备案免签名审核、5000 条仅 250 元。这是目前国内大厂中对个人开发者最友好的方案。
概览
短信服务用来给用户发手机短信,最常见的是发验证码(登录/注册时用的 6 位数字)。@01mvp/sms 支持三家短信厂商:腾讯云、阿里云、Twilio(国际),切换厂商不需要改业务代码。
- 发送验证码:用户注册/登录时发 6 位数字验证码
- 发送通知:订单状态变更、活动提醒等(需企业资质)
- 厂商切换:换短信厂商不需要改业务代码
- 降级备用:主厂商挂了自动切换到备用厂商
国内短信服务对个人开发者限制很大。腾讯云个人已无法新建签名;阿里云普通短信需要企业资质。只有阿里云「短信认证服务」对个人开发者开放,且仅限验证码场景。如果你的产品只需要验证码登录,直接选 PNVS 即可,不需要折腾企业资质。
短信服务的 Access Key / Secret Key 是敏感信息,必须放在 .env.local 中。生产环境务必配置频率限制,防止短信轰炸。
环境变量
在 .env.local 中配置对应厂商的密钥。系统根据 SMS_PROVIDER 选择使用哪个厂商。
| 变量名 | 说明 |
|---|---|
SMS_PROVIDER | 短信厂商,可选 tencent、aliyun、twilio |
SMS_TENCENT_SECRET_ID | 腾讯云 SecretId |
SMS_TENCENT_SECRET_KEY | 腾讯云 SecretKey |
SMS_TENCENT_APP_ID | 腾讯云短信应用 ID |
SMS_TENCENT_SIGN_NAME | 腾讯云短信签名 |
SMS_TENCENT_TEMPLATE_ID | 腾讯云短信模板 ID |
SMS_ALIYUN_ACCESS_KEY_ID | 阿里云 AccessKey ID |
SMS_ALIYUN_ACCESS_KEY_SECRET | 阿里云 AccessKey Secret |
SMS_ALIYUN_SIGN_NAME | 阿里云短信签名 |
SMS_ALIYUN_TEMPLATE_CODE | 阿里云短信模板 Code |
SMS_TWILIO_ACCOUNT_SID | Twilio Account SID |
SMS_TWILIO_AUTH_TOKEN | Twilio Auth Token |
SMS_TWILIO_FROM_NUMBER | Twilio 发送号码 |
代码示例
发送验证码
import { sendSms } from "@01mvp/sms";
await sendSms({
phone: "+8613800138000",
templateParams: { code: "123456" },
});发送通知
await sendSms({
phone: "+8613800138000",
templateParams: { order_id: "ORD-001", status: "已发货" },
});工作原理
你的代码 → 统一的发短信接口
↓
根据配置选厂商
↓
腾讯云 / 阿里云 / Twilio
↓
手机收到短信