在语音通话的过程中,经常会出现将号码加长或者缩短的情况。我们可以拿日常生活中的电话号码举例。比如一个人的电话号码是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之后的出站号码就是9111234。1234会先因为默认行为digit-strip剥除精确匹配的1,然后因为prefix而添加前缀91111。所以出站的号码就是9111234