为什么使用 WhatsApp 进行验证?
在 SMS 之外增加另一个送达渠道
当 SMS 接收不可靠时,WhatsApp 允许客户通过互联网接收验证码。客户只需安装 WhatsApp 并保持有效的网络连接即可。减少验证码输入步骤
“复制代码”按钮可减少手动输入的繁琐。在受支持且已集成的 Android 应用上,一键点击(One-tap)和免点击(Zero-tap)体验可以减少应用切换。优化单次完成验证的成本
按市场对比每次成功验证的总渠道成本,包括身份验证费率、适用的跨国身份验证费率、YCloud 费用以及 SMS 回退成本。Meta 仅针对已送达的消息收费;未送达的消息不会产生相应的 Meta 消息费用。其他费用取决于您的 YCloud 套餐。请参阅 WhatsApp 定价 和 Meta 定价。定位验证流程中的流失环节
分别跟踪 API 接收、消息送达和验证成功情况,以准确定位流失节点。您的后端必须拒绝过期、重复使用或无效的验证码。准备工作
- 登录 YCloud 并连接 WABA 和发送方。
- 准备验证码的请求、生成、存储和验证逻辑。本指南使用 WhatsApp Messages API;您的系统拥有验证码的全生命周期控制权。关于 YCloud 的验证服务,请参阅 Verify。
- 准备好服务端 API 密钥和 Webhook 接收端。
- 使用主动请求验证码的测试接收者进行测试。验证码请求不代表用户同意后续接收营销消息。
- 配置 SMS 渠道并在后端实现回退(fallback)规则。
1. 选择验证码体验
| 体验与集成 | 示例 |
|---|---|
| 复制代码 在 WhatsApp 中复制,然后粘贴到您的网站或应用中。跨平台支持。 验证码输入与后端验证。 | ![]() |
| 一键点击 / 自动填充 点击 Autofill 将验证码传递至您的 Android 应用。 集成 Meta 的 OTP Android SDK 并配置您的应用包名以及应用签名密钥哈希。 | ![]() |
| 免点击(Zero-tap) 您的 Android 应用无需切换到 WhatsApp 或点击任何按钮即可接收验证码。 集成 Meta 的 OTP Android SDK,配置您的应用包名和应用签名密钥哈希,并接受免点击条款。 | ![]() 示意性验证码输入界面。免点击需要 Android 系统支持。 |
2. 创建身份验证模板
选择 WABA、名称和语言
在 YCloud 中打开目标 WABA 的 模板 页面,选择 添加模板,然后选择 身份验证。 名称使用小写字母、数字和下划线,例如login_verification。选择客户的语言,并记录完全一致的已获批名称和语言代码以供发送使用。请参阅创建模板。
配置内容和验证码操作
身份验证使用预设的验证码文案,并支持安全和过期提示。请勿在正文中插入普通宣传文案、URL、媒体内容或表情符号。 选择 复制代码、 自动填充 或 免点击(Zero Tap)。对于自动填充和免点击,请输入真实的 Android 应用包名和签名哈希,并完成应用集成。免点击还要求接受相应的条款。 对于 API 配置,请使用当前的supported_apps 规范,而不是旧版的顶层 package_name 和 signature_hash 示例。有关 Android SDK 和握手细节,请遵循 身份验证集成指南。
配置三项独立的过期设置
建议在身份验证模板中将 OTP 投递 TTL (
messageSendTtlSeconds) 设置为 30–60 秒 。请将其保持在验证码的剩余有效期内。YCloud 支持 30–900 秒,新模板默认值为 10 分钟。
显示的过期提示支持 1–90 分钟 ,并且不会在后端强制执行过期。投递 TTL 会终止待处理的投递尝试,但不会撤回已投递的消息。请参阅 YCloud API 规范。
提交并检查可用性
提交模板并查看其实际审核状态。仅在模板通过审核且可用后才发送。如果被拒绝,请查看原因并参考模板审核与生命周期。不要依赖固定的审核时间。3. 通过 API 发送
在客户请求验证码后立即发送。根据您的业务流程选择提交方式:
两个端点均需使用已批准的身份验证模板。
准备请求
- 使用
X-API-Key进行服务端身份验证。 - 为
from和to使用包含国家/地区代码的 E.164 格式号码。 - 将
type设置为template,并为所选 WABA 使用已批准的名称和语言。 - 在消息体和 OTP 按钮参数中提供相同的验证码。
- 将您的验证请求与 YCloud 消息 ID 关联。
externalId有助于对账,但不能保证幂等性。
123456 为虚构数据,生产环境中必须由您的验证系统生成:
sub_type: url;切勿使用普通的营销优惠券代码按钮结构。请参阅复制代码身份验证和发送 WhatsApp 消息。您还可以在已批准的模板上选择 更多 → 复制为 cURL ,对照其配置检查生成的参数。
API 响应成功并不确认消息已送达。如果请求超时,请在重新发送前检查可用的消息记录和回调。
4. 接收投递更新
在 开发者 → Webhooks中创建一个端点,输入您的回调 URL,并订阅whatsapp.message.updated。签名验证、确认和重试机制请遵循Webhook 指南。
将每个消息 ID 与其验证请求关联:
仅当您的后端验证通过该验证码后,才标记验证完成。妥善处理重复和延迟的回调,避免较早的状态覆盖较新的状态。使用消息日志进行手动排查。
5. 设计界面和 SMS 回退方案
明确接收通道
在提交前提示验证码将通过 WhatsApp 发送。发送后显示掩码处理的目标号码、等待提示、重发倒计时以及可用的备选方案。允许客户返回修改号码。| 策略与体验 | 前端示例 |
|---|---|
| WhatsApp 优先,SMS 回退 首先通过 WhatsApp 发送;如果投递失败或耗时过长,则提供 SMS 选项。 | ![]() |
| 客户自主选择 发送前提供 WhatsApp 和 SMS 选项,随后显示重发倒计时和验证码输入界面。 | ![]() |
配置 SMS 回退方案
在 WhatsApp 身份验证模板中将 OTP 投递 TTL 设置为 30–60 秒 ,并让 SMS 回退计时器与之保持一致。
Meta 对成功送达的 WhatsApp 消息计费。未送达即过期的消息不会产生 Meta 消息费用;但 SMS 费用仍然适用。仅缺少送达 Webhook 并不等同于未送达,因此如果 WhatsApp 消息在过期前已送达,两个渠道都可能会被计费。请参阅 WhatsApp 定价。
即使回调重复或延迟到达,每个验证请求最多发送一次 SMS。复用相同的未过期验证码,或者在发放新验证码时使旧验证码失效。回退不得延长验证码的有效期。
6. 上线前测试
上线后,按市场、渠道和设备对比送达率、送达延迟、验证完成率、SMS 回退占比以及单次成功验证的成本。利用这些结果来调优渠道优先级和等待阈值。
附加场景:客户发起的验证
在客户发起的验证流程中,客户从应用中打开 WhatsApp,发送一条包含当前验证所需信息的消息,然后返回该应用。 这种方式需要一次性质询(challenge)、会话绑定、过期机制、重放保护以及用户确认。常见问题
如何检查 Android 或 iOS 上是否已安装 WhatsApp?
在 Android 上,请在清单的软件包查询中声明com.whatsapp 和 com.whatsapp.w4b,然后在 WhatsAppOtpHandler 实例上使用 Meta 的 OTP Android SDK 方法 isWhatsAppInstalled(context)。
在 iOS 上,请使用 UIApplication.shared.canOpenURL(URL(string: "whatsapp://otp")!) 并配置应用所需的 URL Scheme 查询权限。
安装检查有助于在当前设备上推荐渠道。这并不能确认输入的电话号码是否已在 WhatsApp 注册。请允许客户确认其 WhatsApp 号码并选择其他渠道。请参阅 Meta 的 Android 和 iOS 安装检查说明。






