1、早期的trunk 中繼的概念來自于傳統(tǒng)的PSTN網(wǎng)絡(luò),后來發(fā)展出來H323和SIP。 我們今天重點討論的是PSTN的trunk和SIP的trunk。根據(jù)維基百科的定義對trunk的定義:
A circuit between telephone switchboards or other switching equipment, as distinguished from local loop circuits which extend from telephone exchange switching equipment to individual telephones or information origination/termination equipment.
簡單來說,就是trunk 就是一個電路交換,通過交換機實現(xiàn)多種電話終端的交互,例如我們經(jīng)常看到的E1,SS7,R2等。
在IETF的官方定義中,SIP trunk是這樣定義的:
- A SIP trunk is a virtual sip entity on a server (UAS, UAC or proxy) constrained by a predefined set of polices and rules that determine how to process requests.
首先,SIP trunk是虛擬的實體(傳統(tǒng)的PSTN都是物理設(shè)備),通過一定的業(yè)務(wù)策略來決定業(yè)務(wù)請求。在SIP 網(wǎng)絡(luò)環(huán)境中,SIP也可以起到類似的作用,它是由服務(wù)提供商對接企業(yè)用戶的一種連接方式,當然服務(wù)提供商提供什么樣的服務(wù)都是基于用戶和服務(wù)提供商的合同約定。具體的業(yè)務(wù)包括:
- 可以支持PSTN所提供的語音服務(wù),基本上可以替代傳統(tǒng)的PSTN網(wǎng)絡(luò)。
- 可以拓展出其他的增值服務(wù),例如語音郵箱服務(wù),呼叫中心服務(wù)等。
- 支持企業(yè)IPPBX接入服務(wù)。
在開源FreePBX的trunk 模塊中,此模塊可以說支持了目前市場上所有的trunk 接入方式:
- E1/SS7/R2的基于語音板卡的接入方式,系統(tǒng)默認的是E1 trunk接入,用戶也可以通過手動編譯來支持SS7或者R2的方式來支持trunk接入。關(guān)于SS7/中國一號R2和語音板卡安裝配置的文檔,請讀者參考:www.freepbx.org.cn 的詳細配置文檔。此對接方式是通過FreePBX+板卡一體機的方式來實現(xiàn)。
- SIP trunk接入方式,用戶可以通過語音網(wǎng)關(guān)對接SIP來實現(xiàn)接入,也可以和服務(wù)商提供的SIP trunk實現(xiàn)對接,同樣也可以通過服務(wù)商提供的IMS/SIP實現(xiàn)對接,VOS/SIP trunk 對接。通過FreePBX+語音網(wǎng)關(guān)的方式來實現(xiàn),或者FreePBX+SIP trunk的方式實現(xiàn)。
- BRI 語音板卡實現(xiàn)對接,此對接方式支持的是2B+D方式,上面的E1是30B+D,目前國內(nèi)基本上不再使用,歐洲有部分用戶使用?梢酝ㄟ^FreePBX+語音卡方式,或者FreePBX+外置網(wǎng)關(guān)(支持BRI的網(wǎng)關(guān))
- 自定義的H323 trunk方式實現(xiàn)對接,默認freepbx不支持H323對接,用戶需要手動編譯H323模塊,配置模塊以后,可以實現(xiàn)對接方式。
- 其他自定義的Trunk方式使用的比較少,我們這里不再介紹,例如IAX方式實現(xiàn)Asterisk-Asterisk服務(wù)器之間的對接等,我們這里不再介紹。
在開源FreePBX的trunk 模塊中都支持了以上所介紹的接入方式,用戶可以根據(jù)不同的需求來對接不同的接入方式,例如可以同時支持SIP和dahdi trunk(語音卡)。
2、Trunk 模塊有很多中參數(shù)配置,因為,我們使用的是SIP和dahdi模塊來配置trunk,所以,我們重點介紹基于SIP trunk的配置參數(shù)和基于Dahdi的配置參數(shù)。
Prepend
預(yù)設(shè)號碼前綴。 如果用戶已撥號碼成功匹配了 prefix加match pattern,則在中繼出局前,移除prefix, 在match pattern 前加此預(yù)設(shè)的數(shù)字號碼。
Prefix
號碼前綴。如果用戶已撥號碼成功匹配了prefix加match pattern ,則在中繼出局前移除這個前綴號碼,如果帶預(yù)設(shè)號碼的話,
match pattern 加預(yù)設(shè)號碼出局。如果沒有帶可選的預(yù)設(shè)號碼,則僅發(fā)送match pattern 號碼出局。
Match pattern
匹配模式。用戶已撥號碼將匹配prefix 和match pattern 的匹配模式。如果成功匹配,則移除號碼前綴,加一個預(yù)設(shè)號碼出局(如果設(shè)置了預(yù)設(shè)號碼)。當然用戶也可以僅完全匹配號碼前綴,然后加一個預(yù)設(shè)號碼,match pattern 為空。
Dialled Rules Wizard Always dial with prefix
中繼號碼前綴快速撥號。對voip 中繼來說,這個功能非常簡單實用。例如,如果用戶撥打了號碼 "5551234”, PBX 會自動轉(zhuǎn)換此號碼為 "16135551234”。
Remove prefix from local numbers
對語音板卡支持的Dahdi 中繼非常有用,如果用戶撥打的是一個本地號碼 "6135551234”的話,PBX 會自 "555-1234”。通常來說,撥打本地號碼無需添加本地前綴。
Setup directory assistance
可以通過此選項轉(zhuǎn)換此呼叫進行 目錄查詢協(xié)助。
Lookup numbers for local trunk
本地中繼號碼查詢服務(wù)。通過號碼查詢服務(wù)的資源例如 www.localcallingguide.com , 創(chuàng)建號碼歸屬,所以用戶通過本地中繼撥打7位數(shù)或者10位數(shù) 來直接進行呼叫。通常情況下,用戶需要撥打1+區(qū)號(長途電話)+號碼,但是通過這樣的方式,用戶可以直接撥打 “5551234” (7位數(shù)撥號) 或者 “6135551234” (10位數(shù)撥號) 來實現(xiàn)本地呼叫。 注意,以上設(shè)置僅支持北美地區(qū)的號碼范圍。
Upload from CSV
支持上傳一個撥號匹配模式CSV 文件來替換當前的整個文件。如果沒有文件頭的話,則文件必須至少設(shè)置3個列,需要和界面的列順序一致。用戶有可以設(shè)置3個文件頭,在第一行中包括: prepend, prefix 和 match pattern 。如果少于3個文件頭,剩余的列將是空白。
Outbound Dial Prefix
呼出撥號前綴,呼出前在中繼添加的前綴號碼。例如,如果此中繼是在另外一個PBX 背后的系統(tǒng)中,用戶需要撥打9 或者其他的數(shù)字通過這個PBX 出局。如果中繼線路是POTS 線路的話,常用的做法是設(shè)置為“w”,讓系統(tǒng)等待 500ms ,以便有足夠的時間來等待撥號音,避免已撥打數(shù)字號碼丟失。大部分情況下,此設(shè)置為空白。
指定一個中繼名稱,例如 “mysiptrunk”。
PEER Details
這里的 PEER 信息是用來對接運營商的帳號信息。用戶可能需要添加設(shè)置或者刪除一些設(shè)置,完全取決于運營商的要求。
注意
這里的配置順序非常重要。例如,如果用戶使用了 “allow/deny” ,那么必須確保第一個是 “deny”。
USER Context
這里是運營商要求提供的帳號或號碼信息。
USER Details
這里是用戶連接運營商的參數(shù)設(shè)置。因為運營商要求的不同,用戶可能需要添加或者刪除一些設(shè)置參數(shù)。
Register String 大部分運營商要求用戶PBX 系統(tǒng)注冊到運營商側(cè)。如果有此要求,用戶需要輸入運營商提供的注冊信息。例如,
username:password@some.voipprovider.com。 還有一些環(huán)境下,用戶也需要提供DID號碼注冊:
例如:username:password@some.voipprovider.com/7045551212。
這里要注意,使用SIP trunk之前,一定要確保SIP trunk和對端對接的成功的,否則不能使用此trunk。關(guān)于SIP trunk狀態(tài),用戶可以通過Asterisk CLI 命令來查詢。
- DAHDi (簡稱為Digium Asterisk 硬件設(shè)備接口)。Dahdi 是asterisk 語音卡的通信接口,它可以支持模擬接口(FXS/FXO)和數(shù)字接口(E1/PRI)。用戶需要參考硬件安裝文檔來實現(xiàn)語音卡的初始化配置。然后可以通過 DAHDi 中繼模塊來集成呼出呼入的路由和分機設(shè)置。請用戶先參考相應(yīng)的dahdi 語音板卡配置使用指南配置板卡后執(zhí)行中繼的配置。
- DAHDI 配置文件由 DAHDI 配置模塊來管理。一旦成功配置好板卡以后,用戶可以通過中繼界面選擇Dahdi 中繼出局。
- DAHDI Trunks
用戶可以通過選擇不同的組來進行輪詢呼叫。參考一下表做相應(yīng)的調(diào)整。在這個表中,我們使用了Group 0 (Zero) 作為輪詢策略方式。在配置Dahdi trunk之前,用戶要首先確認語音板卡是否成功配置。如果底層的語音板卡沒有配置成功的話,dahdi trunk是沒有任何作用的。
3、Trunk 模塊可以使用在很多企業(yè)用戶的呼叫需求,以便滿足多種業(yè)務(wù)的需求,這些使用場景包括:
對接分公司trunk,接入分公司的IPPBX系統(tǒng)。通過不同的撥號匹配來實現(xiàn)使用不同的trunk呼出。
對接多種trunk 方式,根據(jù)以上介紹,用戶可以同時對接多種trunk方式,通過多種方式的trunk對接,實現(xiàn)trunk 線路的逃生,保證企業(yè)通信網(wǎng)絡(luò)正常使用,靈活切換。
根據(jù)需要,可以關(guān)閉或啟用不同的trunk,用戶可以對任何一條trunk進行開啟或者關(guān)閉處理,無需再次進行配置。
根據(jù)不同計費模式設(shè)置不同的trunk呼叫,用戶可以選擇不同的trunk實現(xiàn)不同的呼叫國家目的地。
根據(jù)不同的時段現(xiàn)在不同的trunk進行呼叫,幫助企業(yè)節(jié)省話費支出。
4、trunk 模塊僅是一個FreePBX 界面管理工具,真正實際呼叫是通過底層Asterisk的dial命令來實現(xiàn),通過不同的SIP或者Dahdi來實現(xiàn)對trunk的呼叫。具體的用法如下:
Dial(Technology/Resource&[Technology2/Resource2[&…]],[timeout,[options,[URL]]])
這里的Technology 表示接口方式(SIP或DAHDI),Resource 表示可用的通道。當然dial 命令的用法有很多參數(shù)支持,用戶可以查閱文檔來進一步研究。
5、經(jīng)常使用trunk模塊的還有我們大家比較熟悉的呼叫中心應(yīng)用,通過FreePBX或者asterisk進行自定義的呼叫功能。在自定義的代碼中加入到時呼叫控制任務(wù),可以對多個號碼通過trunk模塊來實現(xiàn)自動呼叫或手動呼叫。Issabel的呼叫中心模塊就是使用的類似的設(shè)計,Odoo也支持了類似的自動外呼模塊。關(guān)于通過SIP trunk 實現(xiàn)自動外呼的功能實現(xiàn),用戶可以查閱參考資料的了解。
6、總結(jié),筆者首先介紹了關(guān)于trunk的概念和功能,然后介紹了在開源IPPBX環(huán)境下SIP和PSTN trunk的配置參數(shù)介紹,trunk 使用的場景,然后具體介紹了底層Asterisk如何進行呼叫呼出,最后提供了一個通過trunk來實現(xiàn)呼叫中心外呼的簡單功能實現(xiàn)。
參考資料:
https://tools.ietf.org/id/draft-rosenberg-sipping-siptrunk-00.txt
https://tools.ietf.org/html/rfc4904
https://wiki.freepbx.org/display/FPG/Trunks+Module
https://github.com/litnimax/asterisk_dialer
關(guān)注微信公眾號:asterisk-cn,獲得有價值的行業(yè)分享。訪問5060社區(qū)-開源IPPBX論壇獲得技術(shù)幫助:www.ippbx.org.cn/www.hiastar.com