質問: どのように私は自分のデータベースにアスタリスクの呼び出しの呼び出し時間を挿入できますか? 私はastreiskで呼び出しを記録する自分のデータベースを持っています。私はテーブルにすべての呼び出しの呼び出し時間を挿入する必要があります。これどうやってするの?ダイヤルプランでこれを行うことはできますか?
回答: あなたはdbバックエンドの使い方について多くの情報を提供しておらず、呼び出し時間を書き込む方法や、問題のcdrを書き込むためにアスタリスクを設定する方法についても質問しています。 したがって、*一般に*話す場合、これには3つの選択肢があります(下記参照)。 **2** および **3** の場合は、データベースへの接続を自分で開く必要があります。必要な行の挿入/更新、エラーの処理などに必要なクエリを記述します。 **1** オプションの場合は、アスタリスクを設定してジョブを実行するだけです。 1)アスタリスクは、すべての呼び出しのCDR(Call Detail Record)をバックエンドに書き込むことで、デフォルトでこれを独自に行うことができます。このバックエンドは csv 、MySQL 、 pgsql]( http://www.voip-info.org/wiki/view/Asterisk + cdr + pgsql ) 、 sqlite]( http://www.voip-info.org/wiki/view/Asterisk+cdr+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コマンド): ``` ${DIALEDTIME} * Time for the call (seconds) ${ANSWEREDTIME} * Time from dial to answer (seconds) ``` 3) AMI を持つことで同じ結果を達成することもできます。クライアントは変数 **ANSWEREDTIME** のイベント **VarSet** をリッスンします。問題のイベントには、この変数が設定されているチャネルが含まれます。 したがって、オプション2と3は、すでにAGIスクリプトまたは独自の制御/処理呼び出しのAMIクライアントを持っていて、オプション1がより一般的ですが多少柔軟性が低い場合は、はるかに便利です。 それが役に立てば幸い!