VoIP(русский)

Z Freenetis Wiki
Přejít na: navigace, hledání


FreenetIS позволяет управлять VoIP счетами. Система может быть подключена к Asterisk (или SER и его производным), а затем к биллингу.

Общая информация

В системе FreenetIS каждый участник может зарегистрировать только один номер. Если вам нужны дополнительные платежи, требуется регистрация другого пользователя. Пользователь можете изменить информацию о счете VoIP такие как пароль и настройки голосовой почты. Если модуль биллинга активен, то можно отображать список звонков или погашений кредитов.

Установка

Для корректной работы VoIP важно установить в FreenetIS диапазон номеров, которые пользователь может зарегистрировать. Кроме того, можно настроить SIP-прокси-сервер, который будет отображаться в учетной записи пользователя VoIP. Если любой из диапазона чисел не может быть предложен для регистрации, то он должен быть определен из пропущенных номеров.

Интеграция с Asterisk

Установите необходимые пакеты (Debian и его производные).

  apt-get install mysql asterisk asterisk-mysql

Для интеграции с Asterisk создайте представление таблицы voip_sips:

Прежде всего, необходимо создать базу данных для Asterisk:

 MySQL> create database asterisk;

А потом представление в базе данных FreenetIS:

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `asterisk`.`sip` AS select `freenetis`.`voip_sips`.`id` AS `id`,
`freenetis`.`voip_sips`.`name` AS  `name`,
`freenetis`.`voip_sips`.`amaflags` AS `amaflags`,
`freenetis`.`voip_sips`.`accountcode` AS `accountcode`,
`freenetis`.`voip_sips`.`callgroup` AS `callgroup`,
`freenetis`.`voip_sips`.`callerid` AS `callerid`,
`freenetis`.`voip_sips`.`canreinvite` AS `canreinvite`,
`freenetis`.`voip_sips`.`context` AS `context`,
`freenetis`.`voip_sips`.`defaultip` AS `defaultip`,
`freenetis`.`voip_sips`.`dtmfmode` AS `dtmfmode`,
`freenetis`.`voip_sips`.`fromuser` AS `fromuser`,
`freenetis`.`voip_sips`.`fromdomain` AS `fromdomain`,
`freenetis`.`voip_sips`.`fullcontact` AS `fullcontact`,
`freenetis`.`voip_sips`.`host` AS `host`,
`freenetis`.`voip_sips`.`insecure` AS `insecure`,
`freenetis`.`voip_sips`.`language` AS `language`,
`freenetis`.`voip_sips`.`mailbox` AS `mailbox`,
`freenetis`.`voip_sips`.`md5secret` AS `md5secret`,
`freenetis`.`voip_sips`.`nat` AS `nat`,
`freenetis`.`voip_sips`.`deny` AS `deny`,
`freenetis`.`voip_sips`.`permit` AS `permit`,
`freenetis`.`voip_sips`.`mask` AS `mask`,
`freenetis`.`voip_sips`.`pickupgroup` AS `pickupgroup`,
`freenetis`.`voip_sips`.`port` AS `port`,
`freenetis`.`voip_sips`.`qualify` AS `qualify`,
`freenetis`.`voip_sips`.`restrictcid` AS `restrictcid`,
`freenetis`.`voip_sips`.`rtptimeout` AS `rtptimeout`,
`freenetis`.`voip_sips`.`rtpholdtimeout` AS `rtpholdtimeout`,
`freenetis`.`voip_sips`.`secret` AS `secret`,
`freenetis`.`voip_sips`.`type` AS `type`,
`freenetis`.`voip_sips`.`username` AS `username`,
`freenetis`.`voip_sips`.`disallow` AS `disallow`,
`freenetis`.`voip_sips`.`allow` AS `allow`,
`freenetis`.`voip_sips`.`musiconhold` AS `musiconhold`,
`freenetis`.`voip_sips`.`regseconds` AS `regseconds`,
`freenetis`.`voip_sips`.`ipaddr` AS `ipaddr`,
`freenetis`.`voip_sips`.`regexten` AS `regexten`,
`freenetis`.`voip_sips`.`cancallforward` AS `cancallforward`,
`freenetis`.`voip_sips`.`setvar` AS `setvar`,
`freenetis`.`voip_sips`.`auth` AS `auth` from `freenetis`.`voip_sips`;

Кроме того, мы создаем представление для голосовой почты: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `asterisk`.`voicemail_users` AS select `freenetis`.`voip_voicemail_users`.`id` AS `uniqueid`,

`freenetis`.`voip_voicemail_users`.`customer_id` AS `customer_id`,
`freenetis`.`voip_voicemail_users`.`context` AS `context`,
`freenetis`.`voip_voicemail_users`.`mailbox` AS `mailbox`,
`freenetis`.`voip_voicemail_users`.`password` AS `password`,
`freenetis`.`voip_voicemail_users`.`fullname` AS `fullname`,
`freenetis`.`voip_voicemail_users`.`email` AS `email`,
`freenetis`.`voip_voicemail_users`.`pager` AS `pager`,
`freenetis`.`voip_voicemail_users`.`stamp` AS `stamp` from
`freenetis`.`voip_voicemail_users` where (`freenetis`.`voip_voicemail_users`.`active` = _utf8'1');
=== Конфигурация  MySQL ===

Asterisk может иметь непосредственный доступ к mysq.

В /etc/asterisk/res_mysql.conf добавьте

[general]
dbhost = localhost
dbname = asterisk
dbuser = username
dbpass = password
dbport = 3306
dbsock = /var/run/mysqld/mysqld.sock

Конфигурация Asterisk

Все файлы находятся в /etc/asterisk/ В extconfig.conf некоторые установки читаются из базы данных - они должны быть pre

sippeers => mysql,asterisk,sip
voicemail => mysql,asterisk,voicemail_users
;extensions => mysql,asterisk, extensions - not yet implemented in FreentIS!!

Для тестирования соединения с MySQL подключитесь к консоли

asterisk-rvvv

и запустите realtime mysql status

sip*CLI> realtime mysql status
Connected to asterisk@localhost, port 3306 with username asterisk for 4 seconds.

Мы протестировали функционирование соединения.

Теперь asterisk интегрирован с FreentIS и после добавления VoIP аккаунта в FreenetIS вы можете подключаться к рабочему столу используя программное и техническое обеспечение клиентаt. Статус подключения может быть просмотрен в FreenetIS аккаунт в VoIP

Затем мы делаем установки Asterisk в зависимости от требований пользователя. Пример конфигурации для Prunk от NFX s.z.p.o.:

[general]

static=yes
writeprotect=no
userscontext=default

[default]
;контекст по умолчанию, он перекрывает все установки других контекстов
exten => s,1,Answer()
exten => s,n,Wait(2)
exten => s,n,Playback(slfree-cal-no-there)
exten => s,n,Hangup()

[internal]
;контекст по умолчанию для наших номеров
;Если мы вызываем 11 то мы попадаем на нашу почту
exten => 11,1,Goto(mailbox,s,1)
 
;Если мы вызываем экстренную линию то мы попадаем в экстренный контекст
exten => 112,1,Goto(emergency,${EXTEN},1)
exten => 150,1,Goto(emergency,${EXTEN},1)
exten => 155,1,Goto(emergency,${EXTEN},1)
exten => 158,1,Goto(emergency,${EXTEN},1)


Billing API

Billing zapišťuje dobíjení kreditu, tarifikaci hovorů, výpis hovorů aj. Do FreenetISu bylo zaintegrováno LBilling API. LBilling API bylo vyvynuto pro potřeby NFX s.z.p.o. a jeho specifinace je dostupná na interních stránkách NFX. Samotný billing byl ale navržen tak, aby byl univerzální a pouze se měnil ovladač billungu.

Aktuálně je implementován pouze driver pro Lbilling API NFX. Další API lze dle potřeby doprogramovat.

Instalace synchronizačního skriptu

Synchronizační skript zproztředkovává pro FreenetIS dobíjení kreditu a synchronizaci VoIP uživatelů.

Před instalací zkontrolujte zda-li máte nainstalovaný na SIP serveru perl.

1) Vytvořte MySQL pojmenovanou lbilling na stejném DB serveru jako máte databázi FreenetISu.

2) Vytvořte pohledy do FreenetIS databáze (pokud se FreenetIS databáze nejmenuje freenetis, změňte všechny hodnoty `freenetis` na jméno Vaší databáze, popřípadě změňte i uživatele, který definuje pohledy).

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `transfers` AS select `freenetis`.`transfers`.`id` AS      `id`,`freenetis`.`transfers`.`origin_id` AS `origin_id`,`freenetis`.`transfers`.`destination_id` AS  `destination_id`,`freenetis`.`transfers`.`previous_transfer_id` AS `previous_transfer_id`,`freenetis`.`transfers`.`member_id` AS `member_id`,`freenetis`.`transfers`.`user_id` AS `user_id`,`freenetis`.`transfers`.`type` AS `type`,`freenetis`.`transfers`.`datetime` AS `datetime`,`freenetis`.`transfers`.`creation_datetime` AS `creation_datetime`,`freenetis`.`transfers`.`text` AS `text`,`freenetis`.`transfers`.`amount` AS `amount` from `freenetis`.`transfers`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `voip_lbilling_accounts` AS select `voip_lbilling_accounts`.`id` AS `id`,`voip_lbilling_accounts`.`userid` AS `userid`,`voip_lbilling_accounts`.`cid` AS `cid`,`voip_lbilling_accounts`.`state` AS `state`,`voip_lbilling_accounts`.`limit` AS `limit`,`voip_lbilling_accounts`.`tarif` AS `tarif`,`voip_lbilling_accounts`.`descr` AS `descr` from `freenetis`.`voip_lbilling_accounts`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `voip_lbilling_payments` AS select `voip_lbilling_payments`.`id` AS `id`,`voip_lbilling_payments`.`userid` AS `userid`,`voip_lbilling_payments`.`date` AS `date`,`voip_lbilling_payments`.`value` AS `value`,`voip_lbilling_payments`.`state` AS `state`,`voip_lbilling_payments`.`descr` AS `descr` from `freenetis`.`voip_lbilling_payments`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `voip_lbilling_users` AS select `voip_lbilling_users`.`id` AS `id`,`voip_lbilling_users`.`type` AS `type`,`voip_lbilling_users`.`state` AS `state`,`voip_lbilling_users`.`limit` AS `limit`,`voip_lbilling_users`.`currency` AS `currency`,`voip_lbilling_users`.`descr` AS `descr` from `freenetis`.`voip_lbilling_users`;

2) Na SIP server umístěte následující soubory lbilling-synchronization.pl a html.tt do složky /usr/local/bin/lbilling/

3) Nastavte práva pro synchronizační skript:

chmod a+x /usr/local/bin/lbilling/lbilling-synchronization.pl

4) Nakonfigurujte proměnné ve skriptu lbilling-synchronization.pl (sekce configuration).

nano /usr/local/bin/lbilling/lbilling-synchronization.pl

5) Přidejte synchronizační skript (následující řádky) do CRONu (/etc/crontab):

#lBilling synchronization
30 22   * * * root perl /usr/local/bin/lbilling/lbilling-synchronization.pl -s
*/5 *  * * * root perl /usr/local/bin/lbilling/lbilling-synchronization.pl -p


?????А ДЕ ПЕРЕКЛАД “==Billing API==”???