Содержание
FreePBX
Установка FreePBX 12 на Ubuntu 14.04
Установка FreePBX 13 на Ubuntu 16.04
Устанавливаем iksemel, dahdi, libpri, pjproject, jansson и asterisk:
sudo apt-get install -y libiksemel-utils libpj2 libjansson4 asterisk asterisk-mp3 asterisk-mysql sudo cp -R /etc/asterisk /etc/asterisk.org
Если будет использоваться аналоговая телефония, то доустанавливаем:
sudo apt-get install -y asterisk-dahdi
Настраиваем systemd без автозагрузки.
Дополнительные звуковые файлы:
sudo apt-get install -y asterisk-core-sounds-ru wget -q http://downloads.asterisk.org/pub/telephony/sounds/asterisk-extra-sounds-en-g722-current.tar.gz -O- | sudo tar xzv -C /usr/share/asterisk/sounds/en/ wget -q --no-check-certificate https://github.com/pbxware/asterisk-sounds-additional/tarball/master -O- | sudo tar xzv --strip-components 1 -C /usr/share/asterisk/sounds/ru/
исправляем ссылку к звукам custom:
sudo rm /usr/share/asterisk/sounds/custom sudo ln -s /var/lib/asterisk/sounds/custom /usr/share/asterisk/sounds
FreePBX 13 и ниже не работает на PHP7
Добавляем репозиторий с PHP5.6:
sudo add-apt-repository ppa:ondrej/php sudo apt-get update
базу данных и php-cli, php-db, php-mysql:
sudo apt-get install -y mariadb-server curl sox php5.6-curl php5.6-cli php-db php5.6-mysql php5.6-curl php5.6-common php5.6-xml php5.6-mbstring
Настраиваем mariadb, генерируем пароль и создаем базы:
export ASTERISK_DB_PW=`dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 - | cut -c2-18` mysql -u root -e "CREATE DATABASE asterisk CHARACTER SET utf8 COLLATE utf8_general_ci;\ CREATE DATABASE asteriskcdrdb CHARACTER SET utf8 COLLATE utf8_general_ci;" -p
Устанавливаем разрешения на созданные базы:
mysql -u root -e "GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY '${ASTERISK_DB_PW}';\ GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY '${ASTERISK_DB_PW}';\ FLUSH PRIVILEGES;" -p
Устанавливаем и настраиваем ODBC, после отключаем pooling:
sudo sh -c "echo Pooling = No >> /etc/odbcinst.ini"
затем добавляем подключение:
sudo sh -c "echo [MySQL-asteriskcdrdb] >> /var/lib/asterisk/.odbc.ini" sudo sh -c "echo Description = MySQL connection to \'asteriskcdrdb\' database >> /var/lib/asterisk/.odbc.ini" sudo sh -c "echo Driver = MySQL >> /var/lib/asterisk/.odbc.ini" sudo sh -c "echo Database = asteriskcdrdb >> /var/lib/asterisk/.odbc.ini" sudo sh -c "echo User = asteriskuser >> /var/lib/asterisk/.odbc.ini" sudo sh -c "echo Password = ${ASTERISK_DB_PW} >> /var/lib/asterisk/.odbc.ini" sudo sh -c "echo Socket = /var/run/mysqld/mysqld.sock >> /var/lib/asterisk/.odbc.ini" sudo chmod 640 /var/lib/asterisk/.odbc.ini sudo chown root:asterisk /var/lib/asterisk/.odbc.ini
Проверяем:
sudo su - asterisk -s /bin/bash -c "echo 'show tables' | isql MySQL-asteriskcdrdb"
Сам freepbx с помощью git:
export VER_FREEPBX=13.0 cd /usr/src sudo apt-get install -y git sudo git clone http://git.freepbx.org/scm/freepbx/framework.git freepbx cd freepbx sudo git checkout release/${VER_FREEPBX}
или скачиваем архив:
wget -P /tmp http://mirror.freepbx.org/modules/packages/freepbx/freepbx-13.0-latest.tgz sudo tar -xzf /tmp/freepbx-13.0-latest.tgz -C /usr/src cd /usr/src/freepbx
Убираем лишние символы из asterisk.conf, перезапускаем asterisk и устанавливаем freepbx:
sudo sed -i "s/(\!)//" /etc/asterisk/asterisk.conf sudo service asterisk stop sudo ./start_asterisk start sudo ./install -n --dbuser=asteriskuser --dbpass=${ASTERISK_DB_PW} --astagidir=/usr/share/asterisk/agi-bin --ampcgibin=/usr/lib/cgi-bin
Добавляем пользователя freepbx для управления asterisk:
sudo killall asterisk sudo sh -c "echo [admin] > /etc/asterisk/manager.d/freepbx.conf" sudo sh -c "cat /etc/amportal.conf | grep AMPMGRPASS | sed 's/AMPMGRPASS=/secret = /' >> /etc/asterisk/manager.d/freepbx.conf" sudo sh -c "echo deny = 0.0.0.0/0.0.0.0 >> /etc/asterisk/manager.d/freepbx.conf" sudo sh -c "echo permit = 127.0.0.1/255.255.255.0 >> /etc/asterisk/manager.d/freepbx.conf" sudo sh -c "echo read = system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate,message >> /etc/asterisk/manager.d/freepbx.conf" sudo sh -c "echo write = system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate,message >> /etc/asterisk/manager.d/freepbx.conf" sudo sh -c "echo writetimeout = 5000 >> /etc/asterisk/manager.d/freepbx.conf" sudo chmod 640 /etc/asterisk/manager.d/freepbx.conf sudo chown root:asterisk /etc/asterisk/manager.d/freepbx.conf sudo fwconsole start
Обновляем и устанавливаем модули:
sudo fwconsole ma updateall sudo fwconsole ma downloadinstall voicemail dashboard asteriskinfo backup cdr sipsettings logfiles callrecording sudo fwconsole ma enablerepo unsupported sudo fwconsole ma updateall sudo fwconsole ma downloadinstall customcontexts sudo fwconsole ma refreshsignatures
Настраиваем Автозагрузку
Дальше настраиваем Web-сервер
Исключаем лишние модули: res_config_pgsql.so, chan_local.so, cel_tds.so, cel_pgsql.so, res_config_mysql.so, res_pjsip_phoneprov_provider.so
Перед установкой модуля DAHDi Config создаём файл /etc/asterisk/freepbx_chown.conf:
[custom] file = /etc/dahdi/modules,0660,asterisk,asterisk file = /etc/dahdi/system.conf,0660,asterisk,asterisk file = /etc/modprobe.d/dahdi.conf,0660,asterisk,asterisk rdir = /etc/asterisk/manager.d/,640,root,asterisk file = /var/lib/asterisk/.odbc.ini,0640,root,asterisk [blacklist] directory = /var/spool/asterisk/monitor/
и запускаем:
sudo fwconsole chown
Подробнее о freepbx_chown.conf
Дополнительные модули
sudo fwconsole ma downloadinstall conferences customappsreg music fax featurecodeadmin findmefollow infoservices ivr queues recordings ringgroups soundlang timeconditions userman sudo fwconsole ma enablerepo unsupported sudo fwconsole ma downloadinstall customcontexts
Удаление FreePBX
sudo killall asterisk sudo rm /var/log/asterisk/* sudo rm -rf /etc/asterisk sudo rm /etc/amportal.conf /etc/freepbx.conf sudo rm -rf /var/lib/asterisk/bin /var/www/* mysql -u root -e "DROP DATABASE asterisk; DROP DATABASE asteriskcdrdb; DROP USER asteriskuser@localhost; FLUSH PRIVILEGES;" -p
Music On Hold
Устанавливаем файлы moh и делаем ссылку на директорию куда смотрит freepbx:
sudo apt-get install asterisk-moh-opsound-wav sudo rm -rf /var/lib/asterisk/moh sudo ln -s /usr/share/asterisk/moh /var/lib/asterisk sudo chown -R asterisk:asterisk /usr/share/asterisk/moh
Проверить конфигурацию moh можно в /etc/asterisk/musiconhold_additional.conf
Автозагрузка
Удаляем asterisk из автозагрузки:
sudo systemctl disable asterisk
Добавляем freepbx в systemd, добавляем файл /etc/systemd/system/freepbx.service:
Добавляем в автозагрузку:
sudo systemctl daemon-reload sudo systemctl enable freepbx.service
http://wiki.freepbx.org/display/FOP/Example+systemd+startup+script+for+FreePBX
Web-сервер
Apache
Устанавливаем для PHP5.6:
sudo apt-get install libapache2-mod-php5.6
Меняем права запуска и разрешаем смотреть не свою дирректорию:
sudo sed '/memory_limit/s/128/256/' -i /etc/php/5.6/apache2/php.ini sudo sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/apache2/apache2.conf echo " /usr/share/asterisk/agi-bin/** r," | sudo tee -a /etc/apparmor.d/abstractions/apache2-common sudo service apparmor restart sudo service apache2 restart
/etc/apache2/sites-available/freepbx.conf:
подключаем сайт:
sudo a2dissite 000-default sudo a2ensite freepbx sudo a2enmod rewrite sudo service apache2 restart
Nginx
Устанавливаем nginx и php5-fpm
Добавляем пользователя www-data в группу asterisk:
sudo adduser www-data asterisk
Увеличиваем переменные:
sudo sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php5/fpm/php.ini
/etc/nginx/sites-available/freepbx:
подключаем сайт:
sudo ln -s /etc/nginx/sites-available/freepbx /etc/nginx/sites-enabled/ sudo nginx reload
http://askubuntu.com/questions/84189/how-to-install-asterisk-1-8-freepbx-2-9-nginx-php-fpm
iSymphony
Устанавливаем JRE:
sudo apt-get install openjdk-7-jre
Скачиваем и устанавливаем iSymphonyServer:
wget -P /tmp/ http://www.getisymphony.com/files/builds/isymphony/3.0.3_1564/iSymphonyServerV3-3.0.3.1564.tar.gz tar -xzf /tmp/iSymphonyServerV3-3.0.3.1564.tar.gz -C /tmp cd /tmp/iSymphonyServerV3-3.0.3.1564/install.sh
при запросе где находится jre указываем /usr/lib/jvm/java-7-openjdk-amd64/
Запускаем сервер:
sudo /opt/isymphony3/server/startup.sh
Добавляем в /etc/asterisk/manager_custom.conf:
password можно узнать:
sudo grep cxpanel /opt/isymphony3/server/conf/servers/default/asterisk.xml
Перегружаем модуль manager:
sudo asterisk -rx "manager reload"
Создаем /etc/init.d/isymphony:
и добавлем в автозагрузку:
sudo chmod +x /etc/init.d/isymphony sudo update-rc.d isymphony defaults
http://highsecurity.blogspot.ru/2014/04/isymphony-super-cool-unified.html
Оправка факсов
Для отправки факсов на email необходим sendmail. Устанавливаем postfix без конфигурации «No configuration»:
sudo apt-get install postfix
CDR Reports
Конвертирование и очистка wav
- Очистка записей от звонков у которых статус не «ANSWERED»
- Сжатие остальных записей в mp3
Создаём /var/spool/asterisk/monitor/freepbx_monitor.sh:
Добавляем в крон:
sudo bash -c "echo '#' >/etc/cron.daily/freepbx_monitor" sudo bash -c "echo '# Regular cron jobs for the freepbx_monitor.sh' >>/etc/cron.daily/freepbx_monitor" sudo bash -c "echo '#' >>/etc/cron.daily/freepbx_monitor" sudo bash -c "echo '0 0 * * * asterisk [ -x /var/spool/asterisk/monitor/freepbx_monitor.sh ] && /var/spool/asterisk/monitor/freepbx_monitor.sh -d' >>/etc/cron.daily/freepbx_monitor" sudo bash -c "echo '0 1 1 * * asterisk [ -x /var/spool/asterisk/monitor/freepbx_monitor.sh ] && /var/spool/asterisk/monitor/freepbx_monitor.sh -m' >>/etc/cron.daily/freepbx_monitor" sudo bash -c "echo '0 2 1 1 * asterisk [ -x /var/spool/asterisk/monitor/freepbx_monitor.sh ] && /var/spool/asterisk/monitor/freepbx_monitor.sh -y' >>/etc/cron.daily/freepbx_monitor"
Воспроизведение mp3 файлов
Способ 1:
sudo apt install mpg123
Способ 2:
sudo apt install libsox-fmt-mp3
и добавляем в /var/www/html/admin/libraries/media/Media/Driver/Drivers/SoxShell.php в функцию supportedCodecs:
$formats["in"]["mp3"] = "mp3";
Настройка
Advanced Settings
Dialplan and Operational
CW Enabled by Default - Возможность принятия второго вызова включена по умолчанию - true /false
Ожидание второго вызова (Call Waiting - yes) будет включаться по умолчанию при создании внутреннего номера. Установите опцию в noесли не хотите создавать внутренние номера с уже включенной опцией принятия второго вызова (например для агентов очереди колл-центра). Тогда пользователям можно будет включать эту возможность путём набора сервисного кода (по умолчанию - *70). В большинстве случаев этот параметр рекомендуется оставить так как есть. Таким образом многоканальным телефонам даётся возможность принимать несколько одновременных входящих соединений.
Disable -custom Context Includes - Отключить кастом включения в контексты - true/false
Обычно FreePBX автоматически генерирует кастомные контексты которые могут использоваться для добавления пользовательских диал-планов чтобы изменить стандартное поведение FreePBX. Все вложения такого рода вызывают обычно сообщения WARNING! в журнале если не найден контекст на который ссылается инклюд, но это не является ошибкой. Если вы уверены, что вам понадобятся вложения можно установить этот параметр в true. В противном случае FreePBX генерирует несуществующие инклюды в контекстах так же как в предыдущих версиях.
Extension Concurrency Limit - Лимит одновременных вызовов для внутренних номеров - 3
Количество одновременных исходящих вызовов которые может совершить внутренний номер. Это ОЧЕНЬ полезно в качестве дополнительной меры безопасности. В случае взлома системы ограничивает количество одновременных исходящих вызовов которые могут быть сделаны со взломанного внутреннего номера. По умолчанию, при создании внутреннего номера значение '0', что соответствует неограниченному количеству вызовов.
Feature Codes Beep Only - Использовать только звуковой сигнал для подтверждения операций сервисных кодов - true/false
Если установлено в true то вместо подтверждающих голосовых сообщений при активации и деактивации режимов FollowMe, CallWaiting, DND, итд, будет воспроизводиться просто звуковой сигнал.
Generate Diversion Headers - Генерировать заголовки перенаправления - true/false
Если установлено в true то исходящие вызовы, которые являются, на самом деле, последовательно перенаправленными входящими из Ring Groups, Follow Me или др., будут иметь дополнительные SIP заголовки diversion, в которых будет содержаться оригинальный DID на который пришёл начальный вызов, предполагая, что этот DID доступен. Это может быть полезно при соединениях с некоторыми операторами, которые могут требовать этого, в качестве обязательного условия при перенаправленных звонках.
Asterisk Dial Options - Опции передаваемые команде Dial() - Ttr
Опции передаваемые команде Dial() при совершении внутренних вызовов. Полный список команд содержится описании команды Dial(). Опции по умолчанию:
T - разрешает переадресацию вызова (transfer) вызывающему абоненту.
t - разрешает переадресацию вызова (transfer) ответившему абоненту.
r - генерирует КПВ.
Обновление через proxy
1. Для обновления через proxy, включаем использование wget:
Setting → Advanced Settings → Раздел GUI Behavior → Use wget For Module Admin: True
либо равнозначной командой:
sudo /var/lib/asterisk/bin/freepbx_setting MODULEADMINWGET 1
2. Прописываем адрес прокси в: Setting → Advanced Settings → Раздел Proxy Settings
либо равнозначной командой пример для proxy.domain.com (без аутентификационных данных):
sudo /var/lib/asterisk/bin/freepbx_setting PROXY_ENABLED 1 sudo /var/lib/asterisk/bin/freepbx_setting PROXY_ADDRESS proxy.domain.com:3128
или адрес прокси для wget можно прописать в глобальном файле конфигурации в /etc/wgetrc.
Модули
Очистка
Добавляем в крон:
echo '#!/bin/sh' | sudo tee /etc/cron.daily/freepbx echo 'find /var/www/html/admin/modules/_cache/*.tgz.gpg -mtime +90 -exec rm {} \;' | sudo tee -a /etc/cron.daily/freepbx sudo chmod +x /etc/cron.daily/freepbx
Проверка
Пример проверки подписи:
su -l asterisk -c 'gpg --verify /var/www/html/admin/modules/_cache/core-13.0.116.tgz.gpg'
Ручная установка
Downgrade модуля, на примере framework-13.0.190.5.tgz.gpg:
gpg --output /tmp/framework-13.0.190.5.tgz --decrypt /var/www/html/admin/modules/_cache/framework-13.0.190.5.tgz.gpg sudo rm -rf /var/www/html/admin/modules/framework sudo tar xzf /tmp/framework-13.0.190.5.tgz -C /var/www/html/admin/modules/ sudo chown -R asterisk:asterisk /var/www/html/admin/modules/framework
Обновляем через GUI или через консоль:
sudo fwconsole ma install framework
Оборудование
Настройка VoIP шлюза D-Link DVG-XXXX - http://www.lynks.ru/blog/nastroika-voip-shlyuza-d-link-dvg-xxxx
Grandstream GXW - http://awsswa.livejournal.com/17681.html
Ошибки
Заисает amportal при запуке:
amportal start Please wait... SETTING FILE PERMISSIONS chattr : Operation not supported while reading flags on /var/www/html/cxpanel Permissions OK Removing any dangling symlinks Dangling symlinks removed STARTING ASTERISK
Изменил строчку в /usr/sbin/safe_asterisk в run_asterisk():
nice -n $PRIORITY ${ASTSBINDIR}/asterisk -f ${CLIARGS} ${ASTARGS}> /dev/${TTY} 2>&1 </dev/${TTY} &
WARNING res_odbc.c: res_odbc: Error SQLConnect=-1 errno=0 [unixODBC][Driver Manager]Data source name not found, and no default driver specified
Нужно установить и настроить ODBC драйвер:
sudo apt-get install libmyodbc
/etc/odbcinst.ini
[MySQL] Description = ODBC for MySQL Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so FileUsage = 1
sudo odbcinst -q -d
ответ: [MySQL]
Следующие настройки берем из /etc/asterisk/res_odbc_additional.conf
/etc/odbc.ini
[MySQL-asteriskcdrdb] Description = MySQL connection to 'asteriskcdrdb' database Driver = MySQL Database = asteriskcdrdb Server = localhost UserName = asteriskuser Password = password Port = 3306 Socket = /var/run/mysqld/mysqld.sock
http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/installing_configuring_odbc.html
WARNING ccss.c: Usage of cc_callback_macro is deprecated. Please use cc_callback_sub instead.
sudo sed -i 's/cc_callback_macro/cc_callback_sub/' /var/www/html/admin/modules/campon/functions.inc.php
WARNING func_callerid.c: CALLERPRES is deprecated. Use CALLERID(name-pres) or CALLERID(num-pres) instead.
sudo sed -i 's/CALLERPRES()/CALLERID(name-pres)/' /var/www/html/admin/modules/core/functions.inc.php sudo sed -i 's/CALLERPRES()/CALLERID(name-pres)/' /var/www/html/admin/libraries/extensions.class.php
pbx_config.c: The use of '_.' for an extension is strongly discouraged and can have unexpected behavior. Please use '_X.' instead at line 1645 of /etc/asterisk/…conf
sudo sed -i "s/'_\.'/'_X\.'/" /var/www/html/admin/modules/core/functions.inc.php sudo sed -i "s/_\./_X\./" /var/www/html/admin/modules/core/etc/extensions.conf sudo sed -i "s/'_\.'/'_X\.'/" /var/www/html/admin/modules/queues/functions.inc/dialplan.php
Reading /etc/asterisk/asterisk.conf...Error! Unable to read /etc/asterisk/asterisk.conf or it was missing a directories section
Необходимо удалить символы (!) в первой строчке /etc/asterisk.org/asterisk.conf:
с
[directories](!)
на
[directories]
Table 'asterisk.voicemail_admin' doesn't exist
Необходиммо установить модуль voicemail для версии 12 и ниже:
sudo amportal a ma download voicemail sudo amportal a ma install voicemail
либо для версии 13 и выше:
sudo fwconsole ma download voicemail sudo fwconsole ma install voicemail
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
- FreePBX поддерживает только MyISAM
Исправление для InnoDB.
http://community.freepbx.org/t/fatal-error-when-updateing-core/28392
http.c: Invalid sessionlimit '' at line 15 of http.conf
FreePBX Advanced Settings → Session Limit: 100
findmefollow Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT)
После установки модуля findmefollow при нажатии в web интерфейсе Apply появляется ошибка.
Необходимо изменить таблицу:
ALTER TABLE findmefollow CONVERT TO CHARACTER SET utf8;
Одной командой:
mysql -u`grep -i user /var/lib/asterisk/.odbc.ini | awk -F' = ' '{print $2}'` -p`grep -i password /var/lib/asterisk/.odbc.ini | awk -F' = ' '{print $2}'` -e "ALTER TABLE findmefollow CONVERT TO CHARACTER SET utf8;" asterisk
