Как установить Asterisk 1.8 из исходников на Linux CentOS 7
Asterisk - замечательная система телефонии с просто удивительными возможностями. Впрочем, если вы решили её установить, значи описывать её возможности и преимущества нет необходимости. Итак…
Подготовка системы
Для начала отключаем Selinux, останавливаем Firewalld (который можно настроить позже) и устанавливаем нужные пакеты.
vi /etc/selinux/config
Выставляем setenforce 0
systemctl stop firewalld systemctl disable firewalld reboot
Установка нужных пакетов:
yum install -y epel-release yum update -y yum install -y gcc gcc-c++ lynx bison mariadb-devel mariadb-server mariadb gmime-devel psmisc php php-mysql php-pear php-mbstring yum install -y tftp-server httpd make ncurses-devel libtermcap-devel sendmail sendmail-cf caching-nameserver sox newt-devel libxml2-devel libtiff-devel audiofile-devel gtk2-devel subversion kernel-devel yum install -y kernel-devel-$(uname -r) git subversion kernel-devel php-process crontabs cronie cronie-anacron wget vim php-xml uuid-devel libtool sqlite-devel libuuid-devel bzip2 yum install -y htop mc
Ставим и запускаем сервер базы данных. Она потом пригодится для статистики, поэтому поставим это сразу.
systemctl enable mariadb.service systemctl start mariadb.service mysql_secure_installation
Ставим db посвежее:
pear uninstall db pear install db-1.7.14
Собираем asterisk и компоненты из исходников
Описывать не буду, достаточно просто копипастить и проявить немного терпения во время компиляции.
Для начала PJSIP, с ним работа через NAT будет проще. :)
cd /usr/src/ wget http://www.pjsip.org/release/2.4/pjproject-2.4.tar.bz2 tar -xjvf pjproject-2.4.tar.bz2 cd pjproject-2.4* ./configure –prefix=/usr –enable-shared –disable-sound –disable-resample –disable-video –libdir=/usr/lib64 make dep make
make install
cd .. wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz tar xvfz dahdi-linux-complete-current.tar.gz cd dahdi-linux-complete-* make all make install make config
А эта библиотека пригодится для конвертации wav в mp3
cd .. wget https://downloads.sourceforge.net/project/lame/lame/3.98.4/lame-3.98.4.tar.gz tar zxvf lame-3.98.4.tar.gz cd lame-3.98.4 ./configure make
make install
cd .. wget http://www.digip.org/jansson/releases/jansson-2.5.tar.gz tar zvxf jansson-2.5.tar.gz cd jansson-2.5 ./configure –prefix=/usr make clean make make install
ldconfig
cd .. wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.6.0.tar.gz tar xvfz libpri-1.6.0.tar.gz cd libpri-1.6.0 make
make install
cd .. wget -c http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.8.32.3.tar.gz tar xvfz asterisk-1.8.32.3.tar.gz cd asterisk-1.8.32.3 ./configure –libdir=/usr/lib64 contrib/scripts/get_mp3_source.sh make menuselect
Выбираем всё, что нам пригодится. Звуковые файлы и нужные модули - выбираем всё, потом будет поздно. :)
make make install make samples
make config
useradd -m asterisk
chown asterisk.asterisk /var/run/asterisk
chown -R asterisk.asterisk /etc/asterisk
chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk
chown -R asterisk.asterisk /usr/lib64/asterisk
Запуск и проверка
Теперь запускаем астериск и заходим в его консоль.
systemctl restart asterisk systemctl enable asterisk asterisk -rvv
Примеры настроек
Для начала sip.conf
[general] allowguest=yes ;разрешаем гостевые. ; Да, нормальная настройка и вам можно будет звонить "на почту". ; это для "введение в заблуждение вероятного противника" alwaysauthreject=yes ; прикидываемся непонятно чем useragent=Cisco-SIPGateway/IOS-12.x sdpsession=SIP Call sdpowner=CiscoSystemsSIP-GW-UserAgent context=from-internet ; контекст по-умолчанию для входящих language=ru ; отключаем все кодеки и разрешаем только некоторые для аудио и видео disalow=all allow=alaw allow=ulaw allow=gsm allow=h261 allow=h263 allow=h263p ; и пара дополнительных опций transport=udp srvlookup=yes qualify=800 videosupport=yes ; регистрируемся на sip-сервере провайдера register => user:pass@wikiadmin.net/КудаОтправить ; для звонков через провайдера [provider] type=peer secret=pass username=user host=wikiadmin.net fromuser=user fromdomain=wikiadmin.net insecure=invite nat=force_rport context=КонтекстПользователей dtmfmode=inband ; шаблон [user](!) type=friend host=dynamic disallow=all allow=alaw allow=ulaw allow=gsm allow=h261 allow=h263 allow=h263p context=user_context ;этот параметр встретим в конце extensions.conf nat=yes qualify=600 call-limit=1 deny=0.0.0.0/0.0.0.0 permit=172.16.0.0/255.255.255.0 [100](user) ;для примера поставим номер 100 secret=pass callerid="Фамилия Имя"
Теперь подкорректируем extensions.conf, где и направим звонки куда нам нужно.
[general]
static=yes
writeprotect=yes
clearglobalvars=no
[globals]
CONSOLE=Console/dsp
IAXINFO=guest
TRUNK=DAHDI/G2
TRUNKMSD=1
; входящие с интернета.
[from-internet]
exten => post, 1, Answer() ; тут post из post@example.com
same => n, Macro(monitor) ; этот макрос позволит нам один раз написать строки для записи разговора и больше не повторятся
same => n, Dial(SIP/100,60,mtT) ; 60 секунд под музыку будем вызывать номер 100, если кто позвонит на почту
same => n, Hangup()
; этот вариант просто ждёт 3 секунды и отрубается. Для защиты от перебора
exten => _X., 1, Verbose(1,Internet guest call from IP ${CHANNEL(peerip)})
same => n, Wait(3)
same => n, Hangup()
; исходящие
[internal]
; конверенцию разместим на номере 55, например
exten => 55, 1, Answer()
same => n, Playback(conf-enteringno)
same => n, Set(CONFBRIDGE_JOIN_SOUND=confbridge-join)
same => n, Set(CONFBRIDGE(user,announce_join_leave)=yes)
same => n, Set(CONFBRIDGE_LEAVE_SOUND=confbridge-leave)
same => n, Macro(monitor)
same => n, ConfBridge(55,Mc)
same => n, Hangup()
; запись голоса и проверка. Помогает при формировании IVR
exten => 2000,1,Wait(2)
same => n,Record(/tmp/asterisk-recording:wav)
same => n,Wait(2)
same => n,Playback(/tmp/asterisk-recording)
same => n,Wait(2)
same => n,Hangup
; эхо-тест для проверки
exten => 99,1,Playback(demo-echotest)
same => n, Macro(monitor)
same => n, Echo
same => n, Hangup()
; звонки на трёхзначные внутренние сип-номера (100, 101 и т.д.)
exten => _XXX, 1, Answer()
same => n, Macro(monitor)
same => n, Dial(SIP/${EXTEN},60,mtT)
same => n, Hangup()
; теперь входящие звонки и сразу добавим IVR
[incoming]
exten => КудаОтправить, 1, Answer() ; строчка из register в sip.conf
same => n, Macro(monitor)
; я не против звонков, но давайте в рабочее время, ок?
same => n, GotoIfTime(09:00-12:59,Mon-Fri,*,*?work)
same => n, GotoIfTime(14:00-18:00,Mon-Thu,*,*?work)
same => n, GotoIfTime(14:00-16:29,Mon-Fri,*,*?work)
; если в рабочее время не попали, то просто прощаемся и отрубаем звонок.
; Нет, можно и voicemail поставить, всё в ваших руках :)
same => n, Background(/home/asterisk/ivr/RestTime)
same => n, Hangup()
same => n(work), Goto(incoming,s,1) ;а тут ловим переход из временных рамок и отправляем куда надо
exten => s, 1, Answer()
same => n, Background(/home/asterisk/ivr/WorkTime)
same => n, WaitExten(1)
exten => _XXX, 1, Dial(SIP/${EXTEN},60,mtT) ;эта строчка ловит если набрали добавочный
same => n, Goto(incoming,t,1) ;и если добавочный не отвечает или недоступен, отправляем на оператора, куда и таймаут падает
exten => 3, 1, Answer() ;если нажали 3, то
same => n, Queue(sales|tT|||40) ;отправляем на очередь sales (об этом чуть позже) на 40 секунд
same => n, Dial(SIP/100,20,mtT) ; и потом на секретаря на номер 100 на 20 секунд, если из очереди не взяли звонок
same => n, Hangup()
exten => i, 1, Answer() ;если набрали неправильно (incorrect), отправляем так же на timeout
same => n, Goto(incoming,t,1)
; и теперь уже строчки, которые ловят дождавшихся оператора
exten => t, 1, Dial(SIP/100,20,mtT)
same => n, Hangup()
; разумеется, пользователям надо и звонить. Для этого
[outgoing]
exten => _[7,8]9XXXXXXXXX, 1, Answer()
same => n, Macro(monitor)
same => n, Dial(SIP/7${EXTEN:1}@provider,120,Ttr) ; provider у нас описан в sip.conf сразу за register
same => n, HangUp
; а теперь тот самый макрос для записи разговора
[macro-monitor]
exten => s, 1, Set(MONITOR_FILE=/var/calls/${UNIQUEID})
same => n, MixMonitor(${MONITOR_FILE}.wav)
same => n, Set(CDR(filename)=${UNIQUEID}.wav) ; эта строка потребовалась, чтобы в ACDR нормально появлялись файлы для прослушивания.
;
; контексты (исходящие)
;
[user_context] ;этой группе (context в шаблоне в sip.conf) разрешим:
include => incoming ; принимать входящие
include => internal ; пользоваться внутренними сервисами и звонками
include => outgoing ; и звонить наружу
Ну и, как и обещал, про очереди, добавив в конец queues.conf следующее:
[sales]
strategy = rrmemory ; это равномерно распределит звонки.
; Можно указать так же ringall (всем сразу) и linear (по очереди как написано)
member = SIP/100
member = SIP/101
member = SIP/102
это кратко, очередь имеет массу настроек.
Вот кратко что можно настроить. Если есть желание что-то добавить - добро пожаловать на почту.