歡迎光臨陜西驪山低速風(fēng)機(jī)動(dòng)力制造有限公司官網(wǎng)!

全國(guó)咨詢(xún)熱線(xiàn):

400-8888-888

分機(jī)功能源碼_分機(jī)功能源碼怎么查

所屬分類(lèi):行業(yè)應(yīng)用 發(fā)布日期:2024-09-14 瀏覽次數(shù):4

  

  王小飛

  Qunar軟件工程師分機(jī)功能源碼,主要從事后端開(kāi)發(fā)工作。個(gè)人博客地址分機(jī)功能源碼:https://www.jianshu.com/users/0d5a83b32e8f/latest_articles

  隨著出境旅游的需求不斷攀升,出境WIFI、當(dāng)?shù)赝鏄?lè)、在線(xiàn)向?qū)У确?wù)受到了更多客戶(hù)青睞,去哪兒需要在游客走出國(guó)門(mén)之后,做好從接機(jī)、聯(lián)系當(dāng)?shù)叵驅(qū)У铰涞亟哟日w服務(wù)升級(jí),才能贏(yíng)得口碑,留住客戶(hù)。

  如何讓游客在國(guó)外也能找到回家的感覺(jué),隨時(shí)隨地、輕輕松松地和去哪兒取得聯(lián)系,在遇到困難的時(shí)候,能夠及時(shí)地向去哪兒尋求幫助,是去哪兒一直在努力提升的地方。

  為了保證游客在國(guó)外也能和國(guó)內(nèi)無(wú)縫銜接,去哪兒App的用戶(hù)可以直接通過(guò)免費(fèi)網(wǎng)絡(luò)電話(huà)撥打國(guó)內(nèi)的客服電話(huà)。在沒(méi)有任何宣傳推廣的情況下,上線(xiàn)7天已經(jīng)有超過(guò)30%的用戶(hù)選擇網(wǎng)絡(luò)電話(huà)入口呼叫接入,這個(gè)數(shù)據(jù)顯示用戶(hù)對(duì)于網(wǎng)絡(luò)電話(huà)的認(rèn)可度是很高的。

  

  下面分機(jī)功能源碼我們來(lái)看一下網(wǎng)絡(luò)電話(huà)的整體解決方案。

  一、VOIP介紹

  VOIP即網(wǎng)絡(luò)電話(huà),Voice over Internet Protocol,通過(guò)把語(yǔ)音信號(hào)經(jīng)過(guò)數(shù)字化處理、壓縮編碼打包、通過(guò)網(wǎng)絡(luò)傳輸,然后解壓、把數(shù)字信號(hào)還原成聲音,讓通話(huà)對(duì)方聽(tīng)到。 話(huà)音從源端到達(dá)目的端的基本過(guò)程是: 聲 -- 電轉(zhuǎn)換:通過(guò)壓電陶瓷等類(lèi)似裝置將聲波變換為電信號(hào)。

量化采樣:將模擬電信號(hào)按照某種采樣方法(比如脈沖編碼調(diào)制,即PCM)轉(zhuǎn)換成數(shù)字信號(hào)分機(jī)功能源碼;

封包:將一定時(shí)長(zhǎng)的數(shù)字化之后的語(yǔ)音信號(hào)組合為一幀,隨后,按照國(guó)際電聯(lián)(ITU-T)的標(biāo)準(zhǔn),這些話(huà)音幀被封裝到一個(gè)RTP(即實(shí)時(shí)傳輸協(xié)議,Realtime Transport Protocol)報(bào)文中,并被進(jìn)一步封裝到UDP報(bào)文和IP報(bào)文中。

傳輸:IP報(bào)文在IP網(wǎng)絡(luò)由源端傳遞到目的端 去抖動(dòng):去除因封包在網(wǎng)絡(luò)中傳輸速度不均勻所造成的抖動(dòng)音 拆包 電聲轉(zhuǎn)換 一個(gè)完整的、可以大規(guī)模商用運(yùn)營(yíng)的IP電話(huà)系統(tǒng)包括如下一些技術(shù)(暫不完全):尋址 話(huà)音編解碼 回聲消除和回聲抑制 傳輸 IP報(bào)文時(shí)延控制功能 去抖動(dòng) IP報(bào)文的去抖動(dòng)(de-jitter)功能 。

  二、VOIP與傳統(tǒng)電話(huà)的比較

  簡(jiǎn)單地來(lái)說(shuō),VOIP網(wǎng)絡(luò)電話(huà)免費(fèi)(流量、wifi),傳統(tǒng)電話(huà)更穩(wěn)定點(diǎn)。不過(guò)現(xiàn)在網(wǎng)絡(luò)電話(huà)行業(yè)發(fā)展快,很多產(chǎn)品穩(wěn)定性都超過(guò)了傳統(tǒng)電話(huà),好比mimicall、vp3000等,所以現(xiàn)在越來(lái)越多的人習(xí)慣了使用網(wǎng)絡(luò)電話(huà)去進(jìn)行溝通。

  三、開(kāi)源軟PBX(軟交換)的選擇

  國(guó)內(nèi)比較流行和擁有活躍用戶(hù)群的是FreeSwitch(https://freeswitch.org/)和Asterisk(https://www.asterisk.org/),由于之前對(duì)Asterisk有一定的應(yīng)用經(jīng)驗(yàn),所以選擇了Asterisk。二者都基于sip協(xié)議。

  四、客戶(hù)端開(kāi)源sip協(xié)議庫(kù)的選取

  目前比較流行的開(kāi)源的SIP協(xié)議庫(kù)是PJSIP(https://www.pjsip.org/),它實(shí)現(xiàn)了SIP、SDP、RTP、STUN、TURN和ICE。PJSIP作為基于SIP的一個(gè)多媒體通信框架提供了非常清晰的API,以及NAT穿越的功能。PJSIP具有非常好的移植性,幾乎支持現(xiàn)今所有系統(tǒng):從桌面系統(tǒng)、嵌入式系統(tǒng)到智能手機(jī)。PJSIP同時(shí)支持語(yǔ)音、視頻、狀態(tài)呈現(xiàn)和即時(shí)通訊。PJSIP具有非常完善的文檔,對(duì)開(kāi)發(fā)者非常友好支持。

  五、調(diào)研評(píng)估和Demo搭建

  目前市場(chǎng)上對(duì)于voip的應(yīng)用已經(jīng)比較成熟,好多公司都在做。微信電話(huà)本等的推出說(shuō)明voip完全可行。相對(duì)于去哪兒呼叫中心更好的服務(wù)于去哪兒用戶(hù)解決海外用戶(hù)撥打人工服務(wù)的困難,盡最大努力降低用戶(hù)的成本,voip完全可行。

  1)Demo的快速搭建

  找一臺(tái)linux機(jī)器首先下載安裝pjsip軟件 安裝過(guò)程這里不做過(guò)細(xì)講解

  用ldconfig命令 驗(yàn)證pjsip的動(dòng)態(tài)鏈接是否創(chuàng)建

  ldconfig -p | grep pj

  

  安裝Asterisk 13(注意只有12以上才支持了pjsip)

  這里注意在編譯的時(shí)候其實(shí)可以查詢(xún)系統(tǒng)的位數(shù),我的是64位所以直接指定了64,查詢(xún)指定的命令如下:

  ARCH=$(getconf LONG_BIT | grep “64”)

  ./configure –libdir=/usr/lib${ARCH}

  用make menuselect命令選擇安裝的模塊

  做選擇需要編譯安裝的modules,查看確保pjsip相關(guān)的module已選擇

  

  然后make config 命令是將asterisk作為linux service的服務(wù)

  還有一點(diǎn)就是Asterisk 13 requires pjsip >= 2.4. 所以選取版本的時(shí)候也 需要注意。

  2)demo客戶(hù)端軟件選取

  PjSua是開(kāi)源的客戶(hù)端代碼,同時(shí)支持ios和android等主流操作系統(tǒng),做測(cè)試用的話(huà)eyeBeam,X-Lite,Blink 都可以作為PC客戶(hù)端,Blink PC客戶(hù)端做tls測(cè)試的時(shí)候比較方便。

  這里可以同時(shí)下載eyeBeam,X-Lite兩臺(tái)互撥便于測(cè)試。

  3)Asterisk的配置

  Demo可以配置兩個(gè)測(cè)試的分機(jī)號(hào)(可以認(rèn)為是用戶(hù)名和密碼)

  配置是在 /etc/asterisk/pjsip.conf 中

  監(jiān)聽(tīng)地址端口配置為本機(jī)ip和5061端口,協(xié)議配置成udp

  分別再配置兩個(gè)號(hào) 8005和8006

  [transport-udp]

  type=transport

  protocol=udp

  bind=0.0.0.0:5061

  [8005]

  type=endpoint

  context=from-external

  disallow=all

  allow=ulaw

  transport=transport-udp

  auth=8005

  aors=8005

  [8005]

  type=auth

  auth_type=userpass

  password=8005

  username=8005

  [8005]

  type=aor

  max_contacts=1

  [8006]

  type=endpoint

  context=from-external

  disallow=all

  allow=ulaw

  transport=transport-udp

 分機(jī)功能源碼_分機(jī)功能源碼怎么查

  auth=8006

  aors=8006

  [8006]

  type=auth

  auth_type=userpass

  password=8006

  username=8006

  [8006]

 分機(jī)功能源碼_分機(jī)功能源碼怎么查

  type=aor

  max_contacts=1

  4)撥號(hào)方案的配置

  撥號(hào)方案的配置在 /etc/asterisk/extensions.conf 中 增加配置

  [from-external]

  exten => _80XX,1,NoOp()

  same => n,Dial(PJSIP/${EXTEN})

  啟動(dòng)asterisk

  service asterisk start

  控制臺(tái)連接

  sudo asterisk -rvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

  注冊(cè)分機(jī)8005 8006

  

  Asterisk 控制臺(tái)輸出

  

  撥打測(cè)試 戴上耳機(jī)就可以聽(tīng)到你的聲音啦

  demo用例圖

  

  

  六、Asterisk 負(fù)載均衡的搭建

  完美的線(xiàn)上解決方案是不允許單點(diǎn)的出現(xiàn),作為pbx 也是一樣。

  負(fù)載均衡軟件選取,sip層的負(fù)載均衡可以選取硬件,但是成本原因我們可以用軟件代替,行業(yè)中有不少做sbc的廠(chǎng)家,提供硬件和軟件的解決方案,我們可選取kamailio (https://www.kamailio.org/w/) 或者opensips (https://www.opensips.org/),其實(shí)二者是一家,不同的分支而已 其中的故事我就不在這里說(shuō)了,這里我們選取 kamailio。

  1)kamailio安裝

  安裝過(guò)程這里不做過(guò)細(xì)講解 這里需要注意將kamailio做成service服務(wù)啟動(dòng)方式或者init腳本啟動(dòng)方式需要做以下操作,同時(shí)需要注意權(quán)限問(wèn)題

  cp pkg/kamailio/rpm/kamailio.init /etc/init.d/

  mv /etc/init.d/kamailio.init /etc/init.d/kamailio

  chmod 755 /etc/init.d/kamailio

  /etc/init.d/kamailio start

  2) 配置asterisk的轉(zhuǎn)發(fā)

  cd /usr/local/etc/kamailio/

  vim dispatcher.list

  1 sip:192.168.0.1 0 1 weight=50

  1 sip:192.168.0.2 0 1 weight=50

  vim kamailio.cfg(kamailio配置比較多官方有文檔(https://www.kamailio.org.cn/data/pages/cookbooks/4.3.x/stable.html)這里列舉主要的配置)

  listen=udp:192.168.0.3:5060

  modparam("dispatcher", "list_file", "/usr/local/etc/kamailio/dispatcher.list")

  Route配置中加入

  if(!ds_select_dst("$var(dispatcher_group)", "9"))

  {

  send_reply("404", "No destination dispatcher");

  exit;

  }

  關(guān)于dispatcher 的選項(xiàng)配置

  

  3)重啟 kamailio

  /etc/init.d/kamailio restart

  此時(shí)呼叫 可以查看kamailio的日志或者asterisk控制臺(tái) 發(fā)現(xiàn)已經(jīng)按照我們的配置按權(quán)重做了轉(zhuǎn)發(fā)。

  Asterisk負(fù)載均衡用例圖

  

  七、kamailio的HA

  此時(shí)發(fā)現(xiàn)雖然解決了asterisk的單點(diǎn)問(wèn)題,但是沒(méi)有解決kamailio的單點(diǎn)問(wèn)題。我們選取keepalived解決kamailio的HA。Keepalived 引入需要vrrp(虛擬ip)的配合,這里我們指定192.168.1.4是192.168.1.5和192.168.1.6vrrp (這個(gè)需要在路由器端配置)。

  1)Keepalived(https://www.keepalived.org/)安裝

  需要主備兩臺(tái)服務(wù)器 地址分別對(duì)應(yīng)192.168.1.5和192.168.1.6。兩臺(tái)都得安裝。

  2)Keepalived 配置

  兩臺(tái)機(jī)器的配置,基本一致只是一臺(tái)是master一臺(tái)是backup

  還需要修改 /etc/sysctl.conf文件輸入

  net.ipv4.ip_nonlocal_bind = 1

  這條配置是允許linux的服務(wù)可以綁定虛擬ip,這里我們的kamailio需要綁定虛擬ip。

  3)啟動(dòng)keepalived

  service keepalived start

  兩臺(tái)都啟動(dòng)

  修改kamailio的配置文件 綁定虛擬ip

  listen=udp:192.168.1.4

  重啟kamailio 這里已經(jīng)是兩臺(tái)了 主備

  /etc/init.d/kamailio restart

  這是時(shí)候撥打虛擬ip就可以了

  4)HA的主備切換的檢驗(yàn)

  針對(duì)kamailio 我們需要引入sipsak小軟件,做sip探測(cè)比較合適

  安裝sipsak

  yum install sipsak

  向kamailio發(fā)送探測(cè) 命令格式

  sipsak -s sip:s@192.168.1.4:5060

  根據(jù)返回值判斷echo $?

  編寫(xiě)監(jiān)測(cè)腳本 做邏輯處理

  這里大致說(shuō)下腳本思路:利用sipsak 向kamailio發(fā)送探測(cè)命令,根據(jù)返回值是否為0判斷kamailio是否存活,根據(jù)失敗次數(shù)做keepalived的關(guān)閉這樣就可以實(shí)現(xiàn)vrrp指向另一臺(tái)機(jī)器。結(jié)合crontab 和shell腳本可以實(shí)現(xiàn)精細(xì)到每秒執(zhí)行一次監(jiān)測(cè)。

  Kamailio HA后的用例圖

  

  八、回?fù)芊桨傅慕鉀Q

  現(xiàn)實(shí)中手機(jī)上并未啟動(dòng)voip電話(huà),此時(shí)撥打用戶(hù)是打不通的。為了解決這個(gè)問(wèn)題我們?cè)O(shè)計(jì)了回?fù)芊桨?,主要思路是?dāng)一方呼入電話(huà)時(shí)我們將這通電話(huà)hold起來(lái),根據(jù)業(yè)務(wù)方式通知到另一方(比如push通知),當(dāng)對(duì)方上線(xiàn)后我們放行這通電話(huà)就可以正常通話(huà)了,另一種方式是會(huì)議室方式,將呼入方先加入會(huì)議室,業(yè)務(wù)通知(同樣可以push或者短信等)另一方,另一方收到通知后主動(dòng)加入會(huì)議室,此時(shí)雙方就可以通話(huà)啦。

  回?fù)芊桨傅男蛄袌D

  

  九、NAT 問(wèn)題簡(jiǎn)述

  在企業(yè)服務(wù)中通常公司都有防火墻和DNS服務(wù)器,我熟知的一般是bind服務(wù),在對(duì)外網(wǎng)開(kāi)放的時(shí)候,需要開(kāi)放端口,同時(shí)需要做端口和ip轉(zhuǎn)發(fā)。對(duì)應(yīng)的外網(wǎng)地址轉(zhuǎn)發(fā)到對(duì)應(yīng)的內(nèi)網(wǎng)地址上,這一點(diǎn)需要注意。在asterisk和kamailio中都有對(duì)NAT的支持,做對(duì)應(yīng)的配置即可,其中的坑只能自己動(dòng)手去踩坑,比較雜,這里就不做過(guò)多說(shuō)明,如果公司實(shí)力強(qiáng)大,還可以搭建stun服務(wù)器,免費(fèi)的一般不靠譜,這樣既能解決端口問(wèn)題又能解決NAT問(wèn)題。

十、TLS和SRTP的支持

對(duì)于對(duì)外的服務(wù)來(lái)說(shuō),如果不想讓別人看到你的數(shù)據(jù)和聽(tīng)到你的通話(huà),需要在協(xié)議層引入TLS 語(yǔ)音層引入SRTP。tls和srtp都是需要單獨(dú)安裝的模塊,在kamailio中編譯安裝的時(shí)候就需要指定tls.so的加入。Asterisk編譯安裝的時(shí)候也需要提前編譯安裝tls和srtp。至于證書(shū)沒(méi)必要去購(gòu)買(mǎi) 自簽名的即可。Kamailio是可以單獨(dú)配置rtpproxy的,所以這些服務(wù)都可以細(xì)分。

  十一、問(wèn)題排查

  實(shí)際搭建過(guò)程中肯定會(huì)碰到各種各樣的問(wèn)題,如網(wǎng)絡(luò)問(wèn)題可以采用小工具netcat(https://www.jianshu.com/p/fa4eeac44e5c)進(jìn)行排查,如果是分析sip協(xié)議哪步出的問(wèn)題linux的 tcpdump是很好的工具,如果采用了tls協(xié)議,則有相對(duì)應(yīng)的工具ssldump。最后推薦個(gè)非常實(shí)用的抓包軟件wireshark,這款軟件無(wú)論是分析sip協(xié)議還是丟包率,還是語(yǔ)音質(zhì)量方面都是非常好用的。

  十二、總結(jié)

  如圖是比較簡(jiǎn)單的voip接入呼叫中心的架構(gòu)圖,實(shí)際的應(yīng)用項(xiàng)目中還有許多監(jiān)控的事情,比如宕機(jī)的通知之類(lèi)的事情這里和業(yè)務(wù)相關(guān)的就不多說(shuō)了,真正搭建的過(guò)程中會(huì)遇到許許多的問(wèn)題,在此只是一個(gè)小的總結(jié),希望對(duì)大家有所幫助。

  

  歡迎留言交流或投稿,和我們一起分享知識(shí)。

  

  Qunar技術(shù)沙龍

評(píng)論列表

還沒(méi)有評(píng)論,快來(lái)說(shuō)點(diǎn)什么吧~

發(fā)表評(píng)論

真誠(chéng)期待與您的合作

獲取報(bào)價(jià)·了解更多業(yè)務(wù)·7*24小時(shí)專(zhuān)業(yè)服務(wù)

聯(lián)系我們