您当前的位置是:  首页 > 新闻 > 国内 >
 首页 > 新闻 > 国内 >

Kamailio/OpenSIPS学习笔记-如何通过Serial Forking实现呼叫前转

2018-04-23 13:45:25   作者:james.zhu    来源:CTI论坛   评论:0  点击:


  在软交换的呼叫处理过程中,我们经常会遇到呼叫失败或转第三方应用的问题。在实际电话系统的使用场景中,如果用户呼叫某一个分机的话,此分机如果拒绝了此呼叫,则要求IPPBX做进一步的处理,或者转其他分机或者转语音邮箱等。在今天的示例中,我们将使用开源软交换结合媒体服务器实现类似的功能需求。
  1、在本示例中,我们使用了AVP和Serial Forking,用户需要创建两个分机,然后对接一个媒体服务器来进行实验。在此实验中,我们需要执行和配置相关的文件来保证环境能够正常运行。
  2、在配置流程中,用户首先需要添加一个avp指向外部的媒体服务器和分机邮箱号码。执行的命令如下:
  opensipsctl avp add –T usr_preferences 1004@proxy_ip callfwd 0 sip:2345678@proxy_ip
  // 注意,这里的proxy_IP 是外部媒体服务器的地址,1004 支持了一个语音邮箱。用户需要提前预设好此媒体服务器。
  在cfg文件中,添加需要加载avp 检测:
  if(avp_db_load("$ru","$avp(callfwd)")) {
  $ru=$avp(callfwd);
  xlog("forwarded to: $avp(callfwd)");
  }
  添加busy状态检测和处理流程:
  if (t_check_status("486")) {
  revert_uri();
  prefix("b"); # 表示通知系统播放状态忙信息
  xlog("L_ERR","> 486 ruri=<$ru>");
  route(media);
  route(relay);
  exit;
  }
  // 处理无应答流程:如果超时(408)或者临时不在线(480)
  if (t_check_status("408") || t_check_status("480")) {
  revert_uri();
  prefix("u");# 表示播放无应答消息提示
  xlog("L_ERR","> 480 ruri=<$ru>");
  route(media);
  route(relay);
  exit;
  }
  3、保存以上配置,如果配置成功的话,我们可以使用分机1000 呼叫1004进行测试,此呼叫会转到我们的媒体服务器网关。这里大家要注意,因为,我们在第一部中已经指向了外部的媒体服务器。
  然后,我们可以进行遇忙前转的处理测试。用户可以从1000分机呼叫1001,1001如果拒绝此呼叫后,会收到一个 “486 Busy here”。这里,用户可以很多免费的软电话进行拒绝呼叫测试。
  如果用户1004 呼叫1001时,在一定时间内没有接听,会转向一个此时处理。超市以后则进入到了语音邮箱留言。超时设置可以通过参数:
  modparam(“tm”, “fr_inv_timeout”, 10) //  默认为30秒。
  4、在本讲座中,我们讨论了关于如何使用开源软交换设置呼叫前转的处理方式,包括超时处理和遇忙设置。在此示例中,我们重点使用了avp和状态监测的一些方法。同时,需要用户添加一个新的avp指向外部的媒体服务器。通过此示例,用户可以使用软交换和媒体服务器的语音邮箱集成实现呼叫前转功能实现相对简单呼叫量大的需求。当然,在具体的使用环境中,用户的场景可能更加复杂,例如分机随行等或者转接其他分机或者移动端等功能。这样的需求需要和媒体服务器做进一步的融合才能满足。

 
  关注微信公众号:asterisk-cn,获得有价值的行业分享
  freepbx 技术论坛:www.ippbx.org.cn
  Asterisk, freepbx技术文档: www.freepbx.org.cn
  欧米(Omni)智能客服解决方案
  融合通信商业解决方案,协同解决方案首选产品:www.hiastar.com

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

专题