环境:Window/VS2015/FreeSWITCH-1.6.19源码
1:配置ODBC数据源:控制面板-管理工具-ODBC数据源(32位)-系统DSN-添加MySQL ODBC Unicode Driver
2:编译mod_odbc_cdr模块(源码src\mod\event_handlers目录中有mod_odbc_cdr模块)
3:Win32\Debug\conf\autoload_configs\modules.conf.xml文件中添加<load module="mod_odbc_cdr"/>
4:配置文件odbc_cdr.conf.xml:Win32\Debug\conf\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:"/>
<!-- 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"/>
</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"/>
</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"/>
</table>
</tables>
</configuration>
表字段说明:(三张表需要先手动创建)
uuid: 唯一ID
call_uuid: 关联ID,同主叫方UUID
caller_id_name: 主叫方昵称
caller_id_number: 主叫号码
destination_number: 被叫号码
start_stamp: 呼叫发起的日期/时间
answer_stamp: 实际应答呼叫远端的日期/时间 如果未接听电话,则为空字符串
end_stamp: 呼叫终止的日期/时间
uduration: 总呼叫持续时间(以微秒为单位)
billsec: 可计费的通话时长(秒)可计费时间不包括在远端接听电话之前在“早期媒体”中花费的通话时间
hangup_cause: 挂断原因
5:重启FreeSWITCH后即可保存通话记录到到表中