私は ac# sip phone アプリケーションを書いていて、通話記録を取得する必要があります。PortSip をクライアント sip ライブラリとして使用しています。それに問題があります。ライブラリには通話録音機能がありますが、通話の約 10% が録音されていません (理由はわかりません。StartRecording を再起動しても役に立ちません。現在の通話の録音を開始できません)。
そこで、アスタリスク サーバーで通話を録音し、通話終了後にデータベースにダウンロードすることにしました。アスタリスクの CDR データは mysql データベースに保存されており、そこに一意の callId が表示されません。テーブル内の通話記録をデータベースに書き込んで、cdr に関連するいくつかのキーでそれらを取得できるのだろうか?
または、アスタリスク サーバーにすべての通話を記録し、必要な通話を ftp 経由でコンピューターにダウンロードして、サーバーに保存するという別のオプションもあります。
1 に答える
私は間違いなく、sip デバイスの代わりにアスタリスクで通話を録音します。次のように、ダイヤルプランでMonitorコマンドを使用して、アスタリスクで通話を録音できます。
exten => 555,1,Answer
exten => 555,2,Monitor(wav,filename)
...
これにより、555 内線へのすべての通話が自動的に録音されます (ダイヤルプラン パターンを使用して、すべての内線へのすべての通話を自動的に録音できますが、これは特定の設定によって異なります)。すべての通話を録音したくない場合は、AGI スクリプトを実行して、どの通話を録音するかを判別することもできます。
ターゲット ファイル名は、ani-dnis-datetime で構成して一意にするか、他のアスタリスク変数で構成できます。例: ${CALLERID(ani)}-${EXTEN}。${CALLERID(ani)}-${EXTEN}-${UNIQUEID} のように、一意の呼び出し ID 変数 ${UNIQUEID} を使用することもできます。
CDR に関しては、 cdr_odbcモジュールを使用して、csv、または sqlite ファイル、または mysql、postgresql などのリレーショナル データベースとして持つことができます。
呼び出しを一意にするのは、uniqueidフィールドです。したがって、CDR には、発信元、宛先、関連するチャネル、日付、応答時間、ダイヤル ステータスなど、およびこの uniqueid フィールドが含まれているため、特定の通話を特定の音声ファイル (録音された通話) に関連付けることができます。および関連する一口デバイスを使用します。wav ファイルは、必要に応じて定期的にダウンロードおよびバックアップできます。
それが役に立てば幸い!