阿里云短信服务从入门到精通:完整对接使用指南

简介: 本文提供了一份完整的阿里云短信服务对接使用指南。首先需完成账号注册与企业实名认证,开通短信服务并购买资源包或确保账户余额充足。接着需依次申请短信资质、签名和模板,三者均审核通过后方可发送短信。发送方式支持控制台群发助手与API/SDK程序化调用,推荐使用RAM子账号AccessKey保障安全。文章详细介绍了Java和Python两种语言的SDK集成示例,涵盖SendSms接口调用、参数配置与异常处理。同时讲解了安全与限流配置、回执消息接收、常见错误码排查以及成本优化策略,帮助开发者快速、安全、低成本地完成短信服务对接。

一、认识阿里云短信服务

阿里云短信服务是阿里云提供的一种稳定可靠、高到达率的企业级通信服务。它支持调用API或使用群发助手发送验证码、通知类和营销类短信,国内验证短信秒级触达,到达率最高可达99%;国际短信覆盖200多个国家和地区。短信服务历经双十一等极端场景考验,为全球数百万企业提供稳定可靠的通信服务。

短信服务主要应用于以下场景:用户注册与登录的验证码发送、订单状态变更通知、服务到期提醒、预约确认、会员活动营销等。无论是ToC还是ToB业务,短信都是连接企业与用户的重要桥梁。

需要注意的是,阿里云短信服务目前仅支持企业认证账号使用。个人认证用户功能受限,无法发送营销短信,且可能影响签名审核通过率。如果个人认证用户仅需发送验证码短信,也可以考虑申请开通阿里云号码认证服务的短信认证功能。

需要先登录阿里云控制台,点击:阿里云控制台

二、整体接入流程概览

通过阿里云发送短信,整体流程可以分为以下几个核心步骤:

  • 账号准备与开通服务:注册阿里云账号、完成企业实名认证、开通短信服务
  • 申请资质:提交企业营业执照等资质材料,审核通过后方可申请签名
  • 申请短信签名:创建签名并等待审核通过(最快24小时)
  • 申请短信模板:创建模板并等待审核通过(约2-4小时)
  • 购买资源包或充值:确保账户有足够余额
  • 发送短信:通过控制台群发助手或API/SDK程序化发送

从2025年起,中国大陆新增短信签名必须完成运营商实名报备(5-10个工作日),请提前规划。

三、准备工作

3.1 注册账号与企业实名认证

访问阿里云官网注册阿里云账号。完成注册后,需要进行企业实名认证。个体工商户通常也算企业认证。实名认证是开通短信服务的硬性门槛。

3.2 开通短信服务

在阿里云产品列表中找到短信服务并开通。登录短信服务控制台,根据提示完成服务开通。

3.3 购买资源包或确保余额充足

短信服务计费方式分为按量计费和套餐包两种。国际站默认采用短信资源包付费模式,需要先购买资源包。如果有短信套餐包则先扣除套餐包,超出套餐包额度后按量计费,扣除账户余额。建议根据业务需要选择最优的计费方案。

3.4 创建RAM用户并获取AccessKey

AccessKey是调用API的凭证。强烈建议使用RAM子用户的AccessKey,并授予其AliyunDysmsFullAccess权限策略。这比直接使用主账号的AK更安全。

创建RAM用户的步骤:

  • 访问RAM控制台创建子用户
  • 为该子用户设置对应的权限,推荐授予AliyunDysmsFullAccess短信管理权限
  • 获取该子用户的AccessKey ID和AccessKey Secret

安全最佳实践:使用环境变量存储AccessKey(禁止硬编码)、定期轮换密钥、遵循最小权限原则。

四、申请资质

短信资质是阿里云对发送方身份的基础审核,相当于确认\"你是谁\"。企业需要提交营业执照或相关证件,阿里云会审核企业信息的真实性。资质审核通过后,才能进入签名和模板的申请环节。

申请资质需要填写的信息:单位名称、单位法人姓名、单位法人身份证号、有效期、单位管理人手机号。需要上传的材料:单位营业执照、单位法人身份证正反面、单位管理人身份证正反面。

资质审核预计需2个工作日。当使用场景非该阿里云账户企业、属于第三方公司的业务时,需要先申请相关他用资质。

五、申请短信签名

短信签名就是用户收到短信时,最前面方括号里的那个名字,比如〖淘宝〗、〖菜鸟网络〗。它是短信发送方的身份标识,让用户知道这条短信是谁发的。签名必须与提交的资质相匹配。

签名申请需要注意的要点:

  • 签名必须体现业务属性:比如\"XX科技\"会被拒,而\"XX科技验证码\"就能通过
  • 不能包含联系方式:类似\"联系客服138xxxx\"通不过
  • 金融类业务需要特殊资质:涉及支付、理财等关键词需额外提交金融许可证

首次申请建议选择\"验证码\"类签名,通过率最高。签名审核通常需2小时。在\"国内消息\"或\"国际/港澳台消息\"菜单下申请。

从2025年起,短信签名审核通过后,阿里云会自动向运营商发起实名制报备。这个流程平均需要5-7个工作日,部分情况可能需要7-10个工作日或更长。报备期间,签名无法用于发送短信。

六、申请短信模板

如果说签名解决的是\"谁发的\"的问题,那模板解决的就是\"发什么\"。阿里云短信服务不允许自由填写短信内容,所有发送的短信都必须基于已审核通过的模板。

模板内容支持变量占位符,用variable\"{variable}的格式表示。比如验证码模板可以写成:\"您的验证码为:{code},5分钟内有效。\"其中${code}在实际发送时会被替换为真实的验证码数字。需要注意的是,变量名不能使用mobile、email等敏感词,否则审核可能不通过。

模板审核通常需2小时。国内短信模板与国际/港澳台短信模板不通用,不能混用。模板审核通过后不允许修改,只能删除。删除短信模板后不可恢复,请谨慎操作。

七、发送短信

7.1 控制台发送(群发助手)

控制台提供\"群发助手\"功能,适用于人工发送系统通知或营销短信。操作步骤:

  • 登录短信服务控制台,左侧导航栏选择群发助手
  • 点击创建发送任务,填写场景类型、任务名称、短信内容等参数
  • 短信内容可包含变量,格式name{name},如:尊敬的{name},您的快递…
  • 接收号码支持文件导入或手动输入(最多100个号码)
  • 可预设定时发送时间

7.2 API/SDK程序化发送

对于开发者,推荐使用阿里云官方SDK集成短信发送能力。SDK封装了请求签名、异常重试等底层逻辑。阿里云短信服务支持Java、PHP、Python、Node.js、C#等多种语言。

下面以Java和Python两种语言为例,详细介绍SDK的集成方法。

7.2.1 Java SDK集成示例

环境要求:Java版本需高于Java 8。

第一步:在pom.xml中添加Maven依赖:

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>dysmsapi20170525</artifactId>
    <version>2.0.24</version>
</dependency>

第二步:在application.yml中配置参数:

aliyun:
  sms:
    access-key-id: your-access-key-id
    access-key-secret: your-access-key-secret
    endpoint: dysmsapi.aliyuncs.com
    sign-name: 你的签名
    template-code: SMS_123456789

第三步:创建配置类初始化SDK客户端:

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.teaopenapi.models.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AliyunSmsConfig {
    
    @Value("${aliyun.sms.access-key-id}")
    private String accessKeyId;
    
    @Value("${aliyun.sms.access-key-secret}")
    private String accessKeySecret;
    
    @Value("${aliyun.sms.endpoint}")
    private String endpoint;
    
    @Bean
    public Client smsClient() throws Exception {
        Config config = new Config()
            .setAccessKeyId(accessKeyId)
            .setAccessKeySecret(accessKeySecret)
            .setEndpoint(endpoint);
        return new Client(config);
    }
}

第四步:编写发送短信的Service:

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.tea.TeaException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
public class SmsService {
    
    @Autowired
    private Client smsClient;
    
    @Value("${aliyun.sms.sign-name}")
    private String signName;
    
    @Value("${aliyun.sms.template-code}")
    private String templateCode;
    
    public SendSmsResponse sendSms(String phoneNumber, String templateParam) {
        SendSmsRequest request = new SendSmsRequest()
            .setPhoneNumbers(phoneNumber)
            .setSignName(signName)
            .setTemplateCode(templateCode)
            .setTemplateParam(templateParam);
        
        try {
            return smsClient.sendSms(request);
        } catch (TeaException e) {
            System.err.println("发送短信失败:" + e.getMessage());
            throw new RuntimeException("短信发送异常", e);
        }
    }
}

第五步:在Controller中调用:

@RestController
@RequestMapping("/api/sms")
public class SmsController {
    
    @Autowired
    private SmsService smsService;
    
    @PostMapping("/send")
    public ResponseEntity<String> send(@RequestParam String phone, @RequestParam String code) {
        String templateParam = "{\"code\":\"" + code + "\"}";
        SendSmsResponse response = smsService.sendSms(phone, templateParam);
        return ResponseEntity.ok("发送成功,BizId:" + response.getBody().getBizId());
    }
}

7.2.2 Python SDK集成示例

环境要求:Python版本>=3.7。

第一步:安装SDK:

pip install aliyun-python-sdk-core-v3
pip install aliyun-python-sdk-dysmsapi

第二步:编写发送短信代码:

from aliyunsdkcore.client import AcsClient
from aliyunsdkdysmsapi.request.v20170525 import SendSmsRequest
import json
# 配置AccessKey
access_key_id = 'your-access-key-id'
access_key_secret = 'your-access-key-secret'
region_id = 'cn-hangzhou'
# 创建客户端
client = AcsClient(access_key_id, access_key_secret, region_id)
# 构建请求
request = SendSmsRequest.SendSmsRequest()
request.set_AcceptFormat('json')
request.set_PhoneNumbers('13800138000')
request.set_SignName('你的签名')
request.set_TemplateCode('SMS_123456789')
request.set_TemplateParam(json.dumps({"code": "123456"}))
# 发送请求
try:
    response = client.do_action_with_exception(request)
    print("发送成功:" + response.decode('utf-8'))
except Exception as e:
    print("发送失败:" + str(e))

八、安全与限流配置

8.1 RAM权限管理

推荐的做法是使用RAM身份(即RAM用户和RAM角色)来访问短信服务,避免直接使用阿里云主账号。这种方法不仅提升了安全性,还便于进行更精细的权限管理。

短信服务相关的系统权限策略:

  • AliyunDysmsFullAccess:管理短信服务的权限
  • AliyunDysmsReadOnlyAccess:只读访问短信服务的权限

如果默认的系统策略不满足需求,可以创建自定义权限策略,实现更细粒度的权限控制。

8.2 QPS限流

短信服务API有QPS限制:

  • 套餐包模式:单用户QPS限制为30次/秒
  • 按量付费模式:单用户QPS限制为2000次/秒

同一主账号及其所有RAM用户共享上述QPS限额。如果业务需要更高的并发量,建议升级到按量付费模式或联系阿里云提升限额。

8.3 发送频率限制

短信服务对发送频率有严格限制:

  • 单号码限频:1天20条
  • 验证码同一号码最多1条/分钟

可以在控制台设置日发送量总量阈值和月发送量总量阈值。同时可开启验证码防盗刷监控,防止恶意攻击。

九、回执消息配置

回执消息是在使用API接口发送短信之后,通过配置轻量消息队列(原MNS)消费模式或HTTP批量推送模式,帮助您掌握短信的发送成功率。

回执消息的两种接收方式:

  • MNS消息队列消费模式:通过轻量消息队列的Queue模型来接收指定地域的短信回执消息
  • HTTP批量推送模式:阿里云将回执消息通过HTTP请求推送到您指定的URL地址

配置回执消息后,可以实时获取短信的发送状态(成功、失败、运营商返回码等),便于业务系统进行后续处理和数据统计分析。

十、常见错误码排查

调用短信服务API接口失败时会返回错误码,以下是一些常见的错误码及解决方案:

  • isv.SMS_SIGNATURE_SCENE_ILLEGAL:签名和模板类型不一致。模板和签名类型必须匹配
  • InvalidTemplateCode:模板ID无效或未通过审核。检查模板ID是否正确,确认模板已审核通过
  • 账号欠费:账户余额不足。检查账户余额,充入相应金额
  • 权限不足:AK/SK没有授权管理短信服务的权限。检查RAM用户是否已授予AliyunDysmsFullAccess权限
  • 签名未通过审核:签名状态不是\"审核通过\"。在控制台确认签名已通过审核

发送失败时,建议首先检查API错误码和错误信息进行定位。更详细的问题排查可以通过订阅回执消息,参考短信发送状态回执错误码查看问题原因和解决方案。

十一、成本优化建议

短信服务计费主要涉及发送条数。以下是一些成本优化的建议:

  • 选择合适的计费方式:高频发送场景建议购买套餐包,单价更低;低频场景可选择按量付费
  • 套餐包优先抵扣:系统会优先消耗套餐包额度,超出部分按量计费
  • 关注套餐包余量:在控制台套餐包统计界面查看余量,及时续购避免按量高价
  • 合理设置发送频率:避免不必要的重复发送,节省成本
  • 利用测试环境:控制台提供专用的测试签名和测试模板,支持发送测试短信,帮助您在测试阶段免去签名和模板的申请环节

十二、国际短信注意事项

国际短信流程相对简化,大部分国家和地区无需预先申请签名和模板。但仍需注意以下事项:

  • 印度:需要完成DLT注册
  • 沙特阿拉伯:需要预注册Sender ID
  • 美国/加拿大:推荐使用当地号码(长码/短码)以提高到达率
  • 其他国家或地区:具体的合规要求以控制台页面显示为准

十三、常见问题问答

问:个人认证用户可以开通短信服务吗?

答:阿里云短信服务目前仅支持企业认证账号使用。个人认证用户功能受限,无法发送营销短信。建议升级为企业认证,或申请他用资质。

问:签名和模板审核需要多长时间?

答:签名审核通常需2小时,模板审核通常需2小时。但运营商实名报备需5-10个工作日。建议提前规划时间。

问:如何获取AccessKey?

答:在RAM控制台创建RAM子用户,勾选\"编程访问\",系统会自动生成AccessKey ID和AccessKey Secret。创建后请妥善保管Secret,不支持二次查看。

问:发送短信失败如何排查?

答:首先查看API返回的错误码和错误信息。常见原因包括:签名或模板未审核通过、账户余额不足、AK/SK权限不足、QPS超限等。也可通过订阅回执消息获取详细状态。

问:短信服务如何计费?

答:计费方式分为按量计费和套餐包两种。先扣除套餐包额度,超出部分按量计费。国内验证码短信低至0.045元/条起。具体价格以官网为准。

问:如何防止短信被盗刷?

答:可在控制台设置日发送量总量阈值和月发送量总量阈值。开启验证码防盗刷监控。同时建议设置验证码短信发送频率限制。使用RAM子账号并遵循最小权限原则也能降低风险。

相关文章
|
20天前
|
弹性计算 监控 安全
阿里云VPC网络ACL与安全防护完全指南:从子网隔离到纵深防御
本文系统阐述阿里云VPC网络访问控制体系,重点剖析网络ACL(Access Control List)作为子网级无状态防火墙的配置方法、核心优势与最佳实践。文章从网络ACL与安全组的本质区别入手,深入讲解五元组规则配置、入出方向流量管理、与安全组协同使用的纵深防御策略,并进一步扩展至云防火墙、流量镜像、DDoS防护、WAF接入等高级安全能力。通过典型场景示例和代码实操,帮助读者构建从子网边界到实例粒度的多层防护体系,实现云上资产的安全隔离与合规管控。
|
9月前
|
弹性计算 运维 安全
区别及选择指南:阿里云轻量应用服务器与ECS云服务器有什么区别?
阿里云轻量应用服务器适合个人开发者、学生搭建博客、测试环境,易用且性价比高;ECS功能更强大,适合企业级应用如大数据、高流量网站。根据需求选择:轻量入门首选,ECS专业之选。
617 2
|
运维 大数据 Devops
研发管理难题如何破?云效打造强有力的阿里技术中台
云效(内部叫Aone)就是阿里的2万多名工程师和几万名员工协作沟通的工具,为了产品研发提供一个标准化的平台,覆盖从研发,到发布,再到日常运维的一站式平台,能够让开发同学通过这个平台,低成本的按照统一的流程进行研发活动,减少错误,提高效率。
5620 1
|
6月前
|
存储 弹性计算 安全
新手上云:阿里云服务器ECS租用流程,2026年最新版(图文指南)
2026年阿里云ECS租用最新指南:从账号注册、实名认证到三种购买方式(自定义、快速、活动),图文详解配置选型、支付开通及初始化连接全流程。新手3分钟可完成,支持灵活部署与高性价比选择,官网/控制台一站式操作。
|
6月前
|
运维 安全 算法
量子通信:真·不可破解的传输通道,还是被神话了?
量子通信:真·不可破解的传输通道,还是被神话了?
425 6
|
1月前
|
数据采集 人工智能 搜索推荐
GEO入门教程:零基础搞懂生成式引擎优化的3个关键步骤
GEO(生成式引擎优化)只需三步:①建高质量知识库(定义+数据+案例);②结构化生产(表格/FAQ/数据提升引用率80%);③多平台分发+内链,打造AI信任的内容集群。零技术门槛,7天初见成效。(239字)
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
Agent = Model + Harness:模型决定上限Harness 决定下限
Claude Code、Cursor等并非聊天界面,而是AI编码的“操作系统”——Harness。它决定模型能否稳定执行规则、调用工具、管理上下文与权限。模型定上限,Harness定下限。差异常源于Harness配置,而非模型本身。
486 5
|
2月前
|
消息中间件 数据可视化 API
阿里云短信服务怎么接入?从签名、模板、API 到发送回执,一文讲清楚
本片文章将围绕阿里云短信服务的完整接入链路,拆解从资质申请、签名审核、模板配置、运营商报备,到 API 发送和状态回执的关键步骤,帮助产品经理、运营人员、技术负责人和开发者快速理解短信服务接入流程,提前做好上线准备。
654 5
|
2月前
|
人工智能 SEO 自然语言处理
GEO 底层逻辑:大模型时代的数据分发管线重构
当传统的 SEO(搜索引擎优化)红利见顶,流量获客的逻辑正在发生底层重构。2025 年,随着各大 LLM(大语言模型)逐渐成为网民获取信息的第一入口,GEO(Generative Engine Optimization,生成式引擎优化)已经成为企业数字营销的必争之地。

热门文章

最新文章