Колонка инженера:

Четыре года назад моя жизнь переплелась с этой замечеательной АТС! На сегодняшний день я не могу на 100% сказать что существует еще АТС лучше чем Asterisk по соотоношению цена/качество.

В данном блоге будут представлены всевозможные конфигурации для этой замечательной АТС.

Asterisk + MySQL

Оставил Евгений Крылов. Дата:

Создаем БД asterisk и раздаем права:

mysql -u<ЛОГИН_MYSQL> -p<ПАРОЛЬ_MYSQL> -e 'SET character_set_server = utf8'
mysql -u<ЛОГИН_MYSQL> -p<ПАРОЛЬ_MYSQL> -e 'SET collation_server = utf8_general_ci'
mysql -u<ЛОГИН_MYSQL> -p<ПАРОЛЬ_MYSQL> -e 'create database asteriskdb'
mysql -u<ЛОГИН_MYSQL> -p<ПАРОЛЬ_MYSQL> asteriskdb -e "GRANT all ON asteriskdb.* TO asterisk@localhost IDENTIFIED BY 'ПАРОЛЬ_ДЛЯ_АСТЕРИСКА'"

Создаем таблицы:

СREATE 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 '',
KEY `calldate` (`calldate`),
KEY `src` (`src`),
KEY `dst` (`dst`),
KEY `uniqueid` (`uniqueid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `queue_member_table` (
`uniqueid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`membername` varchar(40) DEFAULT NULL,
`queue_name` varchar(128) DEFAULT NULL,
`interface` varchar(128) DEFAULT NULL,
`penalty` int(11) DEFAULT NULL,
`paused` int(11) DEFAULT NULL,
PRIMARY KEY (`uniqueid`),
UNIQUE KEY `queue_interface` (`queue_name`,
`interface`)
) ENGINE=MyISAM AUTO_INCREMENT=126 DEFAULT CHARSET=utf8;

CREATE TABLE `queue_table` (
`name` varchar(128) NOT NULL,
`musiconhold` varchar(128) DEFAULT NULL,
`announce` varchar(128) DEFAULT NULL,
`context` varchar(128) DEFAULT NULL,
`timeout` int(11) DEFAULT NULL,
`monitor_join` tinyint(1) DEFAULT NULL,
`monitor_format` varchar(128) DEFAULT NULL,
`queue_youarenext` varchar(128) DEFAULT NULL,
`queue_thereare` varchar(128) DEFAULT NULL,
`queue_callswaiting` varchar(128) DEFAULT NULL,
`queue_holdtime` varchar(128) DEFAULT NULL,
`queue_minutes` varchar(128) DEFAULT NULL,
`queue_seconds` varchar(128) DEFAULT NULL,
`queue_lessthan` varchar(128) DEFAULT NULL,
`queue_thankyou` varchar(128) DEFAULT NULL,
`queue_reporthold` varchar(128) DEFAULT NULL,
`announce_frequency` int(11) DEFAULT NULL,
`announce_round_seconds` int(11) DEFAULT NULL,
`announce_holdtime` varchar(128) DEFAULT NULL,
`retry` int(11) DEFAULT NULL,
`wrapuptime` int(11) DEFAULT NULL,
`maxlen` int(11) DEFAULT NULL,
`servicelevel` int(11) DEFAULT NULL,
`strategy` varchar(128) DEFAULT NULL,
`joinempty` varchar(128) DEFAULT NULL,
`leavewhenempty` varchar(128) DEFAULT NULL,
`eventmemberstatus` tinyint(1) DEFAULT NULL,
`eventwhencalled` tinyint(1) DEFAULT NULL,
`reportholdtime` tinyint(1) DEFAULT NULL,
`memberdelay` int(11) DEFAULT NULL,
`weight` int(11) DEFAULT NULL,
`timeoutrestart` tinyint(1) DEFAULT NULL,
`periodic_announce` varchar(50) DEFAULT NULL,
`periodic_announce_frequency` int(11) DEFAULT NULL,
`ringinuse` tinyint(1) DEFAULT NULL,
`setinterfacevar` tinyint(1) DEFAULT NULL,
`description` varchar(128) DEFAULT NULL,
PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `sip_buddies` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) NOT NULL,
`ipaddr` varchar(45) DEFAULT NULL,
`port` int(5) DEFAULT NULL,
`regseconds` int(11) DEFAULT NULL,
`defaultuser` varchar(10) DEFAULT NULL,
`fullcontact` varchar(35) DEFAULT NULL,
`regserver` varchar(20) DEFAULT NULL,
`useragent` varchar(80) DEFAULT NULL,
`lastms` int(11) DEFAULT NULL,
`host` varchar(40) DEFAULT NULL,
`type` enum('friend','user','peer') DEFAULT NULL,
`context` varchar(40) DEFAULT NULL,
`permit` varchar(40) DEFAULT NULL,
`deny` varchar(40) DEFAULT NULL,
`secret` varchar(40) DEFAULT NULL,
`md5secret` varchar(40) DEFAULT NULL,
`remotesecret` varchar(40) DEFAULT NULL,
`transport` enum('udp','tcp','udp,tcp','tcp,udp') DEFAULT NULL,
`dtmfmode` enum('rfc2833','info','shortinfo','inband','auto') DEFAULT NULL,
`directmedia` enum('yes','no','nonat','update') DEFAULT NULL,
`nat` varchar(30) DEFAULT 'auto_force_rport,auto_comedia',
`callgroup` varchar(40) DEFAULT NULL,
`pickupgroup` varchar(40) DEFAULT NULL,
`language` varchar(40) DEFAULT NULL,
`allow` varchar(40) DEFAULT NULL,
`disallow` varchar(40) DEFAULT NULL,
`insecure` varchar(40) DEFAULT NULL,
`trustrpid` enum('yes','no') DEFAULT NULL,
`progressinband` enum('yes','no','never') DEFAULT NULL,
`promiscredir` enum('yes','no') DEFAULT NULL,
`useclientcode` enum('yes','no') DEFAULT NULL,
`accountcode` varchar(40) DEFAULT NULL,
`setvar` varchar(40) DEFAULT NULL,
`callerid` varchar(40) DEFAULT NULL,
`amaflags` varchar(40) DEFAULT NULL,
`callcounter` enum('yes','no') DEFAULT NULL,
`busylevel` int(11) DEFAULT NULL,
`allowoverlap` enum('yes','no') DEFAULT NULL,
`allowsubscribe` enum('yes','no') DEFAULT NULL,
`videosupport` enum('yes','no') DEFAULT NULL,
`maxcallbitrate` int(11) DEFAULT NULL,
`rfc2833compensate` enum('yes','no') DEFAULT NULL,
`mailbox` varchar(40) DEFAULT NULL,
`session-timers` enum('accept','refuse','originate') DEFAULT NULL,
`session-expires` int(11) DEFAULT NULL,
`session-minse` int(11) DEFAULT NULL,
`session-refresher` enum('uac','uas') DEFAULT NULL,
`t38pt_usertpsource` varchar(40) DEFAULT NULL,
`regexten` varchar(40) DEFAULT NULL,
`fromdomain` varchar(40) DEFAULT NULL,
`fromuser` varchar(40) DEFAULT NULL,
`qualify` varchar(40) DEFAULT NULL,
`defaultip` varchar(40) DEFAULT NULL,
`rtptimeout` int(11) DEFAULT NULL,
`rtpholdtimeout` int(11) DEFAULT NULL,
`sendrpid` enum('yes','no') DEFAULT NULL,
`outboundproxy` varchar(40) DEFAULT NULL,
`callbackextension` varchar(40) DEFAULT NULL,
`registertrying` enum('yes','no') DEFAULT NULL,
`timert1` int(11) DEFAULT NULL,
`timerb` int(11) DEFAULT NULL,
`qualifyfreq` int(11) DEFAULT NULL,
`constantssrc` enum('yes','no') DEFAULT NULL,
`contactpermit` varchar(40) DEFAULT NULL,
`contactdeny` varchar(40) DEFAULT NULL,
`usereqphone` enum('yes','no') DEFAULT NULL,
`textsupport` enum('yes','no') DEFAULT NULL,
`faxdetect` enum('yes','no') DEFAULT NULL,
`buggymwi` enum('yes','no') DEFAULT NULL,
`auth` varchar(40) DEFAULT NULL,
`fullname` varchar(40) DEFAULT NULL,
`trunkname` varchar(40) DEFAULT NULL,
`cid_number` varchar(40) DEFAULT NULL,
`callingpres` enum('allowed_not_screened','allowed_passed_screen',
'allowed_failed_screen','allowed','prohib_not_screened',
'prohib_passed_screen','prohib_failed_screen','prohib') DEFAULT NULL,
`mohinterpret` varchar(40) DEFAULT NULL,
`mohsuggest` varchar(40) DEFAULT NULL,
`parkinglot` varchar(40) DEFAULT NULL,
`hasvoicemail` enum('yes','no') DEFAULT NULL,
`subscribemwi` enum('yes','no') DEFAULT NULL,
`vmexten` varchar(40) DEFAULT NULL,
`autoframing` enum('yes','no') DEFAULT NULL,
`rtpkeepalive` int(11) DEFAULT NULL,
`call-limit` int(11) DEFAULT NULL,
`g726nonstandard` enum('yes','no') DEFAULT NULL,
`ignoresdpversion` enum('yes','no') DEFAULT NULL,
`allowtransfer` enum('yes','no') DEFAULT NULL,
`dynamic` enum('yes','no') DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `ipaddr` (`ipaddr`,`port`),
KEY `host` (`host`,`port`),
KEY `context` (`context`),
) ENGINE=InnoDB AUTO_INCREMENT=285 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

Создаем конфиг ODBC для связи с MYSQL:

[MySQL-asterisk]
Driver = MySQL
Description = MySQL Connector for Asterisk
Server = 127.0.0.1
Port = 3306
Database = asteriskdb
username = asterisk
password = <ПАРОЛЬ_АСТЕРИСКА>
Option = 3
Socket = /var/run/mysqld/mysqld.sock
Charset = utf8

Описываем используемый драйвер для подключения к MYSQL (для 32битной системы)

[Default]
Driver = /usr/lib/i386-linux-gnu/odbc/libmyodbc.so
[MySQL]
Description = MySQL driver
Driver = /usr/lib/i386-linux-gnu/odbc/libmyodbc.so
Setup = /usr/lib/i386-linux-gnu/odbc/libodbcmyS.so
Для x64 путь будет немного другой
/usr/lib/x86_64-linux-gnu/odbc/

Качаем Asterisk

wget --directory-prefix /usr/src/ http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
cd /usr/src/ && tar xvf asterisk-13-current.tar.gz && cd /usr/src/asterisk-13.*
contrib/scripts/get_mp3_source.sh

Проверяем модули и запускаем меню сборки:

./configure
make menuselect

Выбираем то, что нужно, и не забываем модуль REALTIME. И выполняем сборку, установку конфигов, и скрипт запуска:

make && make install
make samples && make config
make install-logrotate

Прописываем в конфигах Asterisk параметры odbc и realtime конфигурации

nano /etc/asterisk/res_odbc.conf
[asterisk]
enabled=yes
dsn=MySQL-asterisk
username=asterisk
password=<ПАРОЛЬ АСТЕРИСКА>
pooling=no
limit=1
pre-connect=yes
share_connections=yes
sanitysql=select 1
isolation=repeatable_read

nano /etc/asterisk/extconfig.conf
sippeers => odbc,asterisk,sip_buddies
sipusers => odbc,asterisk,sip_buddies
queues => odbc,asterisk,queue_table
queue_members => odbc,asterisk,queue_member_table

nano /etc/asterisk/cdr_odbc.conf
[global]
dsn=asterisk
loguniqueid=yes
table=cdr
dispositionstring=yes
usegmtime=no
hrtime=yes

Остальные параметры на ваше усмотрение.

Запускаем Asterisk

/etc/init.d/asterisk start

Релодим конфиг и проверяем что нет ошибок odbc

asterisk -r
reload

Добавляем абонента в БД, и проверяем в Asterisk

mysql -u<ЛОГИН_MYSQL> -p<ПАРОЛЬ_MYSQL> asteriskdb -e "INSERT INTO sip_buddies (name,type,defaultuser,host,secret,callerid,nat,context,callgroup,pickupgroup,directmedia,`call-limit`) values ('номер','friend','номер','dynamic','пароль','Имя абонента','auto_force_rport,auto_comedia','контекст','колгруппа','пикапгруппа','no','кол-во одновр. звонков')"
Заходим в Asterisk и релодим SIP конфиг (пир появится только при регистрации абонента): asterisk -r
sip show peers

500/500 10.0.0.52 D Auto (No) Auto (No) 5060 OK (58 ms) Cached RT

Имейте ввиду что нужно включить сохранение риалтайм пиров в sip.conf
rtcachefriends=yes
rtcache=yes

Надеюсь у вас все получилось!

Тэги: asterisk, mysql, realtime, cdr

Комментарии (0)  •  02 февраля , 2016  • 

Наши контакты

ООО "ТВОЯ АТС"
630117,г.Новосибирск, ул. Арбузова, д.1/1, корп. 14, офис 25
ИНН:5408007763,КПП:540801001
sales@tvoya-ats.ru
+7 (383) 239-66-31
Установка и настройка asterisk в Новосибирске|Реализация и настройка Мини-АТС|Установка и настройка телекоммуникационного оборудования|Видео-наблюдение Новосибирск
Besucherzahler
счетчик посещений