Thursday, March 31, 2016

Importing Callwithus rates to A2billing

There different ways of importing rates to a2billing, some are straight forward but others you will be required to do a bit of editing to make it work.
This HOWto's is going to show step by step on how import callwithus rate card to a2billing.

Step 1- Download rate card from provider.

This will depend on which provider you're using, on this post am going to use callwithus as my provider, download the rates from their website found here, then extract the file and save it anyway on your computer.


Step 2- Create new rate card
Now I go to RATECARD, Create new Rate Card
Give your ratecard a name and a description click CONFIRM DATA

Step 3- Import rate card
Now select the Import RateCard menu
Ensure the “Choose the ratecard to import” is set to the rate card you just created
Also the callwithus import file includes “BUYRATE MIN DURATION” and “BUYRATE BILLING BLOCK” information so I have moved those 2 fields over to the “Selected Fields” box
Click on Browse to select your import file then click “Import Ratecard”


File size is greater than allowed limit error.
If you get error that the file limit is greater than allowed limit means the file you're trying to upload is greater than 1Mb which is default value. To change it Go to SYSTEM SETTINGS, Global list and on lower left side of the page change the DISPLAY TO all, then click GO to display all Global list settings. Now search for Max File Upload Size parameter and change it to any big value, or simply add zero to make the maximum file you can upload to be 10Mb, then click COMFIRM DATA to save it.

Now try importing the rates again by following the procedures in step 3.

A2billing shows us an example of what it’s going to import. This is the first record in the file.
Click “Continue to Import the Ratecard” if the example looks good.


A2billing should now tell you how many rates have been imported.



Step 4- Verifying the Imported rates
Unfortunately if we now go and look at one of these rates we’ll see that the callwithus file wasn’t particularly well formatted to be imported into a2billing.

The buy rate is zero, the selling rate is our buying cost and “SELLRATE MIN DURATION / SELLRATE BILLING BLOCK” are both zero!



Step 5 - Editing the rates via database.
So we need to sort this out. What we could have done was edit the file in something like Excel before we imported it to get everything in the correct layout. This is probably the easiest option, however I’m going to edit my ratecard using SQL in the database. Be sure you know what you’re doing if you choose this option!
First I need to log into mysql with the password set during installation. The default database name is mya2billing – yours may differ.
mysql -u a2billinguser -p

Output:
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3497
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>


List existing databases;

mysql> show databases;

Output:
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mya2billing        |
| test               |
+--------------------+
3 rows in set (0.00 sec)

Choose to use mya2billing database

mysql> use mya2billing;

Output:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> 

Next I need to find out the ID of the tarifplan I want to edit.

mysql>  SELECT id,tariffname FROM cc_tariffplan;

Output:
+----+-----------------------+
| id | tariffname            |
+----+-----------------------+
|  1 | Ratecard1             |
|  2 | Callwithus 29-03-2016 |
+----+-----------------------+
2 rows in set (0.00 sec)

Now I’m going to set the buy rate to be the sell rate that was loaded from the import file.

mysql> UPDATE cc_ratecard SET buyrate = rateinitial WHERE idtariffplan = 2;

Output:
Query OK, 37109 rows affected (1.14 sec)
Rows matched: 37117  Changed: 37109  Warnings: 0

Now I’m going to add 40% on to my sell rate.

mysql> UPDATE cc_ratecard SET rateinitial = (rateinitial*1.4) WHERE idtariffplan = 2;

Output:
Query OK, 37109 rows affected, 17139 warnings (1.23 sec)
Rows matched: 37117  Changed: 37109  Warnings: 17139

Now to set the “SELLRATE MIN DURATION” to the “BUYRATE MIN DURATION” that was loaded from the import file.

mysql> UPDATE cc_ratecard SET initblock = buyrateinitblock WHERE idtariffplan = 2;

Output:
Query OK, 37117 rows affected (0.76 sec)
Rows matched: 37117  Changed: 37117  Warnings: 0

Finally to set “SELLRATE BILLING BLOCK” to the “BUYRATE BILLING BLOCK” that was loaded from the import file.

mysql> UPDATE cc_ratecard SET billingblock = buyrateincrement WHERE idtariffplan = 2;


Output:
Query OK, 37117 rows affected (0.75 sec)
Rows matched: 37117  Changed: 37117  Warnings: 0

Now if we go and look at the rate we were looking at before it looks much better. The billing increments are all the same and my sell rate it 40% more than my buy rate!


Now I just need to go to my call plan and remove the test rate card  created earlier and add my new callwithus rate card.


Step-6 Testing the results

The importation is successfully now and you can test it using A2billing simulator by going to rates then simulator.

Seems everything is fine now, much credits should go to owner of this post, i documented this because i face a bit difficult when importing rates using the manual excel method and when i come across to this post i thought it is worth sharing.

Installation of A2billing version 2.2 on AsteriskNow 6

After compiling my last post on installing A2billing, i noticed i installed the old version (1.94), not only it was old but also has a lot of complications and bugs, so i think i was worth compiling another with include installation of latest version of a2billing. This howto's has steps of installing the lastest version of A2billing as the time of writing of this post.

This howto's was tested on
AsteriskNOW6.12
FreePBX v12
A2billing v2.2
Asterisk v11

All the command below should be run as root user (#)

1. Prepare the server
Prepare the server by updating it and installing additional packages
yum -y update && yum -y groupinstall core && yum -y groupinstall base && yum -y install epel-release
yum -y install php-mcrypt php-xml perl-DBD-Pg git wget

2. a. Get A2billing from source

cd /usr/src
wget --no-check-certificate https://github.com/Star2Billing/a2billing/archive/master.tar.gz
tar zxvf master.tar.gz 
mv a2billing-master/ a2billing

2.b. Get vendor packages using composer.
cd /usr/src/a2billing
curl -sS https://getcomposer.org/installer | php
php composer.phar update
php composer.phar install

3.a. Create MySQL root password
If you did not create a mysql root password during the asterisk install you should create one now.
mysqladmin -u root password 'mysql-root-password'

3.b. Create A2Billing Database
cd /usr/src/a2billing
mysql -u root -p < DataBase/mysql-5.x/a2billing-createdb-user.sql
which, after you enter your root password, will create:

Database name: mya2billing
Database user: a2billinguser
Database user password: a2billing

Now run script to create tables and insert some basic configuration data
cd /usr/src/a2billing/DataBase/mysql-5.x
./install-db.sh
Answer questions as follows:

Enter Database Name: mya2billing
Enter Hostname: localhost
Enter UserName: root
Enter Password: {mysql-root-password}

Copy a2billing.conf file to /etc/ and edit it.
cp /usr/src/a2billing/a2billing.conf /etc/

Make sure the following parameters are set as shown.
vi /etc/a2billing.conf
[database]
hostname = localhost
port = 3306
user = a2billinguser
password = a2billing
dbname = mya2billing
dbtype = mysql

4. Create files and set permissions

Only required if not using Asterisk Realtime.  If unsure then proceed as if you are not using Asterisk Realtime.

Some of these files assume you have FreePBX installed and not just Asterisk.  If you just have Asterisk installed then use the files specified in the INSTALL.rst instructions included with A2billing source files.
touch /etc/asterisk/additional_a2billing_iax.conf
touch /etc/asterisk/additional_a2billing_sip.conf
echo \#include additional_a2billing_sip.conf >> /etc/asterisk/sip_custom.conf
echo \#include additional_a2billing_iax.conf >> /etc/asterisk/iax_custom.conf
chown -Rf asterisk:asterisk /etc/asterisk/additional_a2billing_iax.conf
chown -Rf asterisk:asterisk /etc/asterisk/additional_a2billing_sip.conf
chmod 777 /etc/asterisk

5. Run sound installation script
cd /usr/src/a2billing/addons/sounds
./install_a2b_sounds.sh
chown -R asterisk:asterisk /var/lib/asterisk/sounds/
Add the following to /etc/asterisk/manager_custom.conf

You can also do it via the Freepbx Asterisk API module.  If you don't have Freepbx installed then you should follow the INSTALL.rst instructions included with the a2billing source files.
[myasterisk]
secret=mycode
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.0
read=system,call,log,verbose,command,agent,user
write=system,call,log,verbose,command,agent,user

Note:
Am changing default a2billing root folder from /var/www/html/a2billing to /var/www/html/voipbilling due to security reasons since hackers are aware to that directory so it's one step to server security

Add fwconsole blacklist

This is very important otherwise a fwconsole restart or fwconsole chown command will delete necessary symlinks in a2billing.
vim /etc/asterisk/freepbx_chown.conf
Add the following and save
[blacklist]
item=/var/www/html/voipbilling

6. Set up a2billing web folders

A2billing has 3 GUI sections.  admin, agent, and customer.
mkdir /var/www/html/voipbilling
cp -rf /usr/src/a2billing/admin /var/www/html/voipbilling
cp -rf /usr/src/a2billing/agent /var/www/html/voipbilling
cp -rf /usr/src/a2billing/customer /var/www/html/voipbilling
cp -rf /usr/src/a2billing/common /var/www/html/voipbilling
cp -rf /usr/src/a2billing/vendor /var/www/html/voipbilling
chown -R asterisk:asterisk /var/www/html/voipbilling
chmod 755 /var/www/html/voipbilling/admin/templates_c
chmod 755 /var/www/html/voipbilling/customer/templates_c
chmod 755 /var/www/html/voipbilling/agent/templates_c
Prevent public access to /common and /vendor folders.
echo 'Deny from all' > /var/www/html/voipbilling/common/.htaccess
echo 'Deny from all' > /var/www/html/voipbilling/vendor/.htaccess
Check admin web interface

From a web browser go to http://{my-ip-address}/voipbilling/admin and make sure you get the authentication screen.  Log in as follows.

user: root
password: changepassword

Once logged in click change password link at bottom left and change it.

7. Set up AGI
mkdir /var/lib/asterisk/agi-bin
cd /usr/src/a2billing/AGI             
cp a2billing.php /var/lib/asterisk/agi-bin
cp a2billing_monitoring.php /var/lib/asterisk/agi-bin
chown -R asterisk:asterisk /var/lib/asterisk/agi-bin
chmod 755 /var/lib/asterisk/agi-bin/a2billing.php
chmod 755 /var/lib/asterisk/agi-bin/a2billing_monitoring.php
ln -s /var/www/html/voipbilling/common/lib /var/lib/asterisk/agi-bin/lib
ln -s /var/www/html/voipbilling/vendor /var/lib/asterisk/vendor
Add the following extensions to /etc/asterisk/extensions_custom.conf

If not using Freepbx then this would go into /etc/asterisk/extensions.conf.  These are just examples.  Depending on what you are doing and how you are doing it some may not apply and some may not work.

Customizing this to your needs is considered beyond the scope of this document.  Search for documentation on Asterisk custom extensions and dialplans.  If possible try find examples specific to A2Billing.

Open the below file
vim  /etc/asterisk/extensions_custom.conf

And add the contents below and save.
[macro-dialout-trunk-predial-hook]
exten => s,1,GotoIf($["${OUT_${DIAL_TRUNK}:4:4}" = "A2B/"]?custom-freepbx-a2billing,${OUTNUM},1:2)
exten => s,2,MacroExit

[custom-freepbx-a2billing] exten => _X.,1,DeadAGI(a2billing.php,${OUT_${DIAL_TRUNK}:8}) exten => _X.,n,Hangup()
[a2billing] exten => _X.,1,Answer exten => _X.,n,Wait(1) exten => _X.,n,deadAGI(a2billing.php,1) exten => _X.,n,Hangup
[a2billing-callback] exten => _X.,1,deadAGI(a2billing.php,1,callback) exten => _X.,n,Hangup
[a2billing-cid-callback] exten => _X.,1,deadAGI(a2billing.php,1,cid-callback,34) ;last parameter is the callback area code exten => _X.,n,Hangup
[a2billing-all-callback] exten => _X.,1,deadAGI(a2billing.php,1,all-callback,34) ;last parameter is the callback area code exten => _X.,n,Hangup
[a2billing-did] exten => _X.,1,deadAGI(a2billing.php,1,did) exten => _X.,2,Hangup
[a2billing_callingcard] ; CallingCard application exten => _X.,1,NoOp(A2Billing Start) exten => _X.,n,DeadAgi(a2billing.php|1) exten => _X.,n,Hangup
[a2billing_voucher] exten => _X.,1,Answer(1) exten => _X.,n,DeadAgi(a2billing.php|1|voucher) ;exten => _X.,n,AGI(a2billing.php|1|voucher|44) ; will add 44 in front of the callerID exten => _X.,n,Hangup
[custom-a2billing-did] exten => _X.,1,deadAGI(a2billing.php,1,did) exten => _X.,2,Hangup
[custom-a2billing] exten => _X.,1,deadAGI(a2billing.php,1) exten => _X.,n,Hangup

8. Connect FreePBX with A2billing

8.a. Add custom Trunk

Go into FreePBX GUI>Connectivity>Trunks>Add Trunk>Add Custom Trunk give it a name and add the following custom dial string:

A2B/1
This is the trunk that is used to send calls out via A2Billing.  Simply select this trunk in outbound routes.  The /1 refers to which agi-conf is going to be used.

8.b. Add custom destinations

Add custom destinations to FreePBX via FreePBX GUI>Admin>Custom Destinations

These destinations are referring to the custom extensions created above in /etc/asterisk/extensions_custom.conf

Target: custom-a2billing,${EXTEN},1
Description: A2Billing - Callthrough

Target: custom-a2billing-did,${EXTEN},1
Description: A2Billing - DID

Start or restart FreePBX
fwconsole restart
Recurring Services
Recurring services are handled via the /etc/crontab. Make directory for A2Billing cron PID
mkdir -p /var/run/a2billing
chown asterisk:asterisk /var/run/a2billing

Copy cron files to some permanent location such as /usr/local
mkdir -p /usr/local/a2billing
cp -R /usr/src/a2billing/Cronjobs /usr/local/a2billing/
ln -sf /var/www/html/voipbilling/common/lib /usr/local/a2billing/Cronjobs/lib
chown -R asterisk:asterisk /usr/local/a2billing

9. Add cron

Add the cron jobs to /var/spool/cron/asterisk as follows
Run command below:
crontab -e -u asterisk

Copy and paste the contents below to opened cron file.
# update the currency table
0 6 * * * php /usr/local/a2billing/Cronjobs/currencies_update_yahoo.php
# manage the monthly services subscription
0 6 1 * * php /usr/local/a2billing/Cronjobs/a2billing_subscription_fee.php
# To check account of each Users and send an email if the balance is less than the user have choice.
0 * * * * php /usr/local/a2billing/Cronjobs/a2billing_notify_account.php
# this script will browse all the DID that are reserve and check if the customer need to pay for it.
# bill them or warn them per email to know if they want to pay in order to keep their DIDs.
0 2 * * * php /usr/local/a2billing/Cronjobs/a2billing_bill_diduse.php
# This script will take care of the recurring service.
0 12 * * * php /usr/local/a2billing/Cronjobs/a2billing_batch_process.php
# To generate invoices and for each user.
0 6 * * * php /usr/local/a2billing/Cronjobs/a2billing_batch_billing.php
# to proceed the autodialer
*/5 * * * * php /usr/local/a2billing/Cronjobs/a2billing_batch_autodialer.php
# manage alarms
0 * * * * php /usr/local/a2billing/Cronjobs/a2billing_alarm.php
# manage archive
0 12 * * * php /usr/local/a2billing/Cronjobs/a2billing_archive_data_cront.php
#autorefill
0 10 21 * * php /usr/local/a2billing/Cronjobs/a2billing_autorefill.php
15 * * * * php /usr/local/a2billing/Cronjobs/a2billing_batch_cache.php

10. Add log files

mkdir -p /var/log/a2billing
touch /var/log/a2billing/cront_a2b_alarm.log
touch /var/log/a2billing/cront_a2b_autorefill.log
touch /var/log/a2billing/cront_a2b_batch_process.log
touch /var/log/a2billing/cront_a2b_archive_data.log 
touch /var/log/a2billing/cront_a2b_bill_diduse.log 
touch /var/log/a2billing/cront_a2b_subscription_fee.log 
touch /var/log/a2billing/cront_a2b_currency_update.log 
touch /var/log/a2billing/cront_a2b_invoice.log 
touch /var/log/a2billing/cront_a2b_check_account.log 
touch /var/log/a2billing/a2billing_paypal.log
touch /var/log/a2billing/a2billing_epayment.log
touch /var/log/a2billing/a2billing_api_ecommerce_request.log
touch /var/log/a2billing/a2billing_api_callback_request.log
touch /var/log/a2billing/a2billing_api_card.log
touch /var/log/a2billing/a2billing_agi.log
chown -R asterisk:asterisk /var/log/a2billing

Add index file to prevent browsing of folders

touch /var/www/html/voipbilling/index.html

Log into the webpage

http://{my-ip-address}/voipbilling/admin
user:  root
pass: mynewpassword

Or use default password changepassword if you have not changed it yet and then click the change password link at the bottom left.

11. Set Asterisk version in A2Billing

Go into System settings>Global list.  Go to the bottom left and set to display all.  From your web browser search for "asterisk_version".  It will find that setting twice.  One for Global group and one for agi-conf1 group.  Change both accordingly.  If using Asterisk v11 then use "1_11"

Disable Asterisk Realtime if not setting up the following Asterisk Realtime procedure. Go to System settings>Global search for "realtime".  Change that setting to "no".

That's all, please let me know if you face any difficult in implementing the steps above, credits should also go to composer of original howto found here,  where i customized it a bit to fits my needs.

Tuesday, March 22, 2016

Forcing access to Asterisknow/FreePBX and A2billing to HTTPS

When installing asteriskNow PBX/voip system and a2billing to access it by default is via http. When it comes to VOIP/PBX system security is one thing you should consider. This HOWto's is going to explain the steps to follow when you want you pbx server to be access via https, the steps include creating self signed certificate and forcing all traffics to https.

1. Install Mod SSL
# yum install mod_ssl
2. Create a new directory
Next, we need to create a new directory where we will store the server key and certificate
# mkdir /etc/httpd/ssl
3. Create a self signed certificate

When we request a new certificate, you should specify how long the cerficate remains valid, for me i want certificate to remain valid for ten years, you may change 3650 to any number of number of days you want.
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/httpd/ssl/apache.key -out /etc/httpd/ssl/apache.crt
With this command, we will be both creating the self-signed SSL certificate and the server key that protects it, and placing both of them into the new directory.

This command will prompt terminal to display a lists of fields that need to be filled in.

The most important line is "Common Name". Enter your official domain name here or, if you don't have one yet, your site's IP address.

See example below,

For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:TZ
State or Province Name (full name) [ ]:Arusha
Locality Name (eg, city) [Default City]:Arusha
Organization Name (eg, company) [Default Company Ltd]: JARASYOLA COMPANY LTD
Organizational Unit Name (eg, section) [ ]:VOIP
Common Name (eg, your name or your server's hostname) [ ]:voip.jarasyola.co.tz
Email Address [ ]:voip@jarasyola.co.tz


4. Copy the newly created keys to their respective locations as needed by apache
 # cd /etc/httpd/ssl/
 # cp apache.crt /etc/pki/tls/certs/
 # cp apache.key /etc/pki/tls/private/

5. Now you must change some parameters in the /etc/httpd/conf.d/ssl.conf file
# vi /etc/httpd/conf.d/ssl.conf

5a. Look for the line beginning with: SSLCertificateFile and change the path to our reflect our newly created certs (/etc/pki/tls/certs/apache.crt)

5b. Look for the line beginning with: SSLCertificateKeyFile and change the path to reflect our newly created certs (/etc/pki/tls/private/apache.key)


6. Force all traffic coming to your server to https

To force all web traffic to use HTTPS insert the following lines of code in the .htaccess file in your website’s root folder.
# cd /var/www/html
# vim .htaccess

Add the following code and save the file
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R,L]

Make sure to change yourdomain.com to your server valid domain or IP address.


7. Restart apache

You are done. Restarting the Apache server will reload it with all of your changes in place.
 /etc/init.d/httpd restart

In your browser, type https://youraddress to view the new certificate.



Friday, March 18, 2016

A2billing installation on AsteriskNow 6.12 PBX server

A2Billing is a telecom switch and billing system capable of providing and billing a range of telecom products and services to customers such as calling card products, residential and wholesale VoIP termination, DID resale and callback services.A2billing is an open source implementation of a telecommunication billing and added value services platform.A2billing is a LAMP (Linux Apache Mysql(Postgresql) PHP) application that interfaces with Asterisk using both the AMI and AGI interfaces.
After searching online for updated HOWto's and failing to get one with is straight forward, i decided to compile one and share with you. This installation is done on Asterisk now server version 6.12 with FreePBX 6.12.65,CentOS 6.5 final and Asterisk 11.

A2billing Installation.

1. Update the system
# yum update

2. Install additional required packages if not already installed
# yum -y install php-mcrypt perl-DBD-Pg

3. Change php folder permission back to what it was set to during Asterisk/FreePBX install before PHP update
# chown -R asterisk:asterisk /var/lib/php/session

4. Add php timezone:
# vim /etc/php.ini
search for date.timezone

Uncomment date.timezone =

Change # date.timezone = to date.timezone ="Africa/Dar_es_Salaam"

Note:
You should change the timezone to according to your location, check the list of timezone here


5. Restart apache for the changes to take effect
# service httpd restart

6. Get a2billing source
# cd /usr/src
#wget --no-check-certificate https://github.com/Star2Billing/a2billing/tarball/v1-current
Note the filename of the downloaded file and use it as follows:
# tar zxvf  v1-current
# mv Star2Billing-a2billing-xxxxx a2billing

7. Prepare MySQL database

7.i. Create MySQL root password

If you did not create a mysql root password during the asterisk install you should create one now.
# mysqladmin -u root password 'rootmysqlpassword'
Note this password you will use it again during further configuration.

7.ii. If MySQL root password already exists

If you get access denied the password has already been set.  For PowerPBX install guide a password of abcdef was used.  For distributions such as PiaF, the password might be passw0rd.  This will be the password the following commands will ask for.

If you do not know the MySQL root password and want to change it

If you do not know what it is this guide has a procedure for changing the MySQL root password which is as follows.  Otherwise skip down to Create A2Billing Database.
#service mysqld stop
# mysqld_safe --skip-grant-tables &
If you don't see a command prompt (#) appear press the ENTER key and you should get it.
# mysql --user=root mysql
> update user set Password=PASSWORD('new-root-password') where user='root';
>\q
# service mysqld restart

7.iii. Create A2Billing Database
# cd /usr/src/a2billing
# mysql -u root -p < DataBase/mysql-5.x/a2billing-createdb-user.sql
# cd /usr/src/a2billing/DataBase/mysql-5.x
#./install-db.sh
Answer questions as follows:

Enter Database Name: mya2billing
Enter Hostname: localhost
Enter UserName: root
Enter Password: 'mysqlrootpassword'
# cp /usr/src/a2billing/a2billing.conf /etc/
# vim /etc/a2billing.conf
Make sure the following parameters are set as shown.

[database]
hostname = localhost
port = 3306
user = a2billinguser
password = a2billing
dbname = mya2billing
dbtype = mysql

8. Create files and set permissions
#chmod 777 /etc/asterisk
#touch /etc/asterisk/additional_a2billing_iax.conf
#touch /etc/asterisk/additional_a2billing_sip.conf
#echo \#include additional_a2billing_sip.conf >> /etc/asterisk/sip_custom.conf
#echo \#include additional_a2billing_iax.conf >> /etc/asterisk/iax_custom.conf
#chown -Rf asterisk:asterisk /etc/asterisk/additional_a2billing_iax.conf
#chown -Rf asterisk:asterisk /etc/asterisk/additional_a2billing_sip.conf

9. Run sound installation script
# cd /usr/src/a2billing/addons/sounds
#./install_a2b_sounds.sh
#chown -R asterisk:asterisk /var/lib/asterisk/sounds/

Open the file below
# vim /etc/asterisk/manager_custom.conf

And copy and paste the following:
[myasterisk]
secret=mycode
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.0
read=system,call,log,verbose,command,agent,user
write=system,call,log,verbose,command,agent,user

Note:
Some howto's recommend that above command should also be pasted on /etc/asterisk/manager.conf, i pasted on both files and nothing went wrong, so i think you should do the same.

10. Set up a2billing web folder

# mkdir /var/www/html/a2billing
cp -Rf /usr/src/a2billing/admin /var/www/html/a2billing/admin
cp -Rf /usr/src/a2billing/agent /var/www/html/a2billing/agent
cp -Rf /usr/src/a2billing/customer /var/www/html/a2billing/customer
cp -Rf /usr/src/a2billing/common /var/www/html/a2billing/common
# chown -R asterisk:asterisk /var/www/html/a2billing
chmod 755 /var/www/html/a2billing/admin/templates_c
chmod 755 /var/www/html/a2billing/customer/templates_c
chmod 755 /var/www/html/a2billing/agent/templates_c

11. Set up AGI
# mkdir /var/lib/asterisk/agi-bin
cd /usr/src/a2billing/AGI
cp a2billing.php /var/lib/asterisk/agi-bin/
chown -R asterisk:asterisk /var/lib/asterisk/agi-bin
chmod 755 /var/lib/asterisk/agi-bin/a2billing.php
ln -s /var/www/html/a2billing/common/lib /var/lib/asterisk/agi-bin/lib
Open file below:
# vim /etc/asterisk/extensions_custom.conf

Copy, paste and save the content below.
[macro-dialout-trunk-predial-hook]
exten => s,1,GotoIf($["${OUT_${DIAL_TRUNK}:4:4}" = "A2B/"]?custom-freepbx-a2billing,${OUTNUM},1:2)
exten => s,2,MacroExit


[custom-freepbx-a2billing]
exten => _X.,1,DeadAGI(a2billing.php,${OUT_${DIAL_TRUNK}:8})
exten => _X.,n,Hangup()


[a2billing]
exten => _X.,1,Answer
exten => _X.,n,Wait(1)
exten => _X.,n,deadAGI(a2billing.php,1)
exten => _X.,n,Hangup


[a2billing-callback]
exten => _X.,1,deadAGI(a2billing.php,1,callback)
exten => _X.,n,Hangup


[a2billing-cid-callback]
exten => _X.,1,deadAGI(a2billing.php,1,cid-callback,34) ;last parameter is the callback area code
exten => _X.,n,Hangup


[a2billing-all-callback]
exten => _X.,1,deadAGI(a2billing.php,1,all-callback,34) ;last parameter is the callback area code
exten => _X.,n,Hangup


[a2billing-did]
exten => _X.,1,deadAGI(a2billing.php,1,did)
exten => _X.,2,Hangup


[a2billing-voucher]
exten => _X.,1,deadAGI(a2billing.php,1,voucher)
exten => _X.,n,Hangup


[custom-a2billing-did]
exten => _X.,1,deadAGI(a2billing.php,1,did)
exten => _X.,2,Hangup


[custom-a2billing]
exten => _X.,1,deadAGI(a2billing.php,1)
exten => _X.,n,Hangup


Go into FreePBX GUI>Connectivity>Trunks>Add Custom Trunk give it any name and add the following dial string
Local/$OUTNUM$@a2billing/n

12. Add custom destinations to FreePBX via FreePBX GUI>Admin>Custom Destinations

Custom Destination: custom-a2billing,${EXTEN},1
Destination Quick Pick: (pick destination)
Description: A2Billing - Callthrough

Custom Destination: custom-a2billing-did,${EXTEN},1
Destination Quick Pick: (pick destination)
Description: A2Billing - DID
# amportal restart
Recurring Services
Recurring services are handled via the /etc/crontab.

14. Make directory for A2Billing cron PID
# mkdir -p /var/run/a2billing
chown asterisk:asterisk /var/run/a2billing

Copy cron files to some permanent location such as /usr/local

# mkdir -p /usr/local/a2billing
cp -R /usr/src/a2billing/Cronjobs /usr/local/a2billing/
ln -sf /var/www/html/a2billing/common/lib /usr/local/a2billing/Cronjobs/lib
chown -R asterisk:asterisk /usr/local/a2billing

15. Add the cron jobs to /var/spool/cron/asterisk.

Open file below:
# vim /var/spool/cron/asterisk

Copy, paste and save the content below:
# update the currency table
0 6 * * * php /usr/local/a2billing/Cronjobs/currencies_update_yahoo.php
# manage the monthly services subscription
0 6 1 * * php /usr/local/a2billing/Cronjobs/a2billing_subscription_fee.php
# To check account of each Users and send an email if the balance is less than the user have choice.
0 * * * * php /usr/local/a2billing/Cronjobs/a2billing_notify_account.php
# this script will browse all the DID that are reserve and check if the customer need to pay for it.
# bill them or warn them per email to know if they want to pay in order to keep their DIDs.
0 2 * * * php /usr/local/a2billing/Cronjobs/a2billing_bill_diduse.php
# This script will take care of the recurring service.
0 12 * * * php /usr/local/a2billing/Cronjobs/a2billing_batch_process.php
# To generate invoices and for each user.
0 6 * * * php /usr/local/a2billing/Cronjobs/a2billing_batch_billing.php
# to proceed the autodialer
*/5 * * * * php /usr/local/a2billing/Cronjobs/a2billing_batch_autodialer.php
# manage alarms
0 * * * * php /usr/local/a2billing/Cronjobs/a2billing_alarm.php
# manage archive
0 12 * * * php /usr/local/a2billing/Cronjobs/a2billing_archive_data_cront.php
#autorefill
0 10 21 * * php /usr/local/a2billing/Cronjobs/a2billing_autorefill.php
15 * * * * php /usr/local/a2billing/Cronjobs/a2billing_batch_cache.php

16. Add log files:
mkdir -p /var/log/a2billing
touch /var/log/a2billing/cront_a2b_alarm.log
touch /var/log/a2billing/cront_a2b_autorefill.log
touch /var/log/a2billing/cront_a2b_batch_process.log
touch /var/log/a2billing/cront_a2b_archive_data.log
touch /var/log/a2billing/cront_a2b_bill_diduse.log
touch /var/log/a2billing/cront_a2b_subscription_fee.log
touch /var/log/a2billing/cront_a2b_currency_update.log
touch /var/log/a2billing/cront_a2b_invoice.log
touch /var/log/a2billing/cront_a2b_check_account.log
touch /var/log/a2billing/a2billing_paypal.log
touch /var/log/a2billing/a2billing_epayment.log
touch /var/log/a2billing/a2billing_api_ecommerce_request.log
touch /var/log/a2billing/a2billing_api_callback_request.log
touch /var/log/a2billing/a2billing_api_card.log
touch /var/log/a2billing/a2billing_agi.log

# chown -R asterisk:asterisk /var/log/a2billing

Add index file to prevent browsing of root folder

#touch /var/www/html/a2billing/index.html

Log into the webpage

http://<ip-addr>/a2billing/admin

user: root
pass: changepassword

To configure A2billing and  make your first call, use tutorial video tutorial found here.

Feel free to contact me in case you stuck some where, i will be happy to help.

Kwaheri!!!!!.