practice 9

24
Bài thực hành VoIP và tổng đài VoIP Practice 9 : Ứng dụng A2billing xây dựng tính năng tính cước trả trước. A2billing là chương trình mã nguồn mở được viết trên ngôn ngữ php cho phép tính cước hoàn thiện cho hệ thống asterisk kể cả trả trước và trả sau. Ứng dụng này được xây dựng trên cơ sở lập trình mở rộng AGI (Asterisk Gateway Interface) của Asterisk. ở bài này sẽ sử dụng A2billing để xây dựng ứng dụng trả trước cho các user VoIP của hệ thống. I. Cài đặt A2Billing. Step 1 : Cài đặt bộ phần mềm tạo máy chủ web - Cài đặt máy chủ Web Apache. # yum install httpd Thiết lập hệ thống để khởi động Apache lúc ban đầu: # chkconfig --levels 235 httpd on Sau đó khởi động Apache: # /etc/init.d/httpd start Mở trình duyệt và gõ địa chỉ http://127.0.0.1, bạn sẽ nhìn thấy trang kiểm tra ban đầu của Apache2 như sau: GVHD : Võ Đình Thiên Page 1

Upload: cuong-nguyen

Post on 21-Jan-2016

85 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Practice 9

Bài thực hành VoIP và tổng đài VoIP

Practice 9 : Ứng dụng A2billing xây dựng tính năng tính cước trả trước.

A2billing là chương trình mã nguồn mở được viết trên ngôn ngữ php cho phép tính cước hoàn thiện cho hệ thống asterisk kể cả trả trước và trả sau.

Ứng dụng này được xây dựng trên cơ sở lập trình mở rộng AGI (Asterisk Gateway Interface) của Asterisk. ở bài này sẽ sử dụng A2billing để xây dựng ứng dụng trả trước cho các user VoIP của hệ thống.

I. Cài đặt A2Billing.

Step 1 : Cài đặt bộ phần mềm tạo máy chủ web

- Cài đặt máy chủ Web Apache.

# yum install httpd

Thiết lập hệ thống để khởi động Apache lúc ban đầu:

# chkconfig --levels 235 httpd on

Sau đó khởi động Apache:

# /etc/init.d/httpd start

Mở trình duyệt và gõ địa chỉ http://127.0.0.1, bạn sẽ nhìn thấy trang kiểm tra ban đầu của Apache2 như sau:

GVHD : Võ Đình Thiên Page 1

Page 2: Practice 9

Bài thực hành VoIP và tổng đài VoIP

Thư mục root mặc định của Apache là /var/www/html trên hệ thống Fedora, file cấu hình là /etc/httpd/conf/httpd.conf, và các thiết lập khác đều được lưu trữ trong thư mục /etc/httpd/conf.d/.

- Cài đặt php 5

Chúng ta có thể sử dụng câu lệnh sau để cài đặt PHP5 và các module hỗ trợ Apache PHP5:

# yum install php

Sau đó khởi động lại Apache:

# /etc/init.d/httpd restart

- Kiêm tra php5 va toan bô qua trinh cai đăt

Mục dữ liệu root mặc định của website là /var/www/html. Tiếp theo, chúng ta sẽ tạo 1 file php nhỏ (info.php) và tiến hành gọi file đó bằng trình duyệt. File này sẽ hiển thị tất cả các chi tiết trong trong quá trình cài đặt PHP:

# vi /var/www/html/info.php

<?phpphpinfo();?>

Để gọi file info.php, gõ địa chỉ sau vào trình duyệt (ở bài viết này là http://127.0.0.1/info.php):

GVHD : Võ Đình Thiên Page 2

Page 3: Practice 9

Bài thực hành VoIP và tổng đài VoIP

Như ta thấy, PHP5 đã hoạt động thông qua Apache 2.0 Handler, được chỉ ra bằng dòng lệnh Server API. Khi kéo xuống phía dưới, ta sẽ thấy tất cả các module đều đã được kích hoạt trong PHP5. Nhưng MySQL không tìm thấy ở đây do MySQL không được hỗ trợ trong PHP5.

- Thiêt lâp đê PHP hô trơ MYSQL

Để làm việc này, chúng ta phải cài đặt gói php-mysql. Các bạn nên tìm kiếm gói này bằng câu lệnh sau:

# yum search php

Hãy chọn 1 gói phù hợp bất kỳ và cài đặt bằng câu lệnh sau:

# yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-eaccelerator php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy

Sau đó, khởi động lại Apache2:

# /etc/init.d/httpd restart

Truy cập lại địa chỉ http://127.0.0.1/info.php, và bạn sẽ thấy sự khác biệt với nhiều module mới, có bao gồm MySQL:

GVHD : Võ Đình Thiên Page 3

Page 4: Practice 9

Bài thực hành VoIP và tổng đài VoIP

- Cài đặt Phpmyadmin

phpMyAdmin (http://www.phpmyadmin.net/) là bảng điều khiển cơ sở dữ liệu MySQL với giao diện web. Các bạn có thê cài đặt phpMyAdmin bằng câu lếnh sau:

# yum install phpmyadmin

Tiếp theo, chúng ta phải điều chỉnh phpMyAdmin để phpMyAdmin cho phép những kết nối khác nhau không chỉ từ localhost:

# vi /etc/httpd/conf.d/phpMyAdmin.conf

# phpMyAdmin - Web based MySQL browser written in php## Allows only localhost by default## But allowing phpMyAdmin to anyone other than localhost should be considered# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdminAlias /phpmyadmin /usr/share/phpMyAdmin#<Directory /usr/share/phpMyAdmin/># order deny,allow

GVHD : Võ Đình Thiên Page 4

Page 5: Practice 9

Bài thực hành VoIP và tổng đài VoIP

# deny from all# allow from 127.0.0.1# allow from ::1#</Directory>

# This directory does not require access over HTTP - taken from the original# phpMyAdmin upstream tarball#<Directory /usr/share/phpMyAdmin/libraries>Order Deny,AllowDeny from AllAllow from None</Directory>

# This configuration prevents mod_security at phpMyAdmin directories from# filtering SQL etc. This may break your mod_security implementation.##<IfModule mod_security.c># <Directory /usr/share/phpMyAdmin># SecRuleInheritance Off# </Directory>#</IfModule>

Sau đó khởi động lại Apache:# /etc/init.d/httpd restart

Khi hoàn thành, chúng ta có thể truy cập phpMyAdmin qua địa chỉ http://127.0.0.1/phpmyadmin/:

GVHD : Võ Đình Thiên Page 5

Page 6: Practice 9

Bài thực hành VoIP và tổng đài VoIP

Step 2 : Download A2billing từ trang chủ : http://www.asterisk2billing.org/get-started/download/

Step 3 : Dùng WinSCP chuyển source vào asterisk server và giải nén thành thư mục /usr/src/a2billingStep 4 : Thực hiện cài đặt theo file INSTALL.rst hoặc theo hướng dẫn sau :

- Cài đặt Database cho A2billing :

# cd /usr/src/a2billing/DataBase/mysql-5.x/

# mysql -u root -p <a2billing-createdb-user.sql

Enter password: <enter your password of root user for mysql>

#./install-db.sh

Install A2Billing DataBase-----------------------------Enter Database Name : mya2billingEnter Hostname : localhost

GVHD : Võ Đình Thiên Page 6

Page 7: Practice 9

Bài thực hành VoIP và tổng đài VoIP

Enter UserName : rootEnter Password : <your root password>

- Kiểm tra cài đặt database thành công.

# mysql -u root -p mya2billingEnter password: Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -AWelcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 21Server version: 5.1.60 Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show tables;+---------------------------+| Tables_in_mya2billing |+---------------------------+| cc_agent || cc_agent_commission || cc_agent_signup || cc_agent_tariffgroup || cc_alarm |

- Cấu hình kêt nối A2billing với database :# cp /usr/src/a2billing/a2billing.conf /etc/# vi /etc/a2billing.confSửa đổi các thông tin như sau[database]hostname = localhostport = 3306user = a2billinguserpassword = a2billingdbname = mya2billingdbtype = mysql

- Cấu hình asterisk nêu không sử dụng realtime :

GVHD : Võ Đình Thiên Page 7

Page 8: Practice 9

Bài thực hành VoIP và tổng đài VoIP

# 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# chmod 777 /etc/asterisk/additional_a2billing_iax.conf# chmod 777 /etc/asterisk/additional_a2billing_sip.conf

- Cài đặt âm thanh :# Cd/usr/src/a2billing/addons/sounds# ./install_a2b_sounds.sh# chmod –R 777 /var/lib/asterisk/sounds/

- Chỉnh sửa file :  /etc/asterisk/manager.conf[myasterisk] secret=mycode deny=0.0.0.0/0.0.0.0permit=127.0.0.1/255.255.255.0read=system,call,log,verbose,command,agent,user write=system,call,log,verbose,command,agent,user

- Cài đặt thư mục Web . # 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

# cp -Rf /usr/src/a2billing/common/lib /var/www/html/a2billing/admin# cp -Rf /usr/src/a2billing/common/images /var/www/html/a2billing/admin/Public# cp -Rf /usr/src/a2billing/common/javascript /var/www/html/a2billing/admin/Public# chmod -R 777 /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

- Cài đặt 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

GVHD : Võ Đình Thiên Page 8

Page 9: Practice 9

Bài thực hành VoIP và tổng đài VoIP

# ln -s /var/www/html/a2billing/common/lib /var/lib/asterisk/agi-bin/lib

- Tạo extension sử dụng A2billing# vi /etc/asterisk/extensions.conf

- Thêm các dialplan sau : [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,Answerexten => _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) exten => _X.,n,Hangup [a2billing-all-callback]exten => _X.,1,deadAGI(a2billing.php,1,all-callback,34) 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)

GVHD : Võ Đình Thiên Page 9

Page 10: Practice 9

Bài thực hành VoIP và tổng đài VoIP

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

- Tạo Logfile :# 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

# chmod -R 777 /var/log/a2billing- Tạo file index để không cho show thư mục gốc.

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

Step 5 : Khởi động lại Apache, asterisk.# /etc/init.d/asterisk restart# /etc/init.d/httpd restart

II. Cấu hình A2Billing.1. Nguyên tắc tính cước trả trước của A2Billing :

GVHD : Võ Đình Thiên Page 10

Page 11: Practice 9

Bài thực hành VoIP và tổng đài VoIP

GVHD : Võ Đình Thiên Page 11

User make callContext = a2billing

Kiểm tra tài khoản còn lại của “account

Lấy thông tin destination

Match destination với bảng tỉ giá thực hiện cuộc gọi để tìm

ra thời gian thực hiện cuộc gọi tối đa

Quay số tham số L

Kết thúc cuộc gọi và cập nhật cước còn lại

Kết thúc

Run AGI(a2billing.php)

Page 12: Practice 9

Bài thực hành VoIP và tổng đài VoIP

Dựa vào nguyên tắc tính cước này ta sẽ thấy cần cấu hình những yếu tố sau :

1. Cấu hình context của user là : a2billing2. Cấu hình bảng giá tính cước cho từng đầu số.3. Tạo ra các mã “account code”(mã thẻ) chứa giá trị tài khoản được sử dụng.

Sau đây sẽ là hướng dẫn chi tiết cách cấu hình A2billing để đạt được mục tiêu tính cước trả trước như đã đề ra.

2. Cấu hình A2Billing.Giả sử ta sẽ áp dụng tính cước cho các user tại Asterisk A. Cước sé đươc khi có cuộc gọi từ Asterisk A đên Asterisk B . Giá cước là 1USD/minute. Đầu số tại B là 2XXX.

2.1. Tạo trunk liên kêt ngang hàng 2 tổng đài.

Tại Asterisk A

Sip.conf

[AsteriskB]type=peerhost=192.168.159.131context=intercallinsecure=inviteallow=allusername=AsteriskAsecret=1234

Tại Asterisk B

Sip.conf

[2000]type = friendcontext = normaluserhost = dynamicnat = yessecret = 2000dtmfmode = autodisallow = allallow = ulawmailbox=2000

GVHD : Võ Đình Thiên Page 12

Page 13: Practice 9

Bài thực hành VoIP và tổng đài VoIP

allow =alaw

[AsteriskA]type=peerusername=AsteriskBsecret=1234insecure=invitehost=192.168.159.128disallow=allallow=allcontext= externalcall

extensions.conf

[externalcall]exten => _XXXX,1,Dial(SIP/${EXTEN},20,r)same => n,hangup()

2.2. Khai báo trunk cho A2billingClick menu : PROVIDERS > Trunks rồi khai báo như hình.

GVHD : Võ Đình Thiên Page 13

Page 14: Practice 9

Bài thực hành VoIP và tổng đài VoIP

2.3. Xây dựng RateCard.

RateCard là một thẻ quy định việc tính cước theo các đầu số cụ thể. Mỗi đầu số bên ngoài được tính cước khác nhau do đó sẽ có nhiều loại RateCard khác nhau. Ngoài ra trong RateCard ta còn có thể quy định block tính cước, chi phí cụ thể cho từng block.

Để tạo được một RateCard, các việc cần làm đó là create new ratecard Add rate create new callplan add ratecard to callplan.

Hình : Create new RateCard

Có 2 thông số quan trọng ở bước này đó là:

Tarriffname: tên của RateCard sắp tạo ra. Trunk: chọn đường trunk để kết nối ra bên ngoài.

Sau khi đã tạo ra những RateCard, ta đến bước Add Rate. Ở đây ta sẽ quy định giá cước cụ thể mà chúng ta phải trả cho nhà cung cấp dịch vụ VOIP cũng như giá cước mà ta sẽ thu lại từ khách hàng của mình.

GVHD : Võ Đình Thiên Page 14

Page 15: Practice 9

Bài thực hành VoIP và tổng đài VoIP

Hình : Add RateCard.

Trong đó:

RateCard: tên RateCard cần Add. Buying Rate: số tiền cần phải trả cho nhà cung cấp dịch vụ VOIP /1phút cuộc gọi. Buyrate min duration: thời gian tối thiểu để bắt đầu tính cước. Buyrate biiling block: block tính cước. Đơn vị : s Tương tự cho các thông số đối với Selling rate.

Tiếp theo chúng ta sẽ tạo những “callplan”. Bởi vì trên thực tế, có nhiều loại khách hàng khác nhau, họ dùng những gói cước khác nhau. Các callplan sẽ giúp chúng ta phân chia cụ thể từng loại thẻ cào này nhằm có sự linh hoạt cho việc tính cước.

GVHD : Võ Đình Thiên Page 15

Page 16: Practice 9

Bài thực hành VoIP và tổng đài VoIP

Hình : Tạo callplan.

Cuối cùng là add các ratecard vào các callplan cụ thể:

Hình : Add rate card vào callplan.

2.4. Tạo Customers account.

Chọn customers generate customers sẽ xuất hiện giao diện như dưới đây:

GVHD : Võ Đình Thiên Page 16

Page 17: Practice 9

Bài thực hành VoIP và tổng đài VoIP

Hình: Tạo customers account.

Trong đó:

1. Length of card number: số chữ số của account code sẽ tạo ra.2. Chọn số accounts sẽ tạo.3. Chọn callplan mà quản lý các account này.4. Tài khoản các account.

Khi click GENERATE CUSTOMER ta sẽ thu được một mã 10 số ngẫu nhiên chính là mã thẻ của tài khoản.

Dùng mã thẻ này bỏ vào trường account code của user A để nạp tài khoản cho user A tại server A.

GVHD : Võ Đình Thiên Page 17

Page 18: Practice 9

Bài thực hành VoIP và tổng đài VoIP

Sau đó tiến hành login vào 2 user A và B lần lượt tại Asterisk A và B.

Rồi tiến hành thực hiện cuộc gọi A cho B, sau đó trả lời các câu hỏi sau ?

Hỏi 1 . Khi dùng A gọi cho B thì tiến trình cuộc gọi diễn ra như thế nào ?

…………………………………………………………………………………………..

Hỏi 2 . Làm thế nào để thực hiện cuộc gọi trực tiếp mà không phải nghe cảnh báo tài khoản ngay lúc đầu ?

…………………………………………………………………………………………..

Hỏi 3 . Tạo mã thẻ 2 USD rồi nạp cho A. Tiến hành gọi B, chờ hết 2 minute thì cuộc gọi có tự hangup hay không ? Vì sao ?

………………………………………………………………………………………….

Nếu không thì cách khắc phục là gì ?

………………………………………………………………………………………….

Hỏi 4 . Nêu cách config để tính cước theo blog 6s+1. Cụ thể như sau :

6 s đầu tiên tính 1USD, cứ mỗi giây tiếp theo tính 0.1USD ?

GVHD : Võ Đình Thiên Page 18

Page 19: Practice 9

Bài thực hành VoIP và tổng đài VoIP

…………………………………………………………………………………………..

Hỏi 5 : Nêu cách config để tài khoản luôn giữ lại ít nhất 2 USD ?

………………………………………………………………………………………….

GVHD : Võ Đình Thiên Page 19