淺談Microsoft Teams Direct Routing

微軟技術棧發表於2021-10-27

大家好,我是本期的實驗室研究員——王遠。今天我將通過實驗和完整的操作過程,向大家介紹通過Microsoft Teams Direct Routing相關技術實現在Teams中接聽與撥打PSTN電話以及帶領大家快速完成Direct Routing及SBC的完整配置流程。接下來就讓我們一起到實驗室中一探究竟吧!

微軟MVP實驗室研究員

image.png

Teams Phone System

在使用Teams的使用者或許還未使用Calling Service這個功能,白話就是可以在Teams上撥打和接聽電話,場景例如:所有員工均可使用Teams撥打手機和座機以及各種服務號碼,而打出去的號碼顯示都是企業座機,同樣手機撥打企業總機號通過分機號或者DID號碼直接呼通Teams使用者;或在Teams會議中通過PSTN電話呼入,或呼叫外部座機/手機通過語音的方式加入Teams會議 。

08107cdc8e956506ad5e8a484c939c94.png
在Teams中實現PSTN呼叫是依靠Phone System來完成的,就如同傳統企業內部電話系統使用PBX系統一樣。通過Phone System,使用者可以使用 Teams來撥打和接聽呼叫、轉接呼叫以及將呼叫設為靜音或取消靜音。Phone System使用者可以單擊其通訊簿中的姓名,然後Teams呼叫此人。要撥打和接聽呼叫,Phone System使用者可以使用其移動裝置、帶膝上型電腦或電腦的耳機,或者使用Teams電話。Phone System管理員可以從用於訊息傳遞、協作等的同一主機管理呼叫選項和設定。

在Teams中實現PSTN呼叫的方式有兩種,分別是:

  • 基於雲服務:Phone System with Calling Plan
  • 基於現有PSTN:Phone System with Direct Routing

Phone System with Calling Plan

這是最為簡單的一種方式,把Microsoft當作運營商,直接購買通話套餐就行,就好比我們們買了一部手機,然後就是選擇SIM卡的運營商是電信/聯通/移動,選擇好了運營商之後就選擇是199還是299或399的套餐了,購買了套餐後就可以用手機撥打和接聽電話了。所以Calling Plan也是SaaS服務的一種,架構如下:
3594adb6a5b75c4bf304c9f2ee5006f2.png

Phone System with Direct Routing

Direct Routing對比較複雜的一種方式,但相對更加靈活多變,Calling Plan是微軟給你號碼用於撥打和接聽電話,那麼Direct Routing可以使用企業自己的電話號碼在Teams上撥打和接聽外線電話,同時還支援自動呼叫助理,呼叫佇列,使用者分機號等等功能,通過SBC語音閘道器可以實現更多的號碼規則以及路由規則,基於這種方式實現在Teams中撥打和接聽電話需要購置一臺SBC語音閘道器裝置用於對接本地電話線路運營商和Microsoft Teams,架構如下:
80b13af736d91fb242cf073e10925b84.png

Direct Routing 原理

要使用Teams撥打接聽PSTN電話,不單單是購置一臺SBC語音閘道器,還需要配置撥號計劃,讓使用者在Teams撥號盤輸入的號碼能按照預期轉換成E.164格式並根據使用者所在位置及策略將PSTN呼叫路由到不同目的地語音閘道器並最終通過E1線路送達至運營商。

首先,Teams Phone System遵循的規則E.164

E.164 是國際電信聯盟電信(ITU-T) 的建議,它定義了用於公共交換電話網路和其他資料網路的國際公共電信編號計劃,還定義了電話號碼格式E.164號碼最多有 15 位數字,並以[+]字首書寫。可確保 PSTN 上的每個裝置都有全球唯一的號碼。此號碼允許電話和簡訊可以正確路由到不同國家/地區的各個手機/座機。標準的E.164 號碼的格式為:

[+] [國家號碼] [區域號碼] [目的號碼]

例如:我們在國外旅遊的時候希望撥打國內號碼應急的時候正確的撥號應該是如下(以成都某座機為例說明):

0734960bbc65eeee1c77aaa3f5cc7942.png
(E.164格式號碼解讀)
上面的電話號碼可以從全球任意一個角落精準的呼叫到成都的一個叫88888888的座機號碼上,同樣撥打手機規則也是需要在前面新增+86

而Phone System也是遵循這種號碼格式,所以在Teams上要撥打電話一定會在電話號碼前新增一個[+]號。
8d41d938fea42b4233e1f3a8d45207ea.png

(Teams嚴格遵循E.164格式)

但是呢在Teams上為使用者分配號碼可以不那麼嚴格的按照E.164的標準格式,因為在Teams中我們是無法針對某個使用者的分機號去定義國家和對應地區的,所以在Teams裡面使用者號碼只要滿足是以+開頭的號碼就行,例如設定某使用者分機號為tel:+1234,一般我們就說這個使用者的Teams分機號是1234。

其次,國內座機撥打電話規則

根據通訊管理局和工信部要求手機號是1:1且實名認證的,所以我們只能採用座機號碼的方式與Phone System對接。而座機號碼的PSTN線路又包括SIP中繼和E1線路(也就是我們所說的30B+D線路),國外不同的標準下也有叫T1線路(23B+D)。

那麼針對座機號碼的撥打和接聽我們需要了解如下規則:

撥打本地座機:直接輸入當地座機號碼即可開始呼叫;

撥打本地手機:直接輸入當地手機號碼即可開始呼叫;

撥打外地座機:輸入目的地區號+目的地座機號碼才能開始呼叫;

撥打外地手機:在外地手機號碼前加0才能開始呼叫;

撥打本地服務號碼:直接輸入3位或5位服務號碼即可開始呼叫;

撥打外地服務號碼:輸入目的地區號+3位或5位服務號碼才能開始呼叫;

撥打800熱線號碼:直接輸入800開頭的熱線號碼即可開始呼叫即可開始呼叫;

撥打海外電話:在開通國際長途功能後輸入00國家程式碼[目的地號碼]即可開始呼叫,其中打頭的00是我們們國家的國際冠字號,主要作用是用來啟動國際長途的號碼;

特別提醒在座機撥打國內長途號碼的時候區號都是010、021、028這類號碼

細心的同學已經發現了E.164格式和我們國內座機的撥號方式完全不一樣。對的,國內座機都是直接輸入數字開始呼叫。並且國內的區號都是010、021、028這類號碼,以0開頭的,準確的說在標準的E.164格式中地區號是沒有0的,例如010變成標準格式後變成+8610對應北京地區區號,021變成標準格式後變成+8621對應上海地區區號、028變成標準格式後變成+8628對應成都地區區號。

最後,Teams Direct Routing

基於E.164和我們們國內的座機撥打規則的回顧,我們接下來需要了解如何將一個預期想打出去的號碼在Teams上去做號碼轉換,以及撥打該號碼的使用者是否有許可權撥打長途號碼,以及這個呼叫要從哪臺語音閘道器出局,瞭解清楚這些問題才好去做SBC和Teams語音路由策略規劃。

撥號計劃:

Teams上的撥號規則的建立,可以使使用者在撥號的時候不用過多考慮E.164規則,使用者只管按照常規撥打電話習慣直接輸入需要撥打的號碼,剩下的交給Teams來幫使用者自動完善成各種E.164格式送到SBC裝置。

例如我在Teams撥號盤上輸入一個手機號碼(手機號前未加0表示是本地手機號)進行號碼規則檢測,結果會在號碼前面自動補上+86,而匹配的規則是本地手機號。

83962b94a62312cfb3b3010b941a9b64.png
(在Teams管理中心測試手機號轉換)

b7f1148b21a5898e059299495464e1fc.png
(在Teams客戶端輸入手機號呼叫)

9ef3e0dc0737d2d7f1517c0d232f8a31.png
(Teams撥號介面自動為手機號新增+86並開始呼叫)
又例如給一個北京使用者分配了成都的撥號策略,那麼北京的使用者要撥打北京本地一家單位的一個號碼就會變成+8628成都的區號送到SBC語音閘道器,最終到成都電信運營商。這時候要麼這個是空號,要麼這個號碼歸屬於成都某個單位或個人,總之肯定打不到預期的北京當地單位的電話。

548762414d8e23b0b72972bc30188c21.png
(管理使用者撥號計劃)
為了方便大家理解,請看下面這張撥號圖,紅色標記部分撥號記錄我用的全域性預設的撥號計劃,綠色標記部分撥號記錄是給當前賬號分配了CN-Chengdu這個撥號計劃的。

由於當前我的Microsoft365租戶註冊地為香港,即使我的全域性撥號策略裡面沒有建立任何的撥號規則,預設會在所撥號碼前面加上香港的地區號+85,大讚微軟!

當分配了CN-Chengdu撥號計劃策略後,在Teams撥號盤裡面輸入66668888這個號碼會自動填充上中國的國家程式碼+86和成都的地區程式碼28。有了撥號計劃Teams才知道使用者撥號的最終意圖是本地電話還是長途電話還是其他電話。
36268a8ce91d0198111d73848479d824.png
(不同的撥號計劃最終號碼轉換效果不一樣)

語音路由策略:

語音路由更像是Teams Phone System拿到了一個使用者最終想要撥打的號碼之後要去匹配這個號碼應該往哪臺語音閘道器裝置路由,所以這裡面涉及到了以下這張圖上的內容。

例如:

下圖有一條策略叫CN-Chengdu-AllCalls,匹配的撥號模式是隻要是在Teams上撥打的號碼前面帶“+”號就直接路由給【cdsbc.and-sc.com】這臺語音閘道器並最終從成都的電信運營商發起呼叫到目的號碼,這是最粗暴的模式。

那麼,如果我只希望成都某某同事使用Teams撥打電話的許可權為只能撥打本地的座機,不允許撥打長途和國際電話呢?很簡單,我們只需要建立一條語音路由(下圖中已經有CN-Chengdu-Local),在這條路由裡面我們寫好匹配的撥號模式為^+8628\d+,這個撥號模式意思是隻要在Teams撥號盤裡面最終的號碼是以+8628開頭的任意號碼,我們都把這個號碼路由到【cdsbc.and-sc.com】這臺語音閘道器並最終從成都的電信運營商發起呼叫到目的號碼,反之是以+86XX其他號碼開頭的呼叫一律不進行路由。同樣我們也需要在語音路由策略裡面建立對應的策略使用PSTN用法關聯到語音路由上,並最終把這條策略分配給限制撥打長途的使用者即可。
9679bfe687e956ad9318e3cab5e71b53.png
(語音路由)

d61c4aa03e74266d3e6c0d6afa875438.png
(語音路由策略)
上面的一個需求是成都當地某使用者只能撥打當地電話,而實際上當地電話除了本地座機還有本地手機,我們給出的策略是+8628開頭的號碼才進行路由,而本地的手機變成E.164格式後是【+86189XXXX1042】這樣的號碼,根據策略這樣的號碼是不能被路由到語音閘道器的。所以,如果只是匹配一個撥號模式這個做法是不合理的,禁止撥打長途的場景中還應該包括能撥打本地手機號,那麼這時候我們就需要完成兩個動作:

①在語音路由中增加CN-Chengdu-Mobile,寫好匹配的已撥號模式為^+86(1[345789]\d{9})$,這個撥號模式意思是以+86開頭,第二位數是1,第三位數是3/4/5/7/8/9並且後面還有9位任意數字的號碼,這個其實就是我們們的手機號碼標準的E.164格式,例如+86147xxxx9999,這個手機號裡面的1對應的規則中的第二位數,4對應的第三位數,7xxxx9999對應規則中的d{9},也就是9位任意數字,並在PSTN用法中新建一個CN-Chengdu-Mobile進行關聯到這條語音路由。

ae1855a10d0f5ba6bd8cbee3ade3fabb.png
(新增CN-Chengdu-Mobile語音路由並建立PSTN用法)
②在已有的CN-Chengdu-Local語音路由策略中編輯PSTN用法新增加上CN-Chengdu-Mobile去關聯撥打成都本地手機的路由。

2311c79ffbc2396f15bc5b0b2c14821a.png
(現有CN-Chengdu-Local策略中新增CN-Chengdu-Mobile PSTN用法)
完成以上兩步操作後應用CN-Chengdu-Local這條語音路由策略的使用者不論是撥打本地座機還是手機都能把撥打的號碼路由到【cdsbc.and-sc.com】這臺語音閘道器,並最終到電信運營商。

所以語音路由及策略包括:

  • 匹配的已號碼模式
  • PSTN用法
  • 關聯的SBC語音閘道器

其中PSTN用法只是一個標識,同時關聯語音路由策略和語音路由,當Teams上撥號盤輸入的號碼轉換成E.164格式的號碼並匹配上了我們在語音路由中定義好的號碼模式後就把這個E.164格式電話號碼路由到SBC語音閘道器進行下一步的處理。 從以上的配置中初看可能會有點繞,但是我認為只要把各種路由,策略,PSTN用法的命名進行規範化還是比較容易理解的。

規劃 Direct Routing

整個Phone System with Direct Routing技術中涉及到3大部分,分別是:

  • Microsoft365租戶:提供Phone System及Direct Routing技術和語音路由配置
  • SBC語音閘道器:提供會話邊界控制器用於將本地PSTN網路連線至Microsoft Phone System
  • PSTN運營商:俗稱電話線路運營商,如電信、移動、聯通,提供中繼或E1線路用於PSTN接入和撥出。

b093c653336598c0d9b6db4679422305.png

Microsoft 365租戶

首先要保證當前你擁有一個Microsoft 365全球版獨立租戶(Phone System目前已經支援GCC DoD環境)

在當前的Microsoft365中繫結企業域名,Microsoft 365預設域名為.onmicrosoft.com,SBC裝置FQDN不支援此類通用域名,僅支援.contoso.com此類域名。

cdddebf3372e45267af3b4d63bf13afa.png
(Microsoft 365中繫結的域名)

擁有對Micrsofot 365環境操控許可權,操作賬戶至少需要Teams管理員許可權用於新增SBC裝置、配置語音路由策略、分配策略等操作。

在Microsoft 365上還需要單獨的Phone System許可分配到使用者,如果是E5/A5許可已經自帶了Phone System許可,若非此版本的許可,還需要額外購買Phone System許可並分配到需要撥打和接聽電話的使用者。

Direct Routing可以在Teams Admin Center中配置,也可以在Powershell中配置,如需通過Powershell配置則需要提前安裝Teams模組用於遠端連線,命令如下:

Install-Module -Name PowerShellGet -Force -AllowClobber

Install-Module -Name MicrosoftTeams -Force -AllowClobber

由於SBC與Phone System之間使用Direct Routing技術直接連線,全部採用https TLS協議所以需要互相信任對方,此時Direct Routing節點為:

  • sip-all.pstnhub.microsoft.com
  • sip.pstnhub.microsoft.com
  • sip2.pstnhub.microsoft.com
  • sip3.pstnhub.microsoft.com

通過查詢得知Microsoft Direct Routing使用由Baltimore CyberTrust Root頒發的證書,所以,在配置之前需要獲取到這張CA證書,並匯入SBC裝置用於信任Teams Direct Routing。

SBC語音閘道器

在SBC這部分首先是需要一臺經過微軟認證的裝置才能進行配置,已通過認證的SBC裝置包括如下品牌:

AudioCodes、Ribbon Communications、Thinktel、Oracle、TE-SYSTEMS、Metaswitch、Cisco、Avaya、Nokia、Italtel、Ericsson、Cataleya、ULTATEL、Atos、Sansay Inc.、Enghouse Networks、Patton Electronics Co.、M5 Technologies(previously known as Media5 Corporation)、Ekinops、46 Labs LLC

具體的型號版本可以通過此連結查詢:

其次,SBC裝置需要一個FQDN名稱,且在公網DNS中能解析,用於Teams Phone System在網際網路中發現SBC裝置,所以此時還需要企業IT管理員擁有公網DNS管理許可權。

此外SBC裝置需要一個固定公網IP地址對外對映埠,用於和Phone System建立SIP連線,所以DNS解析的IP也應該是這個公網固定IP地址。

對於SBC裝置對外對映的埠如下:

image.png

(注意:媒體埠16384-16884根據裝置不同埠範圍有所不同)

最後SBC裝置還需要一張SSL證書(可使用萬用字元證書*.contoso.com),用於與Phone System建立SIP Trunk連線時使用,目前通過Direct Routing技術連線到SBC閘道器時,SBC上的SSL證書僅支援以下證書頒發機構(GCC環境僅支援DigiCert頒發機構頒發的證書):

ea9926c738a55855f8df8563cebfdc8c.png
(支援的證書頒發機構)

PSTN運營商

最後就是PSTN運營商需要提供的線路了,可以是SIP線路,也可以是E1線路接到SBC裝置上即可。

其實,一套Teams Direct Routing實施起來並非簡單,除了以上列舉到的內容以外還包括:客戶的撥號習慣和撥號規則是如何定義的,多站點SBC的規劃,根據不同使用者的撥號許可權配置策略等等並非一篇文章就能細化出來,還需要多方溝通。接下來的文章將會為大家分享配置階段的操作。

以上,我們已經瞭解到Teams Phone System with Direct Routing的相關原理以及實施前的規劃接下來我將繼續帶領大家快速完成Direct Routing及SBC的完整配置流程。

Microsoft Teams 配置

在做配置之前建議按照一定的標準格式來命令各種規則和策略以便後期運維,例如可以按照:國家-地區-規則描述的方式來命名,例如:

US-CA-Local 表示美國加利福利亞州本地電話

CN-CD-Local 表示中國成都本地電話

本文以PowerShell配置來進行分享(需提前安裝好Teams模組,上一篇有相關要求和安裝命令)。

通過Connect-MicrosoftTeams命令連線到Teams遠端管理。

4e61435a0ed938b92b92c6e06a6b0909.png
(PS連線至Teams管理中心)

步驟-1,建立撥號計劃

在建立撥號計劃之前可以用Get-CsTenantDialPlan檢視下當前已經有的撥號計劃及詳細的規則,例如我這裡已經有了CN-Beijing和CN-Chengdu這兩個地區的撥號計劃,大家可以看詳細的規則裡面已經定義好了北京的區號是10,成都的區號是28,撥打本地電話的時候Teams的撥號規則都會根據當前使用者所分配的撥號策略對電話號碼區號進行自動補齊。

363af56431898ad4e01b800758627e4a.png
(檢視當前已有的撥號計劃)

接下來我模擬新建一個上海地區的撥號計劃。
在後面的配置中還會用到上海地區的撥號計劃,為了方便配置將上海地區的撥號計劃賦予一個變數,後面的配置可以直接呼叫這個變數。

定義一個變數DPParent,值為CN-Shanghai。

然後使用New-CsTenantDialPlan命令建立一個撥號計劃合集,描述中可以自定義為shanghai dial plan。

接下來建立一個新的號碼規範規則,也就是詳細的撥號規則,例如:客戶定義了內部分機號,Teams之間互相撥打分機號而不需要輸入UPN地址來進行呼叫,定義的內部分機號是4位,在分機號前面新增一個“+”變成一個的E.164格式號碼。

建立的這個號碼規範規則再放到之前建立的撥號計劃CN-Shanghai。

691eda6b27d47aba08588b2a0730e776.png
(建立撥號計劃及規範化號碼規則)
接下來去定義一些撥打各種外線電話的號碼規範規則,並對這些規則加以命名。

以CN-Shanghai-Local這個號碼規範規則為例說明:

在Teams撥號盤裡面撥打的號碼以1到9開頭的7位數或9位數的電話號碼,需要轉換成+8621[Teams撥號盤裡面輸入的號碼],也就是說這條規則對應的是撥打上海本地的號碼,會在撥打的號碼前面自動加上“+8621”來轉換成E.164格式進而通過Direct Routing將這通電話呼叫送到SBC閘道器。

ec02ffc0cdff2dbeb5780c3da6c29c46.png
(建立號碼規範規則)
通過Set-CsTenantDialPlan將建立好的Normalization應用到CN-Shanghai這個撥號計劃。
b77e07e32676f452dfee68f145fa99a4.png
(應用號碼規範規則到撥號計劃)

這樣一箇中國上海地區的撥號計劃已經建立完畢,可以回到Teams Admin Center中心通過圖形化介面來測試建立撥號規則是否生效。

此時在我的租戶中就存在著3條自定義撥號計劃的分別是:CN-Beijing、CN-Chengdu、CN-Shanghai。

afbde7e365baa1c9c1870ce953e3616c.png
(撥號計劃合集)
進入CN-Shanghai撥號計劃後,我們所建立的號碼規範化規則已經全部出現。

此時在測試中輸入66666666這個號碼,預設就是上海本地的一個電話號碼,這時候預期應該是+862166666666,而結果也符合預期,並告知我匹配的是CN-Shanghai-Local這條規範化規則。

9896fdc40d036c152357d16a0e67e91b.png
(上海本地號碼規範測試)
如果使用這個撥號計劃的使用者需要撥打一個成都的長途座機呢?我們來看看結果

注意下:這裡我輸入的長途號碼是嚴格按照我們國家電信局針對國內長途的撥號規則以028開頭的號碼,不過在E.164格式中會將28前面的0給吃掉,變成+862866666666,這是符合我們預期的。

特別注意:國內運營商根據地區不一樣不一定能接受+8628這樣的目的區號,在專案中需要跟運營商溝通確認,如果不支援接受+8628類似的區號僅接受+86028這類區號,此時有兩種方式可以解決這個問題:

  • 方法一:在撥號計劃的號碼規範規則中將轉換的號碼規則改寫成+860$1,把吃掉的0補回來。
  • 方法二:在SBC語音閘道器的號碼轉換規則中將Teams送過來的號碼把0補上。

fa0aa8789cd110330b23fccdd70097bf.png
(長途號碼規範測試)

步驟-2,建立PSTN用法

回到PowerSherll中新增一個PSTN用法標識,定義為CN-Shanghai-AllCalls。

d828f78305ed56fc026dc42d3403e7a8.png
(建立PSTN用法)

步驟-3,建立PSTN閘道器

接下來就需要建立PSTN閘道器了,因為在語音路由中除了要用到匹配撥號計劃模式和定義的PSTN用法以外還需要知道這條路由最終走到哪臺PSTN閘道器。

所以先定義好如下資訊:

  • PSTN閘道器的FQDN名稱為shsbc.and-sc.com;
  • SIP信令監聽埠為5061;
  • 最大併發量為30(E1線路最大併發為30);

然後使用New-CsOnlinePSTNGateway命令建立好PSTN閘道器。

9e39a4b1eaeb34111d21257c94fab115.png
(建立PSTN用法)

步驟-4,建立語音路由

建立好語音閘道器後就可以開始建立語音路由了,首先我們還是定義好PSTNGW變數的值為shsbc.and-sc.com。

然後使用New-CsOnlineVoiceRoute命令建立一條語音路由,命名為CN-Shanghai-AllCalls,關聯的PSTN用法也是剛才建立好的CN-Shanghai-AllCalls,並定義好匹配到只要是以+開頭的所有號碼就應用到這條策略,並最終路由到shsbc.and-sc.com這臺PSTN閘道器。

不難看出我這裡比較簡單粗暴,所有使用者其實都可以撥打任意電話,無論是長途還是本地電話,如果許可權劃分比較細緻,可以針對哪些使用者可以撥打長途座機,哪些使用者可以撥打長途手機來建立更多的語音路由和PSTN用法,並分配給相應的人員(詳細配置可參之前的文章)。

330b47192c8b7a991b5ad66e572b09cf.png
(建立語音路由)

步驟-5,建立語音路由策略

定義好了上面的語音路由,我們再使用New-CsOnlineVoiceRoutingPolicy來建立語音路由策略,命名為CN-Shanghai-AllCalls並關聯到PSTN用法為CN-Shanghai-AllCalls。

c8fed47493428ecbd62ae5b1bdd68103.png
(建立語音路由策略)

步驟-6,應用策略到使用者並測試

最後我們拿一個測試使用者設定URI為tel:+0000作為他在Teams上的號碼,並啟用他的企業語音功能(前提是這個使用者必須要有Phone System的許可哦)。

命令為Set-CsUser,如下圖:

1918eb299fae3ae9366fa0487011eb6f.png
(設定使用者線路號碼)
可以使用PowerShell去分配策略也可以在Teams管理中心通過圖形化介面去設定使用者的撥號計劃和語音路由策略(綠色標記部分已經顯示該使用者在Teams上的電話號碼為+0000)。

34ff0677933ee96df507e4bee8c86564.png
(可以在UI介面編輯使用者策略)
此時,我們在Teams上的配置就已經全部完成,在Direct Routing中也能看到我們建立的shsbc語音閘道器已經出現,只不過是處於非活動狀態而已,因為SBC語音閘道器還未配置與Phone System建立SIP Trunk連線。

70cfb9182d9cf4ad89be2f6f2d02390a.png
(SBC裝置列表及狀態)
在語音路由中也能看到針對上海地區全部允許外呼的語音路由匹配的撥號模式就是隻要是以+開頭的號碼,關聯上PSTN用法後就直接送到shsbc.and-sc.com這臺語音閘道器。

c9882349aa30dbf6b84d7d9132450a43.png
(CN-Shanghai-AllCalls語音路由規則)

SBC語音閘道器配置

目前微軟認證的語音閘道器品牌基本都是國外品牌,例如Audiocodes和Ribbon均在Azure應用市場提供基於虛擬機器的語音閘道器。例如:

517ecf2d5b8c4c87f9538b81296cbd92.png
(奧科 VE系列SBC)

c9bbaaf2de38beca9b5961f888dd4599.png
(ribbon SWeLite SBC)
所以,我將基於Azure上的SBC去為大家分享如何建立SBC虛擬機器及配置SBC。以Ribbon SBC SWe Lite為例跟大家整個配置流程如下:

  • 建立SBC虛擬機器;
  • 建立公網DNS記錄指向Azure虛擬機器固定公網IP;
  • 申請包含SBC FQDN DNS的證書(可使用萬用字元證書);
  • 準備MS Phone System CA證書(公眾號中回覆“證書”即可獲取下載連結);
  • SBC虛擬機器埠對映;
  • SBC ACL配置;
  • SBC SIP Server配置;
  • SBC SIP Profiles配置;
  • SBC TLS Profiles配置;
  • SBC Media Profiles配置;
  • SBC Media List配置;
  • Signaling Group配置;
  • SBC Call Routing配置;
  • SBC Transformation配置;

看著貌似挺多的....別害怕跟著我繼續往下看

基於Azure的SBC只能與運營商進行SIP對接,如果自己購買了如ribbon SBC1000/2000這樣的裝置是可以支援E1線路直接接到裝置上,所以在建立SIP Signaling Group的時候只能選擇基於IP的信令而不能建立ISDN信令。

Part-1,建立SBC SWe Lite虛擬機器

首先你需要一個可用的Azure租戶,然後直接搜尋Ribbon即可,選擇SBC SWe Lite & Quick Launch,如果直接選擇SBC SWe Lite也可以根據Ribbon提供的系統映象來建立虛擬機器,但是要注意不能選擇D系列虛擬機器,除了DS3_v2虛擬機器外都是最多隻能支援2張網路卡,可以選擇B系列虛擬機器,因為在SWE中需要3張網路卡,一張網路卡用於管理,另外兩張網路卡用於傳輸信令和媒體,另外還需要進行復雜的IP路由配置,所以建議採用Quick Launch。

894b9db2fbcd46ae32792c757bde3403.png
(SBC SWe Lite & Quick Launch)
然後點選建立。

bb353e0f3f8334883346325440477f15.png
(建立SBC SWe Lite虛擬機器)
接下來選擇資源組,這裡我採用直接新建的方式,也可以在建立虛擬機器之前在Azure Portal中建立好資源組以及子網,並定義虛擬機器放置的位置為東亞地區(所屬區域可以在Teams Admin Center中通過全球地圖快速檢視哪些區域語音閘道器存在故障),填寫好虛擬機器名稱(一旦建立後虛擬機器的名稱無法修改,建議使用地理-功能-角色)以及併發呼叫範圍。

6cbef3e91dbdbb24445ce0ca09340895.png
(建立資源組及虛擬機器命名)
接下來選擇虛擬機器的大小,用於demo的預設是2核4GB記憶體完全足夠,自動建立儲存診斷賬戶。

037e36d401474f1da7ffaf765fe4235d.png
(選擇虛擬機器大小)
接下來進入網路配置,會根據虛擬機器的命名自動建立虛擬網路,如CN-SH-SBC-SWeLite-VirtualNetwork,同時還會建立三個不同子網的網路卡分別用於管理、信令和媒體傳輸。

9d16601b21c47de23d8e5434f43767fe.png
(確認子網資訊)

接下來進入SWeLite的預設定,包括管理員使用者名稱及密碼(後面通過Web管理SBC時的登入賬號)、對SBC系統定義包括主機名以及域名(這裡要和上一篇文章在Teams上新建的PSTN閘道器FQDN保持一致)。
44e2c5de53179aa2f6636a8293450875.png
(定義管理賬號及初始密碼,FQDN)
接下來進行建立虛擬機器前的配置檢查,如果無誤點選建立後大約5分鐘左右就會將SBC SWeLite虛擬機器按照預期設定建立完成。
8f8dd25b90a9910c265f629e04541443.png
(檢查無誤即可建立機虛擬機器)
建立完成後點選左側輸出欄,此時將SBC SWeLite的管理FQDN和公網IP地址複製出來,首次進入SBC管理網頁可用使用管理FQDN也可用使用IP地址直接訪問,另外SBC裝置的公網DNS也需要解析到這個公網IP用於與TeamsDirect Routing通訊。
e601a1a86056a97f2a72732594015196.png
(管理FQDN及公網IP地址)

3d585f221114803ddee139e29ace72a0.png
(使用IP地址直接登入)

1d4598f0d03b57dd3714f19a50e43ef7.png
(使用FQDN地址直接登入)

Part-2,配置SBC前的準備工作

1、建立公網DNS解析記錄,將shsbc主機指向52.175.60.156

7856f63f8527e5670f17cbddeeaccec2.png
(Teams撥號介面自動為手機號新增+86並開始呼叫)
2、首次登入SBC SWeLite配置介面需要修改密碼

12ea9afb709ea11bb8b4be6ae2c060b7.png
(修改初始密碼)
3、上傳證書

在SBC證書配置中是提供生成CSR檔案的功能,但一般專案中我們都會讓客戶提前準備好一張萬用字元證書,最後將證書匯出PFX檔案給到我們,我們就可用從PFX檔案中拿到這張證書頒發機構的根證書(CA證書)以及中間證書。這裡就不過多贅述如何獲取CA證書和中間證書了。直接開搞匯入CA證書和中間證書以及裝置的證書。

進入SBC Seeting,依次展開安全-SBC證書-信任的根證書。然後點選上傳按鈕,選擇上傳檔案的方式上傳SBC裝置的證書頒發機構的根證書。

ed4bd4e4b3d93f57dbe074225e1c0473.png
(匯入SSL證書頒發機構的CA證書)
使用同樣的方法再匯入中間證書,以及最最重要的Phone System的CA證書,是由Baltimore CyberTrust Root簽發的。

f75f4aee49efe4da5442e4c6122ec4d9.png
(匯入Phone System證書頒發機構的CA證書)
接下來選擇SBC主要證書,預設是有一張ribbon自簽發的證書,這時候我們要換成已經申請好了的萬用字元證書或者單/多域名證書,還是以匯入pfx檔案的方式將證書匯入。

0208ca8a0cf306e7f1585e78a4c31006.png
(匯入SSL公網證書)
完成匯入證書的動作之後,原來由ribbon簽發的證書消失了,變成了我們所申請的SSL證書。

6ce4d4e7911456bec8fc7002d51ef606.png
(檢查SSL公網證書)
4、修改系統時間

由於之前已經做好了DNS解析記錄,所以此時也可用通過https://shsbc.and-sc.com來對閘道器進行管理了,在Setting中依次進入System——Node-LevelSettings,將預設的UTC時區更改為GMT +8的中國時區並應用,這樣系統的時間就會正確顯示。

581a20abd09ba14494f5acfd460c95f2.png
(修改裝置的系統時區)

Part-3,SBC配置

接下來的配置就是比較重要的內容了,包括ACL、TLS Media Profiles以及SIP Server和SG、Call Routing了,如果單獨一項一項配置裡面的邏輯性太強了至少需要1到3工作日,如果有問題再來排錯的話花費的時間更長。好在ribbon為我們提供了一個Wizard用來配置SBC與Teams的Direct Routing。整個過程非常簡單,大約3分鐘左右就能配置完成,在頂部點選Tasks然後選擇SBC快速配置,點選快速配置嚮導。

5270c1c006dacce4dfe8556815d4b595.png
(選擇快速配置嚮導)
Step1:選擇配置的模式

選擇SIP Trunk --- Microsoft Teams,對這個配置進行命名為Shanghai,撥打電話的國家選擇China,SIP併發30路。

1a73d431f2c51299f2d7469a66d062c3.png
(選擇配置的模式)
如果你有包括ATT、NTT等以下的SIP線路的運營商可直接選擇相應的SIP Trunk。

b91e14ce32eb30259928f8ec42b9e7ad.png
(SIP Trunk的配置)
Step2:配置Other SIP Trunk

這裡我暫時以SWeLite作為一個SIP線路提供商,直接填寫當前裝置FQDN。在Teams Direct Routing配置中將Ethernet 1 IP作為信令和媒體的源IP,要對映的NAT地址為上面提到的Public IP,監聽埠填寫5061。

a292c2099f3f24d9c7ae341b0e3049a0.png
(NAT對映及監聽埠配置)
Step3:檢查

檢查SIP Trunk配置以及Teams Direct Routing配置,如果無誤點選Finish將會在30秒內完成所有的配置。

858cd2fc4509c0174a7f2d2f693b19e2.png
(檢查預設配置)
以上步驟完成後在Azure Portal上新增網路埠放行。

3c9454c8f07a871a75a262054c5f30cc.png
(入站埠規則)
為什麼我說SWeLite的Easy配置嚮導很贊呢?我們看下配置嚮導幫我們幹了多少事情,綠色標記的地方全是嚮導幫我們們配置的,只是Transformation不會幫我們們配置,而這恰巧又是最重要的地方,它控制的進出Teams的號碼規則以及送到運營商的號碼規則。只是有一個預設的(.*)轉換成\1,也就是說進來的是什麼號碼我就給什麼號碼出去。我們還是先看下其他的配置吧,檢驗Teams Direct Routing是否配置成功,我們只需要看信令組裡面的Teams的信令是否為UP狀態,點選Counters還能看到資料的進和出,SBC和Teams之間的SIP Options返回值是200表明通道已經建立起來了。

85bd01868e9e3e6c3bf5431ff6a93443.png
(通過SIP Options判斷DR配置)
還有諸如ACL、TLS Profiles、Media Profiles、Media Lists、SRTP Profiles等。

5ee37083536e1a6a350e02d0ac823149.png
(SBC配置項)
從SBC裝置上看到Teams Direct Routing的狀態是OK的,那麼從Teams Admin Center裡面來看SBC裝置的狀態呢?通過SBC列表可以看到shsbc這臺閘道器的TLS連線狀態和SIP狀態都是正常的。

f8fb2e4e18c6116b81c33efb0cc8c363.png
(Teams Admin Center中SBC狀態)
接下來我們試試從SBC裡面發起一個呼叫吧,還是以wangy@and-sc.com這個賬號進行測試,這個賬號的號碼為+0000測試下Teams客戶端能否收到這個呼叫。進入SBC點選Diagnostics然後再Tools裡面選擇Test a Call,目標號碼填寫+0000,Calling Number(主叫號碼)填寫一個手機號,然後點選OK就可以開始測試了。

f3a78ba33c5afc66667979093f7256cb.png
(Test a Call)
在Teams客戶端上成功的接收到了這條來自SBC裝置的呼叫。

611de33c5dc63eefed0445ba2f881aaf.png
(Teams客戶端接收到來自SBC的呼叫)
好了,基於以上內容基本就可以實現使用Teams客戶端來撥打接聽電話了。

總結

本文先介紹了Teams Direct Routing原理及前期規劃,有利於Microsoft 365管理員深入規劃設計Teams語音呼叫。然後著重介紹了Teams Direct Routing及SBC配置,有助於Microsoft 365管理員深入理解Teams語音呼叫,可以根據實際需求動態調整。

*Source Link:


這裡有更多微軟官方學習資料和技術文件,掃碼獲取免費版!
內容將會不定期更新哦!
208f6785e4bc3f899ded709a80dff426.jpg