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

最常用的18个SIP呼叫业务流程详解-1-呼叫保持

2019-01-25 13:59:24   作者:james.zhu   来源:CTI论坛   评论:0  点击:


  在企业通信办公环境中和一些正常的企业客户的电话业务中,特别是从运营商到企业IPPBX端的呼入业务中,有很多不同的呼叫涉及了多种SIP流程的操作,其流程也和实际的IPPBX,代理和SIP终端有着非常密切的关系。用户经常抱怨系统的问题。但是,不幸的是,在实际使用过程中,很多技术人员也仅仅停留在通过系统界面配置一个呼叫业务流程,根本没有了解和关注真正底层的呼叫流程和其细节,真正的SIP消息之间的互相通信过程可能并不是非常熟悉。其中一个原因是他们没有太多学习渠道获得一些非常直观和权威的可参考的示例。另外,很多技术人员和销售人员对SIP呼叫业务究竟包括哪些业务也缺乏深入的了解。
  究竟哪些SIP呼叫业务是企业用户所要求的? 关于SIP业务呼叫,RFC5359对18个最常用的SIP业务呼叫流程给出了完整的SIP流程图例,这些呼叫业务为企业用户解决方案部署提供了一个比较权威的参考。因此,笔者希望通过此文章完整给出所有18个关于SIP呼叫业务的SIP流程和其相应的图例说明,并且加以适当讨论和说明来解释这些呼叫功能中可能出现的问题或应该注意到地方,以便帮助技术人员或者销售工程师能够对其产品或者周边应用终端有一个完整的比较深入的理解。提醒大家,笔者的解释和图例介绍仅针对标准的SIP流程来加以说明,完全以RFC5359为基础,不会涉及其他的设备,可能有时结合开源媒体服务器,软交换的功能为了方便用户理解和实践来加以说明。
  在关于SIP 呼叫服务的协议RFC5359中,对其18个SIP呼叫流程做了完整的流程示例演示。当然,RFC5359定义的这18个示例不是一个规范标准,这18个SIP呼叫业务仅表示根据RFC5359作者建议的最常用的18个呼叫业务。这18个最常用的SIP呼叫业务功能包括:
  1. Call Hold
  2. Consultation Hold
  3. Music on Hold
  4. Transfer - Unattended
  5. Transfer - Attended
  6. Transfer - Instant Messaging
  7. Call Forwarding Unconditional
  8. Call Forwarding - Busy
  9. Call Forwarding - No Answer
  10. Way Conference - Third Party Is Added
  11. 3-Way Conference - Third Party Joins
  12. Find-Me
  13. Call Management (Incoming Call Screening)
  14. Call Management (Outgoing Call Screening)
  15. Call Park
  16. Call Pickup
  17. Automatic Redial
  18. Click to Dial
  下面,我们针对这18个最常用的SIP呼叫业务分别加以解释。
  1、Call Hold
  Call Hold,此呼叫业务称之为呼叫保持。呼叫保持的流程实现需要经过几个步骤来完成。以下是RFC5359中的呼叫流程图例(25个flows):
  这里假设,Alice呼叫Bob,呼叫接听后,Bob通过终端电话按键Hold键把呼叫设置为保持状态。然后Bob解除呼叫保持状态,Alice挂机。注意,呼叫保持事实上是一个单向的功能。但是,执行保持的一方可以对第三方停止媒体发送,这样可能导致双方无媒体流交互。旧的处理方式是连接到地址0.0.0.0。现在新的处理方式是在SDP的a=中实现,a=inactive 表示无媒体发送;a=sendonly 表示仍有媒体发送。
  注意,在F10, F11中使用了渲染功能tag(rfc4235)来表示Bob终端不再渲染,例如Bob已经设置为保持状态。下面,他们通过完整的流程图带SIP消息的说明来具体介绍呼叫保持的流程。
  Alice 对P1 发出INVITE请求,然后通过P1呼叫Bob。
  Bob呼叫振铃,Alice振铃(F4,F5):
  收到OK(F6/F7)消息:
  Alice发送到ACK确认信息到P1(F8),P1到Bob(F9) 流程。
  Bob对P1发出INVITE消息执行F10,然后,P1对Alice发出InVITE消息执行F11。这里,开始双方正式进入呼叫保持状态。在这里读者要注意, 结合我们开始时说明的,Bob使用了渲染 tag,并且o= 的version 增加。在F6,F7时仍然是2890844527,这里已经增加到了2890844528。因为是一个RE-INVITE携带了a=sendonly。
  Alice接受了呼叫保持请求,并且回复200 OK(F12, F13),在SDP中携带了a=reconly。
  Bob回复ACK消息(F14/Bob->P1,F15/P1->Alice)。
  Bob关闭呼叫保持状态,用户通过按键Hold再次关闭保持功能。RE-INVITE中的SDP没有包括a=sendonly。执行F16(Bob到P1),F17(P1到Alice)流程。
  Alice回复200 OK,发送到消息中没有带SDP的a=reconly。执行F18(Alice->P1),F19流程(P1->Bob)。
  Bob回复ACK,执行F20(Bob到P1),F21(P1到Alice)流程。重新创建RTP媒体流。
  Alice发送BYE消息到P1,P1发送BYE消息到Bob,执行流程F22和F23。
  然后各自发送最后的200 OK,执行流程F24(Bob到P1),F25(P1到Alice)。
  到此为止,整个呼叫保持流程结束。
  参考资料:
  https://www.rfc-editor.org/rfc/rfc5359.txt
  https://tools.ietf.org/html/rfc7088
  https://www.rfc-editor.org/rfc/rfc3515.txt
  https://tools.ietf.org/html/rfc3840
  https://tools.ietf.org/html/rfc3891
  https://support.sonus.net/display/SBXDOC51/GRUU+Support
  www.freepbx.org.cn
  https://svn.resiprocate.org/viewsvn/resiprocate/main/resip/recon/MOHParkServer/doc/MOHParkServer_User_Documentation.pdf?revision=8937&view=co
  http://ijsetr.com/uploads/463152IJSETR13872-273.pdf
  https://tools.ietf.org/html/rfc3665
  https://tools.ietf.org/html/rfc3265
  https://tools.ietf.org/html/rfc3515
  https://tools.ietf.org/html/rfc4317
   
  关注微信公众号:asterisk-cn,获得有价值的Asterisk行业分享
  Asterisk freepbx 中文官方论坛:http://bbs.freepbx.cn/forum.php
  Asterisk freepbx技术文档: www.freepbx.org.cn
  融合通信商业解决方案,协同解决方案首选产品:www.hiastar.com
  Asterisk/FreePBX中国合作伙伴,官方qq技术分享群(3000千人):589995817

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

专题

CTI论坛会员企业