在上面的章節(jié)中,我們已經學習了FreeSWITCH XML配置文件的強大。并且用戶學習了撥號規(guī)則的入口和使用XML來設置基本的配置。在這一章中,我們繼續(xù)進一步研究撥號規(guī)則的基本結構,XML撥號規(guī)則的功能,如何通過基本的功能實現復雜的結果。
一些詞條可能在這一章中重復出現,但是我們還要介紹一些已經在以前章節(jié)涉及的一下基本內容,包括基本的變化規(guī)則功能,并且我們還要解釋撥號規(guī)則系統(tǒng)如何工作,為什么這樣工作。通常情況下,很多用戶使用了FreeSWITCH的XML撥號規(guī)則,但是沒有真正了解其中的原理,導致系統(tǒng)不能拓展或無法排查復雜的問題。這一章節(jié)的目的是讓用戶成為一個FreeSWITCH專家,能夠了解他們開發(fā)的撥號規(guī)則是如何工作的,為什么這樣工作。
在這個章節(jié)中,我們假設用戶已經有了FreeSWITCH的基本知識,對路由和處理呼叫和XML配置文件有了基本的了解。如果用戶安裝配置了FreeSWITCH的演示系統(tǒng),并且測試了一些基本的呼叫,那么對用戶在這一章節(jié)的學習會非常有幫助。
在這一章節(jié),我們將討論以下內容:
·撥號規(guī)則總覽
·基本撥號規(guī)則概念
·解析和執(zhí)行
·XML 撥號規(guī)則模塊
·XML 撥號規(guī)則預處理
·使用變量
·通過正則表達式測試變量
·傳遞變量到其他的legs
·撥號規(guī)則中的Macros
·避免陷阱
·多分機設置
·XML extensions 特別屬性
·XML的可選方法
撥號規(guī)則總覽
FreeSWITCH的撥號引擎是一款相當靈活的軟件。 如果用戶有使用軟交換的背景,用戶可能了解一些撥號規(guī)則的概念。用戶通過系統(tǒng)本身的語言預設了這些流程,規(guī)定了一些靜態(tài)的邏輯語句來執(zhí)行一些指令 (他們是 應答呼叫,播放文件,采集撥號數字和抓接電話)。如果任何功能不能通過軟交換預設的命令或有效邏輯語句來實現,那么就沒有其他的辦法可以實現這個任務。
在FreeSWITCH環(huán)境中, 撥號規(guī)則的處理是通過可加載的模塊來完成。當處理呼叫時,模塊的邏輯可以被調用來完成這些任務,同時用戶可以根據自己的業(yè)務需求,加載多個模塊來支持不同的處理方式。這是FreeSWITCH區(qū)別于其他軟交換的地方,也是經常被忽略的地方。通過撥號規(guī)則處理的模塊化設計,創(chuàng)建了一種非常自由靈活的錄音呼叫方式。用戶可以開發(fā)自己的模塊或調用可選的模塊來處理用戶自己的撥號規(guī)則,并且為用戶自己的撥號規(guī)則創(chuàng)建一套新的命令集。和其他的軟交換系統(tǒng)相比,FreeSWITCH可以支持用戶通過外部的腳本語言來處理自己的撥號規(guī)則。FreeSWITCH所有模塊都是使用C語言編寫,所以集成方便,并且允許用戶使用內部的API 接口和鏈接庫(如有必要)無需調用外部的腳本語言。這樣的話,在處理呼叫時,FreeSWITCH將占用非常少的系統(tǒng)資源。
為什么撥號規(guī)則處理實行模塊化設計呢?首先需要理解的是為什么我們需要一個撥號規(guī)則。
讓我們現在忘記程序語言,回顧一下軟交換的原理。如果我們分解一下大部分的語音系統(tǒng),我們會發(fā)現每個通話都按照一個邏輯流程圖來執(zhí)行。事實上,如果我們問客戶關于電話業(yè)務的需求,他們經常也會回答是或否,或者指定一個相應的執(zhí)行指令?蛻舻臉I(yè)務需求就可以轉換成一個基本的呼叫流程圖。無論用戶正在做什么,如果用戶通過圖例的形式來表達整個業(yè)務需求的過程時,其實用戶已經開始設計撥號規(guī)則了。本質上說,用戶已經在構想一個撥號規(guī)則的模塊來滿足業(yè)務需求。
讓我們拿一個普通的呼叫流程作為舉例,然后分拆成更小的部分。進一步觀察這個舉例,我們可以看到在這個流程圖中,我們設置了很多邏輯假設,撥號規(guī)則必須處理這些假設的邏輯語句。例如,用戶為了對是否是工作時間這個假設做一個判斷,用戶必須對比工作時間或下班時間。為了判斷用戶是否輸入了按鍵1,撥號規(guī)則處理機制必須支持解析按鍵式電話機輸入;跅l件對比,用戶可以讓系統(tǒng)執(zhí)行相應的命令-轉接電話,播放語音,掛機,等等。所有這些要求會組成一些邏輯命令,撥號規(guī)則會使用這些命令執(zhí)行電話流程。在很多系統(tǒng)環(huán)境中,通過編寫一些晦澀難以理解的配置代碼來設置一個邏輯判斷,這樣的方式具有很多局限性,也可能讓用戶發(fā)瘋。在FreeSWITCH環(huán)境下,用戶可以通過自己熟悉的語言來編寫這些邏輯。
未完待續(xù)······