Установка AstBill

13 Апр
2008

Часть статьи «Звездные счета» опубликованной в февральском номере журнала Хакер

В AsteriskNOW функции учета и тарификации звонков развиты еще недостаточно, поэтому если требуется такая функциональность, следует обратиться к продуктам сторонних разработчиков. Для примера возьмем AstBill (astbill.com), который распространяется по лицензии GNU GPL. Система строится при помощи открытых продуктов – Apache, MySQL и Drupal, и позволяет при помощи понятного веб-интерфейса производить основные операции, полный список которых занимает два экрана.

Среди них:

- просмотр информации о SIP, IAX учетных записей, персональный контактный каталог с подкатегориями;
- поддержка виртуальных учетных записей, с возможностью привязки к любому номеру;
- биллинг, основанный на продолжительности звонка и направлении;
- вывод баланса, расходов и платежей по каждому счету, звонки в кредит, предоплаченные услуги;
- отсылка предупреждений о малом количестве средств на указанный e-mail;
- возможность звонка через GUI.

И многое другое, чего вполне достаточно для любой SMB организации или небольшого VoIP провайдера. К сожалению, интерфейс не локализован, но человек с базовым английским найдет все необходимое, хотя, возможно, и не сразу, так как функций у AstBill очень много. Кстати, внешний вид можно изменить при помощи тем.
Для установки понадобится сам Asterisk, СУБД MySQL 5.х и веб-сервер Apache 2.x, а Drupal уже входит в состав AstBill, поэтому отдельно устанавливать его не нужно. Проект предлагает демонстрационную версию AstBill Live CD, который построен на базе дистрибутива Dawn Small Linux и включающий уже все необходимое.
Установка всех дополнительных компонентов уже много раз описывалась как на страницах журнала, так и на многочисленных ресурсах Интернет, тем более при использовании репозитария — это пустяковое дело. Поэтому сосредоточимся лишь на том, как ввести в строй AstBill.

Установка 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;
+———————+
| Database |
+———————+
| information_schema |
| astbill |
| mysql |
+———————+
3 rows in set (0.01 sec)

mysql> use astbill;
Database changed
mysql> show tables;

Вывод покажет большое количество таблиц.

Вывод списка таблиц AstBill в MySQL

Если все ОК, идем дальше.

$ 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 работать не будет. По умолчанию оно так и есть, но на всякий случай не поленись, проверь. И, наконец, остался последний файл, но уже входящий в состав Asterisk — /etc/asterisk/res_mysql_conf, в котором нужно сделать то же самое.

$ sudo mcedit /etc/asterisk/res_mysql_conf

[general]
dbhost = localhost
dbname = astbill
dbuser = astbilluser
dbpass = astbill419
dbport = 3306

# Обрати внимание на dbsock, в разных дистрибутивах этот путь отличается
dbsock = /var/run/mysqld/mysqld.sock

На этом все, можно пробовать. Запускаем Asterisk, открываем браузер и заходим на страницу http://127.0.0.1/astbill. Если загрузилась заглавная страница, значит, все нормально.

Основное окно AstBill

Иначе внимательно прочитай описание проблемы, оно довольно содержательное и помогает найти ошибку.
По умолчанию в системе заведены две учетные записи – пользователь с правами администратора (astbill, пароль demoastbill) и обычный пользователь (demo, пароль demoastbill). Первый пользователь, набравший URL, автоматически регистрируется как astbill. Поэтому следует сразу зайти в «my account«, выбрать вкладку Edit и изменить информацию о своей учетной записи – имя пользователя, e-mail, пароль, статус (Active), роль. Система по умолчанию поддерживает четыре роли, каждая из которых может иметь строго определенные права: Admin, анонимный пользователь, зарегистрированный пользователь и партнер. Вторая и третья в настройках по умолчанию заблокированы. Изменить права можно, зайдя на страницу Administer – Access control. Там же в roles можно создать новые роли и проверить, включена ли учетная запись по имени пользователя или e-mail.

Создание нового аккаунта в AstBill

Работа с учетными записями в 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 — A2Billing (trac.asterisk2billing.org/cgi-bin/trac.cgi), которая может быть использована для учета в самых различных ситуациях: традиционное предоставление услуг VoIP, Callback сервис или подсчет трафика партнерами. На сайте проекта доступна демоверсия, поэтому познакомиться с A2Billing можно и без установки.

Биллинг в Asterisk

Для каждого вызова сервер 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 и некоторые другие. При необходимости можно самому написать скрипты для извлечения нужных данных и тарификации разговоров.

11 Комментариев к Установка AstBill

Аватар

cyberianz

Июнь 29th, 2008 | 14:30

Спасибо огромное за предоставленную инструкцию/ установка прошла на ubuntu 7.10 asterisk 1.4.10 deb + asterisk-mysql + asterisk-addons. Astabill — демо версия?

Аватар

grinder

Июнь 29th, 2008 | 17:47

Нет

Аватар

cyberianz

Июль 1st, 2008 | 12:05

все сделал как написано по инструкции. Хотел создать учетную запись администратора. ничего не получилось — учетная запись просто не появляется после применения настроек.

Аватар

grinder

Июль 1st, 2008 | 12:31

Ставится как и положено, что-то не то делаешь.

Аватар

pawlo

Ноябрь 20th, 2008 | 6:28

Сделал по инструкции. Постоянно просит ввести логин и пароль при переходе с одной вкладки на другую

Аватар

grinder

Ноябрь 20th, 2008 | 8:13

2pawlo
А куки в браузере включены?

Аватар

nikita

Март 18th, 2009 | 15:59

Та же проблема

Аватар

nikita

Март 18th, 2009 | 16:06

You have just to modify 2 functions in 2 files.

/wwwroot/includes/database.mysql.inc

//————————————————————

function db_connect($url) {
$url = parse_url($url);

// Allow for non-standard MySQL port.
if (isset($url['port'])) {
$url['host'] = $url['host'] .’:’. $url['port'];
}

$connection = mysql_connect($url['host'], $url['user'], $url['pass'], TRUE) or die(mysql_error());
mysql_select_db(substr($url['path'], 1)) or die(‘unable to select database’);

// *** add this here ***

register_shutdown_function(‘session_write_close’);

// *********************

return $connection;
}

//—————————————————————

/wwwroot/includes/session.inc includes/session.inc

//—————————————————————

function sess_read($key) {
global $user;

$result = db_query_range(«SELECT u.*, s.* FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE s.sid = ‘%s’ AND u.status roles = array();

// ******** add this here *********

register_shutdown_function(‘session_write_close’);

// ********************************

$result = db_query(«SELECT r.rid, r.name FROM {role} r INNER JOIN {users_roles} ur ON ur.rid = r.rid WHERE ur.uid = %d», $user->uid);

while ($role = db_fetch_object($result)) {
$user->roles[$role->rid] = $role->name;
}

return !empty($user->session) ? $user->session : »;
}

//————————————————————-

Аватар

platonov

Апрель 19th, 2009 | 22:29

До версии php 5.2 все работает нормально
у меня 5.1.29 — все Ok

Аватар

baall

Май 25th, 2009 | 11:24

Нет ли у astbill ограничения на количество одновременных звонков? На живой системе как то не хочется тестить

Аватар

magic2k

Октябрь 19th, 2009 | 14:55

Это бессмысленная штука, т.к. она для биллинга пользуется cdr записями, которые сформировал asterisk. А он их сами знаете как формирует — все хорошо, пока трансферы не начнутся…

Комментировать

Наверх