不允许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_INUSE
和 INUSE
(或者我不知道如何让它报告 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
以防万一有人需要类似的解决方案,这对我有用:
[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
的电话的数量(使用宏中的条件,因为可能还有其他来电)
我试图在我的家庭设置中使用带星号的 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_INUSE
和 INUSE
(或者我不知道如何让它报告 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
以防万一有人需要类似的解决方案,这对我有用:
[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
的电话的数量(使用宏中的条件,因为可能还有其他来电)