【问题标题】:Asterisk - Reseting CDR to show correct billsec of a new call when channel is answered beforehandAsterisk - 重置 CDR 以在事先应答通道时显示新呼叫的正确账单秒
【发布时间】: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


【解决方案1】:

如果基本的 CDR 功能不足以进行计费,请查看 CEL(通道事件记录)。支持所有数据库后端,并包含您可能需要的所有关于调用(时间戳)的事件。

【讨论】:

  • 这可能是一种解决方法。但是,您知道在拨号方案中访问这些信息的方法吗?我不想为我的计费系统读取额外的数据库。
【解决方案2】:

ResetCDR() 是你的朋友。我现在使用它,以便我可以跟踪原始通话时长以及被叫方转移后的通话部分。这实际上创建了第二个 CDR 记录,然后应该包含 billsecs 以匹配对话时间。

不是 100% 确定所有这些,但是,试一试,我认为这就是你想要的。

http://www.voip-info.org/wiki/view/Asterisk+cmd+ResetCDR

【讨论】:

  • 感谢您的回答,但我已经尝试过 ResetCDR 和 ForkCDR,但我没有运气!还有其他想法吗?
  • 你能解释一下我的“我没有舔他们”的意思吗? CDR 是否没有分叉或拆分为具有更正 billsecs 的第二个 CDR? CDR根本没有分裂吗?秒错了吗?
  • 好吧,我使用了 ResetCDR 和 ForkCDR,但在使用它们之后,CDR(duration) 仍然等于 CDR(billsec)。值得一提的是,Dial 应用中的 C 选项类似于 ResetCDR。
  • 您在 Forkcdr 中尝试了不同的选项。见星号 -rx "core show application ForkCDR"
  • 我必须做一些测试,但我确信 ResetCDR 或 ForkCDR 会解决您的问题,除非 Asterisk 13 中存在错误?我每天都这样做是为了确定我们收取不同费用的通话转移部分的通话时间。不过,我在 Asterisk 1.8 上执行此操作。
【解决方案3】:

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

我所做的是,就在呼叫转移到 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)

它工作正常:我得到 2 个 CDR 行,一个用于 A 支路到 IVR,具有自己的账单秒(例如,25 秒),另一行用于呼叫前转 A 支路到 C 支路,也有自己的账单秒(比如 350 秒)。 2 个 billsecs 的总和为您提供 A 腿(呼叫者)发出的呼叫的总持续时间。 第二个 CDR 的 billsec 为您提供该部分通话的通话时长。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多