Asterisk + FreePBX корпоративная SIP-телефония

Если вы хотите организовать качественную корпоративную связь, то вам необходимо смотреть в сторону платформы Asterisk, а чтобы было удобно её администрировать, использовать панель FreePBX. Расскажу как я использовал FreePBX ~3000 звонков в сутки.

Что мы имеем: слабенький компьютер с установленной Ubuntu Server 14.04, трубки 4 шт. с базой Yealink W52P, шлюз Voxlink с 4 сим-картами чтобы звонить было немного дешевле.

01Устанавливаем Asterisk+Freepbx по инструкции http://evgeniyosipov.blogspot.ru/2015/09/asterisk-13-freepbx-12-ubuntu-server.html А лучше скачиваем готовый дистрибутив https://downloads.freepbxdistro.org/ISO/, заливаем на флешку или диск и устанавливаем как операционную систему. Я устанавливал FreePBX-10.13.66-17-i386-Full-1477919214.img

02Т.к. нам нужно звонить через Интернет и нужны многоканальные номера, то берем любую сим-карту на примере Мегафона, вставляем в телефон и подключаем функцию Мультифон *137#. Придут в смс настройкидля транка, который нужно создать в панели FreePBX

FreePBX транк для Мультифон:

PEER

dtmfmode=inband
username=7телефон
type=peer
secret=пароль
host=sbc.megafon.ru
fromuser=7телефон
fromdomain=multifon.ru
port=5060
nat=yes
insecure=port,invite

USER

type=user
secret=пароль
context=from-trunk

Рег-я

7телефон@multifon.ru:пароль:7телефон@sbc.megafon.ru:5060/7телефон

03Создаем исходящий/входящий маршруты. У себя я делал упор на исходящие вызовы через GSM шлюз Voxlink, т.к. так звонить дешевле. А все входящие принимал на SIP Мультифон, номер которого может принимать очень много входящих звонков одновременно, т.е. номер становится многоканальным и клиенты слушают музыку ожидания не отключаясь каждый раз когда занято. Ждут своей очереди для ответа оператора.

Если что-то не работает, начинаем с того, что проверяем состояние улуги Мультифон:

Часто бывает, что не слышно голос в одну или в обе стороны. В FreePBX нужно поиграться с настройками NAT и на роутере пробросить rtp порты 10000-20000 на ip FreePBX

04Я устанавливал Asterisk + FreePBX отдельными пакетами на Linux Ubuntu 14.04. Поэтому получил несколько ошибок:

error mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: NO)':

Останавливаем MySQL:
/etc/init.d/mysql stop
Запускаем в режиме без проверки прав доступа:
/usr/sbin/mysqld --skip-grant-tables &
Соединяемся как root без пароля:
mysql
Выбираем активную БД:
use mysql;
Обновляем пароль:
mysql> update user set Password=PASSWORD('новый пароль') WHERE User='root';
mysql> flush privileges;
mysql> flush privileges;
Завершаем работу mysqld:
fg "Ctrl+c"
Запускаем MySQL в обычном режиме:
/etc/init.d/mysql start

error После установки FreePBX не открывается страница панели управления в браузере:

a2enmod rewrite
service apache2 restart

error После установки FreePBX в CDR не отображаются записанные звонки, т.е в панели по адресу http://192.168.1.x/admin/config.php?display=cdr, после нажатия "Искать", форма со звонками не выводилась:

Но в самой директории /var/spool/asterisk/monitor/ создавались директории с названиями "год-месяц-день" аудиофайлы.wav. Оказалось, что в CDR не отображались звонки из-за ошибки подключения FreePBX к БД MySQL. Исправление:

Открываем в редакторе nano: 
nano /etc/freepbx.conf
Ищем там строки:
$amp_conf['AMPDBUSER'] = 'freepbxuser';
$amp_conf['AMPDBPASS'] = 'какиетобуквыцифры';
Копируем эти строки в cdr_mysql.conf с заменой:
nano /etc/asterisk/cdr_mysql.conf
Сохраняем и выходим, пишем в консоль:
amportal reload
После обновления связи, записи будут показываться в CDR

05Удобно сделать очистку старых записей Asterisk CDR по расписанию из директории /monitor и из БД MySQL. Решение создать скрипт:

nano /etc/asterisk/ClearCDR.sh

Вставляем код со своими данными:

#!/bin/bash
# Задаём переменные (Specify variables)
MYSQL_USER="asteriskuser"# Имя пользователя MySQL (MySQL username)
MYSQL="/usr/bin/mysql"# Расположение MySQL (whereis mysql)
MYSQLCHECK="/usr/bin/mysqlcheck"# Расположение MySQLcheck (whereis mysqlcheck)
MYSQL_PASSWORD="Fb28evS3D4BEB0p/L"# Пароль пользователя MySQL (MySQL password)
EMAIL="Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра."# Почтовый адрес для уведомлений (Email address for notification)
TYPE="month"# Интервал времени (SECOND,MINUTE,HOUR,DAY,MONTH,YEAR)
NUMBER="3"# Количество (3 месяца) (the number 3 months)
LOG="/var/log/cdr-temp.log"# Лог файл перезаписываемый и отсылаемый на почту(A temporary log file is sent on email as a report)
LOG1="/var/log/cdr-clean.log"# Лог файл постоянный (The log file permanent)
data="`date`"
# Чистим лог от старых записей (Clean old log records from)
echo > $LOG
# Делаем запись даты в лог (The date recorded in the log)
echo >> $LOG1
echo "---------=$data=---------" >> $LOG1
echo >> $LOG1
# Чистим asteriskcdrdb.cdr (clean asterisksdrdb.cdr)
if $MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "delete from asteriskcdrdb.cdr where calldate < DATE_SUB(NOW(), interval $NUMBER $TYPE);"; then
echo >> $LOG1
echo Старые записи из asteriskcdrdb.cdr успешно удалены >> $LOG1
echo >> $LOG1
else
echo Не удалось удалить старые записи из asteriskcdrdb.cdr >> $LOG1
echo >> $LOG1
exit 0
fi
# Чистим asteriskcdrdb.cel (clean asteriskcdrdb.cel)
if $MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "delete from asteriskcdrdb.cel where eventtime < DATE_SUB(NOW(), interval $NUMBER $TYPE);"; then
echo Старые записи из asteriskcdrdb.cel успешно удалены >> $LOG1
echo >> $LOG1
else
echo Не удалось удалить старые записи из asteriskcdrdb.cel >> $LOG1
echo >> $LOG1
exit 0
fi
# Оптимизируем asteriskcdrdb (optimaze asteriskcdrdb table)
if $MYSQLCHECK -u$MYSQL_USER -p$MYSQL_PASSWORD --optimize asteriskcdrdb; then
echo asteriskcdrdb успешно оптимизирована >> $LOG1
echo >> $LOG1
else
echo Не удалось оптимизировать базу asteriskcdrdb >> $LOG1
echo >> $LOG1
exit 0
fi
echo >> $LOG1
echo "----------Были удалены следующие файлы и папки----------" >> $LOG1
# Чистим папки от файлов записи (Recording you want to delete, and empty folders)
find /var/spool/asterisk/monitor/ -name "*.*" -type f -mtime +91 -print -delete >> $LOG1
find /var/spool/asterisk/monitor/ -type d -empty -print -delete >> $LOG1
# Выводим последние 10 000 записей из временного лога и копируем их в постоянный (Get the last 100,000 records from the temporary log file and copy it to permanent)
grep -A 10000 "$data" $LOG1 >> $LOG
# Отсылаем письмо с логами чистки в теле письма (Send email with progress report)
echo "Отчёт об отчистке старых записей" | mail -s PBX-CDR-CLEANER $EMAIL < $LOG

Пишем в кронтаб:

nano /etc/crontab

Вставляем в самый низ (удаление старых записей каждое 1 число месяца в 02:15):

15 02 1 * * root /etc/asterisk/ClearCDR.sh > /dev/null

Перезапускаем кронтаб:

/etc/init.d/crond restart
Советую использовать FreePBX, а не "Облачные АТС". Я знаком с "Манго-офис АТС", "Мегафон ВАТС".

Кстати видел интерфейс облака "Билайн" и там FreePBX, т.е. они используют свободное ПО и зарабатывают на нем :)

Через "облака" дороже звонить, нужно платить абонентскую плату, но самое худшее, постоянно будут зависать трубки если очень активно использовать АТС: не слышно собеседника и просто идут сбои при попытке позвонить. Например могут быть такие глюки, на которые тех. поддержка не ответила в Мегафоне:

В Манго телеком тоже есть свои приколы. Один из них, вы не сможете прослушивать записи с вашим часовым поясом, если он у вас отличный от UTC +3. Время у них только Московское и изменить его нельзя на другой часовой пояс UTC.

По технической части в Манго так же как у Мегафона, люди звонят, а трубки молчат, нет соединения с операторами.

На Астериске все работает отлично, хотя к железу он не требователен. У нас стоял двухъядерный процессор, 2 ГБ DDR2 оперативной памяти, 500 ГБ винчестер, видео интегрированное. И все это железо с установленным Астериском справлялось с круглосуточным потоком звонков.Вывод

mr. Mak

Остались вопросы? Пишите на почту admin@hzit.ru

Администратор сайта hzit.ru
Back to top