Freeswitch настройка CDR

Опубликовано в Freeswitch

Freeswitch настройка CDR

В этом руководстве я попытаюсь объяснить, что нужно сделать, чтобы настроить работу CDRs во Freeswitch, сохранением в MySQL. Предполагаю, что Freeswitch и MySQL уже установлены.

1) Сначала нам нужно установить unixodbc & libmyodbc, выполнив следующую команду:

apt-get install unixodbc libmyodbc

2) Вносим изменения в /etc/odbcinst.ini:

[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
FileUsage = 1

Имя БД freeswitchcdrdb,а имя пользователя и пароль являются freeswitch в моем случае, но вам нужно будет его обновить соответствующим образом и сохранить его в /etc/odbc.ini

[freeswitch]
Description           = MySQL connection to 'freeswitch' database
Driver                = MySQL
Database              = freeswitchcdrdb
Server                = localhost
USER                  = freeswitch
PASSWORD              = freeswitch
Port                  = 3306
Socket                = /var/run/mysqld/mysqld.sock
Charset=utf8

4) Теперь нам нужно проверить, правильно ли настроен ODBC, вы должны получить что-то похожее на то, что вы видите ниже:

echo "select 1" | isql -v freeswitch

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select 1
+---------------------+
| 1                   |
+---------------------+
| 1                   |
+---------------------+
SQLRowCount returns 1
1 rows fetched

В файле /usr/src/freeswitch/modules.conf нам необходимо раскоментировать модуль event_handlers/mod_odbc_cdr и выполнить компиляцию Freeswitch из директории cd /usr/src/freeswitch:

event_handlers/mod_odbc_cdr
#applications/mod_abstraction
#applications/mod_av
#applications/mod_avmd
#applications/mod_bert
#applications/mod_blacklist
#applications/mod_callcenter
#applications/mod_cidlookup
#applications/mod_cluechoo
applications/mod_commands
...
make 
make install

7) На данном этапе нам нужно скопировать odbc_cdr.conf.xml в каталог директории freeswich:

cp /usr/src/freeswitch/src/mod/event_handlers/mod_odbc_cdr/conf/autoload_configs/odbc_cdr.conf.xml /usr/local/freeswitch/conf/autoload_configs/odbc_cdr.conf.xml

8) Редактируем /usr/local/freeswitch/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"/> -->
	<param name="odbc-dsn" value="odbc://freeswitch"/>
        <!-- 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="true"/>
  </settings>
  <tables>
        <!-- only a-legs will be inserted into this table -->
    <table name="cdr_table_a_leg" log-leg="a-leg">
      <field name="CallId" chan-var-name="call_uuid"/>
      <field name="orig_id" chan-var-name="uuid"/>
      <field name="term_id" chan-var-name="sip_call_id"/>
      <field name="ClientId" chan-var-name="uuid"/>
      <field name="IP" chan-var-name="sip_network_ip"/>
      <field name="IPInternal" chan-var-name="sip_via_host"/>
      <field name="CODEC" chan-var-name="read_codec"/>
      <field name="directGateway" chan-var-name="sip_req_host"/>
      <field name="redirectGateway" chan-var-name="sip_redirect_contact_host_0"/>
      <field name="CallerID" chan-var-name="sip_from_user"/>
      <field name="TelNumber" chan-var-name="sip_req_user"/>
      <field name="TelNumberFull" chan-var-name="sip_to_user"/>
      <field name="sip_endpoint_disposition" chan-var-name="endpoint_disposition"/>
      <field name="sip_current_application" chan-var-name="current_application"/>
    </table>
        <!-- only b-legs will be inserted into this table -->
    <table name="cdr_table_b_leg" log-leg="b-leg">
      <field name="CallId" chan-var-name="call_uuid"/>
      <field name="orig_id" chan-var-name="uuid"/>
      <field name="term_id" chan-var-name="sip_call_id"/>
      <field name="ClientId" chan-var-name="uuid"/>
      <field name="IP" chan-var-name="sip_network_ip"/>
      <field name="IPInternal" chan-var-name="sip_via_host"/>
      <field name="CODEC" chan-var-name="read_codec"/>
      <field name="directGateway" chan-var-name="sip_req_host"/>
      <field name="redirectGateway" chan-var-name="sip_redirect_contact_host_0"/>
      <field name="CallerID" chan-var-name="sip_from_user"/>
      <field name="TelNumber" chan-var-name="sip_req_user"/>
      <field name="TelNumberFull" chan-var-name="sip_to_user"/>
      <field name="sip_endpoint_disposition" chan-var-name="endpoint_disposition"/>
      <field name="sip_current_application" chan-var-name="current_application"/>
    </table>
        <!-- both legs will be inserted into this table -->
    <table name="cdr_table_both">
      <field name="CallId" chan-var-name="uuid"/>
      <field name="orig_id" chan-var-name="Caller-Unique-ID"/>
      <field name="TEST_id" chan-var-name="sip_from_uri"/>
    </table>
  </tables>
</configuration>

9) Включите авто-загрузку модуля mod_odbc_cdr, для этого нужно отредактировать: 

/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml 
 <load module="mod_odbc_cdr"/>

10) Создать базу данных для CDR:

CREATE DATABASE `freeswitchcdrdb` CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON freeswitchcdrdb.* TO freeswitch@localhost  IDENTIFIED BY 'freeswitch';
FLUSH privileges;

11) Создаем таблицы CDR базы данных freeswitchcdrdb:

CREATE TABLE IF NOT EXISTS `cdr_table_a_leg` (
`CallId` VARCHAR(80) DEFAULT NULL,
`orig_id` VARCHAR(80) DEFAULT NULL,
`term_id` VARCHAR(80) DEFAULT NULL,
`ClientId` VARCHAR(80) DEFAULT NULL,
`IP` VARCHAR(80) DEFAULT NULL,
`IPInternal` VARCHAR(80) DEFAULT NULL,
`CODEC` VARCHAR(80) DEFAULT NULL,
`directGateway` VARCHAR(80) DEFAULT NULL,
`redirectGateway` VARCHAR(80) DEFAULT NULL,
`CallerID` VARCHAR(80) DEFAULT NULL,
`TelNumber` VARCHAR(80) DEFAULT NULL,
`TelNumberFull` VARCHAR(80) DEFAULT NULL,
`sip_endpoint_disposition` VARCHAR(80) DEFAULT NULL,
`sip_current_application` VARCHAR(80) DEFAULT NULL
);
 
CREATE TABLE IF NOT EXISTS `cdr_table_b_leg` (
`CallId` VARCHAR(80) DEFAULT NULL,
`orig_id` VARCHAR(80) DEFAULT NULL,
`term_id` VARCHAR(80) DEFAULT NULL,
`ClientId` VARCHAR(80) DEFAULT NULL,
`IP` VARCHAR(80) DEFAULT NULL,
`IPInternal` VARCHAR(80) DEFAULT NULL,
`CODEC` VARCHAR(80) DEFAULT NULL,
`directGateway` VARCHAR(80) DEFAULT NULL,
`redirectGateway` VARCHAR(80) DEFAULT NULL,
`CallerID` VARCHAR(80) DEFAULT NULL,
`TelNumber` VARCHAR(80) DEFAULT NULL,
`TelNumberFull` VARCHAR(80) DEFAULT NULL,
`sip_endpoint_disposition` VARCHAR(80) DEFAULT NULL,
`sip_current_application` VARCHAR(80) DEFAULT NULL
);
 
CREATE TABLE IF NOT EXISTS `cdr_table_both` (
`CallId` VARCHAR(80) DEFAULT NULL,
`orig_id` VARCHAR(80) DEFAULT NULL,
`TEST_id` VARCHAR(80) DEFAULT NULL
);

12) Выполняем рестарт freeswitch:

service freeswitch restart

Коментарии: