星号-重置CDR,以在预先应答频道时显示新呼叫的正确计费秒



我想做的事情:
接听来电并拨另一个号码。当通话结束时,我需要有正确的通话时间(应该存储在${CDR(billsec)}中)
我得到的:
由于信道已应答,拨号应用程序中的C选项仅将CDR的应答变量重置为当前时间,因此产生的billsec等于CDR的持续时间变量,等于信道占用时间,而不是呼叫会话时间
我的拨号计划:

exten => 333333,1,NoOp(Here I answer the channel and make another call)
    same => n,Answer
    same => n,Dial(DAHDI/g0/123456789,,gC)
    same => n,NoOP(Billsec: ${CDR(billsec)}) // Here billsec is equal to CDR(duration)

注意:如果我只是从拨号计划中删除Answer CMD,则billsec变量会显示正确的呼叫时间,这是有道理的,因为信道未被应答,并且一旦被叫方应答该信道,就会分配CDR(应答)。但问题是,在我完整的拨号计划中,我必须在打电话前接听该频道,因为我需要事先与用户互动,而用户需要接听该频道。

顺便说一句,我正在使用Asterisk 13.0.0-beta1。你们中的任何人能告诉我如何才能实现我想要做的事情吗?

如果基本CDR功能不足以计费,请查看CEL(通道事件日志)。支持所有DB后端,并具有您可能需要的关于调用的所有事件(带时间戳)。

ResetCDR()是您的朋友。我现在使用它,这样我就可以跟踪原始通话持续时间和被叫方转接后的通话部分。这实际上创建了第二个CDR记录,然后应该包含与会话时间匹配的计费秒。

不是100%确定,但是,试试看,我想这就是你想要的。

http://www.voip-info.org/wiki/view/Asterisk+cmd+重置CDR

回答您的问题可能为时已晚,但我有完全相同的情况。

我所做的是,就在呼叫转发到C分支之前(A分支是呼叫者,B分支是应答呼叫的IVR,C分支是转发呼叫的目的地),使用ForkCDR(arve)。

类似于:

exten => _X.,1,NoOp(Incoming call from Provider X to User Y)
same => n,Macro(Execute_IVR)
same => n,ForkCDR(arve)
same => n,Dial(SIP/${EXTEN}@userY)

它工作得很好:我有两个CDR行,一个是A腿到IVR,有自己的计费秒(比如25秒),另一个是从A腿到C腿的呼叫转发,也有自己的账单秒(比如350秒)。2 billsecs的总和为A leg(呼叫者)拨打电话的总持续时间。第二个CDR的billsec为您提供通话该部分的通话持续时间。

最新更新