2012-05-28 54 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