2012-05-28 53 views
1

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

回答

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文件。

希望它有帮助!

+0

谢谢你的回答。现在我们执行以下操作:如果我的客户端软件无法在本地记录文件 - 我发送一些DTMF来触发星号记录。之后,我打算从服务器上获取文件..顺便说一下'我的'cdr'mysql数据库中'uniqueid'列是空的!有什么配置错误吗?它可以让我通过我的客户端唯一标识找到带有{{CALLERID(ani)} - $ {EXTEN} - $ {UNIQUEID}的记录文件。 – 0x49D1

+0

不客气!请注意,在录制开始/停止时让客户端进行控制是不安全的,所以我建议在服务器端进行控制。另外你遇到的问题在这里提到:http://www.voip-info.org/wiki/view/Asterisk+cdr+mysql,但我没有自己的问题,所以你可能想发布这个作为一个不同的问题以及你的配置文件。顺便说一句,在链接中还提到,这uniqueid不保证是唯一的:(所以我会与ani-dnis-datetime和/或包括原始频道一起独特的领域。干杯。 – marcelog