摘要:集成了MSN Messenger、語音卡打電話和發送短信息三種通信方式開發了面向快遞行業的智能通知系統。系統根據實際情況智能地選擇一種合理的通知方式實時準確地將訂單信息傳達給收派員,使收派員能及時地完成收派件工作;此外,系統的多線程機制提高了消息通知的魯棒性和實時性。
關鍵詞:消息通知; 短信平臺; MSN Messenger; 語音卡
中圖分類號:TP393文獻標志碼:A
文章編號:1001-3695(2008)01-0200-03
實時有效的消息通知是快遞行業服務質量的關鍵。快遞行業后臺的傳統通知手段無非是電話和短信息方式,其效率并不高。這是因為系統后臺并沒有對它們進行合理的調度而只是簡單地使用。MSN自身有很多優點。為其開通移動服務并將之應用到快遞行業后臺通知系統中,通過手機發送或接收MSN消息不失為一種好的想法。這樣充分利用各種通信方式,通過對各種方式的合理調度,形成一種集成的智能消息通知系統,對一個高效的快遞行業后臺通知系統是一種很好的選擇。
1常用的三種通信方式分析
目前,常用的實時通信方式主要有電話、短消息和即時消息MSN等。
MSN非常適合成為企業級應用的通知手段。其實
時性強,且MSN服務是免費的。MSN里的人都是值得信賴的好友,它完全避免了無關人等的騷擾。這使得系統運行具有一定的安全性。但它惟一的缺點是要求收派員實時在線。
傳統的電話通知是人們最常用的一種方式,但在業務量、數據量逐漸增大的情況下,人工打電話通知收派員的低效性就表現出來了。語音卡可將計算機和公用電話網緊密結合起來,充分利用電話的方便快捷和計算機海量存儲、自動化等特點,實現了計算機向手持終端撥打電話的功能,克服了傳統電話通知的低效性,可實現自動化。
短信目前已被越來越多的企業所運用,各企業紛紛搭建自己的短信平臺來為之服務,實現短信平臺相對各企業公司個人透明化、費用適中、使用方便。另外短信還具有如下優點:
a)短信收發簡單、易操作。通過在PC機上接收和發送短信息的速度相對較快。PC機可以配以通信錄、來電顯示等功能。
b)信息存儲空間接近無限。與手機相比,短信平臺將發送/接收的短信息存儲在PC端,方便用戶查詢歷史記錄,而PC端的空間對于短信文字來說容量接近于無限。
為保證后臺通知的有效性和通知到達的實時性,可將三種通知方式集成起來。MSN實時性好且無須費用,電話和短信都需要一定費用;電話實時性雖比MSN差但比短信好,因為短信息有延時情況出現。集成的智能通知方式要比傳統單一的通知方式高效、實時且成本低。
2三種通信方式的集成實現
2.1MSN通知方式的實現
MSN Messenger是基于MSNP的即時消息通信系統。它提供了包括登錄、認證、授權、重定向在內的全面服務框架。與MSN客戶端打交道的三個服務器[1]包括:a)派遣服務器(dispatch server, DS),它是客戶端最初連接的服務器,負責給客戶端分配合適的通知服務器;b)通知服務器(notification server, NS),它是客戶端需要一直保持連接的服務器,很多任務要在這個會話內完成,包括登錄、改變狀態、獲取用戶列表、修改用戶信息、發起聊天、接收呼叫、郵件通知、退出等;c)接線服務器(switchboard server, SS),它是客戶端之間聊天使用的中轉服務器。
MSN工作機制分為認證和即時通信階段。認證階段包括連接到MSN即時通信軟件的服務器。在此需要打開一個TCP socket,通過IP地址messenger.hotmail.com的1863端口進行連接。一旦連接上,MSN即時通信軟件的服務器會返回給客戶一個可用的通知服務器,開始下面的登錄過程。
登錄過程即登錄客戶通過NS身份認證的過程。本文采用的是TWN(Tweener)認證方式,通過SSL/TLS連接到login.passport.com和loginnet.passport.com等服務器;客戶借助HTTP輸入賬號和密碼,認證通過后才能取得“入場券”。客戶將此“入場券”出示給NS,通過認證后表示客戶最終成功登錄MSN。
實現中,利用MFC中的CAsyncSocket和CSocket類完成客戶端與服務器的交互及信息的發送/接收。定義的CMsnLoginClient(當前登錄客戶的抽象類)、CMsnSocket(繼承于CSocket)和CMsnUser(繼承于CAsyncSocket)三個類貫穿系統的始終。圖1是三者的UML關系圖。其中列舉出部分類成員。
CMsnSocket類完成服務器命令信息的發送/接收,并將接收的命令信息交由CMsnLoginClient(ParseRecvedStr函數)進行解析處理,CMsnLoginClient處理后將下一步要發送給服務器的命令交由CMsnSocket發送。
CMsnSocket需要向服務器發送“LST”命令,服務器返回客戶所有的好友交由CMsnLoginClient處理。CMsnLoginClient將好友存入指針數組CMsnUser中(主要由DoLST函數完成)。
即時通信階段是基于session的,進行對話的雙方必須在session模式中。該階段主要實現客戶與SS間交互信息,主要由CMsnUser實現,包括連接SS (SBInit函數)和發送/接收信息(UserInputMsg函數)。
2.2語音卡打電話的實現
1)語音卡的功能
常用的語音卡具有4線或8線通道,可同時處理4線或8線電話的請求。具體實現中選用了Dialogic公司的語音卡,Dialogic公司為其電話語音卡定義了API接口標準[2~4]。與硬件無關的通用系統接口函數是在標準運行庫SRL中定義的。SRL包括靜態鏈接庫libsrlmt.lib和動態鏈接庫libsrlmt.dll;與語音硬件有關的API函數全部是在語音驅動程序庫中定義。語音卡支持下面的呼叫分析功能:人聲檢測和應答及檢測、特殊信號音檢測和PerfectCall呼叫分析。PerfectCall呼叫分析是基本呼叫分析的一種增強方式,它能夠檢測到更多的信息。
2)語音卡同步、異步編程模式
Dialogic語音卡支持同步或異步工作模式[4]。一般情況下,采用同步模式的應用系統較易開發,但當工作線程較多時操作系統用于管理線程的開銷會增大。異步工作模式的特點是可以用一個主線程管理所有的事件消息。考慮到系統設備不是很多,本文采用了簡單的同步編程模式。
3)電話通知的具體實現
在進行程序設計的過程中,按照以下的步驟來使用PerfectCall功能[5]:a)
將通道內以前定義的信號音全部刪除;
b)按照應用程序的需要和本地交換機環境的參數,改變Dialogic默認的信號音定義,包括信號音的頻率、韻律和重復次數;
c)初始化PerfectCall呼叫分析;
d)通過使用呼叫分析來檢測線路撥號結果和線路狀態。
可檢測到的呼叫結果[5]有:a)
Intercept,當在通道撥號的時候,如果撥了一個無效電話號碼或者線路出現故障時, 通道將檢測到的從本地交換機發來的一個特殊信息音用來中斷撥號的繼續進行;b)
無回鈴音,撥號完成,但檢測不到表示雙方已經震鈴的回鈴音;c)
連接,對方已經摘機,線路連接開始通話,表示電話通知成功;d)
無應答,對方話機已經震鈴,但無人應答;e)
忙,撥號過程中檢測到雙方的線路忙。
2.3發送短信息的實現
該模塊通過連接短信平臺實現了PC機向手持終端發送信息的功能。短信服務在互聯網中的通信邏輯圖如圖2所示。
圖2中短信網關(ISMG)是信息資源站實體(SP)與電信網內短信中心(SMSC)之間的中介實體,ISMG負責SP、SMSC和移動用戶之間的信息傳遞。
短信平臺是根據移動或聯通公司相關協議(CMPP,SGIP)接口實現短信服務,這兩個協議是基于TCP/IP之上根據應用層的具體需要設計出來的應用層協議[6,7]。作為與互聯網短信網關進行通信的工具,短信平臺負責處理SP和ISMG之間的CMPP、SGIP通信協議,使得對于使用短信平臺的客戶來說通信協議透明化。短信平臺在實現過程中扮演著兩種不同的通信角色[8]:a)負責與電信網關ISMG端之間建立鏈路進行通信,在這種情況下它扮演的是客戶端的角色,它與ISMG服務器端進行數據通信;b)負責與企事業單位個人的第三方客戶端之間建立鏈路進行通信,在這種情況下它扮演的是服務器端的角色,它提供服務器端口號和服務器短信服務號,而企事業單位個人的第三方模塊作為它的客戶端。
本系統實現的是連接短信平臺實現信息發送的第三方模塊。第三方模塊實現信息發送包括三個過程,即連接服務器、發送短信息和斷開服務器(服務器即指短信平臺)。考慮到連接服務器和發送短信息過程可能由于網絡阻塞等因素出現停滯情況,導致函數長期執行而不能返回,這會影響系統后續執行。而多線程機制可實時控制系統的運行,避免上述問題的發生。此外還需考慮系統的實時性,即系統應盡量一次性成功連接服務器或發送短信息。針對上述兩個因素,設計了下述執行連接服務器和發送短信息的過程。
系統定義Bool型變量Connnectflag。它代表當前系統與短信平臺是否處于連接狀態。Connnectflag為true表示處于連接, 1表示斷開。
1)線程執行連接服務器
a)創建連接服務器線程,指定線程執行連接服務器成功與否所對應的返回值。
b)判斷線程在指定時間(如15 s)內是否返回。超時未返回轉向c);未超時返回轉向d)。
c)強行終止線程(提高系統魯棒性),再次創建連接服務器線程(出于實時性考慮),重新判斷線程在指定時間內是否返回。超時未返回,表示此次連接服務器失敗;未超時返回,轉向d)。
d)通過線程返回值判斷連接服務器是否成功。
系統根據線程執行連接服務器的情況設置相應Connnectflag的值。
2)線程執行發送短信息
a)創建發送短信息線程,指定線程發送短信息成功與否對應的返回值。
b)判斷線程在指定時間(如20 s)內是否返回。超時未返回轉向c);未超時返回轉向d)。
c)強行終止線程(提高系統魯棒性),Connnectflag是否為true。為true轉向e);否則轉向f)。
d)根據線程返回值判斷發送信息是否成功,失敗時判斷Connnectflag的值。為true轉向e);否則轉向f)。
e)系統和短信平臺處于連接狀態時,系統會斷開與短信平臺的連接按照上述線程執行連接服務器重新連接短信平臺(考慮到斷開再連接更有利于后續短信的快速發送),再次創建發送信息線程(出于實時性考慮)。若仍為超時未返回,系統將此種情況視為發送信息失敗;未超時返回,則通過線程返回值判斷信息發送是否成功。
f)系統和短信平臺處于斷開狀態時,系統按照上述線程執行連接服務器連接短信平臺,然后再次創建發送短信息線程(出于實時性考慮)。超時未返回,系統將此種情況視為信息發送失敗;未超時返回,則通過線程返回值判斷信息發送是否成功。
2.4數據監控線程對通知模塊的調度
集成實現三種通信方式,除了要分別實現各個通信模塊外,還需要對各個模塊進行統一的管理。統一管理的任務是由輪詢數據庫的數據監控線程完成。數據監控線程完成對三個通信模塊的合理調度。考慮到ADO技術實現了與OLE DB、ODBC數據庫兼容的同時還具有諸多其他優點,在此采用ADO技術實現與數據庫的交互。
本調度模塊實現過程如下所述:
a)線程通過ADO接口訪問數據庫,將取到的訂單信息發送到移動終端。
b)線程根據訂單的發送情況通過ADO接口對數據庫進行處理更新。數據庫中存放的訂單記錄字段包括訂單流水號、e mail(郵箱)、mobile(移動終端號碼)、count(每條訂單已發送失敗的次數)、MSG(訂單信息)等。
上述訂單發送過程是本模塊的核心。它體現了線程對三個通知模塊的調度思想。具體實現如下:
用戶customA登錄系統后,其MSN好友名單及狀態已獲得,存放在CMsnUser類型的數組中;當前取出訂單的e mail郵箱對應的收派員為customB;CustomB登錄自帶的手持終端的MSN Messenger客戶端時為在線,否則為隱身。
數據監控模塊首先啟動輪詢數據庫線程,讀取數據庫的訂單信息。對每條訂單的處理過程都按照下面步驟執行:
a)將當前訂單記錄(對應customB)的e mail郵箱與cus ̄tomA的MSN好友郵箱逐個比較。匹配成功,表示customB是customA的好友,再查看customB是否在線,在線則用MSN傳遞信息后轉到e),否則轉到b);匹配失敗,說明customB不是customA的好友,轉到b)。
b)語音卡電話通知通過訂單的mobile號碼字段執行。啟動語音卡失敗或電話線路故障都會導致通知失敗,則轉到c);否則轉到e)。
c)短信息通知通過mobile字段執行。短信通知失敗轉到d);否則轉到e)。
d)將該條訂單的count字段加一,表示該條訂單信息已發送失敗次數加一;然后判斷它與系統允許訂單信息發送失敗的最多次數(maxcount,可由customA根據實際情況自行修改)進行大小比較。Count e)將當前訂單從數據庫刪除并寫入sucsend文件,sucsend文件記錄已成功發送的訂單信息。讀取下條訂單,回到a)。 f)將當前訂單從數據庫中刪除,并寫入delete文件,讀取下條訂單,轉到a)。 CustomA可隨時查看delete文件以對這些多次發送失敗的訂單采取特殊的處理。 上述過程充分體現了數據監控線程對三種通知方式調度的優先級。由高到低依次是MSN、語音卡打電話、短信息。 3結束語 系統實現了一個集MSN、語音卡打電話和發送短信息于一身的高效、實時、低成本的通知系統。經過測試,發現一般情況下,本系統的MSN和語音卡打電話實時性非常好,短信息1s內可以發送三條,未出現訂單因多次發送失敗而被刪除的情況。這比傳統單一的通知方式(電話或短信)性能要好得多。多線程機制在一定程度上提高了系統的實時性和魯棒性。此外,系統利用了MSN“不和陌生人說話”即時通信的優點,使得系統開發具有一定的安全性。 但是系統的安全性有待進一步提高。這可通過對手持終端進行進一步嵌入式開發,使其自動地將接收到的訂單信息的手機號碼與企業內部指定號碼相比較匹配,或者通過對訂單信息制訂固定格式判斷是否是后臺傳來的信息。此外,系統需要進一步解決手持終端接收信息的回復確認機制。 參考文獻: [1][EB/OL].[2006-05 10].http://www.hypothetic.org/docs/msn/swit chboard/authentication.php. [2]Voice software reference:programmer’s guide for Windows[R]. Montreal:Dialogic Corporation,2002:105-496. [3]Voice software refErence:features guide for Windows[R]. Montreal: Dialogic Corporation,2000:13-52. [4]Voice software reference:standard runtime library for Windows[R]. Montreal:Dialogic Corporation,2000:1-57. [5]Dialogic技術叢書編寫組.Dialogic從入門到系統工程師[M].北京:中國計算機通信與計算機語音集成技術出版社,2000:539-589. [6]中國聯合通信公司.中國聯合通信公司短信息網關系統接口協議,SGIP v1.2(short message gateway interface protocol)[S]. 2001. [7]中國移動通信集團公司.中國移動通信互聯網短信網關接口協議,CMPP v2.1.0(China mobile peer to peer)[S].2003. [8]王實,陸建德.基于公共服務的互聯網短信平臺的設計和實現[J].微機發展,2005,15(8):41-43. “本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”