根据 RFC3891的定义,Replaces header 简单来说就是使用新的SIP dialog 替换当前的SIP dialog,通过REFER method来获得支持。在实际的场景中,它所支持的主要功能包括:电话询转功能和电话驻留中的电话重接功能。这里需要特别说明的是,在Replaces header 中必须包含一个明确的from-tag和一个明确的to-tag,否则proxy不会匹配到相应的终端和事件响应消息。如果Replaces header 匹配了一个dialog中的,这个dialog可能已经结束,那么UA就会拒绝这个请求,发送一个603 Declined 响应消息。
1、电话驻留的举例。电话驻留是PBX经常使用的功能。通常情况下,如果用户呼叫另外一个用户时,如果用户忙或者到其他办公室位置的话,可能会把通话通过电话驻留的方式,把通话暂时驻留或者停靠在系统中。用户在其他地方使用其他的电话终端再次通过系统热键获取重启通话。电话驻留的使用场景则使用了replaces header来替换了当前的SIP dialog。
![](http://www.ctiforum.com/uploadfile/2017/1128/20171128044355887.jpg)
以下是消息内容,大家要注意查看refer,from-tag, to-tag 的消息内容:
![](http://www.ctiforum.com/uploadfile/2017/1128/20171128044418709.jpg)
2、电话转接到功能也同样使用了replaces header的方式来实现电话的转接。在很多企业PBX的使用场景中,我们经常看到可能因为电话系统的队列繁忙,客户不能直接呼叫到公司服务支持热线或服务队列中,有时通过接线员来转接客户电话到系统的队列中。接线员呼叫队列,PBX会让接线员加入到队列中,然后接线员把客户的通话转入到访问队列。在这个场景中,replaces header 也发生了替换,同时最后增加了from-tag和to-tag。
![](http://www.ctiforum.com/uploadfile/2017/1128/20171128044456217.jpg)
我们通过以上两个使用场景介绍了Replaces header 的使用方式和处理流程。用户也可以自己通过FreePBX的场景,使用几台SIP话机来进行验证,通过打印SIP log来检查Replaces 的变化。
获得更多有价值的行业技术新闻,请关注公众微信号:asterisk-cn, 访问www.issabel.cn/forum获得技术帮助。