Это старая версия документа!


Содержание

Статья не закончена, идёт редактирование!!!

Дата написания: апрель 2020 г.
Автор: Graf

VOIP Server (Asterisk+FreePBX)


Дано:
IP сервера, где все это будет стоять - 192.168.10.234

ASTERISK

Если вы собираетесь использовать аппаратные интерфейсы ISDN (например, карты T1/E1/J1/BRI), настроить взаимодействие Asterisk с аналоговыми и цифровыми телефонами, включая подключения к телефонной сети общего пользования или PSTN, и планируете использовать приложение набора номеров MeetMe,то сначала, вам необходимо установить библиотеки libpri и DAHDI (бывший Zaplet).
Если вышеперечисленное вы не будете использовать, то устанавливать эти библиотеки нет необходимости и можно перейти сразу к установке Asterisk.

  • DAHDI

Первым делом установим последнюю (на день написания статьи - 3.1.0) версию DAHDI.
Скачаем, соберём, создадим пакет и установим его.

# wget http://downloads.asterisk.org/pub/telephony/dahdi-linux/dahdi-linux-3.1.0.tar.gz
# tar xf ./dahdi-linux-3.1.0.tar.gz
# cd ./dahdi-linux-3.1.0
# make
# make install DESTDIR=/tmp/dahdi-linux-3.1.0
# cd /tmp/dahdi-linux-3.1.0/
# makepkg -l y -c n /tmp/dahdi-linux-3.1.0-x86_64-1.txz
# upgradepkg --install-new /tmp/dahdi-linux-3.1.0-x86_64-1.txz 
  • DAHDI-TOOLS

Далее установим последнюю (на день написания статьи - 3.1.0) версию dahdi-tool.
Скачаем, сконфигурируем, соберём, создадим пакет и установим его.

# wget http://downloads.asterisk.org/pub/telephony/dahdi-tools/dahdi-tools-3.1.0.tar.gz
# tar xf ./dahdi-tools-3.1.0.tar.gz
# cd dahdi-tools-3.1.0
# autoreconf -i
#./configure \
--prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--libdir=/usr/lib64 \
--includedir=/usr/include

# make
# make install DESTDIR=/tmp/dahdi-tools-3.1.0
# make install-config DESTDIR=/tmp/dahdi-tools-3.1.0
# cd /tmp/dahdi-tools-3.1.0/
# makepkg  -l y -c n /tmp/dahd-tools-3.1.0-x86_64-1.txz
# upgradepkg --install-new /tmp/dahd-tools-3.1.0-x86_64-1.txz
  • LIBPRI

Теперь, cкачаем, соберём, создадим пакет и установим последнюю версию ( на день написания статьи - 1.6.0) библиотеки libpri.

# wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.6.0.tar.gz
# tar xf ./libpri-1.6.0.tar.gz
# cd libpri-1.6.0
# make
# make install DESTDIR=/tmp/libpri-1.6.0
# cd /tmp/libpri-1.6.0/
# makepkg  -l y -c n /tmp/libpri-1.6.0-x86_64-1.txz
# upgradepkg --install-new/tmp/libpri-1.6.0-x86_64-1.txz
  • ASTERISK

Собственно, сборка и установка последней (на день написания статьи -17.3.0) версии Asterisk.

# sbopkg -Bki "libedit jansson"
# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-17.3.0.tar.gz
# tar xf ./asterisk-17.3.0.tar.gz 
# cd asterisk-17.3.0
# ./configure \
--prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--libdir=/usr/lib64 \
--includedir=/usr/include

Выбираем опции, подробнее об опциях ТУТ.

# make menuselect
# make
# make install DESTDIR=/tmp/asterisk-17.3.0
Если ошибка:
---> IMPORTANT INFORMATION ABOUT format_mp3 <---    ***
***                                                        ***
*** format_mp3 has been selected to be installed, but the  ***
*** MP3 decoder library has not yet been downloaded into   ***
*** the source tree.  To do so, please run the following   ***
*** command:                                               ***
***                                                        ***
***          $ contrib/scripts/get_mp3_source.sh 

Так и делаем

# ./contrib/scripts/get_mp3_source.sh

должны подгрузиться файлы, и повторяем

# make install DESTDIR=/tmp/asterisk-17.3.0

Собираем примеры конфигураций, документацию и ротацию логов.

# make samples DESTDIR=/tmp/asterisk-17.3.0
# make progdocs DESTDIR=/tmp/asterisk-17.3.0
# make install-logrotate DESTDIR=/tmp/asterisk-17.3.0

Устанавливаем веб интерфейс для голосовой почты, для этого изменим в файле ./Makefile строку

HTTP_DOCSDIR=/var/www/htm
на
HTTP_DOCSDIR=/var/www/htdocs

Создаем недостающие каталоги и собираем.

# mkdir -p /tmp/asterisk-17.3.0/var/www/{htdocs,cgi-bin}
# make webvmail DESTDIR=/tmp/asterisk-17.3.0

собираем весь пакет и устанавливаем его.

# cd /tmp/asterisk-17.3.0
# makepkg -l y -c n /tmp/asterisk-17.3.0-x86_64-1.txz
# upgradepkg --install-new /tmp/asterisk-17.3.0-x86_64-1.txz

Создадим скрипт для запуска - /etc/rc.d/rc.asterisk.
В котором укажем, что он запускаться будет от пользователя apache. (нужно для FreePBX)

 #!/bin/sh

 AST_CONFIG=/etc/asterisk
 AST_SBIN=/usr/sbin

# Запускаем asterisk от имени apache
 AST_USER=apache
 AST_GROUP=apache

 . /etc/rc.d/init.d/functions 
 
 if ! [ -x $AST_SBIN/asterisk ] ; then
        echo "ERROR: /usr/sbin/asterisk not found"
         exit 0
 fi
 
 if ! [ -d $AST_CONFIG ] ; then
         echo "ERROR: $AST_CONFIG directory not found"
         exit 0
 fi
 
 DAEMON=$AST_SBIN/asterisk
 SAFE_ASTERISK=$AST_SBIN/safe_asterisk
 CONFIG0=`readlink $0`
 if [ "$CONFIG0" = "" ]; then
         CONFIGFILE=/etc/sysconfig/`basename $0`
 else
         CONFIGFILE=/etc/sysconfig/`basename $CONFIG0`
 fi
 [ -x $CONFIGFILE ] && . $CONFIGFILE 
 
 RETVAL=0 
 
 start() {
         # Start daemons.
         echo -n $"Starting asterisk: "
         if [ -f $SAFE_ASTERISK ] ; then
                 DAEMON=$SAFE_ASTERISK
         fi
         if [ $AST_USER ] ; then
                 ASTARGS="-U $AST_USER"
         fi
         if [ $AST_GROUP ] ; then
                 ASTARGS="$ASTARGS -G $AST_GROUP"
         fi
         if [ $AST_CONFIG ]; then
                 ASTARGS="$ASTARGS -C $AST_CONFIG"
         fi
         daemon $DAEMON $ASTARGS
         RETVAL=$?
         [ $RETVAL -eq 0 ] && touch /var/lock/asterisk
         echo
         return $RETVAL
 }
  
 stop() {
         # Stop daemons.
         echo -n $"Shutting down asterisk: "
         killproc asterisk
         RETVAL=$?
         [ $RETVAL -eq 0 ] && rm -f /var/lock/asterisk
         echo
         return $RETVAL
 }
  
 restart() {
         stop
         start
 } 
 
 reload() {
         $DAEMON -rx 'reload' > /dev/null 2> /dev/null
 } 
 
 case "$1" in
   start)
         start
         ;; 
   stop)
         stop
         ;; 
   restart)
         restart
         ;; 
   reload) 
         reload 
         ;; 
   condrestart)
         [ -f /var/lock/subsys/asterisk ] && restart || : 
         ;; 
   status)
         status asterisk
         ;; 
   *)
         echo "Usage: asterisk {start|stop|restart|reload|condrestart|status}"
         exit 1 
 esac  
 
 exit $?

Стартуем asterisk.

 # chmod +x /etc/rc.d/rc.asterisk
 # /etc/rc.d/rc.asterisk start

Starting asterisk:                                         [  OK  ]

Заходим в консоль Asterisk, дабы убедиться, что он работает

 # asterisk -rvvv
 
Asterisk 17.3.0, Copyright (C) 1999 - 2018, Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 17.3.0 currently running on your-voip-server (pid = 13071)
your-voip-server*CLI> 

Как видим - работает!
Для выхода из консоли нужно набрать exit.

FreePBX

Настроим MySQL.

 # mkdir /var/lib/mysql/mysql
 # mysql_install_db
 # chown -R mysql.mysql /var/lib/mysql
 # /etc/rc.d/rc.mysqld start
 # mysql 
 
 mysql> set password for 'root'@'localhost' = password('mypassword'); 
 mysql> FLUSH PRIVILEGES;
 mysql>\q

Правим /etc/httpd/httpd.conf

  # Uncomment the following line to enable PHP:
  #
 Include /etc/httpd/mod_php.conf

Правим /etc/httpd/php.ini

 upload_max_filesize = 50M 
 date.timezone = Europe/Moscow
 max_execution_time = 600

Перезапуск апач (apache)

 # /etc/rc.d/rc.httpd restart

Скачиваем FreePBX, распаковываем и в каталоге с программой создаем таблицы (вводим рутовый пароль мускула):

 # mysqladmin create asteriskcdrdb -p 
 # mysql -u root -p asteriskcdrdb < ./SQL/cdr_mysql_table.sql
 # mysqladmin create asterisk -p
 # mysql -u root -p asterisk < ./SQL/newinstall.sql

Даем права на базы.

 # mysql -u root -p
 
   mysql> GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY 'пароль';
   mysql> GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY 'можно тот же пароль';
   mysql> FLUSH PRIVILEGES;
   mysql> quit

Даем права на каталоги.

 # chown –R asterisk:asterisk /var/lib/asterisk
 # chown –R asterisk:asterisk /var/log/asterisk
 # chown –R asterisk:asterisk /var/run/asterisk
 # chown –R asterisk:asterisk /var/spool/asterisk
 # chown –R asterisk:asterisk /usr/lib/asterisk
 # chmod –R 0770 /var/lib/asterisk
 # chmod –R 0770 /var/log/asterisk
 # chmod –R 0770 /var/run/asterisk
 # chmod –R 0770 /var/spool/asterisk
 # chmod –R 0770 /usr/lib/asterisk

Перезапускаем апач(apache) и астериск(asterisk):

 # /etc/rc.d/rc.httpd restart
 # /etc/rc.d/rc.asterisk restart

Если версия FreePBX > 2.8.x.x, то редактируем файл ./amp_conf/htdocs/admin/librarie/utility.functions.php, комментируя использование функции dbug_write()

 //dbug_write($txt);                                                                                                                                   
 if ($dump==1) {//force output via var_dump                                                                                                          
 	ob_start();                                                                                                                                 
 	var_dump($msg);                                                                                                                             
 	$msg=ob_get_contents();                                                                                                                     
 	ob_end_clean();                                                                                                                             
 //dbug_write($msg."\n\n\n");                                                                                                                  
 	 elseif(is_array($msg)||is_object($msg)) {                                                                                                         
 //dbug_write(print_r($msg,true)."\n\n\n");                                                                                                    
 	else {                                                                                                                                            
 //dbug_write($msg."\n\n\n")

Устанавливаем PEAR DB:

 # pear install DB

В каталоге с FreePBX устанавливаем его и отвечаем на вопросы.

 # ./install_amp
 
 Checking for PEAR DB..OK
 Checking for PEAR Console::Getopt..OK
 Checking user..OK
 Checking if Asterisk is running..running with PID: 4240..OK
 Checking for /etc/amportal.conf../etc/amportal.conf does not exist, copying default
 Creating new /etc/amportal.conf
 Enter your USERNAME to connect to the 'asterisk' database:
  [asteriskuser] 
 Enter your PASSWORD to connect to the 'asterisk' database:
  [amp109] _пароль_что_дали_в_мускуле_
 Enter the hostname of the 'asterisk' database:
  [localhost] 
 Enter a USERNAME to connect to the Asterisk Manager interface:
  [admin] 
 Enter a PASSWORD to connect to the Asterisk Manager interface:
  [amp111] _пароль_под_которым_будет_заходить_admin_в_гуй_
 (не понятно зачем надо, ибо все равно входим с паролем «admin»)
 Enter the path to use for your AMP web root:
  [/var/www/html] 
 /var/www/htdocs//
 Enter the IP ADDRESS or hostname used to access the AMP web-admin:
  [xx.xx.xx.xx] _IP_для_подключения_к_веб_морде_по_сети (я дал 192.168.10.234)
 Enter a PASSWORD to perform call transfers with the Flash Operator Panel:
  [passw0rd] _пароль_для_подключения_к_панели_оператора_
 Use simple Extensions [extensions] admin or separate Devices and Users [deviceanduser]?
  [extensions] 
 Enter directory in which to store AMP executable scripts:
  [/var/lib/asterisk/bin]  
 
 Enter directory in which to store super-user scripts:
  [/usr/local/sbin] 
/usr/sbin
 
 Please update your modules and reload Asterisk by visiting http://192.168.10.234/admin
 
 *************************************************************************
 * Note: It's possible that if you click the red 'Update Now' bar BEFORE *
 * updating your modules, your machine will start dropping calls. Ensure *
 * that all modules are up to date BEFORE YOU CLICK THE RED BAR. As long *
 * as this is observed, your machine will be fully functional whilst the *
 * upgrade is in progress.                                               *
 *************************************************************************

Если вдруг ошиблись или выдало ошибку, после исправления удаляем файл /etc/amportal.conf и заново устанавливаем. Или говорим

 #./install_amp --username=asteriskuser --password=пароль_что_дали_в_мускуле

Для верности:

 # amportal stop
 # amportal start
    Fetching FreePBX settings with gen_amp_conf.php..
 
    SETTING FILE PERMISSIONS
    Permissions OK
 
    STARTING ASTERISK
    Asterisk Started
 
    STARTING FOP SERVER
    FOP Server Started

Для входа в FreePBX используем логин-пароль admin admin
Для смены пароля: ( взято с opencsta.org )
создаем файл new-freepbx-password.php вот с таким содержимым:

 <?php
   $newpassword = 'somethingNEW123';
   echo sha1($newpassword) ;
 ?>

Далее командуем:

 # chmod a+x new-freepbx-password.php
 # php -f new-freepbx-password.php 
 
 658b27d9ab363eaab080ea65da35ceed21908fe5

Копируем в буфер полученное значение и в мускуле вставляем в таблицу:

 # mysql -u root -p
    Enter password: 
 
   mysql> use asterisk;
   Database changed
 
   mysql> update ampusers set password_sha1 = '658b27d9ab363eaab080ea65da35ceed21908fe5' where username = 'admin' limit 1;
    Query OK, 1 row affected (0.00 sec)
   Rows matched: 1  Changed: 1  Warnings: 0
   
   mysql> quit

Все, можно входить во FreePBX:
login: admin
пароль: somethingNEW123

Объединение

Для удобства приведем файл /var/www/htdocs/index.html к вот такому виду:

 <HTML>
 <HEAD>
 <head>
     <title>FreePBX</title>
     <meta http-equiv="Content-Type" content="text/html">
     <link href="mainstyle.css" rel="stylesheet" type="text/css">
 </head>

 <body>
 <div id="page">

 <div class="header">

     <a href="index.php"><img src="admin/images/freepbx.png"/></a>
     
 </div>

 <div class="message">
    Welcome to company !
 </div>

 <div class="content">
 <h4><a href="recordings/index.php">Voicemail & Recordings (ARI)</a></h4>
 <h4><a href="panel/index.php">Flash Operator Panel (FOP)</a></h4>
 <h4><a href="admin/index.php">FreePBX Administration</a></h4>
 <h4><a href="vtigercrm/index.php">VtigerCRM</a></h4>
 <br><br><br><br><br><br>
 </div>

 <------></div>

 </body>
 </html>

И настроим Vtiger для звонков. ( PBX_Manager_Module )
Необходимо, что бы внутренние номера пользователей уже были в Asterisk'е !
Для связи с Asterisk'ом:

 
 Настройки →  Менеджер Модулей → Менеджер PBX



Далее, для каждого пользователя тигра вводим его внутренний номер и разрешаем звонки.

 
 Мои Настройки →Конфигурация Asterisk



Чтобы звонки поступали в vtiger надо запустить скрипт, а еще лучше, добавить путь к скрипту в /etc/rc.d/rc.local - чтоб стартовал при пуске системы.

 # /var/www/vtigercrm/cron/modules/PBXManager/AsteriskClient.php
 Connecting to asterisk server @ 2011-11-14 07:16:05
 Connected successfully
 
 Trying to login to asterisk
 Logged in successfully to asterisk server

Перед запуском скрипта или в случаи ошибки проверим файл /etc/asterisk/manager.conf, если нужно поправим и рестартуем asterisk.

 [general]
 enabled = yes
 port = 5038
 bindaddr = 0.0.0.0
 displayconnects=no ;only effects 1.6+

 [admin]
 secret = пароль
 deny=0.0.0.0/0.0.0.0
 permit=127.0.0.1/255.255.255.0
 read = system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate
 write = system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate

Сюда же можно добавить отдельного пользователя для соединения vtiger.

Теперь, после заведения контрагента (клиента), кликаем на на его номер телефон и звоним прямо из vtiger. При этом сначала звонок идет на ваш внутренний номер и появляется такое окошко .


Обсуждение на форуме

Навигация
Печать/экспорт
QR Code
QR Code wiki:articles:voip (generated for current page)