どのように私は自分のデータベースにアスタリスクの呼び出しの呼び出し時間を挿入できますか?

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

2

1 答え

あなたはdbバックエンドの使い方について多くの情報を提供しておらず、呼び出し時間を書き込む方法や、問題のcdrを書き込むためにアスタリスクを設定する方法についても質問しています。

したがって、一般に話す場合、これには3つの選択肢があります(下記参照)。 2 および 3 の場合は、データベースへの接続を自分で開く必要があります。必要な行の挿入/更新、エラーの処理などに必要なクエリを記述します。 1 オプションの場合は、アスタリスクを設定してジョブを実行するだけです。

1)アスタリスクは、すべての呼び出しのCDR(Call Detail Record)をバックエンドに書き込むことで、デフォルトでこれを独自に行うことができます。このバックエンドは csv MySQL pgsql sqlite およびその他のデータベースは、 cdr_odbc < a>モジュール。 cdr.conf (および選択したバックエンドに応じて、 cdr_mysql.conf cdr_odbc.conf cdr_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

処理がANSWERの場合、 billsec には請求する秒数(通話の合計「応答時間」)が含まれ、通話の合計時間(非請求時間を含む)が保持されます。

2)一方で、あなたがcdrについて尋ねるのではなく、自分の通話時間を書きたい場合は、 AGI スクリプト(によって設定された) CDR(billsec)変数または回答時間 /www.voip-info.org/wiki/view/Asterisk+cmd+Dial "rel =" noreferrer "> Dial()コマンド):

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

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

したがって、オプション2と3は、すでにAGIスクリプトまたは独自の制御/処理呼び出しのAMIクライアントを持っていて、オプション1がより一般的ですが多少柔軟性が低い場合は、はるかに便利です。

それが役に立てば幸い!

7
追加された
私は十分な情報を与えなかったことを申し訳ありません。オプション2と3は私が必要なものです。しかし、私は質問があります:dialplanのANSWEREDTIMEにアクセスすることは可能ですか?
追加された 著者 Karadous,
非常に良い答え。完全性のために、オプション(1)については、cdr_adaptive_odbcの代わりにcdr_odbcを記述することをお勧めします。これは、ユーザー定義データの方が柔軟性があります。
追加された 著者 Matt Jordan,
@カラダス。参照: voip-info.org/wiki/view/Asterisk+variables。ですから、$ {ANSWEREDTIME}を使用してダイヤルコマンドのオプションgを使用してください。
追加された 著者 marcelog,
@marcelog、B-leg(Dialplanからの発信コール)の通話時間を取得する方法は?
追加された 著者 duccom,