这个本地 OTP 分支能发送真实消息吗?

先在免费沙盒中跑通流程,再准备生产接入。

统计选择在本站复用,可随时关闭;账号关联另行同意。

这个本地 OTP 分支能发送真实消息吗?

你用 otp 分支运行电话示例,得到一个名为 customer_otp_provider 的下一步。人们很容易把它理解为“验证码已在路上”,并让注册页面等待输入验证码。这是错误的:fixture 只给出下一步的名称,从不发送任何消息。本文说明 otp 分支究竟返回什么、如何在你自己的注册代码中处理它,以及如何判断沙盒集成是否适合你的任务,还是你需要一个另行获得授权使用的 OTP 提供商。

curl https://gridzen.ai/console/api/quickstart/trial \
  -H 'Content-Type: application/json' \
  -d '{"task": "signup_phone", "scenario": "success"}'

接入指南

问题与决策

一个小型 B2B 团队在注册中加入电话字段,并希望确认用户能够收到验证码。verification_delivery 目录中的可下载四分支示例包含 otp 分支,看起来像是已覆盖 OTP,但事实并非如此。指南明确说明此处不支持 OTP 发送,而当前免费的真实电话路线同样不请求线路类型、号码归属、可达性或 OTP 发送。因此你的决策不是是否信任 fixture 发送验证码,而是你自己系统中由哪个组件负责 OTP 发送,以及当电话步骤返回 unsupported 时你的代码如何处理。

otp 分支实际返回的内容

以 otp 分支运行 phone 任务,会打印以下经过测试的输出:mode 为 synthetic_fixture,branch 为 otp,otp_sent 为 false,live_line_type_available 为 false,state 为 unsupported,valid 为 null,line_type 为 null,next 为 customer_otp_provider。每个字段都有意义。otp_sent 为 false 直接回答了本文的问题:没有发送任何内容。state 为 unsupported 表示 fixture 拒绝该任务,而不是模拟成功。valid 和 line_type 为 null,因此也没有可依赖的号码评估。next 是供你的代码路由的标签,而不是 fixture 已执行的动作。所有分支(包括 normal)都会出现 otp_sent false 和 live_line_type_available false;normal 返回的 mobile line_type 仅是 fixture 内部的模拟值。

一个完整的假设场景

假设某团队的注册处理程序先调用电话步骤,然后显示“请输入我们发送的验证码”页面。在测试中,该步骤返回 state unsupported 和 next customer_otp_provider。一种拟议的应用设计是:处理程序在显示任何验证码页面之前检查 otp_sent;由于其为 false,便不显示该页面,而是根据 next 路由,把号码交给团队自己的 OTP 提供商集成——该集成需单独配置,且团队必须获得使用授权。如果尚无此类提供商,处理程序将注册标记为等待渠道验证,并按团队现有策略决定是否创建账户。这是你需要自己编写的设计;fixture 只提供返回字段。

由你的代码负责的失败处理

对每个分支区别处理。normal 返回 state simulated、valid true、line_type mobile 和 next continue_customer_policy:按你自己的规则继续,绝不推断号码归属或可达性。unknown 返回 state unknown,valid 与 line_type 为 null,next 为 review_or_existing_otp:转入人工审核或你已在运营的 OTP 流程。provider_failure 同样返回 state unknown,但 next 为 bounded_retry_then_review:有限次重试后转审核,而不是直接拒绝。otp 返回 unsupported:不要等待验证码。无法识别的分支会抛出 UNSUPPORTED_FIXTURE;应将其作为配置错误呈现,而非用户失败。绝不能让 null 字段默认为 true。

已实现与拟议内容的区别

fixture 已实现:一个无依赖的 Python 函数,返回上述四个分支结果,无网络调用、无凭据,并附带测试。未实现:发送短信或任何其他消息、提供商适配器、真实线路类型以及号码归属检查。无需账户的 HTTP 试用与这个四分支下载示例是不同的东西,不应混为一谈。合成结果不是生产批准;面向符合条件企业的免费真实电话路线同样不发送 OTP。重试上限、审核队列和 OTP 提供商的选择都由你的应用负责。

验收清单

上线前:以 otp 分支运行 phone 任务,确认 otp_sent 为 false、state 为 unsupported、next 为 customer_otp_provider。确认 otp_sent 为 false 时不会出现验证码输入页面。确认处理程序对全部四个分支都按 next 路由,并单独记录 UNSUPPORTED_FIXTURE。确认 valid 和 line_type 为 null 时永远不会被视为通过。确认 provider_failure 的重试有上限。确认 OTP 发送已连接到你另行获得授权使用的提供商,并且针对 fixture 的测试从不被当作真实消息已发送的证据。然后再决定保存的沙盒请求是否适合你的任务。

运行已检查的模拟示例

下载并解压 https://gridzen.ai/downloads/verification-delivery.zip,进入 verification_delivery,用 Python 3.10+ 运行。此本地示例不联网;独立身份实验请使用新的数据库。

python3 delivery.py phone --branch unknown
python3 delivery.py phone --branch provider_failure

来源与范围

https://gridzen.ai/guides/phone-otp-identity/ https://gridzen.ai/guides/current-capabilities/ 依据已检查的来源快照与本地模拟;建议的业务规则属于设计建议,不代表已证明的生产行为。内容使用 AI 辅助写作,并经过独立审稿。

另行体验三种沙盒结果 创建账号,继续项目接入

下载不等于运行成功;本地示例与在线沙盒分别测试。

接入你的应用

运行三种模拟结果 · 需要接入帮助

连接免费沙盒账号

号码基础有效性不证明持有权或送达,不提供短信验证码。业务放行由你的系统判断。