CentOS 7 & Asterisk 16.
28.12.2018
Всем привет! Вернёмся к теме астериска. И на этот раз попробуем развернуть 16ю версию. Прошлые статьи вполне функциональны и версии 15.6.2, которую там рассматривали вполне достаточно для полноценной работы телефонии. Но мы же всегда хотим стремится к большему. Просто добавим побольше деталей и лоска процессу развёртывания телефонии! Приступим:
Ставлю образ CentOS-7-x86_64-Minimal-1810.iso. Этот процесс вам знаком и рассматривать его не будем. Дальнейшие действия будут происходить уже в подключенном сеансе PuTTY. Делаем всё то что надо сделать на свеже установленном минимальном CentOS:
Смотрим релиз:cat /etc/*release*
Ну а если нас интересует версия ядра, то набираем:
uname -r
Жмём Ctrl+L чтобы очистить терминал и далее отключим SELinux:
sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
Далее отключим «firewalld»:
systemctl stop firewalld
systemctl disable firewalld
Обновим систему и перезагрузим:
yum update -y && reboot
Когда сервер уйдёт в перезагрузку - не нужно закрывать сеанс терминала PuTTY, просто нажмите на значок в левом верхнем углу и перезапустите сеанс:
Далее, традиционно, в качестве хорошего тона настройки серверов, приведём в порядок время:
yum install -y ntp && ntpdate pool.ntp.org && \ chkconfig ntpd on && service ntpd start
Установим несколько первоначально нужных пакетов:
yum -y install NetworkManager-tui net-tools.x86_64 mc nano vim
Взглянем на пакет «NetworkManager-tui» - набираем команду:
nmtui
И как вы могли заметить – это символьно-графический интерфейс, в котором можно изменить сетевые настройки, поменять hostname или же активировать добавленную сетевую карту.
Также благодаря пакету «net-tools.x86_64» нам теперь доступна команда:ifconfig -a
Кстати если написать её с большой буквы, то работать не будет!
А благодаря пакету «mc» у нас есть двух панельный менеджер:
А если вам вдруг не нравиться редактировать файлы в «VI» или в «VIM» или же в «NANO», то можете воспользоваться редактором «mc», который интуитивно понятен тем, кто любил «Norton Commander»:
mcedit /etc/sysconfig/network-scripts/ifcfg-eth0После такого редактирования не забываем перезапустить сетевые службы:
/etc/init.d/network restart
Но вернёмся к теме установки астериска, поставим нужные пакеты:
yum install -y epel-release dmidecode gcc-c++ ncurses-devel libxml2-devel make wget
yum install -y openssl-devel newt-devel kernel-devel sqlite-devel libuuid-devel
yum install -y gtk2-devel jansson-devel binutils-devel bzip2 bzip2-libs patch httpd mod_ssl
yum install -y php php-pear phpmyadmin php-common php-gd php-mysql php-xml php-mbstring
Далее создадим пользователя, от которого будет работать астериск. Сделать это нужно потому что нам может прийти в голову отключить «root» пользователя в целях безопасности.
adduser asterisk && passwd asteriskДаём права «sudo» пользователю asterisk:
gpasswd -a asterisk wheel
Переключаемся на пользователя «asterisk»:
su asterisk
Далее установим библиотеку "PJSIP" - она нужна для функционирования протокола «SIP»:
Создадим каталог «build» и перейдём в него. Кстати значок ~ означает делать всё в домашнем каталоге пользователя от которого исходит команда:
cdmkdir ~/build && cd ~/build
Теперь на машине где есть браузер идём на ресурс https://www.pjsip.org/download.htm и смотрим правильную ссылку которую надо вписать в команду «wget»:
Скачаем исходник «PJSIP»:
wget https://www.pjsip.org/release/2.8/pjproject-2.8.tar.bz2
Распакуем:
tar xvjf pjproject-2.8.tar.bz2
И переходим в распакованный каталог:
cd /home/asterisk/build/pjproject*
Конфигурируем компиляцию (вся команда одной строкой):
./configure CFLAGS="-DNDEBUG -DPJ_HAS_IPV6=1" --prefix=/usr --libdir=/usr/lib64 --enable-shared --disable-video --disable-sound --disable-opencore-amr
Запускаем компиляцию:
sudo make dep
Запускаем дополнительную компиляцию и установку:
sudo make && sudo make install && sudo ldconfig
Система попросит пароль от пользователя «asterisk».
Далее перегружаем систему:
sudo reboot
После загрузки авторизуемся под «asterisk» и вернёмся в наш каталог «pjproject-2.8»:
cd /home/asterisk/build/pjproject-2.8
И затем даём команду:
sudo ldconfig -p | grep pj
Удостоверимся что будет такой вывод:
Установка Asterisk 16
Вернёмся в каталог «build»:cd ~/build
На этот раз качаем исходник самого астериска:
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
Напомню по аналогии с предыдущим скачиванием – если команда не сработала значит меняем ссылку, которую можно взять с сайта www.asterisk.org.
Извлекаем исходник:
tar -zxvf asterisk-16-current.tar.gz
Переходим в распакованный каталог:
cd asterisk*
Для того чтобы можно было использовать «mp3» формат в нашем астериске – на текущем этапе установки скачаем требуемые дополнения:
sudo yum -y install svn
./contrib/scripts/get_mp3_source.sh
Далее традиционное конфигурирование, компиляция и установка:
sudo contrib/scripts/install_prereq install
В моём случае не нашлось пакетов «speexdsp-devel», «iksemel-devel», «libresample-devel» и «hoard»
Но мы продолжаем:
sudo ./configure --libdir=/usr/lib64 --with-jansson-bundled
Дожидаемся победного появления значка «астериск»:
Далее команда:
sudo make menuselect
В появившемся диалоге – в разделе «Add-ons» отметим клавишей «Enter» чеки на пунктах - «chan_mobile», «format_mp3», «app_mysql», «cdr_mysql» и «res_config_mysql»:
Далее в разделе «Applications» выделяем пункт «app_macro»:
Жмём «Save & exit» конечно. И далее долгая компиляция с установкой:
sudo make && sudo make install
В какой-то момент, перед тем как закончить, попросит пароль – будьте внимательны!
Далее генерация файлов образцов конфигураций:
sudo make samples
Затем ставим старт астериска при загрузке системы:
sudo make config
Далее от root пользователя нужно назначить нового владельца каталогам астериска:
su root
chown asterisk. /var/run/asterisk
chown asterisk. -R /etc/asterisk
chown asterisk. -R /var/{lib,log,spool}/asterisk
su asterisk
Ключ на старт - проверяем запуск:
sudo service asterisk start
sudo /sbin/chkconfig asterisk on
sudo asterisk -rvv
Выходим из CLI командой «exit». И ура – астериск установлен и готов к настройке!
Русская озвучка системных сообщений:
sudo mkdir /var/lib/asterisk/sounds/ru
Переходим туда:
cd /var/lib/asterisk/sounds/ru
Качаем пакет звуков:
sudo wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-core-sounds-ru-wav-current.tar.gz
Распаковываем:
sudo tar xfz asterisk-core-sounds-ru-wav-current.tar.gz
Проверим:
ls
Не забываем про момент с пользователем от которого работает астериск – его нужно объявить в файле «/etc/asterisk/asterisk.conf» в разделах runuser и rungroup предварительно раскоментировав их конечно!
nano /etc/asterisk/asterisk.conf;;;;;
runuser=asterisk
rungroup=asterisk
;;;;;
Приступаем к настройке абонентов.
Сразу хочу объявить следующее:Контекст [int[ - это внутренние звонки;
Контекст [ext] - это внешние звонки.
Делаем дубликат файла «sip.conf» и затем переходим к его редактированию:
cp /etc/asterisk/sip.conf /etc/asterisk/sip.conf.init
nano /etc/asterisk/sip.conf
Удаляем всё! – Ставим курсор вверху и жмём «ALT+T» и пишем следующее:
;;;;;
[general]
;тут пишем внешний ip адрес сервера если есть.
externaddr=94.97.200.10: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]
;Шаблон для бухгалтерии
[buh-phones](!)
type=friend
context=int
secret=123
host=dynamic
nat=no
qualify=yes
canreinvite=no
callgroup=1
pickupgroup=1
call-limit=1
dtmfmode=auto
disallow=all
allow=alaw
allow=ulaw
allow=g729
allow=g723
allow=g722
;описание номеров бухгалтерии
[100](buh-phones)
callerid="Number 100" <100>
[101](buh-phones)
callerid="Number 101" <101>
[102](buh-phones)
callerid="Number 102" <102>
;Шаблон для проектировщиков
[project-phones](!)
type=friend
context=int
secret=456
host=dynamic
nat=no
qualify=yes
canreinvite=no
callgroup=2
pickupgroup=2
call-limit=1
dtmfmode=auto
disallow=all
allow=alaw
allow=ulaw
allow=g729
allow=g723
allow=g722
;описание номеров проектного отдела
[111](project-phones)
callerid="Number 111" <111>
[112](project-phones)
callerid="Number 112" <112>
[113](project-phones)
callerid="Number 113" <113>
[114](project-phones)
callerid="Number 114" <114>
;;;;;
Далее нам надо настроить план звонков наших объявленных абонентов в «extensions.conf»:
cp /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.init
nano /etc/asterisk/extensions.conf
Всё стираем и пишем:
;;;;;
[general]
static=yes
writeprotect=no
[globals]
[default]
;Конец разговора
[handup-sip]
exten => _X!,1,HangUp()
;Местные звонки
[int]
;Звонок на внутренний номер
exten => _XXX,1,Dial(SIP/${EXTEN})
include => handup-sip
;;;;;
Вроде можно звонить. Но надо ещё сделать перезагрузку ядра:
asterisk -r
core reload
Настраиваем 2 аппарата – пробуем звонить. Теперь лог этого звонка можно увидеть в файле «/var/log/asterisk/cdr-csv/Master.csv»:
cat /var/log/asterisk/cdr-csv/Master.csv
А теперь добавим внешку на примере нашей любимой из прошлых статей «задармы». Снова редактируем «sip.conf» и в конце дописываем:
;;;;;
[527389]
host=sip.zadarma.com
insecure=invite,port
type=friend
fromdomain=sip.zadarma.com
disallow=all
allow=alaw
dtmfmode=auto
secret=ju8cN3
defaultuser=527389
trunkname=527389
fromuser=527389
callbackextension=527389
context=ext
qualify=400
directmedia=no
nat=force_rport,comedia
;;;;;
Далее, естественно нужно объявить контекст «ext» в диал плане:
В контекст «int» добавим возможность звонить на внешние номера:
exten => _XXX.,1,Dial(SIP/${EXTEN}@527389)
А также добавим контекст «ext», который позволит дозваниваться до нас из вне – но только звонок идёт сразу на номер 100 – предположим там будет голосовое меню.
[ext]exten => 527389,1,Dial(SIP/100)
Теперь наш extensions.conf выглядит вот так:
;;;;;
[general]
static=yes
writeprotect=no
[globals]
[default]
;Конец разговора
[handup-sip]
exten => _X!,1,HangUp()
;местные звонки
[int]
;Звонок на внутренний номер
exten => _XXX,1,Dial(SIP/${EXTEN})
;Звонок на внешний номер
exten => _XXX.,1,Dial(SIP/${EXTEN}@527389)
include => handup-sip
;звонки снаружи
[ext]
exten => 527389,1,Dial(SIP/100)
;;;;;
Перезагрузим ядро:
sudo asterisk -r
core reload
Смотрим регистрацию всех аппаратов в том числе и провайдера:
sip show peers
Проверяем звонки на внешку и из внешки. Ура! Всё работает!
Голосовое меню с приветствием.
План создания голосового меню – Приветствие – Предложение ввести номер абонента – Если не ввёл уводим звонок на секретаря.
А теперь откровение – КАК ЗАПИСАТЬ ГОЛОСОВОЕ МЕНЮ СРАЗУ В ТРУБКУ ТЕЛЕФОНА?
Делаем:
; ; ; ; ; ; ; ; ; ;
;Номер для записи меню, закончить запись жмём #
exten => 00001, 1, NoOp()
exten => 00001, n, Wait(2)
exten => 00001, n, Playback(beep)
exten => 00001, n, Record(/tmp/vmenu${EXTEN:2}:wav)
exten => 00001, n, Wait(1)
exten => 00001, n, Playback(/tmp/vmenu${EXTEN:2})
exten => 00001, n, Wait(2)
exten => 00001, n, Hangup()
; ; ; ; ; ; ; ; ; ;
sudo asterisk -r
dialplan reload
Теперь звоним на номер 00001 – после звукового сигнала наговариваем в трубку наше приветствие и в конце жмём #, и оно упадёт в каталог «/tmp». Файл будет называться «vmenu001.wav». После создаём специальный для голосового меню каталог и копируем созданный файл туда.
mkdir /var/lib/asterisk/moh/vmenucp /tmp/vmenu001.wav /var/lib/asterisk/moh/vmenu
Далее вносим соответствующие изменения в план набора:
nano /etc/asterisk/extensions.conf
Нужно вписать контекст [vmenu]:
;;;;;;;;;;;;;
[vmenu]
exten => s,1,Answer()
;Проигрываем приветствие
exten => s,2,Background(/var/lib/asterisk/moh/vmenu/vmenu001)
;Ждем 5 секунд ввода добавочного номера
exten => s,3,WaitExten(5)
;Звоним по введенному добавочному
exten => _XXX,1,Dial(SIP/${EXTEN})
;Если введен не существующий номер, то говорим об этом и отправляем в начало приветствия
exten => _XXX,2,Playback(privacy-incorrect)
exten => _XXX,3,Goto(vmenu,s,1)
;Если звонящий ничего не вводит, то звоним секретарю
exten => t,1,Dial(SIP/100)
;;;;;;;;;;;;;
Далее в контексте «ext» делаем перенаправление звонков извне от номера 100 на приветствие:
[ext]
exten => _X.,1,Goto(vmenu,s,1)
Сохраняем файл и перезагружаем диал-план.
Проверяем – звоним извне на «задарму» и попадаем на наше приветствие. Ура!
Теперь наш диал-план выглядит вот так:
;;;;;;;;;;;;;
[general]
static=yes
writeprotect=no
[globals]
[default]
;Конец разговора
[handup-sip]
exten => _X!,1,HangUp()
;Местные звонки
[int]
;Номер для записи меню, закончить запись жмём #
exten => 00001, 1, NoOp()
exten => 00001, n, Wait(2)
exten => 00001, n, Playback(beep)
exten => 00001, n, Record(/tmp/vmenu${EXTEN:2}:wav)
exten => 00001, n, Wait(1)
exten => 00001, n, Playback(/tmp/vmenu${EXTEN:2})
exten => 00001, n, Wait(2)
exten => 00001, n, Hangup()
;Звонок на внутренний номер
exten => _XXX,1,Dial(SIP/${EXTEN})
;Звонок на внешний номер
exten => _XXX.,1,Dial(SIP/${EXTEN}@527389)
include => handup-sip
;Меню приветствия
[vmenu]
exten => s,1,Answer()
;Проигрываем приветствие
exten => s,2,Background(/var/lib/asterisk/moh/vmenu/vmenu001)
;Ждем 5 секунд ввода добавочного номера
exten => s,3,WaitExten(5)
;Звоним по введенному добавочному
exten => _XXX,1,Dial(SIP/${EXTEN})
;Если введен не существующий номер, то говорим об этом и отправляем в начало приветствия
exten => _XXX,2,Playback(privacy-incorrect)
exten => _XXX,3,Goto(vmenu,s,1)
;Если звонящий ничего не вводит, то уводим звонок секретарю
exten => t,1,Dial(SIP/100)
; Звонки снаружи
[ext]
exten => _X.,1,Goto(vmenu,s,1)
;;;;;;;;;;;;;
Статистика звонков
Для начала нужно чтобы истории звонков складывались не в лог-файл по умолчанию "/var/log/asterisk/cdr-csv/Master.csv" а в базу данных "mariadb". Напоминаю, что мы теперь всё время работаем под пользователем «asterisk» и поэтому на важных командах пишем «sudo».
Для начала установим на CentOS СУБД MariaDB:sudo yum -y install mariadb mariadb-server mariadb-devel
Запустим:
sudo systemctl start mariadb
Ставим в автозагрузку:
sudo systemctl enable mariadb
Проверим статус:
sudo systemctl status mariadb
Теперь надо пройти опросник СУБД:
sudo mysql_secure_installation
Для начала на вопрос о пароле root от СУБД – просто нажимаем Enter
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation
Далее мы установим пароль для root:
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
Далее уберём анонимных пользователей:
Remove anonymous users? [Y/n] y
... Success!
Далее разрешим конектиться к базе только будучи на localhost:
Disallow root login remotely? [Y/n] y
... Success!
Далее почистим тестовые базы:
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Перечитаем привилегии чтобы применить изменения:
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Закончили с настройками безопасности СУБД mariadb.
Далее подключаемся к mysql - создаем пользователя и базу данных:
Запускаем командную строку mysql:
mysql -uroot -p
Создаём базу данных «asterisk»:
create database asterisk;
Включаем работу с только что созданной базой:
use asterisk;
И теперь даём команду на создание таблицы «cdr» внутри нашей новой базы «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;
Далее мы придумали пользователя, который будет иметь право вносить данные в нашу базу данных. Пусть будет «astermd». И скажем СУБД о том, что этот пользователь с паролем «123» будет заполнять таблицы в нашей базе данных «asterisk»:
grant all on asterisk.* to 'astermd'@'localhost' identified by '123';Перечитаем привилегии:
flush privileges;
exit
Командой «exit» мы вышли из внутренних команд СУБД. Далее устанавливаем odbc коннекторы:
sudo yum install -y mysql-connector-odbc.x86_64 unixODBC-devel.x86_64
Редактируем файлы конфигурации «/etc/asterisk/res_odbc.conf». Добавляем в самый конец:
[asterisk]
enabled => yes
dsn => MySQL-asterisk
username => astermd
password => 123
Далее редактируем ещё один конфиг от odbc:
nano /etc/asterisk/cdr_adaptive_odbc.conf
Также в самый конец вставляем этот блок:
[cdr_adaptive_connection]
connection=asterisk
table=cdr
alias start => calldate
Создаем файл /etc/odbc.ini
sudo nano /etc/odbc.ini
Заполняем:
[MySQL-asterisk]
Description = MySQL Asterisk database
Driver = MySQL
Server = localhost
User = astermd
Password = 123
Socket = /var/lib/mysql/mysql.sock
Database = asterisk
Едем дальше:
sudo nano /etc/odbcinst.ini
В конец файла в блоке [MySQL] после пункта «FileUsage = 1» вставляем эти 2 строки:
CPTimeout =
CPReuse =
Далее:
nano /etc/asterisk/cdr.conf
Ищем блок [csv] и меняем «usegmtime» на «no»:
usegmtime=no
Далее перезапустим весь астериск
sudo service asterisk restart
Далее заупстим и поставим в автозагрузку сервис «httpd», который обеспечит нам WEB страницу:
sudo systemctl start httpd
sudo systemctl enable httpd
Набираем в браузере IP адрес сервера – и там тестовая страница апача – здорово, но не то что нам надо.
Скачиваем «Asterisk-CDR-Viewer-Mod»
cd /usr/src
sudo wget https://github.com/prog-it/Asterisk-CDR-Viewer-Mod/tarball/master
sudo tar xzvf master
ls -la
У нас в итоге появился каталог «prog-it-Asterisk-CDR-Viewer-Mod-b337420»
Копируем содержимое этого каталога в корень web сервера:
sudo cp -r /usr/src/prog-it-Asterisk-CDR-Viewer-Mod-b337420/. /var/www/html
Далее берём предложенный образец файла с конфигурацией и делаем из него собственно рабочий файл, в котором следом указываем настройки подключения к базе данных cdr viewer.
sudo cp /var/www/html/inc/config/config.php.sample /var/www/html/inc/config/config.phpРедактируем файл «/var/www/html/inc/config/config.php»:
sudo nano /var/www/html/inc/config/config.php
В самом начале файла видим данные подключения – меняем на свои:
### Подключение к базе данных
'db' => array(
# Тип базы, который поддерживается PDO. Например: mysql, pgsql
'type' => 'mysql',
# Хост
'host' => 'localhost',
# Порт
'port' => '3306',
# Пользователь
'user' => 'astermd',
# Имя базы
'name' => 'asterisk',
# Пароль
'pass' => '123',
# Название таблицы
'table' => 'cdr',
# Доп. опции подключения
'options' => array(
//PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
),
Далее чуть ниже находим:
## Путь к папке, где находятся записи Asterisk. БЕЗ слеша на конце
'monitor_dir' => '/home/calls',
И меняем на:
'monitor_dir' => '/mnt/calls',
Далее ниже по конфигу находим «storage_format» и делаем его => 5;
Сохраняем и выходим.
Кстати «/mnt/calls» нужно ещё создать и дать права:
sudo mkdir /mnt/calls
sudo chown -R asterisk:asterisk /mnt/calls
Перезапускаем астериск:
sudo reboot
Далее необходимо добавить дополнительное поле в таблицу «cdr» хранения имени файла:
mysql -uroot -p
use asterisk;
alter table `cdr` add column `filename` varchar(120) DEFAULT 'none' after `userfield`;
flush privileges;
exit
Далее редактируем файл «/etc/asterisk/cdr_mysql.conf»:
nano /etc/asterisk/cdr_mysql.conf
В конец добавляем:
alias realdst => realdst
alias filename => filename
Редактируем «/etc/asterisk/extensions.conf»:
sudo nano /etc/asterisk/extensions.conf
В раздел [globals] добавим:
DIR_RECORDS=/mnt/calls/
Как вы наверно заметили мы плавно переходим к записи разговоров, которые будут падать в «/mnt/calls». Но давайте заморочимся на то чтобы записи были в «mp3». Для того чтобы происходила конвертация в «mp3» формат нужно в систему установить утилиту «lame»! Сделаем это:
su rootcd /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
su asterisk
Едем дальше. Вернёмся в «extensions.conf» - нужно внедрить макрос [macro-recording] для записи звонков. Но этот контекст нужно вставить перед контекстами звонков в конфиге:
[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);
Но торопитесь закрывать файл – нужно ещё внести изменения в контексты «int» и «vmenu»:
Изменения в [int]:
;Звонок на внутренний номер
exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _XXX,n,Dial(SIP/${EXTEN})
;Звонок на внешний номер
exten => _XXX.,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _XXX.,n,Dial(SIP/${EXTEN}@527389)
Изменения в [vmenu]:
;Меню приветствия
[vmenu]
exten => s,1,Answer()
;Проигрываем приветствие
exten => s,2,Background(/var/lib/asterisk/moh/vmenu/vmenu001)
;Ждем 5 секунд ввода добавочного номера
exten => s,3,WaitExten(5)
exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
;Звоним по введенному добавочному
exten => _XXX,n,Dial(SIP/${EXTEN})
;Если введен не существующий номер, то говорим об этом и отправляем в начало приветствия
exten => _XXX,n,Playback(privacy-incorrect)
exten => _XXX,n,Goto(vmenu,s,1)
;Если звонящий ничего не вводит, то звоним секретарю
exten => t,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => t,n,Dial(SIP/100)
Вот теперь сохраняем и выходим и перезагружаем сервер:
sudo reboot
Проверяем – совершаем звонок – и наблюдаем что в каталоге «mnt/calls» появился файл типа - 1545973716.0-2018-12-28-12_08-100-114.mp3. Набираем IP адрес сервера в браузере и видим, что запись можно не только прослушать но и скачать.
Ну не круто ли? Теперь остаётся только сделать чтобы в каталог «/mnt/calls» монтировалась шара – но это мы проходили в предыдущих статьях.
Ниже привожу итоговые файлы конфигурации:«sip.conf»:
;;;;;
[general]
;тут пишем внешний ip адрес сервера если есть.
externaddr=94.97.200.10: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]
;Шаблон для бухгалтерии
[buh-phones](!)
type=friend
context=int
secret=123
host=dynamic
nat=no
qualify=yes
canreinvite=no
callgroup=1
pickupgroup=1
call-limit=1
dtmfmode=auto
disallow=all
allow=alaw
allow=ulaw
allow=g729
allow=g723
allow=g722
;описание номеров бухгалтерии
[100](buh-phones)
callerid="Number 100" <100>
[101](buh-phones)
callerid="Number 101" <101>
[102](buh-phones)
callerid="Number 102" <102>
;Шаблон для проектировщиков
[project-phones](!)
type=friend
context=int
secret=456
host=dynamic
nat=no
qualify=yes
canreinvite=no
callgroup=2
pickupgroup=2
call-limit=1
dtmfmode=auto
disallow=all
allow=alaw
allow=ulaw
allow=g729
allow=g723
allow=g722
;описание номеров проектного отдела
[111](project-phones)
callerid="Number 111" <111>
[112](project-phones)
callerid="Number 112" <112>
[113](project-phones)
callerid="Number 113" <113>
[114](project-phones)
callerid="Number 114" <114>
[527389]
host=sip.zadarma.com
insecure=invite,port
type=friend
fromdomain=sip.zadarma.com
disallow=all
allow=alaw
dtmfmode=auto
secret=3GdNc74
defaultuser=527389
trunkname=527389
fromuser=527389
callbackextension=527389
context=ext
qualify=400
directmedia=no
nat=force_rport,comedia
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
«extensions.conf»:
;;;;;
[general]
static=yes
writeprotect=no
[globals]
DIR_RECORDS=/mnt/calls/
[default]
;Конец разговора
[handup-sip]
exten => _X!,1,HangUp()
[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);
;Местные звонки
[int]
;Номер для записи меню, закончить запись жмём #
exten => 00001, 1, NoOp()
exten => 00001, n, Wait(2)
exten => 00001, n, Playback(beep)
exten => 00001, n, Record(/tmp/vmenu${EXTEN:2}:wav)
exten => 00001, n, Wait(1)
exten => 00001, n, Playback(/tmp/vmenu${EXTEN:2})
exten => 00001, n, Wait(2)
exten => 00001, n, Hangup()
;Звонок на внутренний номер
exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _XXX,n,Dial(SIP/${EXTEN},15)
;Звонок на внешний номер
exten => _XXX.,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _XXX.,n,Dial(SIP/${EXTEN}@527389)
include => handup-sip
[vmenu]
exten => s,1,Answer()
;Проигрываем приветствие
exten => s,2,Background(/var/lib/asterisk/moh/vmenu/vmenu001)
;Ждем 5 секунд ввода добавочного номера
exten => s,3,WaitExten(5)
;Звоним по введенному добавочному
exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _XXX,n,Dial(SIP/${EXTEN})
;Если введен не существующий номер, то говорим об этом и отправляем в начало приветствия
exten => _XXX,n,Playback(privacy-incorrect)
exten => _XXX,n,Goto(vmenu,s,1)
;Если звонящий ничего не вводит, то звоним секретарю
exten => t,1,Macro(recording,${CALLERID(num)},${EXTEN})
exten => t,n,Dial(SIP/100)
[ext]
exten => _X.,1,Goto(vmenu,s,1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Статьи по теме:
https://www.tecmint.com/install-asterisk-on-centos-7/https://serveradmin.ru/nastroyka-servera-telefonii-asterisk-s-nulya/
http://linux.mixed-spb.ru/asterisk/cdr-viewer-how-to-make.php
Линки для данного проекта:
CentOS 7.6.1810CentOS-7-x86_64-Minimal-1810.iso
Asterisk 16
https://www.asterisk.org/downloads
downloads.asterisk.org
drive.google
Русская озвучка сервисных сообщений
downloads.asterisk.org
drive.google
Asterisk-CDR-Viewer-Mod
Asterisk-CDR-Viewer-Mod
drive.google
Утилита lame
sourceforge.net
drive.google