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=inbandusername=7телефон
type=peer
secret=пароль
host=sbc.megafon.ru
fromuser=7телефон
fromdomain=multifon.ru
port=5060
nat=yes
insecure=port,invite
USER
type=usersecret=пароль
context=from-trunk
Рег-я
7телефон@multifon.ru:пароль:7телефон@sbc.megafon.ru:5060/7телефон03Создаем исходящий/входящий маршруты. У себя я делал упор на исходящие вызовы через GSM шлюз Voxlink, т.к. так звонить дешевле. А все входящие принимал на SIP Мультифон, номер которого может принимать очень много входящих звонков одновременно, т.е. номер становится многоканальным и клиенты слушают музыку ожидания не отключаясь каждый раз когда занято. Ждут своей очереди для ответа оператора.
Если что-то не работает, начинаем с того, что проверяем состояние улуги Мультифон:
https://sm.megafon.ru/sm/client/routing?login=7телефон@multifon.ru&password=пароль
Часто бывает, что не слышно голос в одну или в обе стороны. В 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)':
/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 /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, т.е. они используют свободное ПО и зарабатывают на нем :)
Через "облака" дороже звонить, нужно платить абонентскую плату, но самое худшее, постоянно будут зависать трубки если очень активно использовать АТС: не слышно собеседника и просто идут сбои при попытке позвонить. Например могут быть такие глюки, на которые тех. поддержка не ответила в Мегафоне:В Манго телеком тоже есть свои приколы. Один из них, вы не сможете прослушивать записи с вашим часовым поясом, если он у вас отличный от UTC +3. Время у них только Московское и изменить его нельзя на другой часовой пояс UTC.
По технической части в Манго так же как у Мегафона, люди звонят, а трубки молчат, нет соединения с операторами.
На Астериске все работает отлично, хотя к железу он не требователен. У нас стоял двухъядерный процессор, 2 ГБ DDR2 оперативной памяти, 500 ГБ винчестер, видео интегрированное. И все это железо с установленным Астериском справлялось с круглосуточным потоком звонков.Вывод