1. 内部分机,如何以号码规则分配给各个部门
2. 部门之间,是否可以做到通讯限制;或是上级与下级间是否做可以通讯限制
比如:某公司有两个部门,A部门和B部门
问题1:比较简单,以不同的前缀建立两批分机,分别给不同的部门使用即可
建立两批分机号,8001 - 8009 (分配给A部门)
9001 - 9009 (分配给B部门)
9011 - 9019 (分配给C部门)
8011 - 8019 (分配给D部门)
问题2:有点复杂,下面着重讲解问题二的内容
问题2复杂在于
(1)在 Elastix 的配置页面上,无需配置分机呼叫路由,即可以直接互相通话。所以必须这个问题必须要在配置文件上下功夫
(2)Elastix 的拨号计划配置文件(以 extensions 开头的文件)是互相关联的,而且有些文件的内容还是自动生成的,所以不能胡乱修改拨号计划文件,以免造成呼叫中心系统的其他问题。
所以必须要对 Elastix 的配置文件结构有一定的了解。
一、 分析是需要在哪里修改拨号方案
通过分机间的互拨,可以看到内部分机互呼,一定会优先进入extensions_additional.conf 文件 ext-local 这个 context。
理论上,我们要做内部分机呼叫限制时,可以在这个 context 里配置。但要明白, extensions_additional.conf 配置文件内容是自动生成的,即使修改了这个配置文件,一旦系统重启,所有的修改内容将被重置。所以不能修改这个文件的内容。我们要做修改拨号方案配置,主要是在
extensions_custom.conf ,即是这个自定义的配置文件去修改内容。
首先看看这个ext-local 的配置情况是怎样的:
[ext-local]
include => ext-local-custom
exten => 8001,1,Macro(exten-vm,novm,8001)
exten => 8001,n,Goto(${IVR_CONTEXT},return,1)
exten => 8001,n,Goto(from-internal,8001,1)
exten => 8001,hint,SIP/8001
exten => 8002,1,Macro(exten-vm,novm,8002)
exten => 8002,n,Goto(${IVR_CONTEXT},return,1)
exten => 8002,n,Goto(from-internal,8002,1)
exten => 8002,hint,SIP/8002
exten => 8003,1,Macro(exten-vm,novm,8003)
exten => 8003,n,Goto(${IVR_CONTEXT},return,1)
exten => 8003,n,Goto(from-internal,8003,1)
exten => 8003,hint,SIP/8003
exten => 8004,1,Macro(exten-vm,novm,8004)
exten => 8004,n,Goto(${IVR_CONTEXT},return,1)
exten => 8004,n,Goto(from-internal,8004,1)
exten => 8004,hint,SIP/8004
exten => 9025,1,Macro(exten-vm,novm,9025)
exten => 9025,n,Goto(${IVR_CONTEXT},return,1)
exten => 9025,n,Goto(from-internal,9025,1)
exten => 9025,hint,SIP/9025
exten => 9105,1,Macro(exten-vm,novm,9105)
exten => 9105,n,Goto(${IVR_CONTEXT},return,1)
exten => 9105,n,Goto(from-internal,9105,1)
exten => 9105,hint,SIP/9105
exten => vmret,1,GotoIf($["${IVR_RETVM}" = "RETURN" & "${IVR_CONTEXT}" != ""]?playret)
exten => vmret,n,Hangup
exten => vmret,n(playret),Playback(exited-vm-will-be-transfered&silence/1)
exten => vmret,n,Goto(${IVR_CONTEXT},return,1)
exten => h,1,Macro(hangupcall,)
; end of [ext-local]
通过上述配置的内容,可以看到拨打分机时,是每个分机都配置了 分机号来接收内部分机来电的。
我们要实现内部分机限制,就需要在这个 context 的前一个 context 去配置。
通过 extensions_additional.conf 的配置可以看到
include => app-pickup
include => app-zapbarge
include => app-chanspy
include => ext-test
include => ext-local
include => outbound-allroutes
exten => h,1,Hangup
在 ext-local 之前,是 ext-test,我们要做修改,就需要到这个context 进行修改
[ext-test]
include => ext-test-custom
exten => 7777,1,Macro(user-callerid,)
exten => 7777,n,Goto(from-pstn,${EXTEN},1)
exten => h,1,Macro(hangupcall,)
;--== end of [ext-test] ==--;
在这个 context 中,可以看到包含了 ext-test-custom 这个 context
我们在 extensions_custom.conf 的最后,增加一个context ,名称为 ext-test-custom
二、配置 ext-test-custom 的内容
比如:上面的情况,部门A的号码为 8001-8009 , 部门B的号码为 9001-9009 部门C的号码为 9011-9019
,部门D,的号码为 8011-8019(部门D的号码,仅作为参考用的)
为了解决更复杂的情况,所以这里我用了匹配的方式去做。比如部门A,除了不能呼部门B外,也不能呼叫 部门C
[ext-test-custom]
exten=>_90[0-1]X,1,Set(cidp2=${CALLERID(num):0:2}) ;截取主叫号码的前两位,如8001, 得到 80
exten=>_90[0-1]X,n,Set(cidp3=${CALLERID(num):2:1}) ;截取主叫号码的第三位,如8011, 得到 1
exten=>_90[0-1]X,n,GOTOIF($[${cidp2}=80]?:20) ;如果前两位,匹配80,继续流程
exten=>_90[0-1]X,n,GOTOIF($[${cidp3}=0]?10:20) ;如果第三位为 0 之间的数时,以便与部门D区分开
exten=>_90[0-1]X,10,Noop(call limited) ;呼叫受限
exten=>_90[0-1]X,n,hangup
exten=>_90[0-1]X,20,Noop(call will be continue..........) ;呼叫允许时,转到 ext-local 中处理
exten=>_90[0-1]X,n,GOTO(ext-local,${EXTEN},1)
这样就实现了限制 部门A 与 B、C 的通话
如果说,同时限制 部门A、D 都不允许与 B、C 通话呢?
这里,我们只需要将上面的
exten=>_90[0-1]X,n,GOTOIF($[${cidp3}=0]?10:20) ;如果第三位为 0 之间的数时,以便与部门D区分开
修改为:
exten=>_90[0-1]X,n,GOTOIF($[${cidp3}>=0&&${cidp3}<=1]?10:20) ;这里的判断还可以用 &&的方式,表示 and 的意思,即是说,如果第三位数字大于等于0 ,但是又小于等于1 时,都不允许互相通话。