• 爆款游戏盛行 “游戏障碍”蔓延 2019-03-25
  • 要战胜对手需要学习对手的长处,弥补自己的短处,但这不是关键,关键是发扬自己的长处。这叫你打你的,我打我的。 2019-03-23
  • 中共台湾地下党为何覆灭 2019-03-23
  • 达索系统3D体验高峰论坛暨广州智能制造大会召开 2019-03-21
  • 交通部发布端午假期出行指南 教你如何避堵 2019-03-21
  • 连续5个月空气质量优良率达100% "南宁蓝"名副其实 2019-03-04
  • 仰望星空讨生活,低头尘世心幽居 2019-03-04
  • 俄媒文章:普京访华成果丰硕 中俄关系处于极高水准 2018-11-22
  • 任建明解读中纪委五次全会亮点 展望新时期反腐制度建设 2018-11-21
  • 城区加大扬尘污染治理力度 所有施工现场必须安装视频监控 2018-11-21
  • “美丽中国 走向生态文明新时代”主题沙龙 2018-11-20
  • 惊险!司机驾车撞穿墙壁 “飞”下二楼 2018-11-20
  • 您当前的位置是:  首页 > 新闻 > 国内 >
     首页 > 新闻 > 国内 >

    广西体彩11选5:如何在Asterisk/FreeSWITCH环境下实现PUSH功能支持

    2018-11-15 09:24:36   作者: james.zhu   来源:广西11选5第18100937   评论:0  点击:


      很多手机不能支持手机APP一直在后台运行,这样的话,手机耗电相当厉害。如果APP处于休眠状态的话,电话呼入以后就会出现漏接的问题。为了保证手机app 那个正常接听呼入的呼叫,需要通过推送PUSH消息提醒来唤醒手机的SIP软电话。最近一个客户问笔者这个问题,所以为了回答客户的问题,笔者网上找到了这个比较可行的,经济的办法来解决这个问题。今天,我们就和大家分享一下这个解决方法的具体实现过程。
      目前市场上的很多商业软件可以支持PUSH功能。很多手机的操作系统都支持各自Push Notification Service(PNS),例如苹果的APNS和安卓Google的FCM。
      这里,我们主要分享一个如何使用zoiper结合Windows phone 8 实现的大概流程,配合开源Asterisk或者FreeSWITCH的解决办法,用户可以自己测试。这里,在SIP的数据包中发送了一个 X-PUSH-URI 拓展头,包括了一个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:[email protected]:52685;rinstance=0667df2a9c36ce63;transport=UDP;X-PUSH-URI=//db3.notify.live.net/throttledthirdparty/01.00/AQEVPwmdC_zuSZiednVGrPo6AgAAAAADOwAAAAQUZm52OkE0QUNBREI0MTdBQzBCNjQFBlVTTkMwMQ>To: <sip:[email protected]:6060;transport=UDP>
      From: <sip:[email protected]: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 通过定位服务器来获取到详细其信息,然后通过 HTTP POST request 发送到手机的APP上。几个几秒钟的唤醒处理,手机APP可以接受呼叫来电。以下是Asterisk 环境下的拨号规则:
      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 分机。
      在此路径下保存脚本,执行执行权限设置 执行chmod。
      /usr/bin/push.sh
      push.sh 基本代码如下,大概处理流程是另外一个客户的示例,用户可以自己修改来做实验。这里的消息推送使用的是谷歌的FCM,用户可以选择自己国内的平台。
      #!/opt/bin/php-cli -q<php
      $db2=new SQLite3('/opt/etc/asterisk/tokens.sqlite3'); // 使用数据库
      $API_ACCESS_KEY='<YOUR_FIREBASE_API_SERVER_KEY>'; 获取服务器的API访问权限……
      $f=fopen("/tmp/log.txt","w"); // 打开一个log文件。
      $key="";
      $k=$argv[1];
      if (isset($argv[2])) {  // 从拨号规则获得AGI参数
      $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 数据库
      if ($row=$results->fetchArray())
      $key=$row["value"];
      if ($key != "") {
      fwrite($f,"key=$key\r\n");
      $registrationIds = array($key) ;
      $msg = array
     ?。?/div>
      'title' => 'Notification',
      'body' =>'Wake Up'
     ?。?
      $fields = array
     ?。?/div>
      'registration_ids' => $registrationIds,
      'data' => $msg,
      'priority' =>10
     ?。?
      $headers = array
     ?。?/div>
      'Authorization: key=' . $API_ACCESS_KEY,
      'Content-Type: application/json'
     ?。?
      $ch = curl_init();
      curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' // 这里是一个HTTP 的服务器,提供此服务,用户可以使用其他第三方的HTTP 服务来实现。
     ?。?
      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的话,需要修改拨号规则执行流程:
      <action application="set" data="result=${sofia_contact(1001)}"/>
      <action application="set" data="push=${regex(${result}|^(?:.*)X-PUSH-URI=(.*)|%1)}"/>" // 设置参数
      <action application="set" data="result=${system /usr/bin/push.sh ${push}}"/> // 执行push 脚本
      <action application="sleep" data="2000"/> // 等待时间,然后进行下一步的呼叫流程。
      以上测试方法仅限于zoiper的示例,用户可以参考此示例对其他的软电话进行测试。这里仅仅提供了一种PUSH的思路,用户可以修改代码来支持更灵活的第三方服务器。另外,此PUSH的解决方案基本上和SIP PUSH协议的技术架构非常类似,但是没有完全遵守这个草案:
      Push Notification with the Session Initiation Protocol (SIP)
      draft-ietf-sipcore-sip-push-11
      软交换对PUSH的处理也是非常重要一步,这里涉及了消息回复的问题,时间的问题和安全机制的问题和服务器管理的问题。因此,如果用户需要部署大规模的消息推送解决方案,建议首先查阅这份草案。
      官方链接和push脚本:https://www.zoiper.com/en/tutorials/push-notifications
      SIP-PUSH协议:https://tools.ietf.org/html/draft-ietf-sipcore-sip-push-11


      关注微信公众号:asterisk-cn,获得有价值的Asterisk行业分享
      Asterisk freepbx 中文官方论坛://bbs.freepbx.cn/forum.php
      Asterisk freepbx技术文档: www.freepbx.org.cn
      融合通信商业解决方案,协同解决方案首选产品:www.hiastar.com
      Asterisk/FreePBX中国合作伙伴,官方qq技术分享群(3000千人):589995817

    【免责声明】本文仅代表作者本人观点,与CTI论坛无关。CTI论坛对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。

    专题

  • 爆款游戏盛行 “游戏障碍”蔓延 2019-03-25
  • 要战胜对手需要学习对手的长处,弥补自己的短处,但这不是关键,关键是发扬自己的长处。这叫你打你的,我打我的。 2019-03-23
  • 中共台湾地下党为何覆灭 2019-03-23
  • 达索系统3D体验高峰论坛暨广州智能制造大会召开 2019-03-21
  • 交通部发布端午假期出行指南 教你如何避堵 2019-03-21
  • 连续5个月空气质量优良率达100% "南宁蓝"名副其实 2019-03-04
  • 仰望星空讨生活,低头尘世心幽居 2019-03-04
  • 俄媒文章:普京访华成果丰硕 中俄关系处于极高水准 2018-11-22
  • 任建明解读中纪委五次全会亮点 展望新时期反腐制度建设 2018-11-21
  • 城区加大扬尘污染治理力度 所有施工现场必须安装视频监控 2018-11-21
  • “美丽中国 走向生态文明新时代”主题沙龙 2018-11-20
  • 惊险!司机驾车撞穿墙壁 “飞”下二楼 2018-11-20