【发布时间】:2017-02-15 02:52:49
【问题描述】:
我需要为每个分机设置呼入呼叫的并发呼叫限制,但不是很好。
实际上,最低要求是防止多个呼叫响铃同一分机。这应该在“RingInUse”设置中完成,但如果多个呼叫加入队列,Asterisk 中存在一个错误,它可能会破坏 RingInUse 规则并使通话/响铃分机响铃。
我能够在 Asterisk 1.6 中设置 call-limit=1 但在 Asterisk 13.7 中似乎没有效果(或折旧)。所以我需要想出另一个解决方案。
论坛中的一些帖子说GROUP 和GROUP_COUNT 是较新的Asterisk 版本的完美解决方案。然后我发现了许多使用GROUP 和GROUP_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 中可能存在一个错误,它会中断“正在使用中的响铃”并响铃同一个座席。所以我需要这个来覆盖“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 但失败了。
【问题讨论】:
-
我遇到了这个问题,但找不到原因。 issues.asterisk.org/jira/browse/ASTERISK-26496