Asterisk 中如何将 Remote Party ID 保存到 CDR?

How to save Remote Party ID to CDR in Asterisk?

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

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

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

转移过程是这样的:

  1. A打电话给B(A跟B说话)
  2. B抱着A,给C打电话(B跟C说话)
  3. B把A转给C(A跟C说话)

现在,在 CDR 中 table 我得到了两条记录。一个用于第一次调用(A<->B),另一个用于两次调用(B<->C 和 A<->C)。重点是在第二个 CDR 中,我丢失了对 A 的任何引用。

我想在第二个CDR 中保存Remote Party ID (A)。 我已经将自定义字段添加到 CDR table (connectedID)。

我正在阅读有关编辑一些配置文件,添加此类句子的内容:

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

然而,我很迷茫。我不知道我需要编辑哪个文件,甚至我应该把这些行代码放在文件的哪一部分。

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

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

不过,这一切都需要调试和您自己的努力。

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

其他选项是收集事件并记住所有传输

通过 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,所以我在 extensions_override_elastix.conf 文件中 [macro-hangupcall] 宏的开头添加了这一行。

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