短信发送

腾讯云、阿里云和 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短信厂商,可选 tencentaliyuntwilio
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_SIDTwilio Account SID
SMS_TWILIO_AUTH_TOKENTwilio Auth Token
SMS_TWILIO_FROM_NUMBERTwilio 发送号码

代码示例

发送验证码

import { sendSms } from "@01mvp/sms";

await sendSms({
  phone: "+8613800138000",
  templateParams: { code: "123456" },
});

发送通知

await sendSms({
  phone: "+8613800138000",
  templateParams: { order_id: "ORD-001", status: "已发货" },
});

工作原理

你的代码 → 统一的发短信接口

         根据配置选厂商

    腾讯云 / 阿里云 / Twilio

         手机收到短信

常见问题

各短信服务商接入指南