Дмитрий Рашевский
29.10.2019
1149

Установка биллинговой системы A2BILLING на CENTOS6

Введение Требования к установке и установка пакетов из репозиториев Установка A2billing Конфигурирование Asterisk для работы с A2billing Настройка логирования A2billing Введение Давайте разберемся, что такое биллинговая система и для чего она нужна. Чтоже такое биллинг? Слово биллинг произошло от английского слова «bill», что в переводе означает «счёт». Т.е. «биллинг» – это выставление счетов о расходах, […]

  1. Введение
  2. Требования к установке и установка пакетов из репозиториев
  3. Установка A2billing
  4. Конфигурирование Asterisk для работы с A2billing
  5. Настройка логирования A2billing

Введение

Давайте разберемся, что такое биллинговая система и для чего она нужна.
Чтоже такое биллинг? Слово биллинг произошло от английского слова «bill», что в переводе означает «счёт». Т.е. «биллинг» – это выставление счетов о расходах, задолженостях и др. Отсюда можно вывести, что биллинговые системы — это комплекс программного обеспечения, позволяющий вести учёт тарифов, вычислять стоимость услуг для каждого клиента.
Биллинговые системы применяются телекоммуникационными операторами, начиная от операторов сотовой связи, заканчивая операторами стационарной связи. Но это не означает, что их нельзя приметь и в малых сферах, к примеру на предприятии. Эти системы можно использовать для внутренней телефонии. Это позволить более детально вести учет телефонных разговоров. Также проводить анализ звонков сотрудников, с детальным описание звонка, т. е. кто, куда, сколько и за какую цену.
Данная инструкция поможет разобраться в установке и настройке биллинговой системы a2billing v2.x на Centos 6.9 с предустановленным Freepbx. В ней будет рассмотрены системные требования к ПО, подробная инструкция получения, установки, а также возможность интеграции такой системы с астериском.

Для написания статьи использовалась система Centos 6.9, FreePBX 13.0.192.19 и Asterisk 13.21.0

Требования к A2billing

Как и любой «софт», a2billing использует дополнительные программные компоненты, а также сторонние библиотеки, не установленные по умолчанию в системе. Если вы только предустановили сервер и у вас никаких пакетов не установлено, то внимательно прочитайте этот раздел, он поможет определить какое ПО вам потребуется установить для функционирования биллинговой системы a2billing.
Для корректной работы и установки A2billing необходимы следующие сервисы:
• Apache/2.2.15
• Asterisk > 1.8
• Mysql 5.x
• PHP >= 5.3.0
Дабы избежать дальнейших ошибок при установки a2billing требуется наличие в системе следующих библиотек PHP:
• php-pgsql
• php-mcrypt
• php-xml
• php-gd
• php-php-gettext
• php-soap

# yum install epel-release php-mcrypt php-xml perl-DBD-Pg php-soap php-gd php-pgsql php-php-gettext
Если у вас только Asterisk без web интерфейса, вам также надо установить php

Если набор ПО и библиотек PHP у вас уже имеется или вы его уже установили, то можно уже переходить к установке a2billing.

Установка A2billing

A2billing по своей сути — это web приложение со своей базой данных. Приложение написано на PHP. По окончанию процедур у нас будет удобный web интерфейс.
Установка A2billing выделяет несколько шагов

• Скачивание и разархивирование исходного кода
• Создание БД
• Редактирование конфигурационного файла /etc/a2billing.conf и установка параметров подключения к БД
• Установка прав, создание необходимых файлов и директорий
• Установка графического интерфейса A2billing
• Установка agi скриптов
• Преобразование диалплана
• Добавление задач в crontab

Рассмотрим каждый пункт подробнее и опишем каждое действие.

Скачивание и разархивирование исходного кода

Установка любого программного продукта начинается с получения его устаногочного файла или исходных файлов. А2billing — свободно распространяемое ПО и его исходные коды можно найти в интернете. В данном раделе будет описано, где найти «исходники» a2billing, а также информация как и куда их устанавливать.
Перейдем в директорию в которой у нас будут исходники, в данном случае это /usr/src, увас она может быть другая

cd /usr/src

Исходники a2billing можно найти на github. Чтобы их скачать воспользуемся утилитой git clone

Совет: если она у вас не установлена, её можно поставить командой<br> yum install -y git
# git clone https://github.com/Star2Billing/a2billing.git

Ждем, пока скачается, затем переходим в скаченную директорию командой
Cd

# cd /usr/src/a2billing

Теперь, скачаем установочный файл composer. Небольшое отступление, composer – это менеджер зависимостей для PHP. Composer представлен, как один файл – composer.phar. Т.е. это исполняемый файл PHP, принимающий несколько команд install, update, и т.д. Он позволяет скачивать и рапаковывать необходимы библиотеки, описанные в файле composer.json. Скачать composer можно следующей командой.

# curl -sS https://getcomposer.org/installer | phpphp composer.phar install

После установки composer выполним обновление необходимых нам зависимостей до последней версии следующей командой.

# php composer.phar update

После обновления, нужно установить все найденные зависимости — это выполняется следующим образом:

# php composer.phar install

Результат проделанных действий можно наблюдать на изображении ниже.

Установка файлов разработчика
Установка файлов разработчика
По окончанию установки у вас должна появиться в текущей директории папка vendor

Создание БД

Поскольку A2billing – web приложение с учётом тарифов, а также анализирующее тарифы, то оно используюет свою базу данных. Исходя из этого необходимо создать и заполнить её необходимыми таблицами. В этом разделе рассмотрим, как создать нужную нам Базу Данных, а также заполнить её необходимыми таблицами.

  1. В скачанной ранее директории a2billing уже есть sql файл с созданием БД поэтому будем использовать его. Если вы находитесь в другой директории нужно перейти по следующему пути:
# cd /usr/src/a2billing/DataBase/mysql-5.x/

Просмотрев файлы находящиеся в директории найдем файл a2billing-createdb-user.sql.
Этот файл позволяет создать нужную БД и пользователя для использующего это БД.

По умолчанию имя БД — mya2billing, создаваемый пользователь a2billinguser и пароль пользователя БД — a2billing.

Если вам необходимо заменить данные или по каким то причинам вас не устраивают значения по умолчанию, их можно заменить открыв файл любым текстовым редактором и заменить эти значения на удобные для вас.
Рассмотрев назначение нужного файла или заменив необходимые данные, создадим БД

# mysql -u root -p < a2billing-createdb-user.sql

После выполнения команды система попросит ввести root пароль для mysql. Введя root пароль, создастся новая БД с указанными вами данными.

2. Завершив предыдущую процедуру, выполним скрипт для заполнения базы таблицами.

# ./install-db.sh

Выполнение скрипта потребует ввод информации:

  1. Database Name – имя БД к которой будем подключаться
  2. Hostname – имя хоста или IP адрес mysql сервера
  3. UserName – имя пользователя под которым будем подключаться (будем использовать имя указанное выше)
  4. Password — пароль пользователя mysql
    Полученный результат и выполнение команд можно посмотреть на изображении ниже.
Установка БД
Установка БД

3. Чтобы проверить создались ли таблицы после выполнения скрипта install-db.sh – подключаемся к БД

# mysql -u root -p mya2billing

Вас поприветствует консоль mysql. В ней введем командуй SHOW TABLES. Созданные таблицы можно посмотреть на скрине ниже.

Проверка созданных таблиц
Проверка созданных таблиц

Конфигурационный файл a2billing.

Как и asterisk, a2billing имеет свои конфигурации. Которые позволяют ему подключаться к БД, использовать режимы логирования и т. д. В этом разделе будет рассказано где найти конфигурационный файл, какие правки в нем произвести.
Скопируем конфигурационный файл a2billing в директорию /etc/.

# cp /usr/src/a2billing/a2billing.conf /etc/

В этом файле находятся различные настройки логирования. Обработчиков событий и т.д. Нас интересует секция подключения к БД – [database].
Отредактируем скопированный файл. Заменяя нужные параметры на указанные в п.1.

[database]
hostname = localhost
port = 3306
user = a2billinguser
password = a2billing
dbname = mya2billing
dbtype = mysql

hostname – имя хоста или IP адрес mysql сервера
port — порт подключения к mysql серверу
user – пользователь для подключения к mysql
password – пароль пользователя указанного в user
dbname – имя БД, которая будет использоваться a2billing
dbtype – драйвер подключения к БД. Используем mysql

Редактирование конфигурационного файла
Редактирование конфигурационного файла

Рис 4. Редактирование конфигурационного файла (pic4.png)

Установка прав, создание необходимых файлов и директорий

Перво-на-перво создадим конфигурационный файлы additional_a2billing_iax.conf и additional_a2billing_sip.conf в директории с файлами конфигурации астериска.

# touch /etc/asterisk/additional_a2billing_iax.conf
# touch /etc/asterisk/additional_a2billing_sip.conf

Чтобы астериск мог использовать эти файлы, назначим права пользователя и группы asterisk.

# chown asterisk. /etc/asterisk/additional_a2billing_iax.conf -R
# chown asterisk. /etc/asterisk/additional_a2billing_sip.conf -R

Когда назначены права, включим эти файлы в основные конфигурационные файлы астериска, т. к. без этого астериск не сможет понять, что у него есть эти файлы и у него не получитсяиспользовать эти настройки.

# echo \#include additional_a2billing_sip.conf >> /etc/asterisk/sip_custom.conf
# echo \#include additional_a2billing_iax.conf >> /etc/asterisk/iax_custom.conf
include additional_a2billing_sip.conf
include additional_a2billing_sip.conf

Укажем AMI пользователя, который будет подключаться к астериску в файле /etc/asterisk/manager_custom.conf.

[a2billing]
secret=very_hard_password
read=system,call,log,verbose,comm# cp -rf /var/www/html/a2billing/common/lib /var/lib/asterisk/agi-bin
# cp -rf /var/www/html/a2billing/vendor /var/lib/asterisk/
# chown asterisk. /var/lib/asterisk/agi-bin/ -R
# chown asterisk. /var/lib/asterisk/vendor -R
# chmod +x /var/lib/asterisk/agi-bin/a2billing.php
# chmod +x /var/lib/asterisk/agi-bin/a2billing_monitoring.phpand,agent,user
write=system,call,log,verbose,command,agent,user

Исходя из примера логином пользователя будет a2billing, а паролем подключения к AMI – значение указанное в secret. В данном примере – very_hard_password

Manager_custom.conf
Manager_custom.conf

Установка agi скриптов

Ниже будет описано изменение диалплана астериска. Поэтому, чтобы диалплан корректно работал необходимо скопировать agi скрипты из директории a2billing, которую мы скачали из репозиториев git в разделе Скачивание и разархивирование исходного кода. Для это го перейдем в директорию с agi скриптами a2billing командой cd и скопируем файлы a2billing.php и a2billing_monitoring.php в директорию agi скриптов астериска /var/lib/asterisk/agi-bin.

# cd /usr/src/a2billing/AGI
# cp a2billing.php /var/lib/asterisk/agi-bin
# cp a2billing_monitoring.php /var/lib/asterisk/agi-bin

Чтобы при выполнении диалплана скрипты могли вызываться и исполняться необходимо им необходимо назначить права пользователя и группы командой chown, а также установить права на выполнение командой chmod c ключом +x.

# chown asterisk. /var/lib/asterisk/agi-bin/ -R
# chmod +x /var/lib/asterisk/agi-bin/a2billing.php
# chmod +x /var/lib/asterisk/agi-bin/a2billing_monitoring.php

Графический интерфейс A2billing

В данном разделе будет написано. Как установить графическую оболочку для a2billing, а также как зайти на web-интерфейс системы.
Биллинговая система содержит 3 веб интерфейса: admin, agent, customer. Создадим родительскую директорию, где все они будут находиться

# mkdir /var/www/html/a2billing

Теперь из директории /usr/src/a2billing/ перенесем папки admin, agent customer, common и vendor в директорию в созданную выше и назначим права пользователя командой chown.

# cp -rf /usr/src/a2billing/admin /var/www/html/a2billing
# cp -rf /usr/src/a2billing/agent /var/www/html/a2billing
# cp -rf /usr/src/a2billing/customer /var/www/html/a2billing
# cp -rf /usr/src/a2billing/common /var/www/html/a2billing
# cp -rf /usr/src/a2billing/vendor /var/www/html/a2billing
# chown -R asterisk:asterisk /var/www/html/a2billing

Также чтобы избежать ошибок web назначим права на исполнение файлам templates_c располагающимся в скопированных нами директориях admin, customer и agent, командой chmod с ключом +x.

# chmod 755 /var/www/html/a2billing/admin/templates_c
# chmod 755 /var/www/html/a2billing/customer/templates_c
# chmod 755 /var/www/html/a2billing/agent/templates_c

Теперь можно подключаться к web интерфейсу, для этого в адресной строке любого браузера укажите путь к диретории a2billing:

http://<YOUR_IP_ADDRESS>/a2billing/admin

Для авторизации используются стандартные логин и пароль root/changepassword

Web admin A2billing
Web admin A2billing

Преобразование диалплана

Для того, чтобы биллинг корректно работал и собирал информацию о звонках. Также можно было оценивать и расчитывать стоимость вызовов, на астериске необходимо внести правки в диалплан — добавить использование AGI скриптов. В этом разделе рассмотрим применение установленных ранее AGI скриптов, а также адаптивное изменение входящих и исходящих вызовов, для связи c A2billing
Сперва, выполним добавление некоторых строк в файл диалпана /etc/asterisk/extensions_custom.conf.

[macro-dialout-trunk-predial-hook]
exten => s,1,GotoIf($["${OUT_${DIAL_TRUNK}:4:4}" = "A2B/"]?custom-freepbx-a2billing,${OUTNUM},1:2)
exten => s,2,MacroExit

[custom-freepbx-a2billing]
exten => _X.,1,AGI(a2billing.php,${OUT_${DIAL_TRUNK}:8})
exten => _X.,n,Hangup()

[a2billing_callingcard]
exten => _X.,1,NoOp(A2Billing Start)
exten => _X.,n,AGI(a2billing.php,1)
exten => _X.,n,Hangup

[a2billing_voucher]
exten => _X.,1,Answer(1)
exten => _X.,n,AGI(a2billing.php,1,voucher)
exten => _X.,n,Hangup

[custom-a2billing-did]
exten => _X.,1,AGI(a2billing.php,1,did)
exten => _X.,2,Hangup
Указанная часть диалплана рассчитана под Freepbx. Если у вас голый астериск, придется редактировать вносимые данные, также изменять под свой диалплан

Посмотрев на вносимые контексты, можно заметить контекст macro-dialout-trunk-predial-hook. Этот контекс преднастроен в FreePBX, поэтому его надо перенесть в файл /etc/asterisk/extensions_override_freepbx.conf. Этот контекст, вызывается из макроса в стандартном контексте FreePBX macro-dialout-trunk.
В условии оператора GotoIf видим сравнение с частью имени транка A2B/. Для этого необходимо создать «кастомный» транк, в котором нужно указать строку вызова A2B/1.

Add Custom Trunk
Add Custom Trunk
Custom dial trunk
Custom dial trunk

Также для настройки входящей маршрутизации, добавляется контекст custom-a2billing-did. Для его использования необходимо на WEB интерфейсе создать запись Custom Destionations. Этот модуль находится в разделе Admin.
Далее будет описан процесс добавления Custom Destinations, также добавление его в логико входящего вызова.
Попав в настройки модуля Custom Destinations, нужно нажать на кнопку
«+ Add Destionation». В новом окне необходимо ввести, направление, куда будет посылаться вызов по диалплану, в нашем случае, это будет custom-a2billing-did,${EXTEN},1 и в поле Description указываем описание данного направления.

Add Custom Destionstion
Add Custom Destionstion

Сохраняем изменения кнопкой Submit и переходим в раздел «Connectivity» – «Inbound Routes». Теперь выбрав необходимый нам маршрут, в этой статье будет использован маршрут ANY DID / ANY CID – для любых DID номеров, кроме указанных в модуле. В редактировании этой записи, выбираем в разделе «Set Destination» созданное ранее кастомное направление «Custom Destionations» – «Inbound to A2billing did». «Inbound to A2billing did» – описание кастомного направления используемого для этой статьи.

 Inbound Routes
Inbound Routes

Осталось сохранить и применить настройки «Submit» – «Apply Config».

Логи и crontab

Для отладки работы биллинга, как и для любого другого ПО используются логи. С помощью логирования легко находить те или иные ошибки в работе ПО, а также предпринимать своевременные меры по их устранению. Поэтому в этом разделе будем рассматривать настройку логирования системы A2billing.
Сперва, создадим директорию хранения файлов логирования командой mkdir.

mkdir -p /var/log/a2billing

В созданной директории создадим файлы логов командой touch. Затем на всю папку установим права доступа для пользователя asterisk.

touch /var/log/a2billing/cront_a2b_alarm.log
touch /var/log/a2billing/cront_a2b_autorefill.log
touch /var/log/a2billing/cront_a2b_batch_process.log
touch /var/log/a2billing/cront_a2b_archive_data.log   
touch /var/log/a2billing/cront_a2b_bill_diduse.log   
touch /var/log/a2billing/cront_a2b_subscription_fee.log   
touch /var/log/a2billing/cront_a2b_currency_update.log   
touch /var/log/a2billing/cront_a2b_invoice.log   
touch /var/log/a2billing/cront_a2b_check_account.log   
touch /var/log/a2billing/a2billing_paypal.log
touch /var/log/a2billing/a2billing_epayment.log
touch /var/log/a2billing/a2billing_api_ecommerce_request.log
touch /var/log/a2billing/a2billing_api_callback_request.log
touch /var/log/a2billing/a2billing_api_card.log
touch /var/log/a2billing/a2billing_agi.log

chown -R asterisk. /var/log/a2billing

С созданием файлов логов завершили, теперь приступим к настройке crontab.
Биллинговая система использует несколько скриптов, которые необходимо запускать по расписанию, для этого будет использоваться встроенная утилита Linux – crontab. Подробнее с crontab можно ознакомиться здесь.
Сперва. Создадим директорию и дадим права доступа для пользователя asterisk. В ней будет храниться информация о PID (Process ID) запущенного процесса.

mkdir -p /var/run/a2billing
chown asterisk:asterisk /var/run/a2billing

Далее создадим директорию с скриптами A2billing. Для статьи будет использована директория /tmp/local/a2billing. Т.к. её в системе нет, надо её создать,

mkdir -p /usr/local/a2billing

Все необходимые скрипты, которые необходимо поместить в cron находятся в директории /usr/src/a2billing/Cronjobs. Рекурсивно копируем их командой cp с ключом -R в созданную нами папку. Также в эту директорию поместим, сделав символьную ссылку на папку с библиотеками из /var/www/html/a2billing/common/lib и также зададим права на доступ к директории.

cp -R /usr/src/a2billing/Cronjobs /tmp/local/a2billing/
ln -sf /var/www/html/a2billing/common/lib /tmp/local/a2billing/Cronjobs/lib
chown -R asterisk. /tmp/local/a2billing/

Преднастройки выполнены, перейдем к заполнению информации в crontab

# обновление таблицы валют
0 6 * * * php /usr/local/a2billing/Cronjobs/currencies_update_yahoo.php

# усправление ежемесячными подписками
0 6 1 * * php /usr/local/a2billing/Cronjobs/a2billing_subscription_fee.php

# Проверка балланса каждого пользователя, для отправки email при низком балансе
0 * * * * php /usr/local/a2billing/Cronjobs/a2billing_notify_account.php

# этот скрипт проверяет все DID номера клиента, а также осуществляет
# проверку платны за номер
# а также выставление счетов за DID
0 2 * * * php /usr/local/a2billing/Cronjobs/a2billing_bill_diduse.php

# Скрипт обработки запущенного сервиса a2billing
0 12 * * * php /usr/local/a2billing/Cronjobs/a2billing_batch_process.php

# Формирование счетов для каждого пользователя
0 6 * * * php /usr/local/a2billing/Cronjobs/a2billing_batch_billing.php

# Управление оповещениями
0 * * * * php /usr/local/a2billing/Cronjobs/a2billing_alarm.php

# Управление архивами
0 12 * * * php /usr/local/a2billing/Cronjobs/a2billing_archive_data_cront.php

# Автоматическая перезапись и очистка кеша
0 10 21 * * php /usr/local/a2billing/Cronjobs/a2billing_autorefill.php
15 * * * * php /usr/local/a2billing/Cronjobs/a2billing_batch_cache.php
Crontab
Crontab

Заключение

Проделав выше указанные действия у вас будет произведеена связка a2billing и астериска. В данной статье не будет рассмотрена работа и настройка самой системы a2billing. С этой темой можно ознакомиться на официальном сайте программного продукта.

 
avatar
  Подписаться  
Уведомление о

Остались вопросы?

Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices