Asterisk:如何实现出站速率限制(每秒调用次数)

Asterisk: How to implement outbound rate limiting (calls per second)

我的 VoIP 提供商的 cps 有限。当我的 Asterisk 超过阈值时,供应商发送 SIP 503 响应并且呼叫通过备用供应商。如何拨打电话等待一段时间再进行?我想应该有一些"locks counter"。所以调度程序检查这个计数器,暂停和唤醒调用进程。这样做的首选机制是什么? 它似乎是一种 AGI 脚本,它具有作为参数的 CallerID,它访问服务器。如果超过计数器,则服务器通过 ARI 机制暂停调用过程。 任何提示,想法表示赞赏

对于 asterisk 没有任何可行的方法。

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

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

示例:

[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 Community Board