話務(wù)系統(tǒng)平臺(tái)是典型的LNMP架構(gòu),架設(shè)在AWS云服務(wù)上,前端使用AWS ELB作為負(fù)載均衡,為業(yè)務(wù)方和供應(yīng)商提供接入口,流量分發(fā)到后端多臺(tái)Server上,Server可以很方便地水平擴(kuò)展。ELB和Server之間有TCP健康檢查。
存儲(chǔ)采用MySQL,呼叫中心外呼系統(tǒng)用以保存號(hào)碼綁定關(guān)系、會(huì)話關(guān)系、可分配號(hào)碼號(hào)池,以及通話記錄。通話記錄歷史數(shù)據(jù)會(huì)定期歸檔。旁路有一個(gè)控制臺(tái)UI,用來做數(shù)據(jù)報(bào)表展示,以及控制號(hào)池調(diào)度??蛻艟烤故窃鯓油ㄟ^撥打虛擬號(hào)聯(lián)系到經(jīng)紀(jì)人的呢?
1. 綁定。首先客戶要拿到被叫經(jīng)紀(jì)人的虛擬號(hào)??蛻粼L問業(yè)務(wù)線產(chǎn)品,業(yè)務(wù)線產(chǎn)品調(diào)用話務(wù)平臺(tái)綁定接口,傳遞經(jīng)紀(jì)人真實(shí)號(hào),話務(wù)平臺(tái)從號(hào)池中取出一個(gè)儲(chǔ)備虛擬號(hào),建立綁定關(guān)系,并將虛擬號(hào)返回給業(yè)務(wù)線產(chǎn)品。在這里,綁號(hào)接口同時(shí)也是查詢虛號(hào)接口,如果真實(shí)號(hào)已經(jīng)有綁定關(guān)系,則直接返回已綁定虛號(hào),如果尚未綁定,則綁定后再返回虛號(hào)。虛擬號(hào)是按需分配,并非所有經(jīng)紀(jì)人都預(yù)先分配一遍,這樣可以節(jié)約號(hào)碼。
2. 撥打??蛻魮艽蛱撎?hào),或者通過APP自動(dòng)調(diào)用號(hào)盤撥號(hào)。通話流程轉(zhuǎn)到運(yùn)營(yíng)商,運(yùn)營(yíng)商再將通話流程轉(zhuǎn)到與之有合作關(guān)系的供應(yīng)商,可以理解為供應(yīng)商在運(yùn)營(yíng)商處注冊(cè)了路由。因?yàn)閾艽虻氖翘撎?hào),而虛號(hào)的綁定關(guān)系存儲(chǔ)在話務(wù)平臺(tái),故供應(yīng)商調(diào)用話務(wù)平臺(tái)查詢虛號(hào)的綁定關(guān)系。
3. 轉(zhuǎn)接。供應(yīng)商通過話務(wù)平臺(tái)接口查到虛號(hào)對(duì)應(yīng)的真實(shí)號(hào),然后做轉(zhuǎn)呼。雙方建立通話。電話銷售呼叫系統(tǒng),在這里,供應(yīng)商可能查到多個(gè)真實(shí)號(hào),按照約定,供應(yīng)商按順序逐個(gè)轉(zhuǎn)呼真實(shí)號(hào),直到某一個(gè)接通或者都未接通。每次轉(zhuǎn)呼有一定的超時(shí)時(shí)間,這樣既保證用戶不用等太久,又避免經(jīng)紀(jì)人漏接電話。
4. 推送話單。當(dāng)通話結(jié)束之后,供應(yīng)商將話單數(shù)據(jù)推送至話務(wù)系統(tǒng)平臺(tái),話單包含號(hào)碼、時(shí)長(zhǎng)、計(jì)費(fèi)、通話狀態(tài)等關(guān)鍵信息。話務(wù)平臺(tái)存儲(chǔ)話單,并推送給業(yè)務(wù)方。在這里,可能受到網(wǎng)絡(luò)抖動(dòng)等因素影響而推不成功,我們的解決方案是:
A、供應(yīng)商重復(fù)推送,當(dāng)出現(xiàn)超時(shí)、503等狀況時(shí),供應(yīng)商標(biāo)記該條話單為“未同步成功”狀態(tài),并在一定時(shí)間后重新發(fā)起推送,如果仍然不成功,則拉長(zhǎng)時(shí)間間隔后再次推送;
B、話務(wù)平臺(tái)定期拉取話單,和本地?cái)?shù)據(jù)check,若發(fā)現(xiàn)丟單則補(bǔ)單。
以上通過重復(fù)推送和推拉結(jié)合的方式保證話單數(shù)據(jù)及時(shí)、正確地同步。這一設(shè)計(jì)在其他數(shù)據(jù)同步的設(shè)計(jì)中已被證明為一種行之有效的方法,比如支付行業(yè),第三方支付平臺(tái)通知商戶支付訂單狀態(tài)就是采用這種方法。