簡訊網關返回「用戶不存在」但號碼有效?手機開關機狀態與 HLR 查詢
這是一個非常典型的通信底層技術矛盾。打電話時閘道可以回答「沒有用戶」(Subscriber Not Found / Absent Subscriber),這時候打電話的號碼並不一定是空號,很多情況下是因為HLR(歸屬位置寄存器)在信令層面找不到手機的最新狀態。下面從通信原理上,更深入地解釋為什麼真正存在的號碼「不存在」,又為什麼會受開關機的影響而得出不同的結論。
一、 通信邏輯:簡訊是怎麼找人的?
解答這個問題,首先得知道線路是怎樣的:簡訊不是直接發給手機的,SMS中心(SMSC)先詢問HLR,再下發給手機所在的 MSC/VLR(交換中心/訪問位置寄存器)。
- 發送請求:SMSC 收到簡訊。
- 詢問 HLR(SRI):SMSC 向 HLR 發出
Send Routing Info for SM請求。 - 位置反饋:
- 手機開機正常且訊號良好 ➜ 返回手機當前所在的 MSC 位址給 HLR。
- 無法找到手機所在位置 ➜ 返回錯誤(如 Absent Subscriber)。
二、 為什麼有效號碼會返回「用戶不存在」?
號碼儘管在營運商的資料庫上啟用(不欠費、沒有銷戶),但以下三種情形下,HLR 會「謊稱」用戶不存在:
1. 長期關機造成的「邏輯下線」(Detached)
當手機關機或飛航模式下,手機會向網路發出 IMSI Detach 訊息。HLR 會將該用戶標記為 Absent Subscriber。有些閘道為簡化錯誤分類,直接透傳或轉寫為「用戶不存在」。底層真相:號碼有效,但位置資訊在 VLR 中死亡(過期或刪除)或信令鏈路中斷。
2. 國際漫遊中的「位置更新失敗」
若發送簡訊給正在出國旅行的號碼:手機在國外切換基地台時,當地營運商與歸屬地營運商的 SS7/SIGTRAN 信令沒有及時交換。HLR 尚未更新它在海外的 VLR 位址。結果:SMSC 查詢 HLR 時找不到合法路由,回報 “No subscriber” 錯誤。
3. 虛擬號段與 MNP(號碼攜帶)衝突
原因:該號碼已經由 A 營運商轉網到 B 營運商(攜號轉網)。表現:簡訊閘道若仍向營運商 A 的 HLR 查詢時,A 的 HLR 發現此號碼不在本網維護,因而返回Subscriber Not Found。
三、 HLR 查詢(HLR Lookups)的深度探測
在接碼、簡訊行業,HLR Lookup 是一種廣泛使用的「洗碼」技術(模擬信令查詢),過程中不需要真正發送簡訊。開關機狀態對查詢的影響如下:
| 手機狀態 | HLR 查回值(典型) | 查詢結果意涵 |
|---|---|---|
| 正常開機 | MSC Address + IMSI | Active(活動) |
| 正常關機 | Missing Subscriber | Inactive(關機) |
| 空號/消號 | Unknown Subscriber | Invalid(無效號) |
| 停話/黑名單 | Teleservice Not Provisioned | Blocked(受限) |
四、 工程師排查指南:如何定位根因?
當你發現「電話號碼有效,但返回不存在」,請按照下列節奏排除故障:
- 交叉試驗:用第三方 HLR Lookup 查詢該號碼能否取得 IMSI?若能取得 IMSI,代表號碼肯定存在。
- 檢視 MCC/MNC:確認號碼的移動國家碼、網路碼是否正確。跨國簡訊需檢查路由是否經過錯誤的閘道。
- 時間窗分析:
- 瞬間報錯 ➜ 可能是閘道未更新或 HLR 靜態資訊錯誤。
- 延時報錯(5秒以上)➜ SMSC 嘗試尋找 MSC 位址超時而返回錯誤。
📌 總結結論:「用戶不存在」通常是位置不可得的資訊誤判。在進行高頻註冊業務時看到這個錯誤,不應永久封鎖該號碼,應視為 Number Temporary Unavailable,定時 24 小時後再試,通常會有 30% 左右的號碼「起死回生」。
📘 跨境實戰案例:WhatsApp 註冊遇「Subscriber Not Found」
案例背景:某海外社交平台(WhatsApp)嘗試註冊新用戶,發送簡訊驗證碼至一個波蘭(+48)的有效號碼。
號碼狀態:用戶手機開機中,可正常接打電話。
簡訊閘道反饋:Status: Failed, ErrorCode: 6 (Subscriber Not Found) —— HLR 回報「用戶不存在」。
1. 對症診斷:為何 HLR 會「說謊」?
透過信令層追蹤(Trace),發現導致矛盾的 3 個具體原因:
- A. 邏輯位置掛起(VLR Purge)
用戶過去 48 小時內曾短暫開機,之後關機。因記憶體空間需求,當地交換機(VLR)啟動 Purge MS(清除終端)操作,並上報此清除資訊至 HLR。
現象:當簡訊閘道恰好於「用戶剛剛開機、尚未完成位置更新」時查詢,HLR 仍標示清除狀態,立刻回應「用戶不存在」。 - B. 國際漫遊信令轉換錯誤
該號碼當前在德國漫遊,當地廠商(如 T-Mobile)與歸屬營運商之間 SS7 協議版本不相容,導致 HLR 中的 MSC Number 格式錯誤。
現象:簡訊閘道從 HLR 獲取路由時解析不到正確的交換機號碼,為湊整數回傳最接近的錯誤碼Subscriber Not Found。 - C. 攜號轉網(MNP)路由黑洞
該號碼原屬 A 營運商,後攜碼轉至 B 營運商。但簡訊閘道使用過時的快取資料,仍將請求發至 A 營運商的 HLR。
現象:A 營運商的 HLR 遍尋不著該號碼,回應「Subscriber Not Found」,簡訊從未投遞至 B 營運商。
2. 解決方案:如何「喚醒」存在卻顯示不存在的號碼?
- 🔍 即時 HLR 查詢(Real-time lookup)
不發送簡訊,直接向所屬網路的 HLR 發送SRI_SM命令。若回傳內容包含 IMSI,代表號碼 100% 存在。即便狀態為 Absent,也不應封鎖該號碼。 - ⏰ 觸發「歸屬地提醒」(Alert Service Centre)
邏輯:告訴閘道「一旦該用戶開機(完成位置更新),立刻通知我」。接碼平台可在使用者刷新頁面時觸發心跳探測,誘導網路更新鏈路狀態。 - 🔄 執行路由回退(Routing Fallback)
若主閘道回報「用戶不存在」,立即退回到「國際直連」(Direct Route) 重送。直連通道通常可直接查詢 MNP(號碼攜帶)資料庫,解決轉網造成的路由錯誤。
3. 風控標籤調整建議
若系統收到「用戶不存在」錯誤,不建議直接標記為 Deleted(刪除),應使用以下規則:
| 錯誤碼/回應 | 真實狀態猜測 | 建議操作 |
|---|---|---|
| Subscriber Not Found | 轉網、路由錯誤、剛開機未更新 | 兩小時後重試,最多 3 次;失敗後再標記不可用 |
| Absent Subscriber | 關機、沒訊號、飛航模式 | 視為「忙碌號」,半小時後允許再次嘗試取得驗證碼 |
| Unknown Subscriber | 空號、號段不存在 | 直接移出可用號池 |
🧠 核心總結:通信網路是動態的,號碼「不存在」可能只是它這一秒訊號未能告訴網路它在哪裡。給予足夠的冷卻時間與重試機制,才是修復號碼利用率的最佳實踐。