謝秋菊,蘇中濱
(1.黑龍江八一農墾大學信息技術學院,黑龍江 大慶 163319;2.東北農業(yè)大學工程學院,哈爾濱 150030)
語音服務系統(tǒng)是利用通信網和計算機網絡技術,為用戶提供多種服務的信息服務系統(tǒng)。廣泛應用于電信、銀行、航空、鐵道、航運、保險、股票、房地產、旅游等各個行業(yè)中[1-2]。
國外電力客戶語音服務中心建設較早,功能比較完善[3]。目前,國內客戶語音服務雖然在電力行業(yè)中有應用,但大都集中在大的電力企業(yè)。而針對縣級的農村電力企業(yè)來說客戶語音服務的應用很少,且應用技術不成熟,功能不完善,服務比較單一,不能滿足實際工作的要求。因此,本文結合縣級電力企業(yè)的實際,建立一個先進的客戶語音服務系統(tǒng),實現縣級電力客戶服務的信息化管理。
本文基于縣級電業(yè)局的功能需求分析,設計了以下幾個功能模塊:查詢服務模塊、電費催繳模塊、電費充值模塊、報修服務塊、投訴與留言服務模塊、聽取留言模塊、人工服務模塊、綜合統(tǒng)計分析模塊。系統(tǒng)功能模塊如圖1所示。
用戶通過撥打客戶服務電話,根據語音提示選擇相應按鍵進入人工服務或自動服務,完成電費查詢,電費充值,實現咨詢、查詢、用電報裝、報修、投訴、舉報、留言等服務。
電費催繳功能可以根據工作人員設置的催費條件,系統(tǒng)自動從指定的欠費數據庫中提取用戶電話號碼和欠費金額等數據,并且自動地向各欠費用戶撥號,撥通后自動播放催費通知和欠費金額。系統(tǒng)對催費成功與否進行記錄,同時記錄對方電話號碼、時間等。系統(tǒng)對未撥通用戶,可根據設置的撥叫時間及次數進行自動重復撥叫,提醒用戶及時交納電費。
投訴/留言服務是一種口頭訊息的服務,每一個打來電話者都可以通過電話語音的引導進行留言,系統(tǒng)可以記錄用戶的語音投訴、建議、故障報修、搶修留言、并將語音錄制成為Windows的標準語音文件以及對語音文件進行存儲,管理部門可以根據電話號碼,留言日期等條件進行篩選,選取錄音文件來收聽。
圖1 系統(tǒng)功能模塊Fig.1 Function module picture
本系統(tǒng)以GX08F PCI電話語音卡為硬件支持,基于多線程技術,設計實現了電力語音服務系統(tǒng)。
GX08F PCI電話語音卡可以識別和產生DTMF(雙音多頻信號)。例如,公共電話網上的線路忙音、撥號音和回鈴音等狀態(tài),以及主叫識別信息傳送及顯示等。
GX08F PCI語音卡底層驅動使用事件通知的方式向上層應用軟件告知語音卡的各種狀態(tài)變化,實現時應用程序根據不同的事件,調用相關的函數,實現相關的功能。系統(tǒng)實現中的主要接口事件有:
MESSAGE_HAVE_CID_FSK
有FSK方式的主叫事件
MESSAGE_HAVE_CID_DTMF
有DTMF方式的主叫事件驅動的開發(fā)方式。
MESSAGE_HAVE_DTMF 有DTMF按鍵事件
MESSAGE_PLAY_VOICE_END 放音結束事件
MESSAGE_PLAY_VOICE_EXI 放音中斷事件
MESSAGE_USER_HOOK_O用戶模塊掛機事件
MESSAGE_TRUNK_RING 外線振鈴事件
MESSAGE_HAVE_BUSY_TON 外線忙音事件
GX08F PCI電話語音卡的編程接口包括控件編程接口(GxPCI08F.ocx)和動態(tài)連接庫(GxVoice.DLL)編程接口兩部分。語音卡提供硬件基礎,在它之上是語音卡驅動程序。動態(tài)連接庫(GxVoice.DLL)負責同底層設備驅動程序通訊,控件(GXPhonic.OCX)是對動態(tài)連接庫的封裝,它以事件、方法、屬性提供用戶調用接口。應用程序所有對GX08F PCI電話語音卡的操作,最終都是通過動態(tài)連接庫(GxVoice.DLL)來完成的。開發(fā)平臺的軟件架構如圖2所示。
圖2 GX08F PCI語音卡開發(fā)平臺的軟件架構Fig.2 Software structure of the development platform based on GX08F PCI voice card
本系統(tǒng)是基于GX08F PCI語音卡的動態(tài)鏈接庫方式開發(fā)的應用程序,所以在Delphi中需要首先對DLL中的函數進行聲明,然后才能對該函數進行調用。下面是一段在Delphi中實現語音操作的基本步驟的代碼。
①語音卡的初始化操作:
DriverOpenFlag:=GX_InitializeSystem();//語音卡驅動程序初始化
if DriverOpenFlag<>GX_OK then
begin
ShowMessage('初始化語音卡錯誤。');
exit;
end;
TotalVoiceLine:=GX_GetTotalVoiceChannel();//獲取語音通道的數目
for i:=0 to TotalVoiceLine-1 do
begin
GX_OpenChannel(i);//打開語音通道
GX_StartDetectDTMF(i,0);//DTMF按鍵檢測
GX_StartDetectCallerID(i);//主叫識別
end;
②語音卡事件檢測:
GetCode:=GX_GetMessageForWindows(50,@MessageBuffer);//獲取語音卡事件
if GetCode<>GX_OK then exit;
ChannelNo:=MessageBuffer.ChannelNo;//把獲取的事件的通道號賦給一個變量
MessageCode:=MessageBuffer.MessageCode;//把獲取的事件的代碼賦給一個變量
③根據具體的事件代碼進行相應的應用程序設計
case MessageCode of
MESSAGE_HAVE_CID_DTMF://如果有 DTMF方式的主叫事件
begin
GX_GetDTMFCallerID(ChannelNo,CallerIDString);//獲取主叫號碼
GX_ClearDTMFBuffer(ChannelNo);//清除通道未被取走的DTMF碼
GX_StartDetectDTMF(ChannelNo,0);//檢測Channel No通道的DTMF按鍵
MESSAGE_TRUNK_RING://如果有外線振鈴事件Begin
GX_TrunkHookOff(ChannelNo);//外線模塊摘機
GX_StartPlayFile(ChannelNo,VoiceFile,0,$FFFF FFFF,chr(STOP_ANY_DTMF));//開始放音操作
Line[ChannelNo].status:=STATUS_CHOOSE;
end;
end;
④當應用程序結束時釋放語音卡驅動程序所申請的系統(tǒng)資源:
if GX_InitializeSystem=GX_OK then
begin
for i:=0 to TotalVoiceLine-1 do
begin
GX_StopAllOperate(i);//停止語音卡的所有操作
GX_CloseChannel(i);//關閉所有語音通道end;
GX_CloseSystem();//釋放語音卡驅動程序所申請的系統(tǒng)資源
end;
由于系統(tǒng)的高實時性要求和多路語音通道的并行性要求,通過深入研究發(fā)現Windows的多線程技術,可以很好地解決多個語音通道的協(xié)調問題,并且可以更好地利用系統(tǒng)資源,改善系統(tǒng)性能。因此,本系統(tǒng)運用多線程技術進行設計[4-5]。
在本系統(tǒng)中,一共設計了5個線程,它們分別是主線程、檢測線程、查詢線程、充值線程[6-7]、錄音線程。由于主線程和其它線程在宏觀上是并行的,可以充分協(xié)調利用系統(tǒng)的CPU時間,實現各語音通道的獨立并行工作。
但是,當多線程同時執(zhí)行時,線程共享進程中的一些數據,將會引起對共享資源的訪問沖突。為避免共享沖突,需要用線程同步技術對共享資源進行訪問。
本系統(tǒng)在設計過程中,將整個系統(tǒng)分解為若干個線程對象。由于這些對象之間存在對數據區(qū)的協(xié)調處理問題,因此它們的工作都不是單獨運行的,都需要和其他對象進行同步協(xié)調。本系統(tǒng)采用臨界區(qū)措施來避免共享數據的訪問沖突。當一個線程進入臨界區(qū)后,如果此時另一個線程也要訪問這個數據,則它會在調用Enter時,發(fā)現已經有線程進入臨界區(qū),然后此線程就會被掛起,等待當前在臨界區(qū)的線程調用Leave離開臨界區(qū),當另一個線程完成操作,調用Leave離開后,此線程就會被喚醒,并設置臨界區(qū)標志,開始操作數據,這樣就防止了訪問沖突。Delphi將臨界區(qū)對象封裝為TCriticalSection類,在程序實現中采用TCritical-Section類的Aquire方法來鎖定數據,用TCritical-Section類的Release方法來釋放數據。當線程向TCriticalSection類對象提出訪問數據的請求時,如果這個請求不被允許,線程處于掛起狀態(tài),直到TCriticalSection類對象釋放;如果向TCritical-Section類對象提出數據訪問的請求被允許,則所有這個線程要訪問的數據都會在保護范圍內。
本文以縣級電業(yè)局為例,提出的以電話語音卡為硬件支持,通過多線程技術來解決多語音通道的協(xié)調、并行工作的方法,為縣級電力語音服務中心的實現提供了更為有效的方法。
經過現場實際調試、運行、應用,本系統(tǒng)運行穩(wěn)定,運行成本低、效率高,完全適合縣級電力企業(yè)的應用。
[1] 宋俊德,段云峰.呼叫中心CTI獨步電信、PC之間[J].中國計算機報,1999(6):61.
[2] 番瑩玉.應用廣泛的CTI技術[J].現代通信,2000(10):10.
[3] 胡延平,廖蕾,劉啟明,等.基于CTI的呼叫中心系統(tǒng)設計與實現[J].計算機工程與設計,2003,24(3):37-39.
[4] 謝秋菊,蘇中濱.電力語音充值系統(tǒng)呼叫處理過程的多線程實現[J].黑龍江八一農墾大學學報,2008,20(1):82-84.
[5] 謝秋菊,蘇中濱.黑龍江省農村電力遠程繳費系統(tǒng)的設計與實現[J].農機化研究,2010(12):215-218.
[6] 劉駿,馬榮盛,周亦瑾.淺析智能網充值卡查詢統(tǒng)計系統(tǒng)[J].天津通信技術,2004(2):40-43.
[7] 楊路明,雷亞軍.基于Delphi的分布式充值系統(tǒng)的實現方法[J].計算機系統(tǒng)應用,2003(6):73-76.