如何在Asterisk中将远程方ID保存到CDR?

时间:2015-01-15 11:20:19

标签: asterisk custom-fields cdr elastix

我是Asterisk的新手,所以非常感谢任何帮助。

我试图在转移的呼叫中保存CDR日志表中的远程参与方ID(CONNECTEDLINE)。在盲转接中,没有问题,因为我在src字段中将远程参与方ID作为来电显示。

在有人值守的转接中,我忘记了原来的来电显示。

转移的方式如下:

  1. A呼叫B(与B交谈)
  2. B持有A,并且调用C(B与C交谈)
  3. B将A转移到C(与C交谈)
  4. 现在,在CDRs表中,我得到了两条记录。一个用于第一次呼叫(A-B),另一个用于两次第二次呼叫(B-C和A-C)。关键是在第二个CDR我失去了对A的任何引用。

    我想在第二个CDR中保存远程参与方ID(A)。 我已经在CDR表格中添加了自定义字段(connectedID)。

    我正在阅读有关编辑某些配置文件的内容,并添加了这种句子:

    "exten => s,1,set(CDR(connectedID)=${CONNECTEDLINE})"
    

    但是,我很失落。我不知道我需要编辑哪个文件,即使在文件的哪个部分我应该放置这些代码行。

    有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

您可以使用Func_SHARED,在共享变量中保存cid并按桥接频道名称进行查找

然而,这一切都需要调试和你自己的努力。

http://www.voip-info.org/wiki/view/Asterisk+func+shared

其他选项是收集事件并记住所有转移

答案 1 :(得分:0)

通过AMI读取呼叫事件(感谢@arheops)我管理如何在CDR中保存远程方ID。

hangup事件中,我们可以在ConnectedLineNum字段中看到远程参与方ID。

对于像这样的转接电话:

  • 401致电208
  • 208次电话308(401暂停)
  • 208将原始呼叫转移到308(401与308交谈)

这是最后一段电话的hangup事件样本。

Event Hangup Privilege: call,all Channel: SIP/308-00000665 Uniqueid: 1421757614.1658 CallerIDNum: 208 CallerIDName: Juan Ruiz ConnectedLineNum: 401 ConnectedLineName: Test1 Cause: 16 Cause-txt: Normal Clearing

原始来电者存储在ConnectedLineNum变量中。

所以我将此行添加到挂断部分:

exten => s,1,Set(CDR(connectedid)=${CONNECTEDLINE(number)})

我正在使用Elastix 2.4.0,所以我在[macro-hangupcall]文件的extensions_override_elastix.conf宏的开头添加了这一行。

在其他基于Asterisk的发行版中,它应该在另一个文件中。