什么是 HLR 查询?

HLR 查询向负责某个号码的移动网络询问该号码的相关信息,例如当前由哪个网络提供服务,以及在查询时刻该号码是否能够接收流量。

这个术语描述的是答案的来源,而不是你得到的内容。移动网络维护着自己的用户寄存器。查询就是通过有权访问该寄存器的服务向它提问。寄存器能回答什么因网络而异。

HLR 本身是什么?

移动网络内部的用户寄存器。

GSM 是大多数网络在采用分组核心网之前所依据的移动标准。在 GSM 中,Home Location Register 保存着该网络每个用户的记录,包括当前由哪个网元为其提供服务。后续架构将同样的角色移交给 Home Subscriber Server。两个名称描述的是不同代际网络中的同一职责。

两者都不是公共目录。没有一个全球统一的寄存器可供查询。任何查询都不会返回用户的姓名或地址。查询能获取的是服务网络愿意回答的路由和状态信息。

查询实际上能告诉你什么?

当前持有该号码的网络、线路类型,以及该号码是否在线。

查询内容返回结果无法确定的内容
基本查询国家、服务网络和发行网络、线路类型、号码是否已携号转网是否有人在使用该号码
presence该号码是否已注册且当前能够接收流量谁持有该终端
roaming是否处于漫游状态,以及在哪个网络上此人身处何处
sim_swapSIM 卡最近一次更换的时间更换原因
porting号码最近一次转网的时间及其记录关于用户的任何信息
classification号段的精确分配业务类型(基本查询仅给出粗略分类)号段为何如此分配
score0 到 100 的可信度评分评分的构成方式(其他属性无法提供)

基本查询已经能区分当前服务号码的网络与最初发行该号码的网络。这正是携号转网号码得以被识别的原因:两者不同,ported 标志会指明这一点。

在线检查能证明什么吗?

它只能证明网络做出了应答,仅此而已。

在网状态结果反映的是对号码所注册网络的实时查询。因此 reachable: true 意味着该网络报告号码在当时能够接收流量。这不能识别持有者身份,也不构成同意。Google 的 libphonenumber FAQ 对确定号码持有者这一问题给出了相同的说法:

Do not rely on libphonenumber to determine whether numbers are currently assigned to a specific user and reachable.

可达的号码也不意味着消息一定能送达。投递取决于发送方、路由和目的地的过滤策略,这些都不在查询的范围内。

如何解读一个无人能给出的应答?

通过属性上的状态来区分三种结果。

你请求的每个属性都会报告自己的 status:

  • ok:属性已应答且值存在。
  • unavailable:未收到应答,因此该块为 null。
  • inconclusive:收到了应答,但无法确定该属性的值。

只有 ok 携带值,也只有 ok 会计费。这引出了对注册流程至关重要的区别。在网状态块为 status: unavailable 表示没有人能告诉你。在网状态块为 status: ok 且值为 reachable: false 表示网络明确告知该号码无法接收流量。将前者当作后者,就是把一个未回答的问题变成了一个被拒绝的客户。

如何在 Bird 上执行查询?

发送号码,并指定你想要查询的属性。

POST /v1/lookup/phone-number 接受一个 phone_number 和一个可选的 type 数组,数组可包含 classification、porting、presence、roaming、sim_swap 和 score 中的任意项。如果只需要基本查询,省略 type 即可。每个额外属性单独计费,且仅在成功返回时计费。只有在需要在线检查时才请求 presence,不要默认添加。

根据 ok 进行分支处理。将其他所有状态视为未应答。状态词表是一个开放枚举,因此无法识别的值代表未来新增的状态,而非错误。按照这种方式分支,即使词表扩展也依然正确。查询指南涵盖了完整流程。电话号码验证检查的类型涵盖了每种检查能回答哪些问题。

简而言之

  1. HLR 是网络架构中的名称,不是公共数据库。

    Home Location Register 是早期移动网络中的用户寄存器,在后续架构中由 Home Subscriber Server 承担同样的角色。

  2. 可达结果不代表具体的人。

    网络回答某个号码可以接收流量,并不说明谁持有该终端,也不说明对方是否同意接收你的消息。

  3. 每个应答都有自己的状态。

    Bird 会将每个请求的属性报告为 ok、unavailable 或 inconclusive,只有 ok 才携带值。

  4. unavailable 和 unreachable 是不同的应答。

    前者表示没有人能告诉你。后者表示网络明确告知该号码当前无法接收流量。

基于同一网络构建。

测试 API 密钥即刻获取。添加付款方式并验证发送者身份后,即可解锁生产环境。

你的下一个创意。 随时连接。