VoIP (english)

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


FreenetIS allows to manage VoIP accounts. The system can be connected to Asterisk (or the SER and its derivatives) and then to the billing.

General Information

In FreenetIS system each member can register only one number. If you need additional payment it requires to register another user. User can can change information on VoIP account as the password and voicemail settings. If the billing module is active then it is possible to display an extract of calls or charging a credit.

Setting

For proper functioning of VoIP it is important to set in FreenetIS the range of numbers that user can register. It is also possible to configure SIP proxy, which will be displayed in the User Account VoIP. If any of the range of numbers should not be offered for registration then it has to be defined in the omitted numbers.

Integration with Asterisk

Install the necessary packages (Debian and its derivatives).

 apt-get install mysql asterisk asterisk-mysql

For integration with Asterisk is to create a view to the table voip_sips:

First you need to create a database for Asterisk:

mysql> create database asterisk;

And then a view in the database 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`;

Furthermore, we create a view for voicemail:

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');
=== Configuring MySQL ===

Asterisk can directly access mysq.

In /etc/asterisk/res_mysql.conf add

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

All files are in /etc/asterisk/ In extconfig.conf some things are read from DB - there should be

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

To test the connection to the MySQL connect to the console

asterisk-rvvv

and run realtime mysql status

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

We have tested a connection functionality.

At this point asterisk is integrated with FreentIS and after adding VoIP account in FreenetIS you should be able to login to the control panel by using software or hardware client. Status log can be viewed in FreenetIS in VoIP Account

Then, we set the Asterisk depends on the user requirements. Sample configuration for prunk from NFX s.z.p.o.:

[general]

static=yes
writeprotect=no
userscontext=default

[default]
;the default context, this covers everything that is not in other contexts
exten => s,1,Answer()
exten => s,n,Wait(2)
exten => s,n,Playback(slfree-cal-no-there)
exten => s,n,Hangup()

[internal]
;the default context for our number
;If we call 11 then we will get into our own voicemail
exten => 11,1,Goto(mailbox,s,1)


;If you call the emergency line then we will get in the context of emergency
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 records a credit recharging , charging calls, etc. LBilling API was integrated into FreenetISu. LBilling API has been exhaustively developed for the needs of NFX s.z.p.o. Its specifications is available on internal pages NFX. The actual billing was designed to be universal and only change Billing driver .

Currently only Lbilling is implemented for driver API NFX . Other API can be programmed if it will be required.

Installing the synchronization script

The synchronization script provides charging and syncing credit VoIP users in FreenetIS.

Before installation, check if you have installed the SIP server perl.

1) Create a MySQL named lbilling DB on the same server as your FreenetIS database.

2 ) Create a view to FreenetIS database (if the database of FreenetIS has different name than freenetis , change all values `freenetis` in the name of your database , or even change the user that defines the view).

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)The SIP server , place the following files lbilling-synchronization.pl and html.tt to the folder /usr/local/bin/lbilling/

3) Set the rights for the synchronization script:

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

4 )Set the configuration to the variables in the script lbilling-synchronization.pl ( configuration section).

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

5 ) Add the synchronization script ( following lines) to CRON (/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