Звездочка: как реализовать ограничение исходящей скорости (количество вызовов в секунду) - PullRequest
1 голос
/ 27 февраля 2020

Мой провайдер VoIP имеет ограниченную скорость передачи данных. Когда мой Asterisk превышает пороговое значение, провайдер отправляет SIP 503 ответ, и вызов проходит через запасного провайдера. Как позвонить, подождать некоторое время, а затем продолжить? Я думаю, здесь должен быть какой-то "счетчик замков". Поэтому планировщик проверяет этот счетчик, приостанавливает и активирует процесс вызова. Какой механизм для этого предпочтителен? Кажется, это своего рода сценарий AGI, имеющий в качестве параметра CallerID, который обращается к серверу. Если счетчик превышен, то сервер приостанавливает процесс вызова через механизм ARI. Любые советы, идеи приветствуются

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Пример:

[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

0 голосов
/ 27 февраля 2020

Нет никакого способа сделать это для звездочки.

Вы можете рассчитывать в сценарии AGI, внешнем приложении или проверять GROUP_COUNT ($ {EPOCH} @control).

Вы можете ограничить CPS естественным образом в kamailio, используя модуль ratelimit.

...