我创建了一个拨号方案,它接听电话并保存通话的开始和结束时间。我使用${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)}
的值是空的。
答案 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时间。挂机后它可以显示呼叫结束,但如果处理时间很长,也可以显示不同的时间。