» » » IP АТС на коленке. Asterisk + Zadarma

IP АТС на коленке. Asterisk + Zadarma
 
Я давно задумывался над вопросом IP телефонии, а тут представилась возможность: сказали сделать со сроком "позавчера" и чтоб подешевле. Рассматривал несколько вариантов:

Статья обновлена 30.10.2017
  1. 3CX - готовая АТС. Всё бы хорошо - но начальство сказало дорого. К тому же уйдёт некоторое время на разбирательство, что как и почему.
  2. Mango-Office - одна из не многих причин выбора этой конторы - это то что их офис рядом. Можно пойти и попинать. Мы хотели у них брать пару номеров и SIP-транк. Уже было чуть не заключили с ними договор, но наткнулись на кучу негативных отзывов. А все положительные были от людей у которых по 2 отзыва, оба из которых делались в один день с разницой по времени в пару минут. К тому же даже если брать у них только SIP транк и пару номеров - они включают в счёт ВАТС. И без неё ни как нельзя. Начальству это не понравилось.
  3. AskoziaPBX - хорошее решение на основе Asterisk'a. Купил, скачал, залил на флешку и работаешь. Не устроила ценовая политика.
Терпев фиаско одно за другим, получая от начальства подзатыльники было принято решение сделать всё на своих мощностях своими руками.Насмотревшись на то как Askozia хороша и проста в работе, было принято решение всё запустить на Asterisk'e. Осталось найти провайдера SIP телефонии который предоставит номера и собственно сам SIP-транк без навязывания дополнительных ненужных услуг. Под раздачу попали местные городские и региональные операторы: Билайн, Мегафон, Орион, Ростелеком и т.д. Подробно расписывать почему мы не стали с ними работать не буду, скажу только что где-то дорого, где-то навязывают лишнее, где-то просто не смогли донести до манагера что нам надо.

Пока смотрели местных операторов, на глаза попадались разные конторы которые предоставляли как и номера, так и сами транки. И вот среди них нам попался "Задарма". Цены порадовали, условия тоже. Так же понравилась гибкость и система управления в личном кабинете. В итоге решили на нём всё и протестировать. Зарегистрировали аккаунт (скажу что при регистрации на счету 20 рублей чего достаточно чтобы совершать тестовые звонки для проверки связи и проверки настройки АТС), и занялись установкой Asterisk'a. На самом сайте можно скачать готовые ISO образы для установки на различные ОС (в т.ч. и Windows. Правда видимо проект закрыт, т.к. обновлений на нём не видно), и почитать информацию о нём. В интернете есть множество статей на эту тему, я же предоставлю вам адаптацию нескольких статей с некоторыми правками под себя. В статье я буду предполагать что вы ознакомлены с системными и хардварными требованиями для VoIP и в частности Asterisk'a. И так начнём. Я буду ставить Asterisk на ОС Centos 7.

Установка Centos 7 не тревиальна и проста. Если вы хоть раз ставили хоть одну операционку, то и тут ни каких сложностей у вас возникнуть не должно. Я всегда скачиваю образ с оф сайта и ставлю его. Там графический интерфейс, к тому же с русским языком. Разораться проблем не составит. Там же сразу можно настроить сеть и часовой пояс, чтобы в последствии этим не заморачиваться.

Единственная рекомендация которая у меня будет: если ставите на виртуалку, подготовте сразу либо два диска, либо один достаточно ёмкий. На случай если решите делать запись разговоров.И так. После установки системы, приступим к её первоначальной настройке.

Подготовка системы

Я предпочитаю работать из консоли putty по ssh, чтобы это сделать вначале откроем доступ. Чтобы это сделать, нужно отредактировать конфиг. Редактировать я предпочитаю в nano. Так что установим его для начала

yum -y install nano

после чего редактируем конфиг

nano /etc/ssh/sshd_config

и расcкомментируем там две строчки

Port 22
PermitRootLogin yes

Теперь перезапустим демона ssh

service sshd restart

Теперь можно цепляться по ssh и продолжить работу. Посмотрим на версию системы

uname -a

Linux testphone 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

и запустим обновление

yum update

После нам следует обновить ядро системы. Из коробки это не делается, поэтому добавим ключ

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

обновим модуль fastestmirror если требуется и собственно запустим обновление ядра

yum install yum-plugin-fastestmirror
yum --enablerepo=elrepo-kernel install kernel-ml


Как мы помним у нас стоит версия 3.10, на момент написания статьи - 4.13. После обновления ядра, следует указать системе грузиться с него по умолчанию (в противном случае при загрузке системы нужно будет его выбирать вручную)

grub2-set-default 0

Теперь отключим SElinux.

nano /etc/sysconfig/selinux

Изменяем Значение

SELINUX=disabled

Так же в этой статье я не буду касаться вопроса безопастноси, поэтому отключаем штатный фаервол

systemctl stop firewalld
systemctl disable firewalld

Далее рекомендую установить webmin. Считаю его в некоторых случаях довольно полезным. Но в этой статье мы его использовать не будем. Создадим файл

nano /etc/yum.repos.d/webmin.repo

со следующим содержимым

[Webmin]
name=Webmin Distribution Neutral
#baseurl=http://download.webmin.com/download/yum
mirrorlist=http://download.webmin.com/download/yum/mirrorlist
enabled=1

импортировав ключ

rpm --import http://www.webmin.com/jcameron-key.asc

запустим установку

yum install -y webmin

После установки можно войти в панель WebMin по адресу https://ваш_ip:10000. Логин и пароль использовать от root.


Теперь перегружаемся

reboot

Установка Asterisk

 
Теперь приступим к установке самого Asterisk'a. Для начала подключим дополнительный репозиторий и установим всё что нам может потребоваться.

yum -y install epel-release
yum -y install lynx mariadb-server mariadb php php-mysql php-mbstring tftp-server httpd ncurses-devel sendmail sendmail-cf sox newt-devel libxml2-devel libtiff-devel audiofile-devel gtk2-devel subversion kernel-devel git php-process crontabs cronie cronie-anacron wget vim php-xml uuid-devel sqlite-devel net-tools gnutls-devel php-pear phpmyadmin
yum -y groupinstall core base "Development Tools"

Теперь приступим к скачиванию и установке pjproject

cd /usr/src
wget http://www.pjsip.org/release/2.4/pjproject-2.4.tar.bz2
tar -xjvf pjproject-2.*
cd pjproject-2.*
CFLAGS='-DPJ_HAS_IPV6=1' ./configure --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr --libdir=/usr/lib64
make dep
make
make install

Скачиваем и устанавливаем jansson:

cd /usr/src
wget -O jansson.tar.gz https://github.com/akheron/jansson/archive/v2.7.tar.gz
tar vxfz jansson.tar.gz
cd jansson-*
autoreconf -i
./configure --libdir=/usr/lib64
make
make install

И собственно скачиваем и ставим сам астериск

cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
tar xvfz asterisk-13-current.tar.gz
cd asterisk-*
contrib/scripts/install_prereq install
contrib/scripts/get_mp3_source.sh
./configure --libdir=/usr/lib64
make menuselect

Выбираем необходимые модули и звуки:
  • Add-ons: format_mp3, res_config_mysql, app_mysql и cdr_mysql.
  • Core Sound Packages: Выбираем русские звуки RU-WAV.
  • Music On Hold File Packages: Выбираем звук WAV.
  • Extras Sound Packages: Выбираем английский EN-WAV, русского к сожалению нет
Продолжаем установку

make
make install
make samples
make config
ldconfig

Устанавливаем озвучки

cd /var/lib/asterisk/sounds
wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-core-sounds-ru-wav-current.tar.gz
wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-extra-sounds-en-wav-current.tar.gz
tar xvf asterisk-core-sounds-ru-wav-current.tar.gz
tar xvf asterisk-extra-sounds-en-wav-current.tar.gz

Ну вот и готово. Астериск установлен. Добавляем в автозагрузку, стартуем и заходим для теста в консоль

chkconfig asterisk on
service asterisk start
asterisk -r

 
Если мы видим примерно такой вывод, то всё ок. Можно приступать к конфигурации Asterisk'a.

Конфигурирование Asterisk

Для начала нам понадобится телефон, с помощью которого мы сможем цепляться к АТС. Можно использовать IP Телефон, если таковой имеется, либо поставить 3CXPhone. Правда нужно ставить старую версию. Скачать её можно тут и тут. Устанавливаем на компьютер.Теперь нужно создать пользователей на АТС, чтобы мы могли зацепиться. Если мы до сих пор в консоли астериска выходим из неё сочетанием клавиши "Ctrl+C" либо прописываем

exit

В файле конфигурации по умолчанию очень много комментариев, с одной стороны это хорошо, но довольно сильно мешает работе. Поэтому стандартный файл бекапим, старый очищаем :)

cp /etc/asterisk/sip.conf /etc/asterisk/sip_bck.conf
rm /etc/asterisk/sip.conf
nano /etc/asterisk/sip.conf

Мой файл получился вот таким:

[general]
;Внешний ip адрес
externaddr=195.66.89.235:5060
;Указываем использовать русскую озвучку
language=ru
context=default
allowoverlap=no
udpbindaddr=0.0.0.0
tcpenable=no
tcpbindaddr=0.0.0.0
transport=udp
srvlookup=yes
allowguest=no
limitonpeers=yes
[authentication]
;Создаем шаблон для телефонов Администрации
[adm-phones](!)
type=friend
context=call-out
secret=123
host=dynamic
nat=no
qualify=yes
canreinvite=no
callgroup=1
pickupgroup=1
call-limit=2
dtmfmode=auto
disallow=all
allow=alaw
allow=ulaw
allow=g729
allow=g723
allow=g722
;Создаем пользователей администрации
[101](adm-phones)
callerid="Number 101" <101>
[102](adm-phones)
callerid="Number 102" <102>
[103](adm-phones)
callerid="Number 103" <103>
[104](adm-phones)
callerid="Number 104" <104>
[105](adm-phones)
callerid="Number 105" <105>
[106](adm-phones)
callerid="Number 106" <106>
;Создаем шаблон для телефонов ITO
[ito-phones](!)
type=friend
context=call-out
secret=456
host=dynamic
nat=no
qualify=yes
canreinvite=no
callgroup=2
pickupgroup=2
call-limit=2
dtmfmode=auto
disallow=all
allow=alaw
allow=ulaw
allow=g729
allow=g723
allow=g722
;Создаем пользователей ito
[666](ito-phones)
callerid="Number 666" <666>
[777](ito-phones)
callerid="Number 777" <777>
;Создаем шаблон для телефонов мэнеджеров
[man-phones](!)
type=friend
context=call-out
secret=789
host=dynamic
nat=no
qualify=yes
canreinvite=no
callgroup=3
pickupgroup=3
call-limit=2
dtmfmode=auto
disallow=all
allow=alaw
allow=ulaw
allow=g729
allow=g723
allow=g722
;Создаем пользователей менеджеров
[121](man-phones)
callerid="Number 121" <121>
[122](man-phones)
callerid="Number 122" <122>
[123](man-phones)
callerid="Number 123" <123>
[124](man-phones)
callerid="Number 124" <124>
[125](man-phones)
callerid="Number 125" <125>

Остановимся не много подробнее на параметрах
  • callgroup - группа звонков. Можно настроить что призвонке на один номер из этой группы, у остальных тоже будет звонить.
  • pickupgroup - группа перехвата вызова. Если идёт звонок, а человека нет, люди из той же группы могут перехватить вызов на себя.
  • call-limit=2 - количество одновременных вызовов. Допустим человек говорит по телефону, а ему поступает второй вызов. Он может первый поставить на удержание и ответить на второй.
Абонентов создали. Теперь приступим к созданию плана звонков. Чтобы они могли звонить друг другу. С файлом поступаем точно так же как и с предыдущим.

cp /etc/asterisk/extensions.conf /etc/asterisk/extensions_bck.conf
rm /etc/asterisk/extensions.conf
nano /etc/asterisk/extensions.conf

Содержание файла

[general]
static=yes
writeprotect=no
[globals]
[default]
;Вешаем трубку
[handup-sip]
exten => _X!,1,HangUp()
;Исходящие звонки
[call-out]
;Звонок на внутренний номер
exten => _XXX,1,Dial(SIP/${EXTEN})
include => handup-sip

Теперь заходим в консоль и перегружаем asterisk

asterisk -r
reload

Если видите кучу ошибок - это нормально. У нас много чего ещё не настроено. Теперь посмотрим и убедимся в том что абоненты были успешно созданы

sip show users


Теперь попробуем подключиться к нашей атс. Открываем 3CXPhone и настраиваем его следующим образом


При подключении к АТС в консоли астериска вы должны увидеть примерно следующее:

[Oct 30 12:30:25] NOTICE[12641]: chan_sip.c:24586 handle_response_peerpoke: Peer '666' is now Reachable. (109ms / 2000ms)
[Oct 30 12:30:25] NOTICE[12641]: chan_sip.c:28404 handle_request_subscribe: Received SIP subscribe for peer without mailbox: 666

Проверить список подключенных абонентов можно командой

sip show peers

 
Для проверки звонков нам нужно два абонента. Поэтому либо ставим ещё один софтофон на какой либо компьютер, либо в этом же добавляем вторую линию на другой номер. И звоним друг другу. Должно всё работать. Если же не работает, смотрите что сделали не так, либо задавайте вопросы в комментарии.

Добавляем транк

Теперь переходим к добавлению транков. Для этого нам собственно нужен сам SIP транк. В нашей статье мы будем использовать Zadarma. Регистрируемся там и создаём SIP логин. После регистрации и создания транка нам будут интересны следующие его параметры:
  • Сервер - sip.zadarma.com
  • Логин - в моём случае 718824
  • Пароль - password
Редактируем файл /etc/asterisk/sip.conf

nano /etc/asterisk/sip.conf

Добавляем в конец файла настройки транка. Обратите внимания на поле secret: там должен быть ваш пароль

[718824]
host=sip.zadarma.com
insecure=invite,port
type=friend
fromdomain=sip.zadarma.com
disallow=all
allow=alaw
dtmfmode=auto
secret=password
defaultuser=718824
trunkname=718824
fromuser=718824
callbackextension=718824
context=call-in
qualify=400
directmedia=no
nat=force_rport,comedia

Перечитаем конфигурацию, выполнив команду в консоли астериска

sip reload

Если всё гуд, вы увидите примерно такое сообщение:

[Oct 30 12:48:23] NOTICE[12641]: chan_sip.c:24586 handle_response_peerpoke: Peer '718824' is now Reachable. (62ms / 400ms)

Транк подключен. Но звонить пока ещё нельзя. Для этого нужно составить план звонков (диал план)

Составление Dial-плана

В нашем диал плане пока указано что мы можем звонить на 3-х значные номера. Исправим это. Редактируем файл /etc/asterisk/extensions.conf

nano /etc/asterisk/extensions.conf

И приводим его к следующему виду. Изменения я выделил жирным шрифтом

[general]
static=yes
writeprotect=no
[globals]
[default]
;Вешаем трубку
[handup-sip]
exten => _X!,1,HangUp()
;Исходящие звонки
[call-out]
;Звонок на внутренний номер
exten => _XXX,1,Dial(SIP/${EXTEN})
;Звонок на внешний номер
exten => _XXX.,1,Dial(SIP/${EXTEN}@718824)
include => handup-sip
;Входящие звонки
[call-in]
exten => 718824,1,Dial(SIP/666)

Перегружаем астериск из консоли

asterisk -r
reload

Теперь мы можем позвонить. Для этого набираем на нашем софтофоне номер. Можем позвонить на сотовый. Номер должен начинаться с "7". Отвечать не стоит, ибо тогда со счёта будут списаны деньги, а нам ещё нужно будет не раз тестировать звонки.В данном виде АТС уже почти работоспособна. Допустим если купить номер у задарма, то можно будет позвонив по нему попасть на секретаря (в данном случае это номер 666), но у нас нету ни какого голосового меню и люди не будут знать что делать дальше. Поэтому нам нужно настроить голосовое меню.

Настройка голосового меню IVR

Записать голосовое меню можно разными способами, кто то делает это напряму с телефона, кто то через системный телефон, я же запишу отдельно на компьютере, и перекодирую в нужный формат. Кодируем обязательно в Wave/8000 Hz/16Bit/Mono. Кодирование производил AIMP Audioconverter :)И так. Создадим папку где будет лежать голосовое меню

mkdir /etc/asterisk/ivr

И заливаем туда файл. Используйте любой способ. Я заливал через программу WinSCP. Скачать можно тут и тутТеперь отредактируем файл /etc/asterisk/extensions.conf

nano /etc/asterisk/extensions.conf

В конец файла добавляем 

[ivr-main]
exten => s,1,Answer()
;Проигрываем приветствие
exten => s,2,Background(/etc/asterisk/ivr/ivr-main)
;Ждем 5 секунд ввода добавочного номера
exten => s,3,WaitExten(5)
;Звоним по введенному добавочному
exten => _XXX,1,Dial(SIP/${EXTEN})
;Если введен не существующий номер, то говорим об этом и отправляем в начало приветствия
exten => _XXX,2,Playback(privacy-incorrect)
exten => _XXX,3,Goto(ivr-main,s,1)
;Если звонящий ничего не вводит, то звоним секретарю
exten => t,1,Dial(SIP/666)

И заменяем строчку в контектсе [call-in] на

exten => 718824,1,Goto(ivr-main,s,1)

Под спойлером будет полный конфиг

Голосовое меню настроено. Теперь перейдём к очереди входящих вызовов.

Очереди (queues) входящих звонков

Очередь входящих звонков позволяет управлять потоком входящих вызовов и позволяет более гибко их распределять. Настроим очередь следующим образом: после голосового меню, если звонящий не набрал внутренний номер, его перебросит на одного из секретайрей. Номера секретарей будут 666 и 100. Для этого открываем файл /etc/asterisk/queues.conf

nano /etc/asterisk/queues.conf 

и в самый конец добавляем

[secretary]
strategy = ringall
member => SIP/100
member => SIP/666

Параметр strategy может принимать следующие значения
  • ringall - вызываются все доступные участники до тех пор, пока кто-то из них не ответит на вызов (по умолчанию).
  • leastrecent - вызывается первый свободный участник, который меньше всего вызывался из этой очереди.
  • fewestcalls - вызывается первый свободный участник, который обработал наименьшее количество вызовов из данной очереди.
  • random - случайным образом вызывается не занятый участник, обрабатывающий очередь.
  • rrmemory - циклическое распределение с памятью, запоминается последний участник, ответивший на вызов.
Далее в диалплане меняем строчку в контексте с голосовым меню

exten => t,1,Dial(SIP/666)

на новую

exten => t,1,Queue(secretary,t)

После чего перечитываем диалплан в консоли астериска

asterisk -r
reload

и проверяем состояние очереди

queue show secretary

У меня вывод принял следующий вид

testphone*CLI> queue show secretary
secretary has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 0s talktime), W:0, C:0, A:0, SL:0.0% within 0s
 Members:
 SIP/666 (ringinuse enabled) (Not in use) has taken no calls yet
 SIP/100 (ringinuse enabled) (Invalid) has taken no calls yet
 No Callers

SIP/100 Invalid - потому как не создан данный абонент. Я исправлю это в конце когда полностью закончу с настройкой АТС.

Теперь перейдём к самому интересному. Статистика звонков.

Учет и просмотр статистики звонков (cdr viewer)

По умолчанию статистика звонков ведётся в файл /var/log/asterisk/cdr-csv/Master.csv. Там есть все нужные данные, но читать его не очень то и удобно. Поэтому установим и настроим систему которая позволит его преобразовывать в читабельный вид и смотреть через браузер.Для начала запустим и добавим в автозагрузку mariadb

systemctl start mariadb
systemctl enable mariadb.service

Запустим скрипт первоначальной настройки

/usr/bin/mysql_secure_installation

После чего цепляемся в консоль mysql

mysql -uroot -p

Создаём пользователя и базу данных

MariaDB [(none)]> create database asterisk;
MariaDB [(none)]> use asterisk;
MariaDB [asterisk]> CREATE TABLE `cdr` ( `id` int(9) unsigned NOT NULL auto_increment, `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 '', PRIMARY KEY (`id`), KEY `calldate` (`calldate`), KEY `accountcode` (`accountcode`), KEY `uniqueid` (`uniqueid`), KEY `dst` (`dst`), KEY `src` (`src`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
MariaDB [asterisk]> grant all on asterisk.* to 'asterisk_user'@'localhost' identified by '12345678';

  • asterisk - имя базы данных
  • asterisk_user - пользователь базы данных
  • 12345678 - пароль пользователя бд
Ставим obdc коннекторы

yum install -y mysql-connector-odbc.x86_64 unixODBC-devel.x86_64

Редактируем файлы конфигурации. Добавляем в самый конец /etc/asterisk/res_odbc.conf:

[asterisk]
enabled => yes
dsn => MySQL-asterisk
username => asterisk_user
password => 12345678

В конец файла /etc/asterisk/cdr_adaptive_odbc.conf:

[cdr_adaptive_connection]
connection=asterisk
table=cdr
alias start => calldate

Создаем файл /etc/odbc.ini следующего содержания:
[MySQL-asterisk]
Description = MySQL Asterisk database
Driver = MySQL
Server = localhost
User = asterisk_user
Password = 12345678
Socket = /var/lib/mysql/mysql.sock
Database = asterisk

Редактируем файл /etc/odbcinst.ini

[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc5.so
Setup = /usr/lib/libodbcmyS.so
Driver64 = /usr/lib64/libmyodbc5.so
Setup64 = /usr/lib64/libodbcmyS.so
FileUsage = 1
CPTimeout =
CPReuse =

Настроим часовой пояс в файле /etc/asterisk/cdr.conf. Почти в самом конце файла есть параметр usegmtime. Меняем значение на "no"

usegmtime=no

Перегружаем asterisk полностью

service asterisk restart

Теперь история наших звонков сохраняется в mysql базу. Посмотреть её можно подцепившись к ней, либо настроив phpmyadmin. Но я не буду касаться этого вопроса в этой статье.По мимо просмотра статистики звонков, сделаем ещё возможность записывать разговоры (тотальная слежка detected). Для этого установим конвертер lame, ведь мы будем записывать в mp3

cd /usr/src
wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz
tar zxvf lame-3.*
cd lame-3.*
./configure
make
make install

Перед установкой вьювера запустим веб-сервер и добавим его в автозагрузку

systemctl start httpd
systemctl enable httpd

Теперь приступим к установке самого вьювера. Использовать будем  Asterisk-CDR-Viewer-Mod.

cd /usr/src
wget https://github.com/prog-it/Asterisk-CDR-Viewer-Mod/tarball/master 
tar xzvf master

Копируем всё содержимое в папку /var/www/html.Сконфигурируем CDR, для этого зайдём в консоль управления mysql и добавим дополнительное поле для хранения файла с записью

mysql -root -p
use asterisk
alter table `cdr` add column `filename` varchar(120) DEFAULT 'none' after `userfield`;

Редактируем файл /etc/asterisk/cdr_mysql.conf, добавляя в самый конец 2 строки:

alias realdst => realdst
alias filename => filename

Теперь в файле /etc/asterisk/extensions.conf в секции глобал укажем где будут храниться файлы с записями (вот для этого я рекомендую либо использовать другой винт/флешку, либо прицепить NFS)

[globals]
DIR_RECORDS=/mnt/calls/

Теперь добавим макрос для записи звонков перед контекстами звонков

[macro-recording]
exten => s,1,Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(monopt=nice -n 19 /usr/local/bin/lame -b 32 --silent "${DIR_RECORDS}${fname}.wav" "${DIR_RECORDS}${fname}.mp3" && rm -f "${DIR_RECORDS}${fname}.wav" && chmod o+r "${DIR_RECORDS}${fname}.mp3");
exten => s,n,Set(CDR(filename)=${fname}.mp3);
exten => s,n,Set(CDR(realdst)=${ARG2});
exten => s,n,MixMonitor(${DIR_RECORDS}${fname}.wav,b,${monopt});
exten => s,n(no),Verbose(Exit record);

и редактируем сами контексты звонков добавляя туда макрос. Как это выглядит у меня:


Перезапускаем asterisk

service asterisk restart

и конфигурируем подключение CDR к mysql. Для этого переименуем файл /var/www/html/inc/config/config.sample.php в /var/www/html/inc/config/config.php и отредактируем его

nano /var/www/html/inc/config/config.php

Меняем только следующие параметры

$db_type = 'mysql';
$db_host = 'localhost';
$db_port = '3306';
$db_user = 'asterisk_user';
$db_pass = '12345678';
$db_name = 'asterisk';
$db_table_name = 'cdr';
$system_storage_format = 5;
$system_monitor_dir = '/mnt/calls';

После этого можно попробовать совершить звонок, и смотреть статистику.


Вот и всё. АТС настроена и готова к работе :)
Если есть какие то вопросы, не стесняемся, задаём их в коментариях. Ну или связываемся со мной одним из способов описаных на этой странице

Вдохновлялся статьём с сайта serveradmin.ru и основывался на его материалах

{poster_avatar}  ArcheRAWG
4 968 30.10.17


Кликните на изображение чтобы обновить код, если он неразборчив