不允许2条线路同时通过呼入振铃

Disallow 2 line to pass inbound ringing at the same time

我试图在我的家庭设置中使用带星号的 ooma,所以我有 2 条线路分配给通过 FXO 网关转发到星号的相同号码。出站呼叫似乎工作正常,但在入站时我有问题 - 两条线路同时响铃所以在我的 IP phone 上我看到来自同一号码的多个入站呼叫。使 2 个来电看起来像 1 个呼叫的最简单方法是什么?

我尝试使用 DEVICE_STATE() 函数:

[from-ooma1]
exten => s, 1, GotoIf($["${DEVICE_STATE(SIP/ooma2)}"="RINGING"]?hang)
        same => n, Goto(incoming,s,1)
        same => n(hang),Hangup()

[from-ooma2]
exten => s, 1, GotoIf($["${DEVICE_STATE(SIP/ooma1)}"="RINGING"]?hang)
        same => n, Goto(incoming,s,1)
        same => n(hang),Hangup()

如果另一条线路已经在响铃,则在一条线上响铃以挂断它。不幸的是,这不起作用,因为 DEVICE_STATE 只有 2 个状态 NOT_INUSEINUSE (或者我不知道如何让它报告 RINGING 状态),而且我不能放弃 "IN_USE"状态。

注意:我的主题可能会产生误导,澄清一下 - 我需要防止两条线路同时响铃,但是当第一条线路接听并仍在使用时,第二条线路应该允许传递来电。

您可以使用函数 GROUP

计算对任何单个实体的调用次数
[macro-stdvoip]
; ${ARG1} - full dial string
; Return ${DIALSTATUS} = CHANUNAVAIL if ${VOIPMAX} exceeded
exten => s,1,Set(GROUP()=trunkgroup1) ;Set Group
exten => s,2,GotoIf($[${GROUP_COUNT(trunkgroup1)} > ${VOIPMAX}]?103) ;Exceeded?
exten => s,3,Dial(${ARG1}) ;dial it
exten => s,103,SetVar(DIALSTATUS=CHANUNAVAIL) ;deny call

https://www.voip-info.org/wiki/view/Asterisk+func+group

以防万一有人需要类似的解决方案,这对我有用:

[from-ooma]
exten => 1,1,Set(CALLERID(number)=O:9${CALLERID(number)})
        same => n,Set(GROUP()=ooma)
        same => n,GotoIf($[${GROUP_COUNT(ooma)}>${GROUP_COUNT(ooma-answer)} + 1]?hang)
        same => n,Goto(incoming,s,1)
        same => n(hang),Hangup()

[macro-resetG]
exten => s,1,Set(GROUP()=${IF($[ "${ARG1:0:8}" = "SIP/ooma" ]?ooma-answer)})
        same => n,MacroExit

[incoming]
exten => s,1,Verbose(1,Caller ${CALLERID(all)} incoming call)
        same => n,Dial(SIP/1&SIP/2,20,TtM(resetG^${CHANNEL}))
        same => n,Hangup()

所以我使用另一个组来计算接听来自ooma的电话的数量(使用宏中的条件,因为可能还有其他来电)