Skip to main content
使用 WhatsApp 验证码进行注册、登录、账户找回以及敏感操作的额外验证。当客户选择 WhatsApp 后,您的系统将发送一个身份验证模板。客户复制或自动填充验证码,然后由您的后端进行验证。

为什么使用 WhatsApp 进行验证?

在 SMS 之外增加另一种发送渠道

WhatsApp 通过互联网连接接收消息。当 Wi-Fi 可用但 SMS 接收不稳定时,它为客户提供了另一种接收验证码的方式。接收者仍需安装 WhatsApp 并保持网络连接正常。

减少验证码输入步骤

复制验证码按钮减少了手动输入的繁琐。一键(One-tap)和零点击(Zero-tap)体验可以减少在支持且已集成的 Android 应用之间的切换。对于已经使用 WhatsApp 的客户,这些选项可以让验证更加顺畅。建议在您自己的业务流程中评估对完成率的影响。

优化单次完成验证的成本

根据不同市场评估 WhatsApp 作为降低验证成本的可行途径。对比身份验证费率及适用的国际身份验证费率、YCloud 费用、SMS 备用渠道成本以及验证完成率。 建议使用验证渠道总费用除以成功验证次数作为实际衡量指标。Meta 仅针对已送达的消息计费;未送达的消息不会产生相应的 Meta 消息费用。其他费用取决于您的 YCloud 套餐。请参阅 WhatsApp 定价 和 Meta 定价。

定位验证流程中的流失点

分别跟踪请求受理、消息送达和成功验证情况。这有助于您区分是发送环节的问题,还是接收或输入验证码时出现的问题。 WhatsApp 仅负责传输验证码。您的验证系统仍需负责判定其是否有效、过期、已被使用,以及是否已针对请求的操作完成授权。

开始之前

  1. 登录 YCloud 并 连接 WABA 与发送号码。
  2. 准备验证码请求、生成、存储和验证逻辑。本指南使用 WhatsApp Messages API;您的系统拥有验证码的全生命周期管理权限。如需使用 YCloud 的验证服务,请参阅 Verify。
  3. 准备一个 服务端 API Key 和 Webhook 接收器。
  4. 使用已主动请求验证码的测试接收者。请求验证码并不代表用户同意后续接收营销消息。
  5. 如果您需要备用方案,请配置并测试 SMS 渠道。WhatsApp Messages API 不会仅因为您遵循了本指南的建议就自动发送 SMS。

1. 选择验证码体验方式

当不满足设备或应用要求时,一键或零点击体验可以回退到其他方式(例如复制验证码)。请确保支持此回退机制。仅在编辑器中选择该选项并不会自动集成您的客户端应用。 Meta 还记录了在 iOS 26 及更高版本上通过通知提供 OTP 键盘建议的功能。这与 Android 的一键和零点击是分开的;请分别进行测试。请参阅 身份验证模板 和 Meta 身份验证文档。
Meta 身份验证示例,带有指向“复制验证码”的短箭头。

Meta example: the customer copies the verification code and enters it in your app. The code and expiry shown are demonstration values.

来源:Meta 身份验证模板。

2. 创建身份验证模板

选择 WABA、名称和语言

在 YCloud 中打开目标 WABA 的 模板 ,选择 添加模板,然后选择 身份验证。 使用小写字母、数字和下划线来命名模板,例如 login_verification。选择客户的语言,并记录获批的确切名称和语言代码以供发送。请参阅 创建模板。

配置内容和验证码操作

身份验证使用预设的验证码文本,并支持安全和过期提示。请勿在正文中插入常规促销文案、URL、媒体或 Emoji 表情。 选择 Copy code、 Autofill 或 Zero Tap。对于 Autofill 和 Zero Tap,输入实际的 Android 软件包名称和签名哈希,并完成应用集成。Zero Tap 还需要接受适用的条款。 对于 API 配置,请使用当前的 supported_apps 规范,而不是较旧的顶级 package_name 和 signature_hash 示例。有关 Android SDK 和握手详情,请参阅 身份验证集成指南。

配置三项独立的过期设置

当前 YCloud 规范支持常规自定义身份验证 TTL 值为 30–900 秒,新消息模板的默认值为 10 分钟 。历史默认值可能会有所不同;请检查保存的 messageSendTtlSeconds。显示的过期通知支持 1–90 分钟 ,但这不会改变后端过期时间,也不会延长常规发送 TTL 范围。 该规范还支持 -1,它会将自定义 TTL 设置为 30 天。不建议将其用于短期有效的验证码,并且这并不意味着立即过期或禁用重试。请参阅 YCloud OpenAPI 规范。 例如,在 10:00 生成并在 10:05 过期的验证码,如果在 10:04 到达,则只剩下一分钟。接收消息不会重置其有效期。TTL 过期会停止尚未完成的发送尝试;它不会撤回已送达客户设备的消息。

提交并检查可用性

提交消息模板并检查其实际审核状态。仅在获得批准且可用后发送。如果被拒绝,请检查原因并遵循消息模板审核与生命周期。不要依赖固定的批准时间。

3. 通过 API 发送

客户请求验证码后立即发送。根据您的流程需求选择提交行为: 端点名称 sendDirectly 描述了提交时序。它与处理消息模板生成的 Utility Direct Send 功能是分开的。此流程仍然使用已获批的身份验证模板。

准备请求

  • 使用 X-API-Key 进行服务端身份验证。
  • 对 from 和 to 使用包含国家代码的 E.164 格式号码。
  • 将 type 设置为 template,并使用所选 WABA 的已获批名称和语言。
  • 在正文和 OTP 按钮参数中提供相同的验证码。
  • 将您的验证请求与 YCloud 消息 ID 关联起来。externalId 有助于对账,但不保证幂等性。
Copy code 请求体示例。请替换占位符;123456 为虚构内容,在生产环境中必须由您的验证系统生成:
OTP 按钮的发送参数使用 sub_type: url;请勿使用普通的营销优惠券代码按钮结构。请参阅复制代码身份验证和发送 WhatsApp 消息。您还可以在已获批的消息模板上选择 更多 → 复制为 cURL ,并对照其配置检查生成的参数。 API 响应成功并不代表已送达。如果请求超时,请在重新发送之前检查可用的消息记录和回调。

4. 接收送达更新

在 开发者 → Webhook 中创建端点,输入您的回调 URL,并订阅 whatsapp.message.updated。有关签名验证、确认和重试,请参阅 Webhook 指南。 将每个消息 ID 与其验证请求相关联: 仅在后端验证验证码成功后,才标记验证完成。妥善处理重复和延迟到达的回调,避免较早的状态覆盖较新的状态。可使用 消息日志 进行手动排查。

5. 设计界面和 SMS 降级方案

明确接收渠道

提交前提示验证码将通过 WhatsApp 发送。发送后展示掩码后的接收号码、等待提示、重新发送倒计时及可选的备选方案。允许客户返回并修改号码。 在操作系统允许的情况下,您的应用可以使用 WhatsApp 可用性检测来推荐渠道。但安装并不代表输入的号码已注册或可达。未检测到安装也不能排除在其他设备上接收的可能性。请勿将安装检测用作号码验证。

分别处理失败与延迟

原指南中的 15–60 秒 可以作为试验性的等待区间。请根据实际观察到的延迟和流失率进行调整。这并非 WhatsApp 的硬性要求或送达承诺。 对于同一次验证挑战,您可以通过降级渠道发送仍然有效的相同验证码。如果生成新验证码,请根据策略使前一个验证码失效并向用户说明行为。降级绝不能延长旧验证码的有效期。 使用单个验证请求来控制渠道尝试、冷却时间和完成状态。重复点击或重复、延迟的回调不得触发多条 SMS。如果 WhatsApp 和 SMS 均送达,各渠道均可能产生费用。

6. 上线前测试

上线后,按市场、渠道和设备对比送达率、送达延迟、验证完成率、SMS 降级占比以及单次成功验证的成本。利用这些数据来调整渠道优先级和等待阈值,而不是一味承诺 WhatsApp 总是比 SMS 更快或更便宜。

补充场景:客户发起的验证

在客户发起的验证流程中,客户从应用中打开 WhatsApp,发送一条包含当前验证所需信息的消息,然后返回应用。对此方案应单独进行评估。单凭一条普通的 WhatsApp 入站消息,不足以直接让用户登录网站或应用。 这种方案需要使用一次性质询(one-time challenge)、会话绑定、过期机制、重放保护以及用户确认。引用的 YCloud 资料并未提供现成的登录功能,因此本指南未将其作为默认的集成步骤进行介绍。