Chinaunix首页 | 论坛 | 博客
  • 博客访问: 195473
  • 博文数量: 31
  • 博客积分: 2595
  • 博客等级: 少校
  • 技术积分: 334
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-28 16:03
个人简介

知行合一

文章分类

全部博文(31)

文章存档

2015年(1)

2014年(1)

2010年(9)

2009年(20)

我的朋友

分类: 系统运维

2009-09-08 10:55:30

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

 

 

检查配置文件(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上的帐号相符。你也可以整合两个数据库以避免维护双数据库入口,具体请参考上面的教程。

#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掌握了。

 
 
 
 
 
 
 
 
 
 
 
阅读(2580) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

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

感谢分享