在asterisk中,对于呼叫个数是可以通过call-limit进行限制的。限制办法是通过修改asterisk.conf中maxcalls参数,设置允许的最大呼叫数。这里的最大呼叫数是包括所有的呼叫数,出境、入境、分机间等呼叫。
为了分别限制出境/入境/分机间呼叫,可以通过GROUP函数来完成。在asterisk cookbook这本书中提到了如何使用GROUP函数进行呼叫并发数限制。例如:
- exten => _1NXXNXXXXXX,1,Set(GROUP(outbound)=myprovider)
- same => n,Set(COUNT=${GROUP_COUNT(myprovider@outbound)})
- same => n,NoOp(There are ${COUNT} calls for myprovider.)
- same => n,GotoIf($[${COUNT} > 2]?denied:continue)
- same => n(denied),NoOp(There are too many calls up already. Hang up.)
- same => n,HangUp()
- same => n(continue),GoSub(callmyprovider,${EXTEN},1})
这里,通过GROUP为每个通道设置了一个group的变量,GROUP_COUNT统计出同一个GROUPID下的通道数目,在拨号方案中通过比较COUNT进行判断进而达到限制的目的。
为提高可用性,可以将上面的例子中的2,作为一个全局的变量预定义好,需要修改时,直接修改变量就可以了。
对于出境和入境的呼叫分别按照group进行限制就可以了。
阅读(299) | 评论(0) | 转发(0) |