星号13.7 GROUP_COUNT始终返回1

时间:2017-02-15 02:52:50

标签: asterisk pbx

我需要为每个扩展设置入站呼叫的并发呼叫限制,但不能很好。

实际上,最低要求是防止多个呼叫振铃相同的分机。这应该在" RingInUse"设置,但如果多个呼叫加入队列,Asterisk中存在一个错误,它可能会破坏RingInUse规则并响起通话/振铃扩展。

我能够在Asterisk 1.6中设置call-limit = 1但在Asterisk 13.7中它似乎没有效果(或折旧)。所以我需要提出另一种解决方案。

论坛中的一些帖子称GROUPGROUP_COUNT是新版Asterisk的完美解决方案。然后我发现了许多使用GROUPGROUP_COUNT的示例,但大多数是基于主干或出站的呼叫。但是帖子中提到的入站调用也有效,所以我在extensions.conf的队列部分实现了它。

[only-dialextension-q6701]
exten = _.,1,Gotoif(${DB(DND/${EXTEN})}>0?h,1)
exten = _.,2,Set(ODETIME=30)
exten = _.,n,Set(GROUP()=Exceed_${EXTEN})
exten = _.,n,Gotoif($[${GROUP_COUNT(Exceed_${EXTEN})}>1]?h)
exten = _.,n,Goto(only-dialextension,${EXTEN},1)
exten = h,1,Hangup()

问题

我在监视asterisk -vvvvvvvvvvr和输出。当第一个调用到来时,它返回0(在布尔值中表示为false)。这是正确的,因为1不大于1,那么很好。但是第二个调用来了,它仍然返回0,因为计数仍然是1但不是2。

我对这个结果感到非常沮丧,因为它不会阻止来自队列的进一步呼叫来调用同一个代理。

正如我上面提到的,Asterisk中可能存在一个可能导致错误的问题:#34; Ring In Use"如果这两个来电的时间太近,则拨打同一个座席。所以我需要这个来覆盖" Ring In Use" (虽然我已将其关闭以获得更好的容错能力)。

在2017-0216 02:49 GMT更新1

[only-dialextension-q6701]
exten = _.,1,Gotoif(${DB(DND/${EXTEN})}>0?h,1)
exten = _.,2,Set(ODETIME=30)
exten = _.,n,Gotoif($[${GROUP_COUNT(Exceed_${EXTEN})}>0]?callHangup:callQueueAgent)
exten = _.,n(callHangup),Hangup()
exten = _.,n(callHangup),Goto(always-Hangup,h,1)
exten = _.,n(callQueueAgent),Set(GROUP()=Exceed_${EXTEN})
exten = _.,n(callQueueAgent),Goto(only-dialextension,${EXTEN},1)
exten = h,1,Hangup()

我更改了GROUP_COUNT个订单,以便更轻松地捕获> 0但失败了。

1 个答案:

答案 0 :(得分:0)

星号13.14肯定没有这样的错误。没有任何感觉测试过时(超过2年)版本。

也许你应该将拨号方案替换为类似的东西(空间也很重要)。

exten => _.,n,Noop(current count is ${GROUP_COUNT(Exceed_${EXTEN})})
exten => _.,n,Gotoif($[ "${GROUP_COUNT(Exceed_${EXTEN})}" = "1" ]?only-dialextension,${EXTEN},1)
exten => _.,n,Hangup