2

astreiskに呼び出しを記録するための独自のデータベースがあります。すべての呼び出しの呼び出し時間をテーブルに挿入する必要があります。これどうやってするの?ダイヤルプランでこれを行うことはできますか?

4

1 に答える 1

8

どの db バックエンドを使用したいかについて多くの情報を提供していません。また、通話時間を自分で記述する方法や、問題の cdr を書き込むようにアスタリスクを構成する方法について質問している場合も同様です。

したがって、一般的に言えば、これには 3 つのオプションがあります (以下を参照)。オプション23では、データベースへの接続を自分で開き、必要な行を挿入/更新するために必要なクエリを記述し、エラーを処理する必要があります。オプション1では、アスタリスクを設定して、仕事。

1) アスタリスクは、バックエンドへのすべての呼び出しの CDR (Call Detail Record) を書き込むことにより、デフォルトで独自にこれを行うことができます。このバックエンドは、 cdr_odbcモジュールを介してcsvmysqlpgsqlsqliteおよびその他のデータベースにすることができます。cdr.confを構成する必要があります(選択したバックエンドに応じて、資格情報、テーブル名などのバックエンド情報を含むcdr_mysql.conf 、 cdr_odbc.confcdr_pgsql.conf )

CDR は、CDR 変数 (定義済みのアスタリスク変数リストから取得)であるいくつかの内容でデフォルトで書き込まれます。

チャネルに cdr がある場合、その cdr レコードには、チャネル変数と同じようにアクセスできる独自の変数セットがあります。次の組み込み変数が使用可能で、特に指定がない限り、読み取り専用です。

この時点で興味深いものは次のとおりです。

${CDR(duration)}     Duration of the call.
${CDR(billsec)}  Duration of the call once it was answered.
${CDR(disposition)}  ANSWERED, NO ANSWER, BUSY

disposition が ANSWER の場合、billsecには請求する秒数 (コールの合計「応答時間」) が含まれ、duration には請求されない時間を含むコールの合計時間が保持されます。

2) 一方、cdr について質問するのではなく、通話時間を自分で書きたい場合は、 dial()を発行した後にCDR(billsec)変数を読み取るAGIスクリプトを作成できます。 ANSWEREDTIME ( Dial()コマンドで設定) :

${DIALEDTIME} * Time for the call (seconds)
${ANSWEREDTIME} * Time from dial to answer (seconds)

3) AMIクライアントが変数 ANSWEREDTIME のイベント VarSet をリッスンすることによっても、同じ結果を得ることができます。問題のイベントには、この変数が設定されているチャネルが含まれます。

したがって、オプション 2 と 3 は、呼び出しを制御/処理する独自の AGI スクリプトまたは AMI クライアントを既に持っている場合に明らかにより有用であり、オプション 1 はより一般的ですが、柔軟性がわずかに劣る可能性があります。

それが役に立てば幸い!

于 2012-06-24T13:38:17.807 に答える