【发布时间】:2014-10-15 23:42:11
【问题描述】:
我想做的事:
接听来电并拨打另一个号码。通话结束后,我需要知道通话的正确通话时间(应该存储在 ${CDR(billsec)} 中)。
我得到了什么:
由于信道已应答,Dial 应用程序中的 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(answer) 将在被呼叫时立即分配方回答频道。但问题是,在我完整的拨号方案中,我必须在拨打电话之前接听频道,因为我需要事先与用户交互,并且需要接听频道。
顺便说一句,我正在使用 Asterisk 13.0.0-beta1。你们中的任何人都可以告诉我如何才能实现我想做的事情吗?
【问题讨论】:
-
我可以给你的第一个提示 - 不使用星号的测试版。即使是星号 12 也可能是不可预测的,并且与文档中描述的不同。
-
@arheops,感谢您的提示。然而,我不知何故坚持使用 Asterisk 13,因为在这个版本中添加了一个我真的需要它的功能。还有其他可能对我有帮助的提示吗?
-
@arheops,我所能做的就是升级到 beta2,但不幸的是问题仍然存在。
标签: asterisk