【问题标题】:difference between ${CDR(start)} and ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} in asterisk星号中 ${CDR(start)} 和 ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} 之间的区别
【发布时间】:2015-10-26 07:34:18
【问题描述】:

我创建了一个拨号方案,它可以接听电话并保存通话的开始和结束时间。我使用${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)} 的值是空的。

【问题讨论】:

    标签: time asterisk voip phone-call ivr


    【解决方案1】:

    ${CDR(start)} - 是调用开始时间。
    ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - 当前时间,执行此命令的时间。

    如果你在挂断后使用EPOCH变量,它可能指向通话结束。

    ${CDR(end)} 如果现在通话处于活动状态,可以为空,挂断后将被填充。

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

    【讨论】:

    • 我在我发布的代码之前有一个拨号命令,我得到了${CDR(start)},但你说的是it is a time of call start, when dial() was executed.
    • 代替dial(),它也可以是来电或一些内部呼叫(例如来自AMI或callfile)。无论如何,这是当前通话开始的时间。
    【解决方案2】:

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

    EPOCH 总是给出当前的 linux 时间。挂断后可以显示通话结束,如果处理时间过长也可以显示不同的时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 2021-11-26
      • 2017-11-02
      • 2020-03-18
      • 2016-12-20
      • 1970-01-01
      • 2019-01-08
      相关资源
      最近更新 更多