星号中的$ {CDR(start)}和$ {STRFTIME($ {EPOCH},%Y-%m-%d%H:%M:%S)}之间的差异

时间:2015-10-26 07:34:18

标签: time asterisk voip phone-call ivr

我创建了一个拨号方案,它接听电话并保存通话的开始和结束时间。我使用${CDR(start)}来获取调用的开始时间,但是当我使用${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}代替它时,与${CDR(start)}相比,它给了我10秒或更长的时间差。部分代码:

same => n,NoOp(------${CDR(start)}----${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}--)

上面一行是我的拨号方案中的第二行。从文档${CDR(start)}给出了开始通话时间,而${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}给出了当前时间。但是我把这条线放在我的拨号方案的第二行所以它几乎是通话开始,因此${CDR(start)}${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}应该大致相等,但输出就像

NoOp(------2015-10-25 12:30:10----2015-10-25 12:30:21--)

为什么两者都有这么大的差异?而且我也不知道为什么${CDR(end)}的值是空的。

2 个答案:

答案 0 :(得分:1)

${CDR(start)} - 是一个通话开始时间 <{1}} - 当前时间,执行此命令时。

如果您在挂断后使用${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}变量,则可能指向呼叫结束。

如果现在呼叫处于活动状态,

EPOCH可以为空,并且会在挂断后填充。

关于CDR变量:https://wiki.asterisk.org/wiki/display/AST/CDR+Variables

答案 1 :(得分:0)

$ {CDR(start)}不是当前呼叫开始的时间,而是当前cdr开始的时间。从队列传输后,可以更改它,ResetCDR,ForkCDR命令

EPOCH总是给出当前的linux时间。挂机后它可以显示呼叫结束,但如果处理时间很长,也可以显示不同的时间。