Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия Следующая версия Следующая версия справа и слева | ||
install_local_version [2018/05/14 11:58] Евгений Романенко |
install_local_version [2021/11/02 07:21] Евгений Романенко |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
**Системные требования.** | **Системные требования.** | ||
- | * На сервере (здесь и далее примем, что “сервером” может быть как отдельный компьютер, \\ так и виртуальная машина, VPS/VDS и т .д. \\ Также отметим: docker-контейнер с локальной версией системы статистики может быть запущен как на том же сервере, что и АТС Asterisk, так и на отдельном сервере) должна быть установлена операционная система Linux семейства Debian не ниже 7.0 (Ubuntu 14.04 и выше), CentOS не ниже 6.5 или другие дистрибутивы с актуальной базой репозиториев. | + | * На сервере (здесь и далее примем, что “сервером” может быть как отдельный компьютер, \\ так и виртуальная машина, VPS/VDS и т .д. \\ Также отметим: docker-контейнер с локальной версией системы статистики может быть запущен как на том же сервере, что и АТС Asterisk, так и на отдельном сервере) должна быть установлена операционная система Linux семейства Debian не ниже 10.0 (Ubuntu 18.04 и выше), CentOS не ниже 7 или другие дистрибутивы с актуальной базой репозиториев. |
* IP АТС Asterisk должна быть версии не ниже 1.8. \\ На Asterisk должна быть настроена запись информации о разговорах в таблицы cel, cdr и queue_log, подробную информацию о необходимых настройках Asterisk вы найдете ниже в разделе "Настройки Asterisk". | * IP АТС Asterisk должна быть версии не ниже 1.8. \\ На Asterisk должна быть настроена запись информации о разговорах в таблицы cel, cdr и queue_log, подробную информацию о необходимых настройках Asterisk вы найдете ниже в разделе "Настройки Asterisk". | ||
- | * Сервер БД MySQL не ниже версии 5.1. | + | * Сервер БД MySQL не ниже версии 5.5. |
- | * Docker версии 1.7.1 и выше (версии ниже нужно проверять дополнительно). \\ Установка docker в различных ОС подробно расписана в официальной документации: \\ [[https://store.docker.com/editions/community/docker-ce-server-debian?tab=description|Debian]], [[https://store.docker.com/editions/community/docker-ce-server-ubuntu?tab=description|Ubuntu]], [[https://store.docker.com/editions/community/docker-ce-server-centos?tab=description|CentOS]]. \\ Для установки в FreePBX 13 можете воспользоваться [[https://wiki.vistep.ru/doku.php?id=установка_docker_на_freepbx_13_centos_6.6|нашей инструкцией]] | + | * Docker версии 1.7.1 и выше (версии ниже нужно проверять дополнительно). \\ Установка docker в различных ОС подробно расписана в официальной документации: \\ [[https://docs.docker.com/engine/install/debian/|Debian]], [[https://docs.docker.com/engine/install/ubuntu/|Ubuntu]], [[https://docs.docker.com/engine/install/centos/|CentOS]]. \\ Для установки в FreePBX 13 можете воспользоваться [[https://wiki.vistep.ru/doku.php?id=установка_docker_на_freepbx_13_centos_6.6|нашей инструкцией]] |
- | **Настройки Asterisk.** | + | ==== Настройка ==== |
+ | Часть шагов по конфигурированию вам поможет сделать установщик, ссылку для скачивания которого пришлют наши инженеры после оплаты\\ | ||
+ | Скачайте, запустите и следуйте его инструкциям.\\ | ||
+ | В данном [[https://youtu.be/eYNTPAa06U4|видео]] представлен пример работы установщика на АТС FreePBX \\ | ||
+ | По завершению его работы вам будет предоставлена ссылка для входа в web-интерфейс, но настройка не завершена - нужно выполнить еще несколько манипуляций:\\ | ||
- Инсталлируем необходимые пакеты (для примера в Debian/Ubuntu) <code bash>aptitude install unixodbc-dev libmyodbc</code> | - Инсталлируем необходимые пакеты (для примера в Debian/Ubuntu) <code bash>aptitude install unixodbc-dev libmyodbc</code> | ||
- Asterisk должен быть собран со следующими опциями {{::9d37fd2a5c08439f8a69fe81a398891c.png?400|}}{{::34d0b50241d3443d827afa222aede0f4.png?400|}} | - Asterisk должен быть собран со следующими опциями {{::9d37fd2a5c08439f8a69fe81a398891c.png?400|}}{{::34d0b50241d3443d827afa222aede0f4.png?400|}} | ||
Строка 20: | Строка 24: | ||
table=cdr | table=cdr | ||
alias start => calldate | alias start => calldate | ||
- | alias realdst => dst</code> **/etc/odbc.ini** <code bash>[MySQL-asterisk] | + | </code> **/etc/odbc.ini** <code bash>[MySQL-asterisk] |
Description = MySQL Asterisk database | Description = MySQL Asterisk database | ||
;Trace = Off | ;Trace = Off | ||
Строка 37: | Строка 41: | ||
CPTimeout = | CPTimeout = | ||
CPReuse =</code> в конец **/etc/asterisk/cdr_mysql.conf** добавить <code bash>alias filename => filename</code> | CPReuse =</code> в конец **/etc/asterisk/cdr_mysql.conf** добавить <code bash>alias filename => filename</code> | ||
- | - Создадим БД и таблицу cdr в MySQL <code sql>mysql> create database asterisk; | + | - Внесем в **/etc/asterisk/extconfig.conf** <code bash>queue_log => odbc,asterisk</code> |
- | mysql> use asterisk; | + | |
- | mysql> CREATE TABLE `cdr` ( `id` int(9) unsigned NOT NULL AUTO_INCREMENT, | + | |
- | `calldate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', | + | |
- | `clid` varchar(80) NOT NULL DEFAULT '', | + | |
- | `src` varchar(80) NOT NULL DEFAULT '', | + | |
- | `dst` varchar(80) NOT NULL DEFAULT '', | + | |
- | `dcontext` varchar(80) NOT NULL DEFAULT '', | + | |
- | `channel` varchar(80) NOT NULL DEFAULT '', | + | |
- | `dstchannel` varchar(80) NOT NULL DEFAULT '', | + | |
- | `lastapp` varchar(80) NOT NULL DEFAULT '', | + | |
- | `lastdata` varchar(80) NOT NULL DEFAULT '', | + | |
- | `duration` int(11) NOT NULL DEFAULT '0', | + | |
- | `billsec` int(11) NOT NULL DEFAULT '0', | + | |
- | `disposition` varchar(45) NOT NULL DEFAULT '', | + | |
- | `amaflags` int(11) NOT NULL DEFAULT '0', | + | |
- | `accountcode` varchar(20) NOT NULL DEFAULT '', | + | |
- | `uniqueid` varchar(32) NOT NULL DEFAULT '', | + | |
- | `userfield` varchar(255) NOT NULL DEFAULT '', | + | |
- | `filename` varchar(255) NOT NULL DEFAULT '', | + | |
- | PRIMARY KEY (`id`), | + | |
- | KEY `calldate` (`calldate`), | + | |
- | KEY `accountcode` (`accountcode`), | + | |
- | KEY `uniqueid` (`uniqueid`), | + | |
- | KEY `dst` (`dst`), | + | |
- | KEY `src` (`src`) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; | + | |
- | mysql> grant all on asterisk.* to 'asterisk_user'@'localhost' identified by '232d2edxse3e';</code> | + | |
- | - Таблицу cel <code sql>mysql>CREATE TABLE `cel` ( | + | |
- | `id` int(11) NOT NULL AUTO_INCREMENT, | + | |
- | `eventtype` varchar(30) NOT NULL, | + | |
- | `eventtime` datetime NOT NULL, | + | |
- | `cid_name` varchar(80) NOT NULL, | + | |
- | `cid_num` varchar(80) NOT NULL, | + | |
- | `cid_ani` varchar(80) NOT NULL, | + | |
- | `cid_rdnis` varchar(80) NOT NULL, | + | |
- | `cid_dnid` varchar(80) NOT NULL, | + | |
- | `exten` varchar(80) NOT NULL, | + | |
- | `context` varchar(80) NOT NULL, | + | |
- | `channame` varchar(80) NOT NULL, | + | |
- | `src` varchar(80) DEFAULT NULL, | + | |
- | `dst` varchar(80) DEFAULT NULL, | + | |
- | `channel` varchar(80) DEFAULT NULL, | + | |
- | `dstchannel` varchar(80) DEFAULT NULL, | + | |
- | `appname` varchar(80) NOT NULL, | + | |
- | `appdata` varchar(80) NOT NULL, | + | |
- | `amaflags` int(11) NOT NULL, | + | |
- | `accountcode` varchar(20) NOT NULL, | + | |
- | `uniqueid` varchar(32) NOT NULL, | + | |
- | `linkedid` varchar(32) NOT NULL, | + | |
- | `peer` varchar(80) NOT NULL, | + | |
- | `userdeftype` varchar(255) NOT NULL, | + | |
- | `eventextra` varchar(255) DEFAULT NULL, | + | |
- | `userfield` varchar(255) DEFAULT NULL, | + | |
- | PRIMARY KEY (`id`), | + | |
- | KEY `uniqueid_index` (`uniqueid`), | + | |
- | KEY `linkedid_index` (`linkedid`), | + | |
- | KEY `eventtime` (`eventtime`), | + | |
- | KEY `exten` (`exten`), | + | |
- | KEY `eventtype` (`eventtype`) | + | |
- | ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;</code> | + | |
- | - Таблицу queue_log <code sql>mysql> CREATE TABLE IF NOT EXISTS `queue_log` ( | + | |
- | id int(10) UNSIGNED NOT NULL AUTO_INCREMENT, | + | |
- | time timestamp NULL DEFAULT '0000-00-00 00:00:00', | + | |
- | callid varchar(32) NOT NULL default '', | + | |
- | queuename varchar(32) NOT NULL default '', | + | |
- | agent varchar(32) NOT NULL default '', | + | |
- | event varchar(32) NOT NULL default '', | + | |
- | data1 varchar(100) NOT NULL default '', | + | |
- | data2 varchar(100) NOT NULL default '', | + | |
- | data3 varchar(100) NOT NULL default '', | + | |
- | data4 varchar(100) NOT NULL default '', | + | |
- | data5 varchar(100) NOT NULL default '', | + | |
- | PRIMARY KEY (`id`) | + | |
- | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; | + | |
- | mysql> \q</code> | + | |
- | - Внесем в **/etc/asterisk/extconfig.conf** внесем <code bash>queue_log => odbc,asterisk</code> | + | |
- **cel.conf** выглядит так <code bash>[general] | - **cel.conf** выглядит так <code bash>[general] | ||
enable=yes | enable=yes | ||
Строка 149: | Строка 78: | ||
Set(CDR(recordingfile)=${fname}.wav); | Set(CDR(recordingfile)=${fname}.wav); | ||
Set(CDR(realdst)=${called}); | Set(CDR(realdst)=${called}); | ||
+ | Set(CDR(realsrc)=${calling}); | ||
MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${monopt}); | MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${monopt}); | ||
Строка 185: | Строка 115: | ||
same => n,Set(CDR(filename)=${fname}.mp3) | same => n,Set(CDR(filename)=${fname}.mp3) | ||
same => n,Set(CDR(realdst)=${CalleeID}) | same => n,Set(CDR(realdst)=${CalleeID}) | ||
+ | same => n,Set(CDR(realsrc)=${CallerID}) | ||
same => n,MixMonitor(${WAV}/${fname}.wav,b,${monopt}) | same => n,MixMonitor(${WAV}/${fname}.wav,b,${monopt}) | ||
same => n(end),MacroExit() | same => n(end),MacroExit() | ||
Строка 195: | Строка 126: | ||
[from-pstn-custom] | [from-pstn-custom] | ||
exten => _XX.,1, Macro(vistep.ru-record,${CALLERID(number)},${EXTEN})</code> | exten => _XX.,1, Macro(vistep.ru-record,${CALLERID(number)},${EXTEN})</code> | ||
+ | - Или у вас внезапно lua <code lua> | ||
+ | WAV = "/opt/records/wav" -- Временный каталог с WAV | ||
+ | MP3="/opt/records/mp3" --Куда выгружать mp3 файлы | ||
+ | RECORDING=1 -- 1 - запись включена. | ||
+ | function recording(calling,called) | ||
+ | if RECORDING == 1 then | ||
+ | fname = channel.UNIQUEID:get() .. "-" .. channel.STRFTIME("${EPOCH},,%Y-%m-%d-%H_%M".."-"..calling.."-"..called):get() | ||
+ | datedir = channel.STRFTIME("${EPOCH},,%Y/%m/%d"):get().."/" | ||
+ | os.execute("mkdir -p " .. WAV.."/"..datedir) | ||
+ | os.execute("mkdir -p " .. MP3.."/"..datedir) | ||
+ | WAVfname = WAV..datedir..fname..".wav" | ||
+ | MP3fname = MP3..datedir..fname..".mp3" | ||
+ | channel.CDR("filename"):set(MP3fname) | ||
+ | channel.CDR("realdst"):set(called) | ||
+ | channel.CDR("realsrc"):set(calling) | ||
+ | monopt = string.format("nice -n 19 /usr/bin/lame -b 32 --silent %s %s && rm -f %s && chown o+r %s",WAVfname,MP3fname,WAVfname,MP3fname) | ||
+ | app.mixmonitor(WAVfname,b,monopt) | ||
+ | return | ||
+ | end; | ||
+ | end; | ||
- | **Установка, настройка и запуск.** | + | extensions = { |
- | - Для начала нужно провести первичную подготовку MySQL-базы данных Asterisk. \\ Зайдите на сервер MySQL и создайте нового пользователя с полными правами, например вот так: \\ <code sql>GRANT ALL PRIVILEGES ON *.* TO 'vistepru'@'%' \ | + | ["local"] = { |
- | IDENTIFIED BY 'MySuperPassword111' WITH GRANT OPTION; | + | --локальные вызовы на номера XXX |
- | flush privileges; | + | ["_XXX"] = function(context,extension) |
- | quit</code>Этот шаг необходим для работы мастера настройки БД, речь о котором пойдет несколько позже. \\ Также проверьте, что MySQL слушает не только 127.0.0.1, но и IP-адрес, по которому к нему будет обращаться система статистики. \\ За это в настройках MySQL отвечает параметр **bind-address**, проще всего закомментировать эту строку в my.cnf, тогда mysql-сервер будет слушать на всех IP-адресах сервера. | + | app.answer() |
- | - Теперь зайдите на сервер, где предполагаете запускать docker-контейнер, по ssh. Скачайте архив контейнера по предоставленной ссылке, например (это пример, корректная ссылка высылается на почту после оплаты): <code bash>wget https://vistep.ru/stat.vistep.ru_local_1.0.3.tgz</code> Если в вашей системе нет wget, то воспользуйтесь вот этой командой: <code bash>curl -o stat.vistep.ru_local_1.0.3.tgz https://vistep.ru/stat.vistep.ru_local_1.0.3.tgz</code> | + | recording(channel.CALLERID("num"):get(),extension) |
- | - Далее перейдите в папку с архивом контейнера (здесь и далее это /root/) и загрузите его в docker <code bash>docker load -i stat.vistep.ru_local_1.0.3.tgz</code> Проверьте все ли в порядке, команда <code bash>docker images</code> должна вернуть нечто подобное \\ {{:screen_shot_2017-04-21_at_12.58.01.png|}} | + | app.dial("SIP/"..extension,300,"t") |
- | - Следующим пунктом будет настройка возможности прослушивать и скачивать файлы разговоров в интерфейсе статистики. Как и было описано ранее, вы можете запустить docker-контейнер с ПО как на сервере с АТС, так и на отдельном сервере. Для запуска docker там же, где и Asterisk, вам нужно выполнить такую команду:<code bash>docker run --name=stat.vistep.ru_local_1.0.3 -p 80:80 -v /ВАШ/ПУТЬ/К/ФАЙЛАМ:/var/www/html/public/user/УНИКАЛЬНЫЙ_КАТАЛОГ_ПОЛЬЗОВАТЕЛЯ/some/path/to/files/ --restart=always -d stat.vistep.ru_local_1.0.3 </code> В консоле должно отобразиться подобное:{{:screen_shot_2017-04-21_at_13.42.44.png|}} \\ где /ВАШ/ПУТЬ/К/ФАЙЛАМ - это путь к файлам записей разговоров на вашей АТС \\ Если же запуск осуществляется на отдельном сервере, то сначала примонтируйте папку с файлами с сервера АТС на сервер с docker по NFS. Вот пример такой конфигурации: файл **/etc/exports** на сервере с Asterisk:<code bash>/records/mp3/ 192.168.0.0/255.255.255.0(rw,insecure,nohide,all_squash,anonuid=1001,anongid=1001,no_subtree_check)</code>а на сервере с docker, в **/etc/fstab** <code bas>ASTERISK_IP_ADDRESS:/records/mp3 /root/records nfs rsize=8192,wsize=8192 0 0</code> *здесь /records/mp3 - это путь к файлам записей на АТС \\ Затем выполните запуск уже знакомой командой <code bash>docker run --name=stat.vistep.ru_local_1.0.3 -p 80:80 -v /root/config.php:/var/www/html/app/config.php -v /root/records:/var/www/html/public/user/УНИКАЛЬНЫЙ_КАТАЛОГ_ПОЛЬЗОВАТЕЛЯ/some/path/to/files/ -d stat.vistep.ru_local_1.0.3</code> | + | app.hangup() |
- | - Далее откройте web-браузер и перейдите по ссылке <code>http://DOCKER_DAEMON_IP_ADRESS/install.html</code> Вас встретит мастер настройки {{:screen_shot_2017-04-21_at_13.54.58.png|}} | + | end; |
- | - Заполните все поля (на шаге номер 1 мы создали нужного пользователя) и нажмите кнопку Тест {{:screen_shot_2017-04-21_at_13.57.29.png|}} | + | }; |
- | - При успешном прохождении теста на подключение к БД вы увидите {{::screen_shot_2017-04-21_at_14.00.33.png|}} \\ Если все так, жмите Настроить БД | + | |
- | - Здесь мастер сообщит, что все прошло успешно и вы можете перейти по ссылке <code>http://DOCKER_DAEMON_IP_ADRESS</code> т.е. к авторизации в системе {{:screen_shot_2017-04-21_at_14.11.13.png|}} | + | |
- | - Для входа в систему статистики используйте данные авторизации (Email-адрес/Пароль для авторизации) из регистрационного письма. | + | |
+ | } | ||
+ | |||
+ | </code> | ||
+ | - Для входа в систему статистики используйте email/пароль, которые сообщат вам инженеры технической поддержки. | ||
+ | \\ | ||
На этом настройка завершена, приятного пользования! \\ По любым вопросам/неполадкам/пр. пишите нам на <support@vistep.ru> или прямо из интерфейса, в меню Help Desk. | На этом настройка завершена, приятного пользования! \\ По любым вопросам/неполадкам/пр. пишите нам на <support@vistep.ru> или прямо из интерфейса, в меню Help Desk. | ||
+ | |||
+ | **Некоторые замечания по части MySQL.** | ||
+ | - В ходе своей работы установщик подключается к БД Asterisk, для чего ему необходимы имя пользователя и пароль. Создать их можно, например, вот так: <code sql> | ||
+ | mysql -uroot -p | ||
+ | Enter password: | ||
+ | Welcome to the MariaDB monitor. Commands end with ; or \g. | ||
+ | Your MariaDB connection id is 3359 | ||
+ | Server version: 5.5.60-MariaDB MariaDB Server | ||
+ | |||
+ | Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. | ||
+ | |||
+ | Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. | ||
+ | |||
+ | MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'vistepru'@'%' \ | ||
+ | IDENTIFIED BY 'MySuperPassword111' WITH GRANT OPTION; | ||
+ | flush privileges; | ||
+ | quit</code>\\ | ||
+ | - Также проверьте, что MySQL слушает не только 127.0.0.1, но и IP-адрес, по которому к нему будет обращаться система статистики. \\ За это в настройках MySQL отвечает параметр **bind-address**, проще всего закомментировать эту строку в my.cnf и перезагрузить демон MySQL, тогда сервис будет слушать все IP-адреса сервера. |