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

- Введение
- Требования к установке и установка пакетов из репозиториев
- Установка A2billing
- Конфигурирование Asterisk для работы с A2billing
- Настройка логирования A2billing
Введение
Давайте разберемся, что такое биллинговая система и для чего она нужна.
Чтоже такое биллинг? Слово биллинг произошло от английского слова «bill», что в переводе означает «счёт». Т.е. «биллинг» — это выставление счетов о расходах, задолженостях и др. Отсюда можно вывести, что биллинговые системы — это комплекс программного обеспечения, позволяющий вести учёт тарифов, вычислять стоимость услуг для каждого клиента.
Биллинговые системы применяются телекоммуникационными операторами, начиная от операторов сотовой связи, заканчивая операторами стационарной связи. Но это не означает, что их нельзя приметь и в малых сферах, к примеру на предприятии. Эти системы можно использовать для внутренней телефонии. Это позволить более детально вести учет телефонных разговоров. Также проводить анализ звонков сотрудников, с детальным описание звонка, т. е. кто, куда, сколько и за какую цену.
Данная инструкция поможет разобраться в установке и настройке биллинговой системы a2billing v2.x на Centos 6.9 с предустановленным Freepbx. В ней будет рассмотрены системные требования к ПО, подробная инструкция получения, установки, а также возможность интеграции такой системы с астериском.
Требования к 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
Если набор ПО и библиотек 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
# 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
Результат проделанных действий можно наблюдать на изображении ниже.

Создание БД
Поскольку A2billing – web приложение с учётом тарифов, а также анализирующее тарифы, то оно используюет свою базу данных. Исходя из этого необходимо создать и заполнить её необходимыми таблицами. В этом разделе рассмотрим, как создать нужную нам Базу Данных, а также заполнить её необходимыми таблицами.
- В скачанной ранее директории a2billing уже есть sql файл с созданием БД поэтому будем использовать его. Если вы находитесь в другой директории нужно перейти по следующему пути:
# cd /usr/src/a2billing/DataBase/mysql-5.x/
Просмотрев файлы находящиеся в директории найдем файл a2billing-createdb-user.sql.
Этот файл позволяет создать нужную БД и пользователя для использующего это БД.
Если вам необходимо заменить данные или по каким то причинам вас не устраивают значения по умолчанию, их можно заменить открыв файл любым текстовым редактором и заменить эти значения на удобные для вас.
Рассмотрев назначение нужного файла или заменив необходимые данные, создадим БД
# mysql -u root -p < a2billing-createdb-user.sql
После выполнения команды система попросит ввести root пароль для mysql. Введя root пароль, создастся новая БД с указанными вами данными.
2. Завершив предыдущую процедуру, выполним скрипт для заполнения базы таблицами.
# ./install-db.sh
Выполнение скрипта потребует ввод информации:
- Database Name – имя БД к которой будем подключаться
- Hostname – имя хоста или IP адрес mysql сервера
- UserName – имя пользователя под которым будем подключаться (будем использовать имя указанное выше)
- 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

Укажем 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

Установка 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

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


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

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

Осталось сохранить и применить настройки «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

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

Остались вопросы?
Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.
Есть небольшой вопрос по «macro-dialout-trunk-predial-hook»
Если я правильно понял то следующее значение должно быть в двух файлах.
/etc/asterisk/extensions_custom.conf
и в файле
/etc/asterisk/extensions_override_freepbx.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
Спасибо за замечание. Инструкция написана пошагово. Контекст macro-dialout-trunk-predial-hook в итоге должен находиться только в extensions_override_freepbx.conf