Asterisk 不允许两条线路同时通过入站振铃

Asterisk 不允许两条线路同时通过入站振铃,asterisk,sip,pbx,Asterisk,Sip,Pbx,我试图在我的主页设置中使用带星号的ooma,因此我有两行代码分配给相同的号码,通过FXO网关转发到星号中。出站呼叫似乎工作正常,但在入站时我遇到了问题-两条线路同时响起,因此在我的IP电话上,我看到来自同一号码的多个入站呼叫。让2个来电看起来像1个电话的最简单方法是什么 我尝试使用设备状态函数: [from-ooma1] exten => s, 1, GotoIf($["${DEVICE_STATE(SIP/ooma2)}"="RINGING"]?hang) same =&

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

我尝试使用设备状态函数:

[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()
因此,如果另一条线路已经在响,请在一条线路上挂断。不幸的是,这不起作用,因为设备状态只有两种状态:未使用和正在使用,或者我不知道如何使其报告振铃状态,并且我无法进入正在使用状态


注:澄清一下,我的主题可能有误导性-我需要防止两条线路同时响起,但当第一条线路接听且仍在使用时,第二条线路应允许传入呼叫。

您可以使用功能组对任何单个实体的呼叫进行计数

[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

以防有人需要类似的解决方案,以下是对我有效的方法:

[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的呼叫被接听,因为可能会有其他来电

谢谢,但从文档中不清楚当组计数重置时,我需要在第一个通道应答但仍在使用时允许第二个通道上的入站呼叫。组在呼叫结束前不会重置。也就是说,它计算当前呼叫数。如果您需要在某个拨号计划点后重置,只需在该点后创建另一个组并计算差异。在任何情况下,你都可以通过gotoIF控制自己。对不起,我不想为你做你的工作,我可以显示你可以在应答器上使用的方向拨号参数M来计算其他组中的应答电话。实际上,你可以通过dooing SetGROUPcategory=签入源代码来清除。我不是要求为我做工作。问题是,若我理解正确,若我在拨号前重置了通话组,我仍然可以在振铃时接听第二个电话,若我在第一个电话接听后接听了第二个电话,但仍在使用中,我将阻止振铃。所以这个解决方案不起作用。