从Asterisk获取通话记录

时间:2012-05-28 12:32:51

标签: c# asterisk phone-call

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

uniqueid 字段的唯一选择是什么?因此,在您的CDR中,您将拥有源,目的地,涉及的频道,日期,接听时间,拨号状态等,以及此唯一字段,因此您可以将给定的呼叫与给定的音频文件(录制的呼叫)相关联以及涉及的SIP设备。如果需要,可以下载并定期备份wav文件。

希望它有所帮助!