1. Подготавливаем базу данных PostgreSQL для записи данных.
Создадим базу данных fscdr. Пользователя fscdr с паролем fscdrpassword.
# sudo -i -u postgres
$ psql
postgres=# CREATE DATABASE fscdr;
postgres=# CREATE USER fscdr WITH PASSWORD 'fscdrpassword';
postgres=# GRANT ALL PRIVILEGES ON DATABASE fscdr to fscdr;
postgres=# \c fscdr
fscdr=# CREATE TABLE cdr (
id serial PRIMARY KEY,
local_ip_v4 inet NOT NULL,
caller_id_name VARCHAR,
caller_id_number VARCHAR,
destination_number VARCHAR NOT NULL,
context VARCHAR NOT NULL,
start_stamp TIMESTAMP WITH TIME zone NOT NULL,
answer_stamp TIMESTAMP WITH TIME zone,
end_stamp TIMESTAMP WITH TIME zone NOT NULL,
duration INT NOT NULL,
billsec INT NOT NULL,
hangup_cause VARCHAR NOT NULL,
uuid uuid NOT NULL,
bleg_uuid uuid,
accountcode VARCHAR,
read_codec VARCHAR,
write_codec VARCHAR,
sip_hangup_disposition VARCHAR,
ani VARCHAR
);
fscdr=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "fscdr";
fscdr=# GRANT USAGE, SELECT ON SEQUENCE cdr_id_seq TO fscdr;
Теперь разрешаем пользователю fscdr соединяться с базой по логину и паролю:
# nano /var/lib/pgsql/data/pg_hba.conf
# IPv4 local connections:
host all bsdb 127.0.0.1/32 md5
Рестартуем сервис PostgreSQL:
# systemctl restart postgresql-15
Создадим базу данных fscdr. Пользователя fscdr с паролем fscdrpassword.
# sudo -i -u postgres
$ psql
postgres=# CREATE DATABASE fscdr;
postgres=# CREATE USER fscdr WITH PASSWORD 'fscdrpassword';
postgres=# GRANT ALL PRIVILEGES ON DATABASE fscdr to fscdr;
postgres=# \c fscdr
fscdr=# CREATE TABLE cdr (
id serial PRIMARY KEY,
local_ip_v4 inet NOT NULL,
caller_id_name VARCHAR,
caller_id_number VARCHAR,
destination_number VARCHAR NOT NULL,
context VARCHAR NOT NULL,
start_stamp TIMESTAMP WITH TIME zone NOT NULL,
answer_stamp TIMESTAMP WITH TIME zone,
end_stamp TIMESTAMP WITH TIME zone NOT NULL,
duration INT NOT NULL,
billsec INT NOT NULL,
hangup_cause VARCHAR NOT NULL,
uuid uuid NOT NULL,
bleg_uuid uuid,
accountcode VARCHAR,
read_codec VARCHAR,
write_codec VARCHAR,
sip_hangup_disposition VARCHAR,
ani VARCHAR
);
fscdr=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "fscdr";
fscdr=# GRANT USAGE, SELECT ON SEQUENCE cdr_id_seq TO fscdr;
Теперь разрешаем пользователю fscdr соединяться с базой по логину и паролю:
# nano /var/lib/pgsql/data/pg_hba.conf
# IPv4 local connections:
host all bsdb 127.0.0.1/32 md5
Рестартуем сервис PostgreSQL:
# systemctl restart postgresql-15
2. Устанавливаем расширение mod_cdr_pg_csv для Freeswitch.
В моей инсталляции Freeswitch был собран из исходных кодов, поэтому модуль нужно так же зобрать из исходных кодов.
# export PKG_CONFIG_PATH=/usr/pgsql-15/lib/pkgconfig:/usr/lib/pkgconfig
# cd /usr/src/freeswitch/src/mod/event_handlers/mod_cdr_pg_csv/
# make install
Теперь в директории с модулями Freeswitch должны появитсья файлы расширения - mod_cdr_pg_csv
# ls -l /usr/lib64/freeswitch/mod/ | grep mod_cdr_pg_csv
Проверка загрузки модуля в Freeswitch
# fs_cli
> load mod_cdr_pg_csv
+OK Reloading XML
+OK
[CONSOLE] switch_loadable_module.c:1772 Successfully Loaded [mod_cdr_pg_csv]
В моей инсталляции Freeswitch был собран из исходных кодов, поэтому модуль нужно так же зобрать из исходных кодов.
# export PKG_CONFIG_PATH=/usr/pgsql-15/lib/pkgconfig:/usr/lib/pkgconfig
# cd /usr/src/freeswitch/src/mod/event_handlers/mod_cdr_pg_csv/
# make install
Теперь в директории с модулями Freeswitch должны появитсья файлы расширения - mod_cdr_pg_csv
# ls -l /usr/lib64/freeswitch/mod/ | grep mod_cdr_pg_csv
Проверка загрузки модуля в Freeswitch
# fs_cli
> load mod_cdr_pg_csv
+OK Reloading XML
+OK
[CONSOLE] switch_loadable_module.c:1772 Successfully Loaded [mod_cdr_pg_csv]
3. Включаем модуль mod_cdr_pg_csv для загрузки при старте Freeswitch
# nano /etc/freeswitch/autoload_configs/modules.conf.xml
Добавляем строку:
<load module="mod_cdr_pg_csv"/>
Рестартуем Freeswitch:
# systemctl restart freeswitch
Проверить, что модуль загрузился после старта можно так:
# fs_cli
> module_exists mod_cdr_pg_csv
true
# nano /etc/freeswitch/autoload_configs/modules.conf.xml
Добавляем строку:
<load module="mod_cdr_pg_csv"/>
Рестартуем Freeswitch:
# systemctl restart freeswitch
Проверить, что модуль загрузился после старта можно так:
# fs_cli
> module_exists mod_cdr_pg_csv
true
4. Настраиваем связку Freeswitch и PostgreSQL:
# nano autoload_configs/cdr_pg_csv.conf.xml
Раскомментируем строки:
<param name="db-table" value="cdr"/>
....
<field var="sip_hangup_disposition"/>
<field var="ani"/>
и правим строку с авторизационными данными:
<param name="db-info" value="host=127.0.0.1 dbname=fscdr user=fscdr password='fscdrpassword' connect_timeout=10" />
# nano autoload_configs/cdr_pg_csv.conf.xml
Раскомментируем строки:
<param name="db-table" value="cdr"/>
....
<field var="sip_hangup_disposition"/>
<field var="ani"/>
и правим строку с авторизационными данными:
<param name="db-info" value="host=127.0.0.1 dbname=fscdr user=fscdr password='fscdrpassword' connect_timeout=10" />
Теперь все данные о вызовах (включая не успешные) будут записываться в базу данных.
Комментариев нет:
Отправить комментарий