之前做的项目中,经常会出现这种情况,就是外呼时,显示的主叫号码总是会多了一个0,比如:
主叫是88998877,那么来电显示的结果是 020088998877,这样,如果人家回呼时,如果直接回呼肯定回呼不了。
后来经过监控,分析数据得知,这是由于七号信令在发送IAM信息时,里面除了包括主叫,被叫之外,还有一个叫主叫
性质的参数,在通过七号信令外呼时,电信的程控机会判断这个主叫性质参数。
先来说一下主叫地址性质,一共有三种:用户、国内有效号码及国际号码。
在判断时:
如果是用户号码,就不做任何的修改;
如果是国内有效号码,则会先将主叫修改为加一个前置0.
国际号码没有测试,不知道会做什么操作。
所以现在为什么会出现多加一个0,就是因为发送出去的主叫地址性质为国内有效号码。
我们来看一下这三种地址性质的值是,如下:
0 0 0 0 0 0 1 用户号码
0 0 0 0 0 1 1 国内有效号码
0 0 0 0 1 0 0 国际号码
即 1 为用户号码 ; 3 为国内有效号码; 4 为国际号码
要修改这个主叫地址性质,我们找到七号信令的原码,找到 l4isup.c 这个文件,找到
param[0] = (is_odd << 7) | (is_international ? 4 : 3); //我的文件在1954行。
这里表示是否为国际号码,如果是国际号码,则主叫地址性质为 4. 即是国际号码。
否则定义为3,即是国内有效号码。
现在我们要修改一下,就是如果不是国际号码,则都定义为用户号码,即是要将3改为1,所以我们只需在这里修改为:
param[0] = (is_odd << 7) | (is_international ? 4 : 1);
即可.
修改之后,然后再重新编译,生成 chan_ss7.so ,然后重启一下asterisk的服务使其生效。
会发现,主叫号码再也不加 0.了。