ss7 的主叫地址性质
???? 之前做的项目中,经常会出现这种情况,就是外呼时,显示的主叫号码总是会多了一个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.了。
?
?
?
?
?
1 楼 bbully 前天 7号信令中,asterisk接收的号码不全,运营商是分两次送的号码,我用固话打0085228977668,运营商满7位就往我这里送号码,剩下的第2次送,asterisk就只接收送过来的7位,就把号码送出去了,我打到008522897电话就通了,我想请教一下,有没有办法等到asterisk接收完号码之后再往外送,谢谢