Asterisk - 将传入呼叫分配到 2 个目的地(负载平衡)

Asterisk - Distribute incoming calls to 2 destinations (load-balancing)

因为我从来没有做过负载平衡所以我有点卡在这上面。我想知道如何将来自某个号码的来电分配到 2 个目的地。

假设此分机每小时有 100 个电话:

exten => 01234567890,1,Answer
exten => 01234567890,n,Set(oqgroup=BM)
exten => 01234567890,n,Goto(csdigital,csdigital)

我如何按 50/50 的比例分配这些电话。所以第一个电话转到分机 A,第二个电话转到分机 B,第三个电话转到 A,第四个电话转到 B,等等...

我的自定义配置文件,您可以在其中看到两个(示例)号码,其中两个我想对来电进行负载平衡:

[route]
exten => route,1,Answer
exten => route,n,GotoIf($["${oqgroup}" = "BM"]?bm,1)
exten => bm,1,Dial(SIP/0222333444@outbound,,ro)
exten => bm,1,Dial(SIP/0222333555@outbound,,ro) 

您可以为此使用函数 RAND。

https://wiki.asterisk.org/wiki/display/AST/Function_RAND

像这样

[route]
exten => route,1,Answer
exten => route,n,Set(my=${RAND(1,2)})
exten => route,n,GotoIf($["${my}" = "1"]?bm,1:bm1,1)
exten => bm,1,Dial(SIP/0222333444@outbound,,ro)
exten => bm1,1,Dial(SIP/0222333555@outbound,,ro) 

请检查代码,我没有检查,但你应该明白逻辑。

如果你不想随机(因为有时它可能会随机选择将下一次调用发送到与以前相同的分机),你可以使用全局变量并创建全局变量并为其赋值 0。并且在调用此变量之前检查值,如果它是 0,则路由到分机 0222333444 并将值更改为 1。如果全局值为 1,则路由到其他分机并将值更改为 0。

请记住,asterisk 重启后全局变量将重置为初始值。