Поднимаем web-интерфейс и биллинг для VoIP-сервера
Сергей «grinder» Яремчук (grinder@ua.fm, )
Сервер Asterisk обладает действительно большими возможностями, но чтобы ими воспользоваться в полной мере, потребуется некоторое время на его освоение. Графический интерфейс заметно упростит и ускорит этот процесс. А для организаций, предоставляющих услуги VoIP связи, наверняка потребуется некоторая система анализа и тарификации звонков. О некоторых решениях, имеющих данную функциональность, мы сегодня и поговорим.
Содержание:
- Установка AsteriskNOW
- Интерфейс управления и учета AstBill
- Установка AstBill
- Врезка: Биллинг в Asterisk
После освоения основных директив конфигурационных файлов Asterisk новые настройки производятся практически молниеносно. Но новичкам будет немного сложновато, да и администратор с опытом наверняка захочет некоторые операции хоть как-то упростить. Разработчики Asterisk предлагают свое решение вопроса – веб-интерфейс AsteriskNOW, который будет работать с версией 1.4. В настоящее время AsteriskNOW доступен исключительно через CVS. Познакомиться с ним можно, скачав , который также разрабатывается в Digium. Через интерфейс можно произвести большинство настроек, которые приходится выполнять администратору в повседневной эксплуатации. Это управление учетными записями, настройка внешних соединений, устройств для работы с аналоговыми и цифровыми линиями, работа с голосовой почтой, конференции, голосовые меню, парковки вызова, вывод различной информации и графиков о работе сервиса, в том числе и CDR. В текущем варианте пока нельзя настроить все и вся, но для большинства стандартных операций его возможностей хватает с головой. А если нет, то, обратившись к соответствующему меню AsteriskNOW, можно редактировать конфиги Asterisk, вводя нужные параметры вручную.
По традиции для установки будем использовать Ubuntu, хотя в других дистрибутивах весь процесс выглядит аналогично. В поставке Ubuntu по умолчанию нет инструментов для работы с SVN. Поэтому ставим нужный пакет и создаем локальное зеркало:
$ sudo apt-get install subversion $ svn checkout http://svn.digium.com/svn/asterisk-gui/trunk asterisk-gui
В результате этих действий в текущем каталоге появится подкаталог asterisk-gui:
$ cd asterisk-gui
А дальше идут обычные «./configure; make; sudo make install«. После установки будет предложено инсталлировать конфигурационные файлы командой «make samples«. Необходимости в этом нет, но если ты все же решил, тогда в начале сохрани старые файлы:
$ sudo cp -r /etc/asterisk /etc/asterisk.backup
Затем вручную восстанови те, в которых ранее уже производились настройки. Теперь, чтобы GUI заработал, следует внести пару изменений в некоторые конфиги. Но прежде советую запустить команду «make checkconfig«, которая подскажет, в каком файле имеется несоответствие, и откуда начинать копать:
$ sudo make checkconfig
— Checking Asterisk configuration to see if it will support the GUI —
* Checking for http.conf: OK
* Checking for manager.conf: OK
* Checking if HTTP is enabled: FAILED
– Please be sure you have ‘enabled = yes’
– in /etc/asterisk/http.conf
make: *** [checkconfig] Ошибка 1
Открываем конфигурационный файл встроенного веб-сервера /etc/asterisk/http.conf в текстовом редакторе и правим:
$ sudo mcedit /etc/asterisk/http.conf
enabled = yes
enablestatic = yes
; Принимать соединения со всех интерфейсов
bindaddr = 0.0.0.0
И в manager.conf:
$ sudo mcedit /etc/asterisk/manager.conf
enabled = yes
webenabled = yes
; Заводим учетную запись admin с паролем password для настроек сервера, даем ему соответствующие права и разрешаем заходить только с определенного адреса
[admin]
secret = password
read = system,call,log,verbose,command,agent,config,user
write = system,call,log,verbose,command,agent,config,user
deny = 0.0.0.0/0.0.0.0
permit = 192.168.1.100/255.255.255.0
В шаблоне конфигурации пользователя не приведен параметр config, если его не добавить, то ты не сможешь редактировать настройки Asterisk. Не забудь дописать. Теперь запускаем еще раз «make checkconfig«, и если утилита не ругается, идем дальше. Подсказки по URL смотри в ее выводе. Набираем в браузере http://127.0.0.1:8088/asterisk/static/config/setup/install.html, регистрируемся с параметрами учетной записи, созданной выше, и следуем указаниям мастера предварительной настройки. Настройки затем можно изменить, поэтому если ты не знаешь, что делать, некоторые шаги пока можно пропустить. Хотя если ввести все, что он просит, по окончании ты получишь вполне работоспособную систему, и искать, что и где добавить, не придется.
Сначала мастер протестирует оборудование, и если найдет устройства сопряжения с аналоговыми линиями, то выведет их список в первом окне. По окончании нажимаем «Next», в списке Local Extension выбираем количество цифр, которое будут иметь локальные номера, и в поле First Extension Number номер, который будет присвоен первому пользователю. Флажок «Allow analog phones …» разрешает номерам с аналоговой линии назначать несколько экстеншнов. На следующем шаге Service Providers можно указать данные VoIP провайдера. Нажимаем «Add Service Provider», затем в поле Provider Type выбираем тип подключения. Возможны варианты: Analog, VoIP (три предустановленных провайдера) и Custom VoIP. В последнем случае все параметры придется заполнить самостоятельно. В поле Comment добавляем описание, в списке Protocol выбираем протокол sip или iax, в поле Host указываем адрес провайдера и чуть ниже учетные данные. После нажатия на «Save» в списке List of Service Providers появится новая запись. Нажатие на поле Options откроет меню, в котором можно выбрать кодеки для работы с этим провайдером и расширенные настройки. В Advanced можно дополнительно указать, какой домен будет использоваться в заголовках (fromdomain), изменить название транка, указать Caller ID. Чтобы можно было подключаться «из вне» без ввода пароля, в insecure присваиваем значение invite. Здесь же можно изменить порт сервиса, в том случае, если провайдер использует нестандартный номер (SIP – 5060, IAX – 4569). И так далее.
На 4 шаге предстоит указать правила вызова, так как пока нет диалплана по умолчанию, будет предложено его создать. Дальше идет настройки ящика для работы с голосовой почты и некоторые его параметры (посылка сообщения на e-mail, максимальное количество сообщений, время записи и другие). Теперь мастер предлагает создать учетную запись пользователя, который будет совершать звонки. И, наконец, на последнем шаге при помощи меню указываем, к каким экстеншенам привязаны входящие звонки. На этом все, нажимаем «Finish» и попадаем в основное окно программы.
Если ты ранее пробовал настраивать Asterisk при помощи конфигурационных файлов, ты быстро освоишься в AsteriskNOW. Интерфейс логичен и понятен, все настройки находишь именно в тех местах, в которых ожидаешь. Есть, конечно, и свои особенности. Например, создавая учетную запись, сразу отмечается, с каким протоколом он может работать: SIP и/или IAX2. Запись о новом пользователе создается в user.conf, а все разрешения указываются при помощи специальных параметров, вроде – hasiax, hassip, hasvoicemail, назначение которых понятно и без документации.
Интерфейс управления и учета AstBill
В AsteriskNOW функции учета и тарификации звонков развиты еще недостаточно, поэтому если требуется такая функциональность, следует обратиться к продуктам сторонних разработчиков. Для примера возьмем , который распространяется по лицензии GNU GPL. Система строится при помощи открытых продуктов – Apache, MySQL и Drupal, и позволяет при помощи понятного веб-интерфейса производить основные операции, полный список которых занимает два экрана. Среди них:
- просмотр информации о SIP, IAX учетных записей, персональный контактный каталог с подкатегориями;
- поддержка виртуальных учетных записей, с возможностью привязки к любому номеру;
- биллинг, основанный на продолжительности звонка и направлении;
- вывод баланса, расходов и платежей по каждому счету, звонки в кредит, предоплаченные услуги;
- отсылка предупреждений о малом количестве средств на указанный e-mail;
- возможность звонка через GUI.
И многое другое, чего вполне достаточно для любой SMB организации или небольшого VoIP провайдера. К сожалению, интерфейс не локализован, но человек с базовым английским найдет все необходимое, хотя, возможно, и не сразу, так как функций у AstBill очень много. Кстати, внешний вид можно изменить при помощи тем.
Для установки понадобится сам Asterisk, СУБД MySQL 5.х и веб-сервер Apache 2.x, а Drupal уже входит в состав AstBill, поэтому отдельно устанавливать его не нужно. Проект предлагает демонстрационную версию AstBill Live CD, который построен на базе дистрибутива Damn Small Linux (о DSL можно прочитать в этом же номере Х – прим. ред.) и включающий уже все необходимое.
Установка всех дополнительных компонентов уже много раз описывалась как на страницах журнала, так и на многочисленных ресурсах Интернет, тем более при использовании репозитария – это пустяковое дело. Поэтому сосредоточимся лишь на том, как ввести в строй AstBill.
Для начала подготовим MySQL. Установим пароль администратора (если это не сделано ранее), создадим базу astbill и дадим специальному пользователю astbilluser все необходимые привилегии:
$ mysqladmin --user=root password ′mysql_root_password′ $ mysqladmin --user=root -p create astbill $ mysql --user root -p
mysql> GRANT ALL PRIVILEGES ON astbill.* TO astbilluser@localhost
IDENTIFIED BY ′astbill_db_passwd′;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit;
Все, MySQL готов к работе. Чтобы упростить создание таблиц, разработчики предлагают файлы шаблонов, которые доступны в архиве. Получаем последнюю версию AstBill с сайта проекта, распаковываем, установочный скрипт делаем исполняемым:
$ tar jxvf astbill-0.9.22.tar.bz2 $ cd astbill $ chmod +x install.sh
И создаем таблицы:
$ mysql --user=root -p astbill < ./database/astbill.sql $ mysql --user=root -p astbill < ./database/astbill_proc.sql
Проверяем, что есть:
$ mysql --user=root –p mysql> SHOW DATABASES; 3 rows in set (0.01 sec) mysql> use astbill; Database changed mysql> show tables;
Вывод покажет большое количество таблиц. Если все ОК, идем дальше.
$ sudo ./install.sh
На запрос скрипта о продолжении работы вводим yes. Кроме установки AGI скриптов (Asterisk Gateway Interface - интерфейс взаимодействия с внешними скриптами) и файлов озвучки, будут сохранены и конфигурационные файлы уже установленного Asterisk. Кроме этого, будет создан каталог /home/astbill, в нем AstBill ищет свои настройки, если нужные файлы не будут доступны в каталоге, куда распакован сам биллинг. После работы скрипта корневой каталог astbill находится (в моем случае) в /home/grinder/astbill/wwwroot. Чтобы сделать его видимым веб-серверу, создадим символическую ссылку (есть и другие варианты, это самый простой):
$ ln -s /home/grinder/astbill/wwwroot /var/www/html/astbill
В каталоге astbill находится конфигурационный файл astbill.conf, установки из которого считываются различными Perl и Ajax скриптами. Для удобства работы его можно скопировать в /home/astbill. После чего обязательно следует изменить информацию для доступа к БД:
$ sudo mcedit /home/astbill/astbill.conf
emailadd = noreply@grinder.com
company_name = GrinderTelecom
dbhost = localhost
dbname = astbill
dbuser = astbilluser
dbpass = astbill_db_passwd
dbdsn = astbilldns
HostedOn = AstBill
debug = YES
debug2 = NO YES
odbc = NO
odbc2 = YES NO
Не знаю почему, но разработчики поленились сделать это для другого файла - settings.php, который находится в wwwroot/sites/default. Открываем и правим внутри параметры для доступа к БД:
$ sudo mcedit /var/www/astbill/sites/default
$db_url = ′mysql://astbilluser:astbill_db_passwd@localhost/astbill′;
# И правим путь, если AstBill установлен в каталог веб-сервера с другим именем
$base_url = ′http://127.0.0.1/astbill′;
На этот файл есть указания в документации, но пока я не подправил параметры в аналогичном файле из подкаталога 127.0.0.1.astbill, ничего не работало. Также в документации дается совет, предписывающий убедиться, что "$db_prefix = ′pbx_′;", иначе AstBill работать не будет. По умолчанию оно так и есть, но на всякий случай не поленись, проверь. И, наконец, осталось отредактировать файл /etc/asterisk/res_mysql_conf (входит в состав Asterisk).
$ sudo mcedit /etc/asterisk/res_mysql_conf
[general]
dbhost = localhost
dbname = astbill
dbuser = astbilluser
dbpass = astbill_db_passwd
dbport = 3306
# Обрати внимание на dbsock, в разных дистрибутивах этот путь отличается
dbsock = /var/run/mysqld/mysqld.sock
На этом все, можно пробовать. Запускаем Asterisk, открываем браузер и заходим на страницу http://127.0.0.1/astbill. Если загрузилась заглавная страница, значит, все нормально. Иначе внимательно прочитай описание проблемы, оно довольно содержательное и помогает найти ошибку.
По умолчанию в системе заведены две учетные записи – пользователь с правами администратора (astbill, пароль demoastbill) и обычный пользователь (demo, пароль demoastbill). Первый пользователь, набравший URL, автоматически регистрируется как astbill. Поэтому следует сразу зайти в "my account", выбрать вкладку Edit и изменить информацию о своей учетной записи – имя пользователя, e-mail, пароль, статус (Active), роль. Система по умолчанию поддерживает четыре роли, каждая из которых может иметь строго определенные права: Admin, анонимный пользователь, зарегистрированный пользователь и партнер. Вторая и третья в настройках по умолчанию заблокированы. Изменить права можно, зайдя на страницу Administer – Access control. Там же в roles можно создать новые роли и по имени пользователя или e-mail проверить, включена ли учетная запись.
Работа с учетными записями в AstBill построена по нескольким принципам. Это непосредственно аккаунт, который может использоваться отдельным пользователем или привязан к клиенту (Customer). Партнеры (Partner) являются подобием групп и могут также включать своих клиентов. Аккаунт создается в Create Account. Здесь найдешь все параметры, встречающиеся при создании обычной учетной записи в Asterisk. В отличие от AstersikNOW, здесь возможен выбор только одного типа учетной записи: SIP, IAX2, Virtual Account и H323. Исходящие направления описываются в Provider Trunks, где кроме привычных параметров (учетная запись, узел, метод аутентификации) указывается и стоимость направления. При необходимости, нажав на DialPlan, можно задать время и день недели, когда будет доступен данный провайдер. Это позволяет задать свои тарифы для разного времени. План тарификации звонков указывается во вкладке AstBill Admin – Setting – Rate Plans. Оплату звонков можно принимать при помощи предоплаченных Calling Cards, которые "создаются" в одноименной вкладке. Здесь указывается номер, карты, количество денег, срок годности, статус (Enabled/Disabled) и некоторые другие. Настроек не много, а очень много, поэтому некоторое время все же придется потратить на освоение AstBill, но в результате ты получишь понятную систему биллинга, настроенную под конкретные условия.
Это, естественно, не единственное решение. Например, стоит обратить внимание еще на одну систему биллинга для Asterisk - , которая может быть использована для учета в самых различных ситуациях: традиционное предоставление услуг VoIP, Callback сервис или подсчет трафика партнерами. На сайте проекта доступна демоверсия, поэтому познакомиться с A2Billing можно и без установки.
Для каждого вызова сервер Asterisk генерирует запись CDR (Call Detail Record). По умолчанию вся информация (номер, Caller ID, направление, время начала, вызова, ответа и окончания и прочее) хранится в CSV файле /var/log/asterisk/cdr-csv. Формат записей, даты и времени определен в файле cdr/cdr_csv.c. Для удобства учета в конфигурационных файлах или при помощи команд можно указать учетные коды (${CDR(accountcode)}), флаги AMA (Automated Message Accounting) на каждый канал или пользователя, которые будут использованы при биллинге. Возможно хранение CDR информации в базе данных. Поддерживаются – SQLite, MySQL, PostgreSQL, unixODBC, MS SQL, Sybase и некоторые другие. При необходимости можно самому написать скрипты для извлечения нужных данных и тарификации разговоров.
Статья опубликована в февральском номере журнала "Xakep" за 2008 год.





