集成
00 / 00
短信发送
腾讯云、阿里云和 Twilio 短信服务集成指南
短信通常配合频率限制(参见 packages/rate-limit/)一起使用,防止一个手机号短时间内被刷爆。具体认证流程参见 核心模块 > 认证系统。
个人开发者推荐:如果你只需要验证码登录(注册/登录/找回密码),强烈推荐使用 阿里云短信认证服务(PNVS)——个人实名即可开通、免备案免签名审核、5000 条仅 250 元。这是目前国内大厂中对个人开发者最友好的方案。
概览
短信服务用来给用户发手机短信,最常见的是发验证码(登录/注册时用的 6 位数字)。@repo/sms 支持三家短信厂商:腾讯云、阿里云、Twilio(国际),切换厂商不需要改业务代码。
- 发送验证码:用户注册/登录时发 6 位数字验证码
- 发送通知:订单状态变更、活动提醒等(需企业资质)
- 厂商切换:换短信厂商不需要改业务代码
- 降级备用:主厂商挂了自动切换到备用厂商
国内短信服务对个人开发者限制很大。腾讯云个人已无法新建签名;阿里云普通短信需要企业资质。只有阿里云「短信认证服务」对个人开发者开放,且仅限验证码场景。如果你的产品只需要验证码登录,直接选 PNVS 即可,不需要折腾企业资质。
短信服务的 Access Key / Secret Key 是敏感信息,必须放在 products/01mvp/packages/config/.env 或部署平台 Secrets 中。生产环境务必配置频率限制,防止短信轰炸。
环境变量
短信是多个产品可复用的基础能力,默认在 packages/config/.env 中配置。系统根据 SMS_PROVIDER 选择使用哪个厂商;某个产品需要单独短信账号时,再放到 products/<product>/packages/config/.env 覆盖。
| 变量名 | 说明 |
|---|---|
SMS_PROVIDER | 短信厂商,可选 tencent、aliyun、twilio |
ALIBABA_CLOUD_ACCESS_KEY_ID | 阿里云 AccessKey ID |
ALIBABA_CLOUD_ACCESS_KEY_SECRET | 阿里云 AccessKey Secret |
ALIYUN_SMS_REGION | 阿里云 OpenAPI 地域,默认 cn-hangzhou |
TENCENT_CLOUD_SECRET_ID | 腾讯云 SecretId |
TENCENT_CLOUD_SECRET_KEY | 腾讯云 SecretKey |
TENCENT_SMS_REGION | 腾讯云短信区域,默认 ap-guangzhou |
TENCENT_SMS_SDK_APP_ID | 腾讯云短信应用 ID |
TENCENT_SMS_SIGN_NAME | 腾讯云短信签名 |
TENCENT_SMS_TEMPLATE_ID | 腾讯云短信模板 ID |
TWILIO_ACCOUNT_SID | Twilio Account SID |
TWILIO_AUTH_TOKEN | Twilio Auth Token |
TWILIO_FROM_PHONE_NUMBER | Twilio 发送号码 |
代码示例
发送验证码
import { sendVerificationSMS } from "@repo/sms";
await sendVerificationSMS("+8613800138000", "123456");发送通知
import { sendTemplateSMS } from "@repo/sms";
await sendTemplateSMS("+8613800138000", { order_id: "ORD-001", status: "已发货" });工作原理
你的代码 → 统一的发短信接口
↓
根据配置选厂商
↓
腾讯云 / 阿里云 / Twilio
↓
手机收到短信常见问题
各短信服务商接入指南
这篇文档有问题?