在语音通话的过程中,经常会出现将号码加长或者缩短的情况。我们可以拿日常生活中的电话号码举例。比如一个人的电话号码是12345678,如果他在中国北京,那么中国的其他地方的人拨打他的电话,是需要前面加区号的,也就是加010变成010-12345678。如果是美国拨打这个电话的话,就还要加上国家号,号码就变为86-010-12345678。以便在每一级的设备中根据号码进行路由。号码在传递的过程中会经常的进行各种处理,包括增加,删减和修改。下面就介绍几种在CME中进行号码处理的命令。

 

1 num-exp number changed-number

这个命令相当于宏一样,可以将number 修改为changed-number 比如num-exp 1… 12341...

就是将1开头的号码比如1001,修改为12341001。用户在拨号时,直接拨打1001后,CME会自动的把1001改变成12341001进行拨号

 

2 voice translation

使用voice translation 可以进行一些比较复杂的号码修改。步骤如下

(1)    首先配置rule

(config)# voice translation-rule  tag

(cfg-translation-rule)# rule rule_num /number_before/ /number-after/

“//”里面的是正则表达式表达的数字序列。比如rule 1 /^1/ /12341/就是将1开头的号码,变成12341开头。也就是把开头的数字1换成12341

 

(2) 再配置profile来应用rule

(config)# voice translation-profile profile_name

(ctg-translation-profile)# translate [called/calling] rule_num

profile中利用translate命令,使用刚才设置的rule。其中called是指修改的被叫号码,calling是指修改主叫号码

 

(3) 在接口或者dial-peer中应用这个profile

(config)# voice-port 0/0/0:23

(config-if)# translation-profile [incoming/outgoing] profile_name

或者

(config)#dial-peer voice num [pots/voip]

(config-dialpeer)# translation-profile [incoming/outgoing] profile_name

Incoming指的是修改的是进来的流量,outgoing指的是修改的是出去的流量

 

3 digit-strip

dial-peer中完全匹配了destination-pattern的号码将被在出接口时移除。这个是POTS对等体才有的特性,而且是默认特性。比如destination-pattern 1… ,当号码1234传到网关时,匹配了这个dial-peer,在出接口时,会将数字1剥除。也就是说传递出去的是234。如果是传递给PBX等需要完整号码信息进行路由的设备的话,可以使用no digit-strip来关闭这一特性

 

4 forward-digits

刚才说到了在POTS对等体中,精确匹配了destination-pattern的数字将会被移除。当我们想在网关出接口时控制出接口的号码的位数的话,可以在dial-peer下使用forward-digit 命令。

forward-digit [ num-digits | all ] 可以选择传递几位数字或者全部都进行传递。

 

5 prefix

在冗余的场景中,一般来说IP电话走的是WAN链路,当WAN链路down的情况下,可以选择走PSTN。但是走PSTN的时候,号码必须是完整。也就是说,不能像走IP的时候使用简化的号码。那么这个时候,就可以使用prefix prefix_digit 来给出网关的号码添加前缀。这里要注意,号码处理的时候,digit-strip的优先级大于prefix。也就是说号码会先剥除精确匹配的数字之后再加上前缀。比如说下面的配置:

dial-peer voice 1 pots

 destination-pattern 1...

 prefix 9111

 

如果拨号的号码是1234,那么经过这个dial-peer之后的出站号码就是91112341234会先因为默认行为digit-strip剥除精确匹配的1,然后因为prefix而添加前缀91111。所以出站的号码就是9111234