Как установить 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
это кратко, очередь имеет массу настроек.
Вот кратко что можно настроить. Если есть желание что-то добавить - добро пожаловать на почту.