8(499)-709-97-83
Работаем с 8:00 до 19:00

Подключение Asterisk к PostgreSQL через драйвер ODBC

  • 29 сентября 2015

Ранее, мы рассматривали как подключить Asterisk к MySQL через драйвер ODBC, читать здесь. В этой статье мы расскажем, как сделать тоже самое, но с БД PostgreSQL. Теорию можно прочитать в прошлой статье, в этой статье перейдем сразу к практике.

Исходные данные теже:

- Сервер с Asterisk 13, на ОС Centos 6.5 (x86_64) / Ubuntu Server 14.10 (x86_64)

- Сервер с PostgreSQL 9.4.

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

yum install unixodbc unixodbc-devel libtool-ltdl libtool-ltdl-devel

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

sudo apt-get install unixodbc unixodbc-dev odbc-postgresql

Далее необходим отредактировать файл /etc/odbcinst.ini. В Centos он уже существует, в Ubuntu он существует, но файл пустой.

nano /etc/odbcinst.ini

Проверьте правильно ли указаны пути к драйверам ODBC.

1) Для Centos x86_x64:

[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/lib/libodbcpsql.so
Setup = /usr/lib/libodbcpsqlS.so
FileUsage = 1

Для Centos x64:

[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/lib64/libodbcpsql.so
Setup = /usr/lib64/libodbcpsqlS.so
FileUsage = 1

2) Для Ubuntu:

[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/lib/x86_64-linux-gnu/odbc/psqlodbca.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcpsqlS.so
FileUsage = 1

Далее проверяем видит ли ODBC драйвер для PostgreSQL. Вводим команду

odbcinst -q -d

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

odbcinst -q -d
[PostgreSQL]

После этого отредактируем файл /etc/odbc.ini, это файл используется для создания идентификатора для Asterisk. Т.е. Asterisk, в своей конфигурации, будет ссылается на название, указанное в этом файле.

nano /etc/odbc.ini

Для Centos и Ubuntu файл выглядит одинаково:

[PostgreSQL-asteriskcdrdb]
Description = PostgreSQL connection to 'asteriskcdrdb' database
Driver = PostgreSQL
Database = asteriskcdrdb
Servername = localhost
UserName = asteriskuser
Password = your_password_from_database
Port = 5432
Protocol = 9.4
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ShowOidColumn = No
FakeOidIndex = No
ConnSettings =

Т.е. в нашем примере, Asterisk в своих конфигурационных файлах будет использовать идентификатор [PostgreSQL-asteriskcdrdb].

Если мы хотим подключиться к сторонней базе данных, т.е. установленной на другом сервере, нежели Asterisk, то в файле /etc/odbc.ini необходимо просто изменить строчку server=localhost на server=IPадресБД (в нашем примере 192.168.7.17)

[PostgreSQL-asteriskcdrdb]
Description = PostgreSQL connection to 'asteriskcdrdb' database
Driver = PostgreSQL
Database = asteriskcdrdb
Servername = 192.168.7.17
UserName = asteriskuser
Password = your_password_from_database
Port = 5432
Protocol = 9.4
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ShowOidColumn = No
FakeOidIndex = No
ConnSettings =

Далее необходимо проверить сможем ли мы подключиться к базе данных, используя утилитку ISQL. Введите следующую команду и вы должны увидеть схожий вывод.

echo "select 1" | isql -v PostgreSQL-asteriskcdrdb
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> select 1
+---------------------+
| 1 |
+---------------------+
| 1 |
+---------------------+
SQLRowCount returns 1
1 rows fetched
SQL> [root@asterisk psql]#

Теперь перейдем к настройкам PostgreSQL.

1) Создадим базу данных asteriskcdrdb

createdb asteriskcdrdb

3) Переходим в базу данных

psql asteriskcdrdb

4) Создадим две таблицы CDR и CEL.

CREATE TABLE cdr ( 
calldate timestamptz ,
clid varchar (80) ,
src varchar (80) ,
dst varchar (80) ,
dcontext varchar (80) ,
channel varchar (80) ,
dstchannel varchar (80) ,
lastapp varchar (80) ,
lastdata varchar (80) ,
duration int DEFAULT 0,
billsec int DEFAULT 0,
disposition varchar (45) ,
amaflags int DEFAULT 0,
accountcode varchar (20) ,
uniqueid varchar (32) ,
userfield varchar (255) ,
did varchar(50) ,
recordingfile varchar(255) ,
cnum varchar(40) ,
cnam varchar(40) ,
outbound_cnum varchar(40) ,
outbound_cnam varchar(40) ,
dst_cnam varchar(40)
);

CREATE INDEX calldate
ON cdr (calldate);
CREATE INDEX dst
ON cdr (dst);
CREATE INDEX accountcode
ON cdr (accountcode);
CREATE INDEX uniqueid
ON cdr (uniqueid);
CREATE TABLE cel (
id serial ,
eventtype varchar(30) ,
eventtime timestamp ,
cid_name varchar(80) ,
cid_num varchar(80) ,
cid_ani varchar(80) ,
cid_rdnis varchar(80) ,
cid_dnid varchar(80) ,
exten varchar(80) ,
context varchar(80) ,
channame varchar(80) ,
src varchar(80) ,
dst varchar(80) ,
channel varchar(80) ,
dstchannel varchar(80) ,
appname varchar(80) ,
appdata varchar(80) ,
amaflags int ,
accountcode varchar(20) ,
uniqueid varchar(32) ,
linkedid varchar(32) ,
peer varchar(80) ,
userdeftype varchar(255) ,
eventextra varchar(255) ,
userfield varchar(255) ,
CONSTRAINT asterisk_cel_id_pk PRIMARY KEY (id) );

CREATE INDEX uniqueid_index
ON cel (uniqueid);
CREATE INDEX linkedid_index
ON cel (linkedid);

5) Дадим права пользователю asterisk на работы с БД asteriskadcdb

ALTER TABLE cdr OWNER TO asteriskuser;
ALTER TABLE cel OWNER TO asteriskuser;
 

Далее необходимо пересобрать Asterisk, выбрав модули связанные с odbc.

$ cd /usr/src/asterisk/13
$ ./configure
$ make menuselect
$ make install

В файл /etc/asterisk/res_odbc.conf добавляем следующие строчки.

[asteriskcdrdb]
enabled=>yes
dsn=>PostgreSQL-asteriskcdrdb
pooling=>no
limit=>1
pre-connect=>yes
username=>asteriskuser
password=>your_password_from_database

Параметр DSN отвечает за подключение Asterisk к базе данных, указанной в файле /etc/odbc.ini. Этот параметр говорит Asterisk, что необходимо открыть и поддерживать соединение с базой данных при загрузке модуля res_odbc.so.

Перезапустим сервис Asterisk

service asterisk restart

Через CLI Asterisk проверим подключение к БД через драйвер ODBC/

*CLI> odbc show

ODBC DSN Settings
-----------------

Name: asteriskcdrdb
DSN: PostgreSQL-asteriskcdrdb
Last connection attempt: 1970-01-01 03:00:00
Pooled: No
Connected: Yes

Далее отредактируем файлы, связанные с CDR и CEL.

1) В файл /etc/asterisk/cdr_odbc.conf добавляем следующие строчки.

[asteriskcdrdb]
connection=asteriskcdrdb
loguniqueid=yes
table=cdr
alias start => calldate

2) В файл /etc/asterisk/cel_odbc.conf добавляем следующие строчки.

[cel]
connection=asteriskcdrdb
loguniqueid=yes
table=cel

Как видно из двух статей, при помощи ODBC можно легко мигрировать между разными базами данных.

 
Powered by SEO CMS ver.: 23.1 TOP 2 (opencartadmin.com)