在星号中找到正确的挂断原因

时间:2017-02-02 11:02:20

标签: lua asterisk

我在 extensions.lua 中设置了一个挂机处理程序。在挂断该功能也执行但我的问题是我无法捕捉到确切的挂断代码。无论是我的拨号计划还是最终用户发生挂机都会挂起,我总是得到16作为挂断代码。我使用PRI卡的星号,所有电话都只通过PRI。

下面是我的挂断处理程序代码 -

function my_custom_hangup_handler(c,e)
    app.NoOp('Inside Hangup Handler For:'..e)
    app.NoOp('Hangup Cause='..channel['HANGUPCAUSE']:get())
end

我也能在控制台中看到RINGING事件。有没有办法在拨号方案中获得这些活动?

见下面的日志

-- Called DAHDI/g0/888488XXXX
-- DAHDI/i1/888488XXXX-389 is proceeding passing it to Local/888488XXXX@local-channel-start-00000017;2
-- Local/888488XXXX@local-channel-start-00000017;1 is proceeding
-- DAHDI/i1/888488XXXX-389 is ringing

2 个答案:

答案 0 :(得分:1)

我总是设置自己的HANGUP_OWNER变量。拨号时可以使用“g”选项继续执行拨号方案。基本上,如果你挂断,Asterisk将直接跳转到当前上下文的“h”扩展名,但如果你的被叫方挂机,“g”选项会告诉asterisk继续在同一个上下文中执行dialplan。这是我的拨号方案的修改版本。请记住,您必须在使用Dial()函数的任何地方执行此操作:

[all-outbound]
exten = _X.,1,NoOp(Outgoing call from ${CALLERID(all)} to ${EXTEN})
exten = _X.,n,Set(HANGUP_OWNER=Caller)  ; we hung up
; dial out on the provider SIP trunk
exten = _X.,n,Dial(SIP/${EXTEN}@provider-sip,,g)
; must use dial option 'g' for hangup owner to work
exten => _X.,n,Set(HANGUP_OWNER=Callee)  ; they hung up
;....
;....
exten = h,1,NoOp(Hangup cause is ${HANGUPCAUSE})
exten = h,n,NoOp(Call Duration is ${CDR(duration)})

此外,值得指出的是“我们/他们”反转入站和出站,因此更新评论会很有帮助。我保持“来电者/被叫者”的说法,以保持简单,但很高兴在评论中准确显示谁是谁。

Asterisk 13 Dial docs

答案 1 :(得分:0)

您可以阅读DIALSTATUS变量。

如果你挂断,应该取消