1

我正在编写 ac# sip 电话应用程序,我需要获取通话记录。我使用 PortSip 作为客户端 sip 库。并且有一个问题:该库具有通话录音功能,但约 10% 的通话没有录音(不知道为什么,即使重新启动 StartRecording 也无济于事,它只是无法开始录制当前通话)。
所以我决定在星号服务器上记录通话,并在通话结束后将它们下载到我们的数据库中。Asterisk CDR 数据存储在 mysql 数据库中,我在那里看不到任何唯一的 callId。我想知道我们是否可以将表中的呼叫记录写入数据库,以通过与 cdr 相关的某些键来获取它们?
或者我看到的另一种选择是记录星号服务器上的所有呼叫,通过 ftp 将所需的呼叫下载到我们的计算机并将其保存到我们的服务器。

4

1 回答 1

2

我肯定会让星号记录呼叫而不是 sip 设备。您可以使用拨号方案中的Monitor命令在星号中记录呼叫,例如:

exten => 555,1,Answer
exten => 555,2,Monitor(wav,filename)
...

这将自动记录对 555 分机的所有呼叫(您可以使用拨号方案模式自动记录对所有分机的所有呼叫,但这取决于您的特定设置)。如果您不想记录所有呼叫,您还可以运行 AGI 脚本来区分要记录哪些呼叫。

目标文件名可以由 ani-dnis-datetime 组成以使其唯一或与任何其他星号变量组成。例如:${CALLERID(ani)}-${EXTEN}。您还可以使用唯一调用 ID 变量 ${UNIQUEID},例如 ${CALLERID(ani)}-${EXTEN}-${UNIQUEID}。

至于 CDR,您可以使用cdr_odbc模块将其作为 csv、sqlite 文件或 mysql、postgresql 等关系数据库。

使呼叫独一无二的是uniqueid字段。因此,在您的 CDR 中,您将拥有来源、目的地、所涉及的频道、日期、应答时间、拨号状态等,以及这个唯一 ID 字段,因此您可以将给定呼叫与给定音频文件(录音呼叫)相关联并使用相关的 sip 设备。如果需要,可以定期下载和备份 wav 文件。

希望能帮助到你!

于 2012-05-28T14:21:11.557 回答