【问题标题】:Disallow 2 line to pass inbound ringing at the same time不允许 2 条线路同时通过呼入振铃
【发布时间】:2018-02-04 20:13:33
【问题描述】:

我尝试在我的家庭设置中使用带星号的 ooma,因此我有 2 条线路分配给通过 FXO 网关转发到星号的相同号码。呼出电话似乎工作正常,但在呼入时我有问题 - 两条线路同时响铃,所以在我的 IP 电话上,我看到来自同一个号码的多个呼入电话。让 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”状态。

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

【问题讨论】:

    标签: asterisk sip pbx


    【解决方案1】:

    您可以使用函数 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

    【讨论】:

    • 谢谢,但是当 GROUP_COUNT 重置时,文档中并不清楚,当第一个通道应答但仍在使用时,我需要允许第二个通道上的入站振铃。
    • 组在通话结束前不会重置。即它计算当前呼叫。如果您需要在某个拨号计划点之后“重置”,只需在该点之后创建另一个组并计算差异。您可以通过 gotoIF 控制自己在每种情况下要做什么。对不起,我不会为你做你的工作,我只是指示方向
    • 您可以使用on-answer handler(dial param M)来统计其他组中已接听的电话。
    • 实际上像你一样的接缝可以通过执行 Set(GROUP(category)=) 来清除(签入源代码)
    • 我不是要求为我工作。问题是(如果我理解正确的话)如果我在拨号前重置 GROUP 我仍然可以在振铃期间接到第二个电话,如果我这样做之后我会在第一个电话应答但仍在使用时阻止振铃。所以这个解决方案不起作用。
    【解决方案2】:

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

    [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的电话被接听(使用宏中的条件,因为可能有其他来电)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      • 2020-09-29
      • 1970-01-01
      相关资源
      最近更新 更多