这个术语描述的是答案的来源,而不是你得到的内容。移动网络维护着自己的用户寄存器。查询就是通过有权访问该寄存器的服务向它提问。寄存器能回答什么因网络而异。
HLR 本身是什么?
移动网络内部的用户寄存器。
GSM 是大多数网络在采用分组核心网之前所依据的移动标准。在 GSM 中,Home Location Register 保存着该网络每个用户的记录,包括当前由哪个网元为其提供服务。后续架构将同样的角色移交给 Home Subscriber Server。两个名称描述的是不同代际网络中的同一职责。
两者都不是公共目录。没有一个全球统一的寄存器可供查询。任何查询都不会返回用户的姓名或地址。查询能获取的是服务网络愿意回答的路由和状态信息。
查询实际上能告诉你什么?
当前持有该号码的网络、线路类型,以及该号码是否在线。
| 查询内容 | 返回结果 | 无法确定的内容 |
|---|---|---|
| 基本查询 | 国家、服务网络和发行网络、线路类型、号码是否已携号转网 | 是否有人在使用该号码 |
presence | 该号码是否已注册且当前能够接收流量 | 谁持有该终端 |
roaming | 是否处于漫游状态,以及在哪个网络上 | 此人身处何处 |
sim_swap | SIM 卡最近一次更换的时间 | 更换原因 |
porting | 号码最近一次转网的时间及其记录 | 关于用户的任何信息 |
classification | 号段的精确分配业务类型(基本查询仅给出粗略分类) | 号段为何如此分配 |
score | 0 到 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 进行分支处理。将其他所有状态视为未应答。状态词表是一个开放枚举,因此无法识别的值代表未来新增的状态,而非错误。按照这种方式分支,即使词表扩展也依然正确。查询指南涵盖了完整流程。电话号码验证检查的类型涵盖了每种检查能回答哪些问题。
简而言之
HLR 是网络架构中的名称,不是公共数据库。
Home Location Register 是早期移动网络中的用户寄存器,在后续架构中由 Home Subscriber Server 承担同样的角色。
可达结果不代表具体的人。
网络回答某个号码可以接收流量,并不说明谁持有该终端,也不说明对方是否同意接收你的消息。
每个应答都有自己的状态。
Bird 会将每个请求的属性报告为 ok、unavailable 或 inconclusive,只有 ok 才携带值。
unavailable 和 unreachable 是不同的应答。
前者表示没有人能告诉你。后者表示网络明确告知该号码当前无法接收流量。