适用于Freeswitch1.2以上版本
1.编译下 mod_odbc_cdr:在fs源码文件夹的/src/mod/event_handlers/mod_odbc_cdr下,make&&make install
2.\autoload_configs\modules.conf.xml文件中添加<load module="mod_odbc_cdr"/>
3.在autoload_configs文件夹下新建odbc_cdr.conf.xml文件,内容如下:
<configuration name="odbc_cdr.conf" description="ODBC CDR Configuration">
<settings>
<!-- <param name="odbc-dsn" value="database:username:password"/> -->
<!-- ODBC数据源名称:数据库用户名:数据库密码 -->
<param name="odbc-dsn" value="freeswitch:root:password"/>
<!-- global value can be "a-leg", "b-leg", "both" (default is "both") -->
<param name="log-leg" value="both"/>
<!-- value can be "always", "never", "on-db-fail" -->
<param name="write-csv" value="on-db-fail"/>
<!-- location to store csv copy of CDR -->
<param name="csv-path" value="/usr/local/freeswitch/log/odbc_cdr"/>
<!-- if "csv-path-on-fail" is set, failed INSERTs will be placed here as CSV files otherwise they will be placed in "csv-path" -->
<param name="csv-path-on-fail" value="/usr/local/freeswitch/log/odbc_cdr/failed"/>
<!-- dump SQL statement after leg ends -->
<param name="debug-sql" value="false"/>
</settings>
<tables>
<!-- 三张表需要先手动创建 -->
<!-- only a-legs will be inserted into this table -->
<!-- 保存呼叫数据 -->
<table name="cdr_table_a" log-leg="a-leg">
<field name="uuid" chan-var-name="uuid"/>
<field name="call_uuid" chan-var-name="call_uuid"/>
<field name="caller_id_name" chan-var-name="caller_id_name"/>
<field name="caller_id_number" chan-var-name="caller_id_number"/>
<field name="destination_number" chan-var-name="destination_number"/>
<field name="start_stamp" chan-var-name="start_stamp"/>
<field name="answer_stamp" chan-var-name="answer_stamp"/>
<field name="end_stamp" chan-var-name="end_stamp"/>
<field name="uduration" chan-var-name="uduration"/>
<field name="billsec" chan-var-name="billsec"/>
<field name="hangup_cause" chan-var-name="hangup_cause"/>
<field name="sip_network_ip" chan-var-name="sip_network_ip"/>
</table>
<!-- only b-legs will be inserted into this table -->
<!-- 保存接听数据 -->
<table name="cdr_table_b" log-leg="b-leg">
<field name="uuid" chan-var-name="uuid"/>
<field name="call_uuid" chan-var-name="call_uuid"/>
<field name="caller_id_name" chan-var-name="caller_id_name"/>
<field name="caller_id_number" chan-var-name="caller_id_number"/>
<field name="destination_number" chan-var-name="destination_number"/>
<field name="start_stamp" chan-var-name="start_stamp"/>
<field name="answer_stamp" chan-var-name="answer_stamp"/>
<field name="end_stamp" chan-var-name="end_stamp"/>
<field name="uduration" chan-var-name="uduration"/>
<field name="billsec" chan-var-name="billsec"/>
<field name="hangup_cause" chan-var-name="hangup_cause"/>
<field name="sip_network_ip" chan-var-name="sip_network_ip"/>
</table>
<!-- both legs will be inserted into this table -->
<!-- 保存所有通话数据 -->
<table name="cdr_table_ab">
<field name="uuid" chan-var-name="uuid"/>
<field name="call_uuid" chan-var-name="call_uuid"/>
<field name="caller_id_name" chan-var-name="caller_id_name"/>
<field name="caller_id_number" chan-var-name="caller_id_number"/>
<field name="destination_number" chan-var-name="destination_number"/>
<field name="start_stamp" chan-var-name="start_stamp"/>
<field name="answer_stamp" chan-var-name="answer_stamp"/>
<field name="end_stamp" chan-var-name="end_stamp"/>
<field name="uduration" chan-var-name="uduration"/>
<field name="billsec" chan-var-name="billsec"/>
<field name="hangup_cause" chan-var-name="hangup_cause"/>
<field name="sip_network_ip" chan-var-name="sip_network_ip"/>
</table>
</tables>
</configuration>
表字段说明:(三张表需要先手动创建)
direction:话单类型outbound主叫话单,inbound被叫话单
uuid: 唯一ID
call_uuid: 关联ID,同主叫方UUID
caller_id_name: 主叫方昵称
caller_id_number: 主叫号码
destination_number: 被叫号码
start_stamp: 呼叫发起的日期/时间
answer_stamp: 实际应答呼叫远端的日期/时间 如果未接听电话,则为空字符串
end_stamp: 呼叫终止的日期/时间
uduration: 总呼叫持续时间(以微秒为单位)
billsec: 可计费的通话时长(秒)可计费时间不包括在远端接听电话之前在“早期媒体”中花费的通话时间
hangup_cause: 挂断原因
sip_network_ip:网络IP
4:重启FreeSWITCH后即可保存通话记录到到表中