使用OpenSER构建电话通信系统——第八章(3)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!

 

 

检查配置文件(Ispecting the Configureation File

我们的脚本正变得难以debug。现在,让我们介绍XLOG模块。它实现了XLOG函数。这个函数与LOG()函数很相似,但是它允许你在消息中使用诸如请求URI($ru)的伪变量。下面有一个使用XLOG的例子。

loadmodule "xlog.so"

xlog("L_ERR","Marker 480 ruri=<$ru>");

你可以使用下面的命令来检查最近的XLOG消息:

tail /var/log/syslog

在呼叫盲转中,只有一开始的INVITE消息会被处理,了解这一点是很重要的;我们能够安全地对请求URI和通话进行修改,append_branch不需要被调用。

另一方面,对于忙线时和无人接听时的呼叫前转,在开始的INVITE失败后,要在这时派生消息你就必须要执行append_branch()函数。

t_on_failure(“ 1 );

t_on_failure()函数告诉OpenSER如果(negative/unsuccessful replies)这些出错状况发生了,就要去处理之。在本上下文中的出错状况是那些以4××和5××开头的错误信息。在调用t_relay()函数之前当你调用t_on_failure时,要告知OpenSER当收到出错信息时将控制权转给failure_route[1]

failure_route[1] {

##--

##-- If cancelled, exit.

##--

if (t_was_cancelled()) {

exit;

};

failure_route的第一部分处理487 cancelled消息。这个脚本对于此类信息只是简单将处理终止。接下来我们将处理busy消息。

##--

##-- If busy send to the e-mail server, prefix the "b"

##-- character to indicate busy.

##--

if (t_check_status("486")) {

revert_uri();

prefix("b");

xlog("L_ERR","Stepped into the 486 ruri=<$ru>");

rewritehostport("192.168.1.171");

append_branch();

route(1);

exit;

};

如果状态变为486,那么执行的动作就是还原URI486是对于INVITE请求的一个出错消息),URI以“b”打头(告知语音邮箱系统要播放线路正忙的消息)并重写主机地址,将消息发送给语音邮箱系统。调用append_branch()来将目的地址添加到请求中。相同的处理逻辑被应用在对消息408480的处理上。

##-- If timeout (408) or unavailable temporarily (480),

##-- prefix the uri with the "u"character to indicate

##-- unanswered and send to the e-mail

##-- sever

##--

if (t_check_status("408") || t_check_status("480")) {

revert_uri();

prefix("u");

xlog("L_ERR","Stepped into the 480 ruri=<$ru>");

rewritehostport("192.168.1.171");

append_branch();

route(1);

exit;

};

Asterisk服务器上的extesions.conf配置文件要写成下面这样。语音邮箱帐号要创建成同OpenSER上的帐号相符。你也可以整合两个数据库以避免维护双数据库入口,具体请参考http://www.voip-info.org/wiki/view/Realtime+Integration+Of+Asterisk+With+OpenSER上面的教程。

#extensions.conf file

[default]

exten=>_9.,1,Dial(ZAP/g1/${EXTEN})

exten=>_9.,2,hangup()

exten=>_u.,1,Voicemail(u${EXTEN})

exten=>_u.,2,hangup()

exten=>_b.,1,Voicemail(b${EXTEN})

exten=>_b.,2,hangup()

实验——测试呼叫前转特性(Lab——Testing the Call Forward Feature

要完成这个实验,对于语音邮箱部分的整合需要asterisk方面的一些经验。这个实验实现起来有些难度。有些IP电话很难发送出busy消息,因为它们有不止一条线路。在获得“486” busy消息之前,要使用所有的线路对于这个实现的成功是很重要的。有一种SNOMip电话,具有一个busy按钮用来告知用户电话正忙。为了降低实验难度和复杂性,我们将减少INVITE的超时时间。在产品的环境上,去掉这些语句。

modparam("tm", "fr_timer", 5)

modparam("tm", "fr_inv_timer", 20)

步骤1:测试无人应答的呼叫前转

1000呼叫1002。这通电话应该捎带着“不可得消息”(unavailable message)转向语音邮箱系统。

步骤2:测试忙线呼叫前转。

1003摘机。用1000呼叫1003。这通电话应该捎带着“忙线消息”(busy message)转向语音邮箱系统。

概要(Summary

这一章中,我们学会了如何使用AVPs来处理诸如呼叫前转之类用户喜好(user preferences)。使用failure_route允许我们实现两种通常情况下的呼叫前转,忙线和无人应答。最后我们还学会了如何将此类消息发送到外部的语音邮箱系统,譬如asterisk服务器。

 

 

结束语:这本书就翻译到这里了,有了上面的对openser的基本认识,我想,再通过实践和opensips官网的文章的洗礼,相信大家都能够对opensips掌握了。

 
 
 
 
 
 
 
 
 
 
 
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1216) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-10-26 16:47:46

感谢分享

评论热议
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值