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

Finding proper hangup reason in 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

您可以读取 DIALSTATUS 变量。

如果挂断,应该是CANCEL

我总是设置自己的 HANGUP_OWNER 变量。您可以在拨号时使用 "g" 选项继续执行拨号规则。本质上,如果你挂断,Asterisk 将直接跳转到当前上下文的 "h" 分机,但是如果你的被叫方挂断,"g" 选项告诉 asterisk 在相同的上下文中继续执行拨号方案。这是我的拨号方案的修改版本。请记住,您必须在任何使用 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)})

此外,值得指出的是,"us/them" 入站与出站相反,因此更新评论很有帮助。为了简单起见,我保留了 "caller/callee" 措辞,但很高兴在评论中准确显示谁是谁。

星号 13 Dial docs