• <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) >

    如何在Asterisk/FreeSWITCH環(huán)境下實(shí)現(xiàn)PUSH功能支持

    2018-11-15 09:24:36   作者: james.zhu   來(lái)源:CTI論壇   評(píng)論:0  點(diǎn)擊:


      很多手機(jī)不能支持手機(jī)APP一直在后臺(tái)運(yùn)行,這樣的話,手機(jī)耗電相當(dāng)厲害。如果APP處于休眠狀態(tài)的話,電話呼入以后就會(huì)出現(xiàn)漏接的問(wèn)題。為了保證手機(jī)app 那個(gè)正常接聽(tīng)呼入的呼叫,需要通過(guò)推送PUSH消息提醒來(lái)喚醒手機(jī)的SIP軟電話。最近一個(gè)客戶問(wèn)筆者這個(gè)問(wèn)題,所以為了回答客戶的問(wèn)題,筆者網(wǎng)上找到了這個(gè)比較可行的,經(jīng)濟(jì)的辦法來(lái)解決這個(gè)問(wèn)題。今天,我們就和大家分享一下這個(gè)解決方法的具體實(shí)現(xiàn)過(guò)程。
      目前市場(chǎng)上的很多商業(yè)軟件可以支持PUSH功能。很多手機(jī)的操作系統(tǒng)都支持各自Push Notification Service(PNS),例如蘋果的APNS和安卓Google的FCM。
      這里,我們主要分享一個(gè)如何使用zoiper結(jié)合Windows phone 8 實(shí)現(xiàn)的大概流程,配合開(kāi)源Asterisk或者FreeSWITCH的解決辦法,用戶可以自己測(cè)試。這里,在SIP的數(shù)據(jù)包中發(fā)送了一個(gè) X-PUSH-URI 拓展頭,包括了一個(gè)PUSH URL。具體的SIP消息如下:
      REGISTER sip:10.2.1.9:6060;transport=UDP SIP/2.0
      Via: SIP/2.0/UDP 10.8.3.36:52685;branch=z9hG4bK-d8754z-a48cbc16a2db2714-1---d8754z-;rport
      Max-Forwards: 70
      Contact: <sip:909@10.8.3.36:52685;rinstance=0667df2a9c36ce63;transport=UDP;X-PUSH-URI=http://db3.notify.live.net/throttledthirdparty/01.00/AQEVPwmdC_zuSZiednVGrPo6AgAAAAADOwAAAAQUZm52OkE0QUNBREI0MTdBQzBCNjQFBlVTTkMwMQ>To: <sip:909@10.2.1.9:6060;transport=UDP>
      From: <sip:909@10.2.1.9:6060;transport=UDP>;tag=7b68d666
      Call-ID: YTE4ZWZhMmEyYjk2ZDdjM2VkZTM5YzBlYmNmNGE4ZjQ.
      CSeq: 1 REGISTER
      Expires: 60
      Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
      Supported: replaces, norefersub, extended-refer, timer, X-cisco-serviceuri
      User-Agent: Zoiper r21941
      Allow-Events: presence, kpml
      Content-Length: 0
      此URL 通過(guò)定位服務(wù)器來(lái)獲取到詳細(xì)其信息,然后通過(guò) HTTP POST request 發(fā)送到手機(jī)的APP上。幾個(gè)幾秒鐘的喚醒處理,手機(jī)APP可以接受呼叫來(lái)電。以下是Asterisk 環(huán)境下的撥號(hào)規(guī)則:
      exten => 1001,1,Answer;
      exten => 1001,n,Set(location=${DB(SIP/Registry/1001)})
      exten => 1001,n,Verbose(0, getting push info ${location} );
      exten => 1001,n,Set(regx="X-PUSH-URI=([0-9a-zA-Z\.\:\/\_]+)")
      exten => 1001,n,Set(push=$["${location}" =~ ${regx}])
      exten => 1001,n,System(/usr/bin/push.sh ${push}); // 處理AGI 腳本
      exten => 1001,n,Wait(3);
      exten => 1001,n,Dial(SIP/1001); // 然后撥打1001 分機(jī)。
      在此路徑下保存腳本,執(zhí)行執(zhí)行權(quán)限設(shè)置 執(zhí)行chmod。
      /usr/bin/push.sh
      push.sh 基本代碼如下,大概處理流程是另外一個(gè)客戶的示例,用戶可以自己修改來(lái)做實(shí)驗(yàn)。這里的消息推送使用的是谷歌的FCM,用戶可以選擇自己國(guó)內(nèi)的平臺(tái)。
      #!/opt/bin/php-cli -q<php
      $db2=new SQLite3('/opt/etc/asterisk/tokens.sqlite3'); // 使用數(shù)據(jù)庫(kù)
      $API_ACCESS_KEY='<YOUR_FIREBASE_API_SERVER_KEY>'; 獲取服務(wù)器的API訪問(wèn)權(quán)限……
      $f=fopen("/tmp/log.txt","w"); // 打開(kāi)一個(gè)log文件。
      $key="";
      $k=$argv[1];
      if (isset($argv[2])) {  // 從撥號(hào)規(guī)則獲得AGI參數(shù)
      $v=$argv[2];
      if (preg_match('/pn-tok=([^;]+)/i', $v,$token)) {
      $v=$token[1];
      $db2->query("delete from keys where key='$k'");
      $db2->query("insert into keys values( '$k','$v')");
      fwrite($f,"got token $v\r\n");
      }
      fwrite($f,"k=$k, v=$v\r\n");
      }
      //we read here in case we didnt get a new token so use the stored value
      $results=$db2->query("SELECT value FROM keys where key = '$k'"); // 查詢sql lite 數(shù)據(jù)庫(kù)
      if ($row=$results->fetchArray())
      $key=$row["value"];
      if ($key != "") {
      fwrite($f,"key=$key\r\n");
      $registrationIds = array($key) ;
      $msg = array
      (
      'title' => 'Notification',
      'body' =>'Wake Up'
      );
      $fields = array
      (
      'registration_ids' => $registrationIds,
      'data' => $msg,
      'priority' =>10
      );
      $headers = array
      (
      'Authorization: key=' . $API_ACCESS_KEY,
      'Content-Type: application/json'
      );
      $ch = curl_init();
      curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' // 這里是一個(gè)HTTP 的服務(wù)器,提供此服務(wù),用戶可以使用其他第三方的HTTP 服務(wù)來(lái)實(shí)現(xiàn)。
      );
      curl_setopt( $ch,CURLOPT_POST, true );
      curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
      curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
      curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
      curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
      $result = curl_exec($ch );
      curl_close( $ch );
      fwrite($f,"$result\r\n");
      } // if key
      fclose($f);
      ?>
      如果用戶使用FreeSIWTCH的話,需要修改撥號(hào)規(guī)則執(zhí)行流程:
      <action application="set" data="result=${sofia_contact(1001)}"/>
      <action application="set" data="push=${regex(${result}|^(?:.*)X-PUSH-URI=(.*)|%1)}"/>" // 設(shè)置參數(shù)
      <action application="set" data="result=${system /usr/bin/push.sh ${push}}"/> // 執(zhí)行push 腳本
      <action application="sleep" data="2000"/> // 等待時(shí)間,然后進(jìn)行下一步的呼叫流程。
      以上測(cè)試方法僅限于zoiper的示例,用戶可以參考此示例對(duì)其他的軟電話進(jìn)行測(cè)試。這里僅僅提供了一種PUSH的思路,用戶可以修改代碼來(lái)支持更靈活的第三方服務(wù)器。另外,此PUSH的解決方案基本上和SIP PUSH協(xié)議的技術(shù)架構(gòu)非常類似,但是沒(méi)有完全遵守這個(gè)草案:
      Push Notification with the Session Initiation Protocol (SIP)
      draft-ietf-sipcore-sip-push-11
      軟交換對(duì)PUSH的處理也是非常重要一步,這里涉及了消息回復(fù)的問(wèn)題,時(shí)間的問(wèn)題和安全機(jī)制的問(wèn)題和服務(wù)器管理的問(wèn)題。因此,如果用戶需要部署大規(guī)模的消息推送解決方案,建議首先查閱這份草案。
      官方鏈接和push腳本:https://www.zoiper.com/en/tutorials/push-notifications
      SIP-PUSH協(xié)議:https://tools.ietf.org/html/draft-ietf-sipcore-sip-push-11


      關(guān)注微信公眾號(hào):asterisk-cn,獲得有價(jià)值的Asterisk行業(yè)分享
      Asterisk freepbx 中文官方論壇:http://bbs.freepbx.cn/forum.php
      Asterisk freepbx技術(shù)文檔: www.freepbx.org.cn
      融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com
      Asterisk/FreePBX中國(guó)合作伙伴,官方qq技術(shù)分享群(3000千人):589995817

    【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對(duì)文中陳述、觀點(diǎn)判斷保持中立,不對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請(qǐng)讀者僅作參考,并請(qǐng)自行承擔(dān)全部責(zé)任。

    專題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 鹰潭市| 崇文区| 虹口区| 新营市| 进贤县| 金塔县| 车险| 定边县| 海口市| 安新县| 政和县| 山东省| 莆田市| 木兰县| 陆丰市| 惠东县| 梁山县| 德兴市| 宁波市| 长治市| 吉隆县| 民权县| 开原市| 麟游县| 东山县| 江油市| 栖霞市| 蒙自县| 舟山市| 辽阳市| 汉源县| 灯塔市| 商丘市| 甘谷县| 泰安市| 汤阴县| 泽库县| 阳原县| 佳木斯市| 信丰县| 邳州市| http://444 http://444 http://444 http://444 http://444 http://444