验证码短信(OTP SMS)常见问题集
面向客户 / 运营 / 技术支持团队的知识库文档 · 覆盖接入、发送、排查、安全合规全链路
基础概念
6 条什么是验证码短信(OTP SMS)?▶
验证码短信是短信服务中「验证码类型」的子类(签名 + 模板 + 验证码变量),用于向用户手机号发送一次性密码(OTP,One-Time Password),完成注册、登录、支付确认、身份核验、换绑手机号等操作。
典型形态:【某某科技】您的验证码为 483920,5 分钟内有效,请勿泄露。
验证码短信和普通通知短信有什么区别?▶
| 维度 | 验证码短信 | 通知短信 |
|---|---|---|
| 模板类型 | 验证码类(含动态数字/字母变量) | 通知类(变量通常为订单号、时间等) |
| 内容要求 | 必须含有效期提示与防泄露提示 | 不得含验证码变量 |
| 发送优先级 | 运营商通道优先级最高 | 普通优先级 |
| 频控策略 | 强制频控(防刷) | 按业务配置 |
| 审核要求 | 签名 + 模板逐一审核 | 同样需审核,规则略有差异 |
验证码短信的完整发送链路是怎样的?▶
- 业务方服务端调用短信平台 API,携带
手机号、签名、模板ID、验证码变量; - 平台校验:签名/模板状态、频控、黑名单、余额;
- 平台生成验证码(或使用业务方传入的验证码)并选择通道下发;
- 运营商网关投递至用户手机;
- 平台通过回执(状态报告)异步通知业务方送达结果。
什么是短信签名?为什么必须要有?▶
短信签名是短信内容开头 【】 中的内容,代表发送方身份(如 【密达云通信】)。依据工信部《通信短信息服务管理规定》,所有商业/服务类短信必须携带经审核的签名,用于标识信息来源、便于用户识别与投诉追溯。
什么是状态报告(回执)?▶
状态报告是运营商返回的投递结果(DELIVRD 成功 / UNDELIV 失败等),通常在提交后秒级至 5 分钟内陆续返回。业务方应通过回调 URL 或轮询接口消费回执,用于:统计到达率、触发重发策略、监控通道质量。
验证码的有效期一般设置多长?▶
行业惯例为 5 分钟(120 秒 ~ 10 分钟均可)。设置过短会增加用户重发率,过长会扩大被暴力破解的时间窗口。建议同时在模板文案中明示有效期。
收不到验证码(用户侧排查)
8 条用户反馈收不到验证码,最常见的原因有哪些?▶高频
按出现概率排序:
- 手机侧拦截:安全类 App / 手机管家把验证码短信当垃圾短信拦截;
- 输错号码:用户填了旧号码、家人号码或输错位;
- 频控触发:短时间内请求次数超限被平台拒绝(提示「请求过于频繁」);
- 黑名单:用户曾回复 TD/退订 或投诉,号码进入运营商黑名单;
- 信号/停机:飞行模式、弱信号、欠费停机;
- 携号转网缓存:转网后归属运营商数据未同步,被路由到原运营商;
- 空号/风险号:号码为空号或被标记为风险号码;
- 通道故障:某个运营商通道异常(属于低概率但需优先排除的平台侧问题)。
安卓手机收不到,iPhone 能收到(或反过来),是什么问题?▶
这与运营商无关,大概率是终端拦截差异:
- 安卓:各品牌自带「骚扰拦截」「智能识别」功能较强,验证码可能被归入垃圾短信文件夹(信息 App → 骚扰拦截 / 垃圾箱);
- iPhone:检查「设置 → 信息 → 未知与过滤信息」是否将短信过滤到「过滤信息」列表。
引导用户关闭对应拦截开关或将签名加入白名单即可。
用户刚携号转网,收不到验证码怎么办?▶
携号转网后运营商侧号码归属数据存在最长 48 小时(极端 72 小时)的同步延迟。期间短信可能被路由到原运营商导致丢失。
处理方案:引导用户等待同步完成;紧急场景可提供语音验证码(外呼播报)或邮箱验证作为降级通道。
用户收不到但平台显示「已送达」,怎么回事?▶
- 状态报告显示送达但用户没看到 → 大概率被终端拦截且不展示,让用户检查垃圾短信/拦截记录;
- 运营商回执存在小概率误报(极少数情况),可让用户换机测试;
- 若批量出现「显示送达但用户均未收到」,应立即升级通道质量问题排查(可能是伪回执通道)。
为什么用户几分钟前还能收到,现在突然收不到了?▶
优先检查频控:常见策略如「同一号码 1 分钟 1 条、1 小时 5 条、24 小时 10 条」,超限后请求会被直接拒绝且通常不再下发。让用户等待冷却期(如 60 分钟)后重试。若接口返回频控错误码,前端应提示用户剩余等待时间而非让用户反复点击。
用户换了新手机 / 恢复出厂设置后收不到?▶
多与 SIM 卡或新机拦截策略有关:重插 SIM、确认短信中心号码(SMSC)未被改动、关闭新机的智能拦截。双卡用户注意确认验证码发到了哪张卡、哪张卡开通了短信功能。
同一用户能收到通知短信,但收不到验证码短信?▶
两类短信可能走了不同模板/不同通道:
- 确认验证码模板状态是否正常(未过期、未下线);
- 确认使用的签名与模板是否匹配(模板审核时绑定了特定签名);
- 查看验证码通道的实时到达率监控,是否某运营商通道劣化;
- 查看该号码的发送记录:是否在提交阶段就被频控/黑名单拦截。
遇到大规模收不到,如何快速判断是不是平台故障?▶
- 看到达率曲线:整体到达率是否跌破阈值(如 90%);
- 看分运营商:是移动/联通/电信单边劣化还是全量劣化;
- 用测试号码矩阵(三大运营商各若干)实测;
- 确认是通道故障后,切换备用通道并发布公告,同时向受影响客户推送故障通知。
延迟与到达率
5 条验证码短信的正常送达时效是多久?▶
| 指标 | 行业基准 | 说明 |
|---|---|---|
| 提交成功率 | ≥ 99.9% | 平台受理成功占比 |
| 秒级到达率 | ≥ 90% | 5 秒内送达 |
| 终态到达率 | ≥ 98% | 含重试、以回执为准 |
| P95 延迟 | ≤ 10 秒 | 从提交到回执 |
节假日(尤其春节)运营商信令拥塞,延迟可能显著上升,属正常现象。
短信延迟的常见原因?▶常见
- 运营商信令拥塞:晚间高峰、节假日、大促活动期;
- 终端弱信号:用户在电梯、地库、高铁上,短信暂存在短信中心,恢复信号后补投;
- 携号转网路由延迟;
- 通道队列堆积:通道商侧积压,需要监控发现并切换;
- 业务侧排队:发送请求在业务系统消息队列中积压(平台无感知,需自查)。
如何监控和提升到达率?▶
- 建立到达率看板:按通道、运营商、小时粒度监控终态到达率;
- 配置通道自动降级:某通道到达率/延迟劣化时自动切到备用通道;
- 定期清理号码库:营销或历史沉淀号码中的空号、停机会拉低整体到达率;
- 对未收到回执的号码做二次补发策略(注意频控与用户感知)。
状态报告一直没回来,算送达了吗?▶
不算。运营商少量回执会丢失或超时(一般 15 分钟~2 小时未回执即视为未知状态)。建议对「超时无回执」单独打标统计,不纳入失败也不纳入成功,作为独立监控指标。超时无回执比例异常升高时通常是回执链路故障而非发送问题。
为什么大促活动时延迟特别明显?如何提前准备?▶
大量业务在同一时段集中提交(如整点秒杀),运营商信令与通道同时承压。
活动前准备清单:
- 提前 3~5 个工作日报备活动发送量(向服务商申请通道扩容/独享);
- 错峰发送:验证码由用户行为触发,可对非验证码类批量短信做错峰调度;
- 压测发送链路,确认自身服务与队列吞吐;
- 准备降级方案:语音验证码、邮箱验证。
签名与模板审核
6 条申请短信签名需要什么材料?▶
| 签名归属 | 所需材料 |
|---|---|
| 公司全称/简称 | 营业执照 + 签名归属证明(如官网/APP 截图可见该名称) |
| APP 名称 | 营业执照 + APP 上架后台截图(软著或备案更佳) |
| 网站名称 | 营业执照 + ICP 备案信息截图(备案主体需一致) |
| 公众号/小程序 | 营业执照 + 后台账号信息截图 |
| 商标名 | 营业执照 + 商标注册证 |
审核时效一般为 2 小时内(工作日),驳回后修改材料可重新提交。
验证码模板有哪些内容规范?▶
必须包含以下要素,否则大概率被驳回:
- 明确的「验证码」字样与变量占位(如
${code}); - 有效期提示(如「5 分钟内有效」);
- 防泄露提示(如「请勿泄露给他人」);
- 用途说明(登录/注册/找回密码等,可与业务场景关联);
- 不得含营销、引导下载、链接等内容;
- 不支持营销类话术混入验证码模板。
标准示例:【签名】您的验证码是 ${code},用于 ${action},${expire} 分钟内有效。请勿泄露给任何人。
模板审核被驳回的常见原因?▶高频
- 缺少有效期或防泄露提示;
- 变量格式错误(使用了未定义变量、变量嵌套);
- 内容与「验证码」类型不符(含通知/营销内容);
- 签名与模板不匹配(模板需挂在已审核通过的签名下);
- 涉及敏感词(金融、房产等需额外资质);
- 签名归属证明材料不清晰或主体不一致。
一个签名可以对应多个模板吗?一个模板可以多个签名共用吗?▶
一个签名可以申请多个模板(验证码、通知、营销各自独立);一个模板只能在申请时绑定的签名下使用,发送时签名不匹配会返回参数错误。多品牌/多 APP 场景需分别为每个签名申请模板。
模板里的验证码是纯数字好还是数字+字母好?▶
推荐 6 位纯数字:
- 4 位安全强度不足,8 位输入负担重;
- 字母易混淆(0/O、1/l/I),短信场景用户需手动输入,纯数字体验最好;
- 配合 5 分钟有效期 + 错误次数限制(如 5 次锁定)+ 发送频控,6 位数字安全性足够。
签名和模板审核通过后长期有效吗?▶
长期有效,但存在回收机制:连续 90 天(部分服务商为 30/60 天)未使用的签名/模板可能被下线;签名对应的资质过期(营业执照吊销、备案注销)也会触发失效。建议对在用签名模板建立台账并定期巡检。
接口与集成
6 条发送验证码的基本请求包含哪些参数?▶
POST /sms/otp/send
{
"mobile": "13800138000", // 必填,支持国家码前缀
"sign": "密达云通信", // 已审核签名
"templateId": "OTP_10001", // 已审核模板
"params": { "code": "483920", "expire": "5", "action": "登录" },
"scene": "login", // 业务场景标识,用于频控统计
"requestId": "biz-uuid-xxx" // 幂等键,防止重复提交
}
其中 requestId 幂等键强烈建议传入:用户双击按钮、前端重试时不会重复扣费和下发。
接口返回成功,用户却没收到短信?▶
接口返回的「成功」通常仅表示提交成功。排查路径:
- 用发送记录查询接口拉取该手机号的终态状态(DELIVRD / UNDELIV / 无回执);
- UNDELIV → 查看错误码(空号、黑名单、携转等);
- DELIVRD → 转用户侧终端拦截排查;
- 无回执 → 等待回执超时窗口后再下结论。
常见错误码及含义?▶
| 错误码 | 含义 | 处理建议 |
|---|---|---|
| INVALID_MOBILE | 手机号格式错误 | 前端校验号码格式 |
| RATE_LIMITED | 触发发送频控 | 提示用户等待,展示剩余秒数 |
| BLACKLIST | 号码在黑名单 | 引导用户申诉解除 |
| TEMPLATE_INVALID | 模板不存在/已失效 | 核对 templateId 与模板状态 |
| SIGN_MISMATCH | 签名与模板不匹配 | 确认模板归属签名 |
| BALANCE_EMPTY | 账户余额不足 | 充值并配置余额预警 |
| EMPTY_NUMBER | 空号/停机 | 提示用户检查号码 |
| CARRIER_ERROR | 运营商侧失败 | 按回执错误码细分处理 |
回调(Webhook)通知没收到或丢失怎么办?▶
- 确认回调 URL 公网可达、正确响应 200(不要返回 30x 或 404);
- 回调处理逻辑要快速返回,耗时操作转异步,避免超时被判失败;
- 平台一般有失败重推(如 1m/5m/30m 递增重试),确认响应体符合要求以触发重推;
- 建立对账兜底:定时(如每 10 分钟)通过记录查询接口补偿拉取,防止极端情况丢回调。
如何在发送高峰保证业务不丢?▶
- 业务侧使用消息队列削峰,消费端限速提交;
- 设置合理超时(建议连接 3s / 读取 5s)与重试(仅对网络类错误重试,且幂等);
- 对接多通道/多服务商做容灾切换;
- 压测确认平台侧配额(QPS)足够,必要时申请提额。
短信接入有 SDK 吗?需要 HTTPS 吗?▶
主流平台均提供 Java / Go / Python / Node.js / PHP 等 SDK;REST API 全部要求 HTTPS,并使用 AccessKey + 签名(HMAC)鉴权。切勿将 AccessKey 硬编码在前端或客户端代码中——必须由服务端调用发送接口。
频控与防刷
4 条标准频控策略是怎样的?▶
| 维度 | 常见阈值 |
|---|---|
| 同一手机号 | 1 分钟 1 条 / 1 小时 5 条 / 24 小时 10 条 |
| 同一 IP | 1 小时 20~50 条(视业务而定) |
| 同一用户账号 | 按账号维度叠加限制 |
| 图形验证码前置 | 同号第 2 次请求起强制人机校验 |
频控既保护用户不被骚扰,也直接控制短信成本与被投诉风险。
如何防止验证码接口被恶意刷量?▶安全
- 图形/滑块验证码前置:发送前先通过人机校验;
- 行为风控:设备指纹、IP 信誉库、请求频次熵分析;
- 业务语义校验:未注册用户请求「找回密码」直接拦截;
- 最小化暴露:发送按钮倒计时(60s)+ 前端不暴露完整手机号批量入口;
- 监控告警:单 IP/单号段请求量突增自动告警并临时封禁。
验证码错误次数限制应该怎么设?▶
建议同一验证码 连续错误 5 次即作废,同一账号 10 次错误后锁定 30 分钟。否则 6 位数字空间(100 万)在接口高并发下可能被撞库爆破。注意:校验接口也要有频控,很多安全事件发生在「校验」而非「发送」环节。
验证码被用户转发给了骗子,算安全事故吗?▶
属于社会工程学诈骗,不是系统漏洞,但产品侧应尽量降低危害:
- 模板中固定加入「请勿泄露给任何人,包括客服」;
- 校验时如检测到会话/IP 异常,要求二次验证;
- 高危操作(改绑手机、改密码)使用双重验证(短信 + 原密码/生物识别);
- 提供客服话术与快速冻结通道。
安全与合规
5 条发送验证码短信需要哪些资质与实名要求?▶
- 企业主体:营业执照(三证合一);
- 短信签名归属证明(详见第 4 章);
- 特殊行业补充资质:金融(金融牌照/备案)、物流、医疗等;
- 依据《网络安全法》与工信部要求,使用短信服务的企业需完成实名认证;
- 网站类签名需 ICP 备案且备案主体与申请人一致。
验证码短信文案中有哪些内容红线?▶
- 禁止包含任何 URL 链接(钓鱼风险,多数通道直接拦截);
- 禁止营销、促销话术混入验证码模板;
- 禁止诱导用户回复、转发;
- 禁止出现「退订回T」以外的不规范指令(验证码类一般无需退订语);
- 不得冒用他人签名或使用与实际业务不符的名称。
用户回复了退订(TD/退订),会影响验证码短信吗?▶
会。用户退订后号码进入黑名单,所有类型短信(含验证码)都可能被拦截。这是投诉率最高的客诉场景之一。建议:
- 验证码类通道与营销类通道隔离,营销退订不影响验证码下发;
- 提供黑名单自助解除入口(用户回复指定指令或联系客服)。
如何保护验证码在链路中的安全?▶
- 验证码在业务侧存储时使用哈希(HMAC/BCrypt),不明文落库;
- 日志脱敏:发送日志中验证码打码(如
48****0); - 通道传输全链路 HTTPS/TLS;
- 验证码与会话绑定(sessionId + 手机号 + code 三元组校验),防止 A 号码的验证码用在 B 会话;
- 验证成功后立即作废,防止重放。
语音验证码可以作为补充手段吗?有什么注意点?▶
可以,语音验证码(电话播报)适合作为短信屡次未达时的降级方案。注意:
- 播报语速适中,支持重听(按键);
- 同样需要频控与防刷;
- 成本通常高于短信;
- 仅作为短信的补充而非替代——用户在会议等场合不便接听。
计费相关
3 条验证码短信怎么计费?提交失败会扣费吗?▶
- 计费单位为「条」,按运营商(移动/联通/电信)分档定价,通常有套餐包与阶梯折扣;
- 提交失败(被频控、模板错误等)不扣费;
- 提交成功后无论用户是否收到,正常按条计费(空号等终端原因 UNDELIV 一般已产生通道成本);
- 部分服务商对通道故障导致的批量失败提供返还,需保留发送记录申请核对。
如何控制验证码短信成本?▶
- 严格的频控与人机校验,从源头减少无效发送;
- 按钮 60 秒倒计时,杜绝用户连点;
- 号码有效性预校验(空号检测)用于存量清理;
- 到达率监控 + 通道优选,把钱花在到达率高的通道上;
- 设置余额预警(如低于 20% 告警),避免余额耗尽导致全量发送失败——这是最贵的「隐性成本」。
如何对账?需要保留哪些记录?▶
保留字段:requestId、手机号、签名、模板ID、提交时间、回执时间、终态状态、错误码、计费条数。每日与服务商账单按 requestId 对账,差异项(有请求无账单 / 有账单无请求)提交工单核对。建议日志保留 ≥ 180 天。
国际短信(海外验证码)
2 条发国际验证码短信有什么不同?▶
- 手机号需带国家码(E.164 格式,如
+855xxxxxxxx); - 计费按目的国家/运营商差异极大,且汇率波动会导致价格变动;
- 部分国家要求本地发件人 ID(Sender ID)注册(如印尼、沙特等),未注册会被改名或拦截;
- 到达率整体低于国内,建议接入多通道智能路由并按国家维度监控到达率;
- 内容审核规则遵循目的国法规(部分国家对内容类型有严格限制)。
海外用户收不到验证码,排查思路有何不同?▶
- 确认国家码与号码格式正确(去除前导 0 等);
- 查该国家/运营商通道到达率,劣化时切换通道;
- 确认 Sender ID 是否在该国注册;
- 海外终端拦截与 Wi-Fi 短信(如 iMessage/RCS 优先)问题更多,建议提示用户检查短信 App;
- 必要时降级为语音验证码或 WhatsApp OTP 等富媒体通道。
🧭 附:单用户「收不到验证码」排查决策流(客服 SOP)
- 确认号码:让用户读出完整手机号(含国家码),核对是否输错、是否换了号码未更新。
- 查发送记录:后台检索该号码当日发送记录 —— 无记录 → 频控/黑名单/提交失败,按错误码处理;有记录 → 下一步。
- 查回执状态:DELIVRD → 转终端排查(第 4 步);UNDELIV → 按错误码解释(空号/停机等);无回执 → 告知等待并 15 分钟后复查。
- 终端排查:检查垃圾短信/拦截记录、短信中心号码、信号与飞行模式、双卡设置。
- 仍失败:更换时间重试 → 引导语音验证码/邮箱验证降级 → 收集手机号、时间点、requestId 提交工单深入排查。
- 升级条件:同签名模板多用户反馈(≥ 3 例/小时)→ 立即按「平台故障」流程上报通道值班。