asterisk自动报号
文章代码优化部分请点击 自动报号优化
asterisk自动报号是一个很平常的功能,像移动客服里,
在接通客服前一般要说:某某号,为您服务。
asterisk自身没有自动报号功能,我们需要修改源代码
文件位置asterisk-1.4.24\apps\app_queue.c 3165行,可搜索关键字bridge = ast_bridge_call
在bridge = ast_bridge_call(qe->chan,peer, &bridge_config);前添加必要代码即可
网络上说是加 play_file(qe->chan, peer->cid.cid_num);
但是经测试qe->chan->cid.cid_num与peer->cid.cid_num同为呼叫方的电话号码
并不是被叫号码,自动拨号拨的是呼叫方对应的语音文件,这样并不是我们所要的效果
所以要经过另外一种途径获得被叫号码
以下是我所做的修改
在当前作用域内,有个变量member,其member->interface的值类似Local/101@from-internal/n,
其中101为队列中的被叫方,所以只要获得101即可
我是这么做的,在try_calling函数开始声明
//在目录 var/lib/asterisk/sounds内创建sunflower目录用于存放坐席欢迎词,可自行设定
char sunExten[80]="sunflower/";//供10个字符
int suni = 0;//for循环初始值
int sunj=10;//分机号在sunExten起始位置,此处应与sunExten初始字符个数相同
int sunflag = 0;// 字符'/'开始标记
在行3165,
bridge = ast_bridge_call(qe->chan,peer, &bridge_config);
前回车
添加如下代码
for(sun=0;suni<80;suni++){
if(member->interface[suni]=='/'){
sunflag=1;
continue;
}
if(member->interface[suni]=='@'){
sunflag=0;
break;
}
if(sunflag){
sunExten[sunj++]=member->interface[suni];
}
}
play_file(qe->chan, sunExten);
编译安装即可
然后在var/lib/asterisk/sounds/sunflower目录内放置各分机的欢迎语就可以了
另外一种更好的办法
录制0---9个数字的语音文件,和一个类似"号,为您服务"的语音文件,代码修改为
char sunExten[80]="";
int suni = 0;
int sunj=0;
int sunflag = 0;
在行3165,
bridge = ast_bridge_call(qe->chan,peer, &bridge_config);
前回车
添加如下代码
for(sun=0;suni<80;suni++){
if(member->interface[suni]=='/'){
sunflag=1;
continue;
}
if(member->interface[suni]=='@'){
sunflag=0;
break;
}
if(sunflag){
sunExten[sunj++]=member->interface[suni];
}
}
ast_say_digit_str(qe->chan, sunExten, AST_DIGIT_ANY, qe->chan->language);
play_file(qe->chan, "sunService");//sunService为"号,为您服务"语音文件名称
----------------------------------------------------------------
转载请注明出处 zhangxuehuaemail # gmail dot com
本文章来自:http://sunflowers.iteye.com/blog/461329
----------------------------------------------------------------