星号:如何实现出站速率限制(每秒呼叫数)



我的VoIP提供商的cps有限。当我的Asterisk超过阈值时,提供商发送SIP 503响应,呼叫通过备用提供商。如何打电话等待一段时间,然后继续?我想应该有一些"锁计数器"。所以调度程序会检查这个计数器,暂停并唤醒一个调用进程。最好的机制是什么?这似乎是一种AGI脚本,它有一个访问服务器的参数CallerID。如果超过计数器,则服务器通过ARI机制暂停调用过程。任何提示,想法都很感激

示例:

[globals]
calls_per_sec=20
[OUTBOUND]
exten => _X.,1,NoOp(Rate Limited Calling)
same => n,Set(GROUP()=${EPOCH})
same => n,GotoIf($[${GROUP_COUNT(${EPOCH})}>${calls_per_sec}]?DELAY,${EXTEN},1)
same => n,Dial(SIP/provider/${EXTEN})
[DELAY]
exten => _X.,1,NoOp(Half Second Delay)
same => n,Wait(0.5)
same => n,Goto(OUTBOUND,${EXTEN},1)

取自Asterisk社区委员会

对于星号,没有任何切实可行的方法。

您可以在AGI脚本、外部应用程序中计数或检查GROUP_count(${EPOCH}@control)。

您可以使用ratelimit模块在kamailio中自然地限制CPS。

最新更新