从一个朋友的哪里找到的这个办法,修改源代码,实际使用效果,还是不错的。
以下是原文:
自动报工号是呼叫中心应具备的基本功能之一。但在Asterisk中并没有直接的实现方法,这在应用中多少是个缺陷。幸好Asterisk是open source,我们可以定制相应的代码,实现自动报工号的功能。具体方法如下
我们这里以Asterisk-1.4.21为例:
打开 asterisk-1.4.21/apps/apps_queue.c
在行3017行(内容为:bridge = ast_bridge_call(qe->chan,peer, &bridge_config);),前添加代码 play_file(qe->chan, peer->cid.cid_num);
其中参数qe->chan对应的主叫通道结构,peer->cid.cid_num为被叫的号码值,该函数的功能是向主叫播放与被叫号码对应的语音文件,这里假定你也经提供了
名为peer->cid.cid_num的语音文件,比如8001.gsm.
我根据自己的需要修改了一下,适合自己的需要
char tmp[1024]={0};
strncpy(tmp,member->interface+4,strlen((member->interface+4))); //去掉 SIP/
if(tmp[0]=='s')
strncpy(tmp,tmp+8,strlen((tmp+8))); //另外一台服务器上的SIP格式是SIP/serverB/XXXX, 去掉serverB/
char tmp2[20]={0}; //实际测试发现在SIP/serverB/XXXX后边还有别的内容,比如是SIP/8001/SIp/8001的形式,总之是需要取得第一个8001的号码就可以,采用下面的方式来处理,截断后面的部分。
if(tmp[4]<'0'||tmp[4]>'9') {
strncpy(tmp2,tmp,4);
ast_say_phonetic_str(qe->chan, tmp2, AST_DIGIT_ANY, qe->chan->language); //报工号
}else if(tmp[7]<'0'||tmp[7]>'9'){
strncpy(tmp2,tmp,7);
ast_say_phonetic_str(qe->chan, tmp2, AST_DIGIT_ANY, qe->chan->language); //报工号
}else
ast_say_phonetic_str(qe->chan, tmp, AST_DIGIT_ANY, qe->chan->language); //报工号
play_file(qe->chan, "workIDForService"); //号话务员为您服务
play_file(peer, "beep"); //嘀的一声
我们配置的asterisk服务器上的工号是4位或7位,我根据情况截取其中的工号部分。