• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
    您當(dāng)前的位置是:  首頁(yè) > 新聞 > 國(guó)內(nèi) >
     首頁(yè) > 新聞 > 國(guó)內(nèi) >

    Kamailio/OpenSIPS學(xué)習(xí)筆記-如何使用數(shù)據(jù)庫(kù)實(shí)現(xiàn)撥號(hào)規(guī)則控制

    2018-04-17 11:01:12   作者:james.zhu    來(lái)源:Asterisk開(kāi)源派   評(píng)論:0  點(diǎn)擊:


      在我們前面的系列筆記中,我們的撥號(hào)規(guī)則是使用腳本寫(xiě)死的代碼。這樣的代碼不利于管理維護(hù)。現(xiàn)在我們介紹如何通過(guò)撥號(hào)控制模塊來(lái)實(shí)現(xiàn)撥號(hào)管理。
      這里,為了實(shí)現(xiàn)撥號(hào)規(guī)則模塊化管理,我們需要引用兩個(gè)概念來(lái)支持撥號(hào)規(guī)則的管理。一個(gè)概念是使用AUTH_DB的參數(shù)dpid(Dialplan Identification),我們可以設(shè)置不同的用戶(hù)走不同的路由。另外一個(gè)概念是通過(guò)DIALPLAN模塊來(lái)管理路由,通過(guò)一個(gè)腳本管理不同用戶(hù)位置,不同路由和不同媒體服務(wù)器轉(zhuǎn)發(fā)設(shè)置。
      1、我們需要通過(guò)幾個(gè)步驟來(lái)實(shí)現(xiàn)以上管理功能。首先,我們需要在subscriber表中添加dpid,通過(guò)以下命令執(zhí)行:
      mysql –u root –p // 登錄mysql 服務(wù)器
      >use opensips
      >alter table subscriber add column dpid int default 0; // 添加dpid
      然后在cfg文件中,添加以下兩個(gè)模塊:
      loadmodule "avpops.so"
      loadmodule "dialplan.so"
      設(shè)置模塊加載參數(shù):
      modparam("avpops", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")
      modparam("avpops", "avp_table", "usr_preferences")
      #------ load the dpid field to a pseudo-variable $avp(dpid) ------
      modparam("auth_db", "load_credentials", "$avp(rpid)=rpid ;$avp(dpid)= dpid")
      modparam("dialplan", "db_url","mysql://opensips:opensipsrw@localhost/opensips")
      添加撥號(hào)規(guī)則處理流程:
      if( !is_avp_set("$avp(dpid)") ) {
      $avp(dpid)=0;
      }
      if(!dp_translate("$avp(dpid)",("$ruri.user/$ruri.user"),"$avp(dest)") {
      sl_send_reply("420", "Invalid Extension");
      exit;
      }
      xlog("Dialplan: Subscriber’s dpid: $(avp(dpid))");
      xlog("Dialplan: Destination: $avp(dest)");
      if ($avp(dest)=="3") {
      #Route to usrloc
      route(3);
      }
      if ($avp(dest)=="4") {
      #route to drouting
      route(4);
      }
      if ($avp(dest)=="5") {
      #route to media server
      route(5);
      }
      sl_send_reply("420", "Invalid Extension");
      exit;
      添加最終路由管理策略:
      route[3]{
      if (!lookup("location")) {
      switch ($retcode) {
      case -1:
      case -3:
      t_newtran();
      t_reply("404", "Not Found");
      exit;
      case -2:
      sl_send_reply("405", "Method Not Allowed");
      exit;
      }
      }
      # when routing via usrloc, log the missed calls also
      setflag(2);
      route(1);
      }
      route[5] {
      rewritehostport("媒體服務(wù)器IP:5061");
      route(1);
      }
      2、設(shè)置cfg腳本以后,用戶(hù)需要通過(guò)源代碼添加幾個(gè)路由設(shè)置:使用文本編輯器,vi,執(zhí)行 vi /var/www/opensips-cp/config/tools/system/dialplan/local.inc.php,修改后保存。
      $config->attrs_cb=array(
      // name , description
      array("3","usrloc"),
      array("4","routing"),
      array("5","service"),
      #array("d","Descr d"),
      #array("e","Descr e"),
      #array("f","Descr f"),
      通過(guò)界面設(shè)置撥號(hào)規(guī)則的路由表,在設(shè)置界面時(shí),需要注意以下幾個(gè)撥號(hào)匹配方式的不同, 另外,這里的屬性就是在上面代碼中所添加到用戶(hù)location, routing和媒體服務(wù)器路由設(shè)置。
      這里的路由規(guī)則通過(guò)號(hào)碼匹配和屬性實(shí)現(xiàn)了統(tǒng)一管理:
    • 如果用戶(hù)撥打了國(guó)際長(zhǎng)途(011),國(guó)內(nèi)長(zhǎng)途(01),本地號(hào)碼(7位匹配),則通過(guò)路由屬性4出局。
    • 如果撥打的1XXXX則通過(guò)屬性3呼叫,查詢(xún)user location。
    • 如果用戶(hù)撥打以×為前綴的號(hào)碼,或者熱鍵撥號(hào)功能,則通過(guò)屬性5媒體服務(wù)器出局。
      3、保存以上設(shè)置以后,如果配置成功的話,用戶(hù)可以分別測(cè)試呼叫流程:
    • 從PSTN呼叫,撥打以011為前綴的號(hào)碼,呼叫到PSTN網(wǎng)關(guān)出局。
    • 任何內(nèi)部號(hào)碼,呼叫以1XXX測(cè)試。
    • 任何以功能熱鍵×開(kāi)始的撥號(hào),都發(fā)送到媒體服務(wù)器。
      4、在本章節(jié)的分享中,我們討論了如何使用數(shù)據(jù)庫(kù)存儲(chǔ)來(lái)實(shí)現(xiàn)呼叫路由的管理。大家知道,通過(guò)數(shù)據(jù)庫(kù)管理會(huì)比強(qiáng)行在代碼中寫(xiě)死路由規(guī)則更加方便管理和維護(hù)。但是,在創(chuàng)建數(shù)據(jù)庫(kù)管理時(shí),用戶(hù)需要添加幾個(gè)相應(yīng)的數(shù)據(jù)庫(kù)表單,軟交換通過(guò)表單查詢(xún)獲得用戶(hù)的location信息,并且需要修改php代碼來(lái)支持3種路由屬性。完成這些工作后,用戶(hù)需要通過(guò)界面來(lái)設(shè)置不同的路由屬性對(duì)撥號(hào)規(guī)則進(jìn)行一定的規(guī)范。通過(guò)以上步驟,用戶(hù)基本上完成了通過(guò)數(shù)據(jù)庫(kù)配置路由管理的方式,用戶(hù)可以通過(guò)撥號(hào)規(guī)則來(lái)做進(jìn)一步的測(cè)試驗(yàn)證。
      關(guān)注微信公眾號(hào):asterisk-cn,獲得有價(jià)值的行業(yè)分享
      freepbx 技術(shù)論壇:www.ippbx.org.cn
      Asterisk, freepbx技術(shù)文檔: www.freepbx.org.cn
      歐米(Omni)智能客服解決方案
      融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com
    【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對(duì)文中陳述、觀點(diǎn)判斷保持中立,不對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請(qǐng)讀者僅作參考,并請(qǐng)自行承擔(dān)全部責(zé)任。

    專(zhuān)題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 乌拉特前旗| 乌兰察布市| 新沂市| 云南省| 商河县| 无棣县| 泰兴市| 贡觉县| 沾化县| 邵东县| 波密县| 弋阳县| 陇南市| 利辛县| 奉节县| 洞口县| 汉沽区| 卫辉市| 桂阳县| 五河县| 玉屏| 贺州市| 贡嘎县| 广水市| 怀宁县| 南华县| 嵊泗县| 茂名市| 瓦房店市| 如东县| 商南县| 巴彦淖尔市| 台北县| 长寿区| 遵义市| 全南县| 大同县| 班玛县| 洛南县| 呼和浩特市| 松阳县| http://444 http://444 http://444 http://444 http://444 http://444