究竟哪些SIP呼叫业务是企业用户所要求的? 关于SIP业务呼叫,RFC5359对18个最常用的SIP业务呼叫流程给出了完整的SIP流程图例,这些呼叫业务为企业用户解决方案部署提供了一个比较权威的参考。因此,笔者希望通过此文章完整给出所有18个关于SIP呼叫业务的SIP流程和其相应的图例说明,并且加以适当讨论和说明来解释这些呼叫功能中可能出现的问题或应该注意到地方,以便帮助技术人员或者销售工程师能够对其产品或者周边应用终端有一个完整的比较深入的理解。提醒大家,笔者的解释和图例介绍仅针对标准的SIP流程来加以说明,完全以RFC5359为基础,不会涉及其他的设备,可能有时结合开源媒体服务器,软交换的功能为了方便用户理解和实践来加以说明。
在关于SIP 呼叫服务的协议RFC5359中,对其18个SIP呼叫流程做了完整的流程示例演示。当然,RFC5359定义的这18个示例不是一个规范标准,这18个SIP呼叫业务仅表示根据RFC5359作者建议的最常用的18个呼叫业务。这18个最常用的SIP呼叫业务功能包括:
- Call Hold
- Consultation Hold
- Music on Hold
- Transfer - Unattended
- Transfer - Attended
- Transfer - Instant Messaging
- Call Forwarding Unconditional
- Call Forwarding - Busy
- Call Forwarding - No Answer
- Way Conference - Third Party Is Added
- 3-Way Conference - Third Party Joins
- Find-Me
- Call Management (Incoming Call Screening)
- Call Management (Outgoing Call Screening)
- Call Park
- Call Pickup
- Automatic Redial
- 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