`

(原创)Elastix 分机内部呼叫限制,如不同部门间不允许互呼

 
阅读更多

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 时,都不允许互相通话。

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics