未知的手机号结果应该拒绝注册吗?

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

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

未知的手机号结果应该拒绝注册吗?

注册表单调用手机号检查后,有时得到的结果既不是有效也不是无效:要么结果为未知,要么服务商调用失败。最省事的做法是把一切非明确通过都当作拒绝。本文反对这种捷径,并借助四分支合成示例说明每种结果应如何处理。核心区别很简单:未知结果是证据缺失,而不是负面证据。如果基于缺失的证据拒绝用户,服务商的每一次故障都会变成用户被锁在门外。

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

接入指南

问题与你需要做的决定

你面临的决定不是号码好不好,而是当检查无法给出答案时,注册流程应该怎么做。有三种结果在代码里看起来相似,含义却不同。被确认无效的号码是证据。未知结果表示检查没有返回可用信号。服务商失败表示检查根本没有完成。只有第一种才足以基于格式理由进行拦截。另外两种需要明确的处理路径:有界恢复、人工审核,或通过你已在使用的 OTP 服务商进行持有验证。 请记住,任何手机号检查都无法确立某些事情。有效性和线路类型不同于号码持有和身份。当前免费生产路由不请求线路类型、归属、可达性或 OTP 投递。其已获批的受控试点仅覆盖基本号码格式与有效性。

可下载示例实际实现了什么

可下载示例在 Python 3.10 或更高版本下离线运行,不需要凭据,也不发起任何网络调用。它有四个分支:normal、unknown、provider_failure 和 otp。每个输出都包含以下字段:mode、branch、state、valid、line_type、next、otp_sent 和 live_line_type_available。 有两类值在所有分支中都不变。mode 字段始终为 synthetic_fixture。otp_sent 字段始终为 false,因此示例从不发送验证码。live_line_type_available 字段始终为 false,这对应免费路由不返回线路类型的事实。 你在 normal 分支看到的 mobile 线路类型是夹具数据,并非实时检查会返回的内容。四个分支名以外的任何值都会引发 UNSUPPORTED_FIXTURE。 此示例与匿名 HTTP 试用不是一回事,后者只覆盖三个场景。不要把其中一个的结果当作另一个的结果。

假设示例:四次注册,四条路径

设想一个假设的交易平台在一小时内收到四次注册。夹具的预期输出与它们的对应关系如下。 第一次注册走 normal 分支。输出为 state simulated、valid true、line_type mobile、next continue_customer_policy。接下来由你自己的规则决定,单凭检查并不会放行用户。 第二次注册走 unknown 分支。输出为 state unknown、valid null、line_type null、next review_or_existing_otp。账户被暂缓审核,或转入你现有的 OTP 步骤,而不是被拒绝。 第三次注册走 provider_failure 分支。输出同样是 state unknown,valid 和 line_type 均为 null,但 next 为 bounded_retry_then_review。你进行有限次数的重试,然后将其交给人工审核。 第四次注册走 otp 分支,模拟证明号码持有的请求。输出为 state unsupported、valid null、line_type null、next customer_otp_provider。GridZen 在这里不发送任何内容,这一步属于你的 OTP 服务商。 四个输出的 otp_sent 均为 false。

建议的应用设计:失败处理

以下是针对你的应用的设计建议,而非夹具已实现的行为。 用固定的尝试次数和截止时间限制重试,使服务商失败既不会无限循环,也不会无限期地阻塞表单。 将未知和失败结果作为独立状态存储,与无效状态分开。这样审核人员和分析系统就不会把服务故障误认为欺诈。 当路由到审核时,要决定用户在等待期间可以做什么。例如,可以允许浏览,但在审核完成前阻止提现或发布商品。 如果路由到 OTP,请调用你现有的服务商,并将其结果与手机号检查结果分开记录。 不要让代码中的任何地方把 null 的 valid 值强制转换为 false。

需要明确说明的限制

夹具只产生合成输出。它证明的是你代码中的分支处理,而不是生产环境中的成功。其测试覆盖模拟状态转换、绑定、重复回调、重启和超时,但并不证明实时准确性、外部采用或 Agent 优越性。 OTP 建议不会发送验证码,也不能确立号码持有。 实时路由的可用性需要单独确认。生产环境的手机号检查仅限于受控试点,自助式实时验证已被禁用。

验收清单

上线前,请逐项确认: - 运行全部四个分支,能够准确复现上文列出的 next 值。 - 你的代码将 null 的 valid 视为未知,绝不视为无效。 - unknown 分支绝不自动拒绝注册。 - provider_failure 分支进行有限次数重试,然后转入审核。 - otp 分支只调用你自己的 OTP 服务商,并在 GridZen 一侧记录 otp_sent 为 false。 - 没有任何逻辑从实时结果中读取 line_type。 - 你的代码能处理 UNSUPPORTED_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/signup-phone-check/ https://gridzen.ai/guides/current-capabilities/ 依据已检查的来源快照与本地模拟;建议的业务规则属于设计建议,不代表已证明的生产行为。内容使用 AI 辅助写作,并经过独立审稿。

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

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

接入你的应用

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

连接免费沙盒账号

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