Это старая версия документа.


Voip

Модуль для организации АйПи-телефонии по протоколу SIP или H323.

Возможности

  • SIP, H323
  • Припейд (предоплата) и постпейд (оплптп по факту) сервис.
  • Карточная платформа
  • Тарификация по времени и по направлениям.
  • Возможность разрешать или запрещать входящие, исходящие звонки.
  • Абон. плата.
  • Управление шлюзами.
  • Выбор оптимального шлюза для звонка.
  • Консоль для управления GNU Gatekeeper.
  • Бесплатные секунды в звонке
  • Предоплаченное время направлений

Как платформу можно использовать:

  • Asterisk. (мануал - * abills+asterisk.)
  • Или любой другой NAS который поддерживает RADIUS авторизацию и аккаунтинг.

Установка

abills/libexec/config.pl

@MODULES = (
          'Voip'
          );

%ACCT = ();
#For VoIP GNU Gatekeeper accounting
$ACCT{gnugk}    = 'Voip_aaa';
#For Astrisk accounting
$ACCT{asterisk} = 'Voip_aaa';

%AUTH = ();
#For VoIP GNU Gatekeeper Auth
$AUTH{gnugk}    = 'Voip_aaa';
#For Astrisk accounting
$AUTH{asterisk} = 'Voip_aaa';

Залить базу:

# mysql -D abills < db/Voip.sql

Работа с системой

Заведение направлений

/ System configuration/ VoIP/ Routes/

Формат экспорта

PREFIX[TAB]NAME[TAB]STATUS[TAB]

Формат импорта

PREFIX[TAB]NAME[TAB]STATUS[TAB]

После заведения направлений нужно в тарифных планах указать цену направлений

PREFIX Префикс направления
Например 0072
NAME Название направления
STATUS Статус активности направления:
0 - активно
1- отключено

Тарификация

/ System configuration/ VoIP/ Tarif Plans/

# Номер тарифного палата. Если поле не заполнено указывается следуюший по порядку номер
Name: Название
Alert: Отправка предупреждения о израсходованом депозите на E-mail
Day fee: Дневная абонплата
Month fee: Месячная абонплата
Simultaneously: Количество одновременных звонков клиентов
Time limit (sec) Лимит времени
Day день
Week неделя
Month месяц
Activation: Начисления при активации аккаунта
Change: Начисления при изменении тарифного плана
Credit Threshold: Несёмный минимум
Max. session time (sec.): Максимальное время сессии в секундах
Age (Days): Время существования учётной записи абонента
Payment type: Вод оплаты.
Предоплата - Пользователь может работать только при положительном балансе
Послеоплата - Пользователь авторизируется и работает без учёта баланса
Min. session cost: Минимальная сума которая снимается за активную сессии
Free Time: Предоплаченное время звонков. Распространяется на все звонки. Если нужно отдельно предо плаченое время на разные направления нужно использовать расширенную тарифкацию
First period:
Step Of first period:
Next Period:
Step of next period:
Time Division (Seconds .): Интервал тарификации. По умолчанию секунды.
Если возникает ситуация что нужно тарифицировать звонки абонентов не по секундно, а скажем за каждые полные или неполные 10 секунд в этом поле указываем 10. Если абонент проговорил 43 секунды система ему посчитает как за 50 секунд.

Формат импорта цен направлений

PREFIX[TAB]TRUNK[TAB]EXTRA_TARIFICATION[TAB]PRICES1[TAB]PRICES2
PREFIX Префикс
TRUNK ID транка
EXTRA_TARIFICATION Расширенная тарификация
PRICES… Цены на разные интервалы времени. Указываются через табуляцию

Формат экспорта

PREFIX[TAB]NAME[TAB]STATUS[TAB]ADD_DATE[TAB]PRICE

Пример

001	US - Continental	Активовано	0000-00-00	7.00000	
001204	Canada	Активовано	0000-00-00	35.00000	
001242	Bahamas	Активовано	0000-00-00	28.00000	

Расширенная тарификация

/ System configuration/ VoIP/ Extra tarification/

Данная функция разрешает дополнить тарификацию тарифного плана дополнительными возможностями.

  • Предоплаченные минуты

Опция разрешает задать определённое количество предоплаченных минут для направлений. Предоплаченные минуты считаются суммарно для всех направлений временного интервала входящих в группу предоплаченного времени. Предоплаченно время считается от начала периода тарификации. (Для модуля VOIP период тарификации совпадает с календарным месяцем)

Заведение шлюзов операторов связи

/ System configuration/ VoIP/ Trunks/

VOIP Provider Название провайдера
Name Название транка
Add Prefix Добавить префикс к номеру
Delete Prefix Удалить префикс из номера
Protocol Протокол соединения
Provider IP Адрес транка
Extra Parameters Дополнительные параметры
Failover Trunk Транки при недоступности основного

Курс тарификации

$conf{VOIP_UNIT_TARIFICATION}=1; При включённой опции цена прописывается в условных единицах которые потом пересчитываются по курсу в реальных деньги. Курс пересчёта заводиться в меню / System configuration/ VoIP/ Exchange rate. Система автоматически пересчитывает цену при каждом изменении курса. При включённой опции администратору предоставляется возможность заводить тарифные планы только в условных единицах. После Сохранения тарификации сума пересчитывается в денежный эквивалент. Если не установлен обменный курс условные еденицы переводятся по курсу один к одному
$conf{VOIP_NUMBER_EXPR}='search_side/replace_side;search_side/replace_side'; Регулярные выражения преобразования вызываемого номера.
search_side/replace_side - права левая часть регулярного выражения
$number - зарезервированная переменная номера
Регулярные выражения разделяются точкой с запятой (;)
Система завершает преобразовании номера после первого удачного преобразования

Пример обработки номера регулярным выражением:

 $conf{VOIP_NUMBER_EXPR} = '^([0-9]{4,6})$/74832$number;'. 
      '^2([0-9]{6})$/7483$number;'.
      '(^9[0-9]{9})/7$number;'. 
      '^810/;'.
      '^8/7;'. 
      '^*8/7;'. 
      '^4832/74832';

Курсы тарификации устанавливаются в меню / System configuration/ VoIP/ Exchange rate/. После установки курса система автоматически пересчитывает все тарифы

$conf{VOIP_CALLER_NUMBER_EXPR}='search_side/replace_side;search_side/replace_side'; Регулярные выражения преобразования номера звонящего.

Ошибки авторизации

  • No price for route prefix '7' number '00748322111'

нужно завести интервал для данного направления в тарифном плане через Тарифный план / Интервалы / Маршруты . Выбрать интервал и нажать кнопку изменить

  • No route '2111'

нужно завести направление с префиксом начинающимся на 2 / Настройка / VoIP / Направления и повторно в интервалах инициализировать его Тарифный план / Интервалы / Маршруты

Работа с cdr файлами

Для работы с cdr файлами существует программа cdr_analyzer
Программа может запускатся как с cron так и работать в режиме демона

Установка

# cp cdr_analyzer /usr/abills/Abills/modules/Voip/
# ln -s /usr/abills/Abills/modules/Voip/cdr_analyzer  /usr/abills/libexec/cdr_analyzer

Аргументы программы

help справка
CDR_FILE= Путь к файлу или каталогу содержащему cdr файлы (По умолчанию: /home/asm/abills/var/log/cdr/)
CDR_EXPR='expr'

CALLER_NUMBER
CALLED_NUMBER
DATE
TIME
START (2012-01-01 00:00:00)
DURATION sec or (00:11:11)
Выражение для анализа файла
UNKNOWN_CDR_FILE=… Путь к файлу куда складываются не определённые записи анализируемого cdr файла
CALLER_NUMBER= Анализировать только звонки с номера. Остальные записи игнорировать
CALL_DATE=«xxxx-xx-xx» Добавить дату к візову если в cdr файле только время звонка
LOG_FILE=… Путь к лог файлу программы
-d Режим демона
UPDATE_TIME=… Время обновление при работе в режиме демона
BACKUP_DIR=[DIR] Каталог для проанализированных файлов
DEBUG=… Режим отладки 1..8
NAS_IDS= Прикрепить записи о звонкам к определённым серверам доступа

Пример выражения

cdr Файл

2012-06-09;15:54:00;2037197;3878718;15238
2012-06-10;09:23:00;2037197;3878718;53
2012-06-10;10:34:00;2038938;2662996;840
2012-06-14;15:43:00;2030393;3435545;9
2012-06-14;16:00:00;2030393;3435545;6
2012-06-14;11:38:00;2037047;3376251;16

Выражение

#  /usr/abills/libexec/cdr_analyzer CDR_EXPR="(\d{4}-\d{2}-\d{2});(\d{2}:\d{2}:\d{2});(\d+);(\d+);(\d+)|DATE,TIME,CALLER_NUMBER,CALLED_NUMBER,DURATION"

Настройка NAS

Настройка клиентского оборудования(софтфоны)

Дополнительно