Однажды в одной компании, чтобы упростить поиск звонящих клиентов в ABillS, понадобилось установить модуль Callcenter, который имеет разные возможности, но нам понадобилось именно вплывающие уведомления в браузере со ссылкой на страницу звонящего клиента.
Файл Callcenter.pm выдадут разработчики ABillS после покупки модуля, переместим его в необходимую директорию:
mv Callcenter.pm /usr/abills/Abills/mysql/
Импортируем в базу данных данные из Callcenter.sql и Events.sql:
mysql --default-character-set=utf8 -D abills < /usr/abills/db/Callcenter.sql
mysql --default-character-set=utf8 -D abills < db/Events.sql
Откроем файл конфигурации ABillS:
nano /usr/abills/config.pl
Активируем модуль Callcenter, а также понадобиться модуль Events:
@MODULES = (
'Callcenter',
'Events',
);
Также я добавил некоторые параметры:
$conf{CALLCENTER_ASTERISK_PHONE_PREFIX}='\+38';
$conf{EVENTS_ASTERISK} = 1;
$conf{ASTERISK_AMI_IP} = '192.168.5.5';
$conf{ASTERISK_AMI_PORT} = '5039';
$conf{ASTERISK_AMI_USERNAME} = 'abills_admin';
$conf{ASTERISK_AMI_SECRET} = 'Password';
$conf{WEBSOCKET_ENABLED} = 1;
CALLCENTER_ASTERISK_PHONE_PREFIX позволяет убирать ненужные символы в начале номера, я убрал +38, так как при звонке Asterisk передает например +380670000000, а в ABillS телефоны клиентов заведены как 0670000000.
Также необходимо настроить Asterisk AMI, как это сделать я описывал в статье:
Настройка Asterisk AMI
Установим необходимые компоненты:
sudo apt update
sudo apt install libanyevent-perl
sudo a2enmod proxy
sudo a2enmod proxy_wstunnel
sudo service apache2 restart
sudo apt install -yq cpanminus build-essential
sudo cpanm Protocol::WebSocket
sudo cpanm Asterisk::AMI
Откроем веб конфигурацию в текстовом редакторе:
sudo nano /etc/apache2/sites-enabled/abills_httpd.conf
И внутри «VirtualHost» добавим строки:
ProxyPass "/admin/wss/" "ws://127.0.0.1:19443/wss/admin/" retry=1
На всякий случай проверим корректность конфигурации apache2 и перезапустим его:
sudo apachectl -t
sudo service apache2 restart
Осталось запустить websocket_backend.pl:
ln -s /usr/abills/misc/websocket_backend.pl /usr/abills/libexec/websocket_backend.pl
chmod +x /usr/abills/libexec/websocket_backend.pl
/usr/abills/libexec/websocket_backend.pl -d
Можно еще так:
/usr/abills/libexec/websocket_backend.pl start
/usr/abills/libexec/websocket_backend.pl status
/usr/abills/libexec/websocket_backend.pl -d LOG_FILE=/tmp/abills_websocket.log DEBUG=5
Проверить запущен ли websocket_backend.pl и завершить его можно командами:
ps xa |grep websocket_backend.pl
sudo killall websocket_backend.pl
При необходимости откроем порт в iptables:
iptables -I INPUT 1 -p tcp --dport 19443 -j ACCEPT
Чтобы websocket_backend.pl запускался автоматически при запуске Ubuntu, я создал скрипт автозапуска и активировал его:
nano /etc/systemd/system/abills-backend.service
[Unit]
Description=ABillS Websocket Server
After=network.target
After=mysql.service
Requires=mysql.service
[Service]
Type=forking
PIDFile=/usr/abills/var/log/websocket_backend.pid
ExecStartPre=/bin/chown -R www-data /usr/abills/var/
ExecStart=/usr/abills/libexec/websocket_backend.pl -d
ExecReload=/usr/abills/libexec/websocket_backend.pl stop
[Install]
WantedBy=multi-user.target
systemctl is-enabled abills-backend.service
systemctl enable abills-backend.service
systemctl start abills-backend.service
systemctl status abills-backend.service
service abills-backend status
Либо вместо скрипта автозапуска можно просто добавить websocket_backend.pl в /etc/rc.local:
/etc/rc.local
(sleep 5 && /usr/abills/libexec/websocket_backend.pl -d) &
Также стоит учесть что скрипт websocket_backend.pl может внезапно прекращать свою работу, по этому я сделал скрипт watchdog который перезапустит его в случае падения, пример можно найти в моей статье:
Простой скрипт Watchdog
В директории с логами будут созданы следующие файлы:
/usr/abills/var/log/websocket_internal.log
/usr/abills/var/log/websocket_backend.pid
/usr/abills/var/log/websocket.log
/usr/abills/var/log/event_asterisk.log
Всем администраторам которые должны получать уведомления в браузере я указал в настройках SIP телефон: goip4new, так как использовалось несколько шлюзов с SIM картами и Asterisk присылает например goip4 и goip4new.
Смотрите также мои статьи:
Установка Asterisk в Ubuntu
Настройка GOIP4 c Asterisk