IOSOR 知識庫

SMPP enquire_link 失敗不屬於已送達流量

了解 IOSOR 如何處理中斷的 SMPP 連線與無回應的 enquire_link 心跳,防止虛假 DLR 並保護預付帳戶餘額免於錯誤扣款。

當 SMPP enquire_link 握手超時,代表底層連線已中斷,所有未確認的訊息均不能視為已送達。若將 Socket 斷開誤判為傳輸成功,將導致錯誤的 DLR 紀錄與不當的 ledger 扣款。平台必須主動終止失效的 bind 並捨棄傳輸中的 PDU,同時立即釋放 prepaid 餘額的 hold 狀態以確保計費精確。

理解 enquire_link 心跳與死連線偵測

在 SMPP 整合中,enquire_link 請求是傳送端或收發端會話與 SMSC 之間的主要 L7 心跳機制。當 Socket 連線在未傳送明確 UNBIND 或 TCP FIN 封包的情況下凍結時,就會發生靜默會話中斷。若沒有主動的心跳檢查,發送隊列會繼續將 submit_sm PDU 注入已失效的會話中。這會造成系統塞車,並誤導路由引擎以為資料仍正常傳輸。

IOSOR 透過持續監控活性會話的時間間隔與序號來解決此問題。當在指定窗口內未收到回應時,系統會立即將該會話標記為不可用,避免資料持續丟失。

為何無回應的心跳必須攔截偽陽性 DLR

傳統 CPaaS 架構常見的漏洞是過於樂觀的送達報告機制。若會話在收到 submit_sm_resp 後但在下游確認送達前中斷,系統絕不能假設簡訊已成功送達。在 Socket 靜默中斷期間為未送達流量計費或給予下游點數,會導致嚴重的財務帳務不符。

為防止此問題,IOSOR 嚴格要求網路心跳與狀態回報保持一致。若 Socket 未回應 enquire_link,所有相關的狀態更新將被暫停,直到確認真實的網路狀態為止。

帳務對帳與 Socket 超時的保留款釋放

當發送的 submit PDU 進入路由引擎時,IOSOR 會在預付餘額上施加臨時預扣款(Hold)。若底層 SMPP 連線因缺少 enquire_link_resp 訊框而中斷,引擎會拒絕未確認的傳輸中封包。待處理的預扣款會立即釋放或退回,而非轉為永久扣款。這能有效防止幽靈扣款,確保客戶錢包餘額與可驗證的網路確認完全一致。

所有帳務異動皆會即時更新,提供完整的審計軌跡,確保每一筆資金流向皆透明可靠。

自動故障轉移與路由隔離

偵測到死連線時必須立即觸發流量重定向,而非靜默丟棄訊息。當 enquire_link 失敗次數超過設定的重試門檻(通常為連續兩次未收到回應)時,IOSOR 會隔離受影響的會話,觸發內部狀態事件,並將排隊中的 OTP 與交易型簡訊流量切換至預先設定的備用路徑。

此過程完全自動化,不會造成客戶端應用程式中斷,確保驗證碼等關鍵訊息能透過備用通道順利送達。

跨系統狀態同步與審計日誌

保持協定會話、財務帳簿與 API Webhook 之間的資料一致性,需要統一的狀態語言。當心跳丟失導致 SMPP 會話中斷時,IOSOR 會記錄未確認 PDU 序號的精確序列,向下游客戶發送結構化的 Webhook 事件,並同步修正帳務記錄。

詳細的審計日誌讓工程人員能快速排查連線異常原因。每個事件均包含精確的時間戳記與會話標識符。

相關閱讀: 首次扣款前的預付資金保留 · 正式流量前的錢包停損線 · OTP 的 TTL 與重送冷卻.

從 IOSOR 開始

請在閘道設定中開啟 IOSOR 主控台,並設定 SMPP 工作階段參數,對 enquire_link 心跳機制強制執行嚴格的兩次逾期門檻。確保路由規則會自動捨棄無回應的綁定並釋放待處理的餘額保留,而不是產生過於樂觀的送達回條。請驗證自動化通訊端容錯移轉觸發條件是否啟用,以便立即重新導路由未獲確認的 submit_sm 酬載。

IOSOR 要點

沉默的 SMPP 通訊端中斷絕不能被誤解為電信商成功投遞。實作主動式的 L7 心跳監控,可讓路由引擎立即隔離失效綁定、釋放暫時性帳本保留,並保護您的平台免受偽陽性 DLR 與財務落差的影響。當 enquire_link_resp 訊框未能送達時,務必強制執行嚴格的通訊端逾期門檻與即時保留釋放。切勿讓舊版計費邏輯在連線中斷時假設已完成投遞,或在下游無預警斷線時繼續扣除客戶餘額。請務必透過 console 檢查連結狀態,並在 ledger 中核對所有未確認的 OTP 或 SMS 流量。若發現異常,請立即執行 export 報表進行比對,並確保所有時間戳記均以 UTC 為基準,以避免因時區差異導致的數據偏差。透過即時監控機制,您可以有效降低因連線失效而產生的錯誤扣款,確保每一筆交易都能精確對應至實際的送達狀態,進而維護平台的營運穩定性與客戶信任。

這篇指南有幫助嗎?

相關指南