Настройка freeswitch crd к mysql через odbc debian

2018-03-31


Создаем таблицу для данных

CREATE TABLE cdr (
   calldate datetime NOT NULL default '0000-00-00 00:00:00',
   clid varchar(80) NOT NULL default '',
   src varchar(80) NOT NULL default '',
   dst varchar(80) NOT NULL default '',
   dcontext varchar(80) NOT NULL default '',
   channel varchar(80) NOT NULL default '',
   dstchannel varchar(80) NOT NULL default '',
   lastapp varchar(80) NOT NULL default '',
   lastdata varchar(80) NOT NULL default '',
   duration int(11) NOT NULL default '0',
   billsec int(11) NOT NULL default '0',
   disposition varchar(45) NOT NULL default '',
   amaflags int(11) NOT NULL default '0',
   accountcode varchar(20) NOT NULL default '',
   uniqueid varchar(32) NOT NULL default '',
   userfield varchar(255) NOT NULL default '',
   did varchar(50) NOT NULL default '',
   recordingfile varchar(255) NOT NULL default '',
   KEY `calldate` (`calldate`),
   KEY `dst` (`dst`),
   KEY `accountcode` (`accountcode`),
   KEY `uniqueid` (`uniqueid`)
);

Устанавливаем драйвера Для Debian подобных ОС, необходимо выполнить следующую команду:

sudo apt-get install unixodbc unixodbc-dev libmyodbc

затем

sudo nano /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

Проверяем:

odbcinst -q -d

и должны увидеть следующее:

odbcinst -q -d
[MySQL]

Затем

sudo nano /etc/odbc.ini

Содержимое:

[freeswitch]
Driver=MySQL
SERVER=5.5.5.5
PORT=3306
DATABASE=freeswitch
Socket=/var/run/mysqld/mysqld.sock
option=3
USER=freeswitch
PASSWORD=password

Проверяем

echo "select 1" | isql -v freeswitch

Настройка mysql:

sudo nano /etc/mysql/my.cnf

Комментируем

# bind-address          = 127.0.0.1

и затем

sudo /etc/init.d/mysql restart

Устанавливаем молуль freeswitch odbc

sudo apt-get install freeswitch-mod-odbc-cdr

Включаем модуль в автозагрузку в файле /etc/freeswitch/autoload_configs/modules.conf.xml вставить строку

<load module="mod_odbc_cdr"/>

Там же создаем файл odbc_cdr.conf.xml содержимое:

<configuration name="odbc_cdr.conf" description="ODBC CDR Configuration">
  <settings>
    <!-- <param name="odbc-dsn" value="freeswitchcdr:DB_USER:DB_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="/var/log/freeswitch/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="/var/log/freeswitch/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="freeswitch_cdr" log-leg="a-leg">
      <field name="calldate" chan-var-name="start_stamp"/>
          <field name="clid" chan-var-name="caller_id_name"/>
          <field name="src" chan-var-name="caller_id_number"/>
          <field name="dst" chan-var-name="destination_number"/>
          <field name="dcontext" chan-var-name=""/>
          <field name="channel" chan-var-name="channel_name"/>
      <field name="dstchannel" chan-var-name="bridge_channel"/>
          <field name="lastapp" chan-var-name="hangup_cause"/>
          <field name="lastdata" chan-var-name="sip_hangup_disposition"/>
          <field name="duration" chan-var-name="duration"/>
          <field name="billsec" chan-var-name="billsec"/>
      <field name="disposition" chan-var-name="hangup_cause"/>
          <field name="lastapp" chan-var-name="current_application"/>
          <field name="amaflags" chan-var-name="amaflags"/>
          <field name="uniqueid" chan-var-name="uuid"/>
          <field name="recordingfile" chan-var-name="recordingfile"/>
          <field name="userfield" chan-var-name=""/>
    </table>
  </tables>
</configuration>

настройка записи разговора дилплана:

<action application="set" data="recordingfile=/var/recordings/${strftime(%Y-%m-%d-%H-%M-%S)}_${caller_id_number}_${destination_number}.mp3"/>
<action application="export" data="execute_on_answer=record_session ${recordingfile}"/>

Загружаем модель:

fs_cli
load mod_odbc_cdr

Если в дальнейшем вы будете вносить изменения в файл odbc_cdr.conf.xml их можно применить командой:

reload mod_odbc_cdr