Hình 6.1: Kiến trúc mạng VoIP nghiên cứu
6.1.3. Các thiết bị cần có trong hệ thống tổng đài : Điện thoại IP :
• Điện thoại AT-510
• Hỗ trợ 3 tài khoản : 2 tài khoản SIP, 1 tài khoản IAX2 • Cổng kết nối RJ45 : 1 LAN port + 1 WAN port
Card chuyển đổi PSTN : TDM-400P
• Khả năng kết nối 4 lines bưu điện PSTN • Kết nối máy tính thông qua cổng PCI slot 5V • Hỗ trợ Voice mail, IVR, Caller ID, Conference • Loại bỏ tiếng vọng Echo.
Tổng đài Asterisk :
• Dùng máy tính PC để cài đặt phần mềm tổng đài IP • Phần mềm tổng đài Asterisk
• Cấu hình đặc trưng của máy tính :
o CPU : Xeon 3.0 Ghz
o RAM : 2 GB
o HDD : 100 Gbyte
o LAN card : 10/100MB • Asterisk Server
• Lưu trữ, phục hồi file cài đặt thông số.
Tổng đài VoIPSwitch :
• Dùng máy tính PC để cài đặt phần mềm tổng đài VoIPSwitch. • Phần mềm tổng đài VoIPSwitch.
• Cấu hình đặc trưng của máy tính : • CPU : Xeon 3.0 Ghz • RAM : 3 GB • HDD : 100 Gbyte • LAN card : 10/100/1000MB • VoIPSwitch Server Softtphone IP :
• Phần mềm tổng X-lite: điện thoại Softphone có hỗ trợ giao thức SIP, được đăng kí với Asterisk Server, VoIPSwitch server với số thuê bao 1111 và 2222
Các thiết bị mạng IP:
• 3 Router: được cấu hình với địa chỉ IP là 192.168.1.1/24, 192.168.2.1/24 và 192.168.2.1/24 được nối với ISP VDC thông qua modem ADSL.
• Switch: dùng để kết nối các thiết bị máy tính lại với nhau
6.2. Cài đặt A2billing
A2Billing, kết hợp với Asterisk, tạo nên hệ thống VoIP có tính cước tuyệt vời, mà lại hoàn toàn miễn phí. Bản A2Billing 1.7.1 có nhiều cải tiến, và một trong số đó là script đơn giản hóa quá trình cài đặt (tạo database,cài đặt file âm thanh cho a2billing). 6.2.1. Yêu cầu hệ thống • Elastix 2.3.0 (Asterisk 1.6) • A2billing 1.7.1 source. • Database: MySQL. • Linux: CentOS 5. • PHP 5.
• Web server (apache).
6.2.2. Hướng dẫn cài đặt
• Cài các gói phụ thuộc:
# yum -y install perl-DBD-Pg subversion php
• Tải A2Billing
# mkdir /usr/local/src/a2billing # cd /usr/local/src/a2billing
• Chép và giải nén a2billing vào thư mục /usr/local/src/a2billing
# tar xvzf A2Billing_1.7.1.tar.gz
•Bắt đầu cài đặt
# cd /usr/local/src/a2billing/DataBase/mysql-5.x # bash install-db.sh
Install A2Billing DataBase
Enter Database Name :mya2billing Enter Hostname :localhost
Enter UserName :root Enter Password :passw0rd
mysql --user=root --password=passw0rd --host=localhost mya2billing # ln -s /usr/local/src/a2billing/a2billing.conf /etc/
# vi /etc/a2billing.conf [database]
hostname = localhost
; port for postgres is 5432 by default port = 3306
user = a2billinguser password = a2billing dbname = mya2billing
; dbtype setting can either be mysql or postgres dbtype = mysql
# 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.conf # echo #include additional_a2billing_iax.conf >> /etc/asterisk/iax.conf # chown -Rf asterisk /etc/asterisk/additional_a2billing_iax.conf
# chown -Rf asterisk /etc/asterisk/additional_a2billing_sip.conf # cd /usr/local/src/a2billing/addons/sounds/
# bash /usr/local/src/a2billing/addons/sounds/install_a2b_sounds.sh # vi /etc/asterisk/manager.conf
; Asterisk Call Management support [general] enabled = yes port = 5038 bindaddr = 0.0.0.0 [myasterisk] secret=mycode read=system,call,log,verbose,command,agent,user write=system,call,log,verbose,command,agent,user [admin] secret = amp111 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 #include manager_additional.conf #include manager_custom.conf # mkdir -p /usr/share/asterisk/agi-bin # ln -s /usr/local/src/a2billing/AGI/a2billing.php /usr/share/asterisk/agibin/a2billing.php # ln -s /usr/local/src/a2billing/AGI/lib /usr/share/asterisk/agi-bin/lib
# ln -s /usr/local/src/a2billing/AGI/a2billing.php /var/lib/asterisNew update #ln-s/usr/local/src/a2billing/AGI/a2billing_monitoring.php
/var/lib/asterisk/agi-bin/
# ln -s /usr/local/src/a2billing/AGI /var/lib/asterisk/agi-bin/ # chown -R asterisk.asterisk /var/lib/asterisk/agi-bin/
# chown -R asterisk.asterisk /usr/local/src/a2billing # chmod +x /usr/share/asterisk/agi-bin/a2billing.php # mkdir /var/www/html/a2billing
# chown asterisk.asterisk /var/www/html/a2billing # ln -s /usr/local/src/a2billing/admin /var/www/html/a2billing/admin # ln -s /usr/local/src/a2billing/agent /var/www/html/a2billing/agent # ln -s /usr/local/src/a2billing/customer /var/www/html/a2billing/customer # ln -s /usr/local/src/a2billing/common /var/www/html/a2billing/common # chmod 755 /usr/local/src/a2billing/admin/templates_c # chmod 755 /usr/local/src/a2billing/customer/templates_c # chmod 755 /usr/local/src/a2billing/agent/templates_c
# chown -Rf asterisk.asterisk /usr/local/src/a2billing/admin/templates_c # chown -Rf asterisk.asterisk /usr/local/src/a2billing/customer/templates_c # chown -Rf asterisk.asterisk /usr/local/src/a2billing/agent/templates_c
Bây giờ ta có thể truy cập a2billing thông qua trình duyệt web () và login với quyền admin. User và Password mặc định là
User: root
Pass: changepassword • Tiếp tục cài
# vi /etc/asterisk/extensions_custom.conf
and add the following contexts at the end #include extensions_a2billing.conf
create a file extensions_a2billing.conf and put following in it [a2billing] exten => _X.,1,Answer exten => _X.,2,Wait(2) exten => _X.,3,DeadAGI(a2billing.php) exten => _X.,4,Wait(2) exten => _X.,5,Hangup [did] exten => _X.,1,DeadAGI(a2billing.php|1|did) # vi /etc/crontab
and add following 06* * * php /usr/local/src/a2billing/Cronjobs/currencies_update_yahoo.php 061** php /usr/local/src/a2billing/Cronjobs/a2billing_subscription_fee.php 0** * * php /usr/local/src/a2billing/Cronjobs/a2billing_notify_account.php 0 2 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_bill_diduse.php 012* * * php /usr/local/src/a2billing/Cronjobs/a2billing_batch_process.php 0 6 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_batch_billing.php */5****php/usr/local/src/a2billing/Cronjobs/a2billing_batch_autodialer 0 * * * * php /usr/local/src/a2billing/Cronjobs/a2billing_alarm.php
• Tạo các thư mục và file log cần thiết
# mkdir -p /var/lib/a2billing/script # mkdir -p /var/run/a2billing # touch /var/log/asterisk/a2billing-daemon-callback.log # touch /var/log/a2billing-daemon-callback.log # touch /var/log/cront_a2b_alarm.log # touch /var/log/cront_a2b_autorefill.log # touch /var/log/cront_a2b_batch_process.log # touch /var/log/cront_a2b_bill_diduse.log # touch /var/log/cront_a2b_subscription_fee.log # touch /var/log/cront_a2b_currency_update.log # touch /var/log/cront_a2b_invoice.log # touch /var/log/a2billing_paypal.log # touch /var/log/a2billing_epayment.log # touch /var/log/api_ecommerce_request.log # touch /var/log/api_callback_request.log # touch /var/log/a2billing_agi.log • Tạo Dialplan
Thêm dialplan sau vào extensions_custom.conf (hoặc extensions.conf nếu không dùng FreePBX.
[a2billing] exten => _X.,1,Answer exten => _X.,n,Wait(1) exten => _X.,n,DeadAGI(a2billing.php) exten => _X.,n,Wait(1) exten => _X.,n,Hangup [did] exten => _X.,1,Answer exten => _X.,n,Wait(1) exten => _X.,n,DeadAGI(a2billing.php|1|did) exten => _X.,n,Wait(1)
Bạn có thể truy cập A2billing qua tài khoản Admin với tài khoản mặc định sau : User: root
Pass:changepassword
Hình 6.2: Đăng nhập vào A2B Admin
Hình 6.3: Giao diện Admin của A2Billing
6.3. Cấu hình A2billing
Khi chúng ta đã hoàn thành phần này, chúng tôi sẽ có thể thực hiện các cộng việc sau đây:
• Một người dùng cục bộ có thể gọi bất kỳ người sử dụng khác trong cục bộ và được lập hoá đơn cho các cuộc gọi điện thoại
• Mức giá khác nhau có thể được áp dụng cho người dùng khác nhau (thành viên được ưu đãi hoặc không ưu đãi).
• Một người dùng cục bộ có thể quay số ra (thông qua các nhà cung cấp VoIP) và được lập hoá đơn cho các cuộc gọi điện thoại
• Người dùng (ngoài mạng) có thể gọi cho bất kỳ người dùng cục bộ.
6.3.1. Tạo Dialplan
File Extensions.conf chính là nơi chứa dialplan Asterisk.Các cuộc gọi tương tác với phần mềm A2billing cần phải được xử lý bên trong của một hoặc nhiều bối cảnh a2billing liên quan. Các cuộc gọi đến ngữ cảnh được xử lý bằng cách sử dụng
các kịch bản a2billing.php(nằm trong thư mục cài đặt a2billing). Trong mô hình này, chúng tôi tạo ra hai bối cảnh khác nhau :
• Bối cảnh đầu tiên [a2billing] xử lý tất cả các cuộc gọi từ khách hàng VoIP của chúng tôi. Khi một cuộc gọi đến bất kỳ số mở rộng _X.(2 hay nhiều số). • Bối cảnh thứ hai [did], sẽ được sử dụng định tuyến các cuộc gọi trở lại cho
người sử dụng.Các cuộc gọi cho khách hàng (DID) được xử lý bên trong của bối cảnh [did]. Kịch bản a2billing.php trong chế độ [did] chịu trách nhiệm định tuyến cuộc gọi trở lại một trong những người dùng của chúng ta.
Chỉnh sửa extension.conf (/etc/asterisk) và thêm hai phần mở rộng sau: [a2billing] ; CallingCard application exten => _X.,1,Answer exten => _X.,2,Wait,2 exten => _X.,3,DeadAGI,a2billing.php exten => _X.,4,Wait,2 exten => _X.,5,Hangup [did] ; CallingCard application exten => _X.,1,Answer exten => _X.,2,Wait,2 exten => _X.,3,DeadAGI(a2billing.php|1|did) exten => _X.,4,Wait,2 exten => _X.,5,Hangup
6.3.2. Tạo nhà cung cấp (Providers) và Trunks
Providers là các nhà cung cấp dịch vụ thoại để giúp cho công ty có thể liên lạc ra bên ngoài. Hiện tại ta có hai nhà cung cấp dịch vụ phổ biến đó là PSTN Provider với đường Line điện thoại truyền thống, và VoIP Provider liên lạc thông qua đường truyền Internet.
Bây giờ chúng ta sẽ cấu hình A2Billing thông qua giao diện web của nó.Trong kịch bản của chúng tôi, chúng tôi sẽ tạo ra các nhà cung cấp sau đây:
• PBX sẽ có một nhà cung cấp VoIP (VOIP PROVIDER) để tiếp cận với thế giới bên ngoài. WA_OUT sẽ sử dụng công nghệ SIP.
• PBX sẽ cũng có một nhà cung cấp địa phương (PSTN PROVIDER) để tiếp cận người dùng cục bộ.
Một hệ thống có thể có quyền truy cập đến một hoặc nhiều nhà cung cấp để tiếp cận thế giới VoIP. Mỗi nhà cung cấp có thể thực hiện một hoặc nhiều công nghệ định tuyến VoIP (Trunk).Chúng tôi sẽ tạo ra một nhà cung cấp với một Trunk có sử dụng giao thức SIP.
Hình 6.4: List Provider được thiết lập
Sau khi tạo hai Providers xong ta tiến hành tạo Trunk .Đầu tiên ta sẽ tạo một ZAP Trunk với nhà cung cấp dịch vụ PSTN, điền vào những thông tin sau:
• VoIP-Provider: PSTN Provider (tên nhà cung cấp dịch vụ PSTN đã tạo • ở trên).
• Label: PSTN Trunk (tên của Trunk).
• Provider Tech: DAHDI (do ta cài gói Dahdi hỗ trợ cho Card giao tiếp PSTN).
• Provider IP: 1 (tên của đường ra PSTN ta đã đặt trong FreePBX). • Additional Parameter: để trống.
Hình 6.5: Tạo Trunks kết nối đến các nhà cung cấp
Hình 6.6: Danh sách Trunk đã thiết lập
6.3.3. Tạo Rate Cards và CallPlans
Bây giờ đến lúc ta thiết lập một số Ratecards. Ratecards được dùng để ta qui định chi phí thực hiện cuộc gọi đến một địa điểm cụ thể nào đó. Ta sẽ tạo 2 Ratecards, một Ratecards “Domestic” cho các cuộc gọi trong nước sử dụng PSTN Trunk, và một Ratecards “International” cho các cuộc gọi ra nước ngoài thông qua VoIP Trunk, tại vì cước phí khi thực hiện một cuộc gọi quốc tế thông qua VoIP Trunk sẽ rẻ hơn rất nhiều so với khi ta thực hiện gọi trực tiếp từ PSTN Trunk
Hình 6.7: Tạo RateCard cho các cuộc gọi trong nước
Hình 6.8: Tạo RateCard cho các cuộc gọi quốc tế
Rate là chi phí thực hiện cuộc gọi đến một nơi nào đó và cách tính cước cuộc gọi do ta sẽ quy định dựa theo Dial Prefix của mỗi quốc gia khác nhau cũng như khu vực của quốc gia đó. Ví dụ nước Anh có Prefix là 44, nhưng trong đó sẽ phân biệt: 441, 442, 443 là Prefix để gọi cho điện thoại bàn ở nước Anh và 4477, 4478, 4479 là Prefix để gọi cho số di động ở nước Anh.
Hình 6.9: Danh sách các Rate gọi trong nước và quốc tế
Call plan là một nhóm các RateCards. Tại sao chúng ta cần phải tạo nhóm các RateCards. Đó là vì mục đích tiết kiệm tiền bằng cách hướng các cuộc gọi theo các Trunk hợp lý để đạt được một trong 2 tiêu chí: LCR (least cost routing) hay LCD (least cost dialing). Hầu hết các chương trình có chức năng tính tiền cuộc gọi đều tích hợp hai thuật toán LCR và LCD. Nhất là khi chúng ta có nhiều đường ra để thực hiện một cuộc gọi.
• LCR (Least Cost Routing): LCR sẽ sử dụng Trunk mà ta mua vào rẻ nhất. Vì thế sẽ tiết kiệm chi phí cho ta.
• LCD (Least Cost Dialing): LCD thì sẽ sử dụng Trunk mà customer của ta gọi đến đến rẻ nhất. Vì thế sẽ tiết kiệm chi phí cho customer.
Callplan sẽ hữu ích khi ta thuê nhiều đường SIP Trunk ở những nước khác nhau.
6.3.4. Tạo Customer
Đến đây chúng ta đã thiết lập hoàn tất những nền tảng cần thiết để thực hiện cuộc gọi qua A2Billing. Bây giờ chúng ta bắt đầu sử dụng những thiết lập đó cho việc tạo ra các Customers. Một Customer thực chất là một số Card Number cho người dùng sử dụng để gọi giống như những thẻ VoIP đang được bán rộng rãi trên thị trường Việt Nam.
Hình 6.11: Danh sách các Customer đã thiết lập
6.4. Cấu hình dịch vụ Fax trên Asterisk6.4.1. Cài đặt 6.4.1. Cài đặt
Để cho dịch vụ Fax hoạt động được trên Asterisk ta cần phải cài đặt các gói phần mềm cần thiết :
• sendEmail • spandsp • postfix
Sau khi cài đặt các gói phần mềm cần thiết,ta phải Register dịch vụ Fax trên Asterisk.Ta sử dụng các lệnh sau
# cd /root
# wget http://downloads.digium.com/pub/register/x86-32/register # chmod 500 /root/register
# /root/register
Sau đó nhập key vào để register dịch vụ Fax trên Asterisk
6.4.2. Cấu hình Fax
Module Fax bao gồm các tab nhỏ sau
• Fax Master:dùng để đăng ký mail của người quản lý • Fax Client:nơi dùng của nhân viên
• Fax Viewer:nơi xem các bản ghi nhớ lịch sử Fax
• Email Template:mẫu email dùng để gửi đến địa chỉ đã được đăng ký để quản lý hệ thống Fax
Đầu tiên ta tạo ra một Vitual Fax.Vào tab Vitual Fax và chọn New vitual Fax:
Hình 6.12: Tạo mới một vitual Fax
Để gửi Fax ta chọn tab Vitual Fax và chọn Send Fax. Ta chọn máy Fax và điền vào số Fax cần gửi sau đó nội dung và gửi Fax
Hình 6.13: Gửi Fax
6.5. Cấu hình VoIPSwich
Để cho hệ thống VoIPSwitch có thể hoạt động và thực hiện các cuộc gọi điện thoại nội bộ, gọi điện thoại đến hệ thống asterish,cisco và thực hiện tính cước phí cho từng cuộc gọi ta cần hoàn thành các bước cấu hình sau đây :
• Bước 1: Tạo Gatekeeper để kết nối đến Asterisk
• Bước 3: Tạo ra tariffs để định mức giá cho mỗi cuộc gọi.
• Bước 4: Tạo khách hàng và thêm tiền vào tài khoản khách hàng.
6.5.1. Tạo Gatekeeper
Vào chế độ cấu hình của VoIPSwitch, vào VoIPSwitch Manager ->
GK/Registrar, Sau đó ta sẽ điền các thông tin cấu hình :
Port = 5060 port mà ta sẽ thực hiện kết nối đến máy chủ Gatekeeper
Password = password
password dùng để chứng thực với máy chủ Gatekeeper
Username = username
username dùng để chứng thực với máy chủ Gatekeeper
Support Codec ta chọn G723, G729, G711
Ở đây ta cần tạo ra Gatekeeper: Gatekeeper dùng để kết nối đến hệ thống VoIP Asterisk,
Hình 6.14: Tạo Gatekeeper
6.5.2. Tạo Dial Plan
Ta vào VoIPSwitch Manager -> Dialing Plan, Sau đó ta sẽ điền các thông tin cấu hình :
Number = 1 nhập vào số điện thoại để liên kết đến các kế hoạch quay số
Destination = cấu hình quá trình xử lý các cuộc gọi điện thoại khách Proxy setting xác định giao thức và phương thức kết nối
Hình 6.15: Tạo Dial Plan
6.5.3. Tạo ra tariffs để định mức giá cho mỗi cuộc gọi.
Một tariffs có thể bao gồm một số lượng không giới hạn của tiền tố được xác định (thường là mã quốc gia). Thanh toán được thực hiện với tiền tố phù hợp với một số lượng cuộc gọi và thời gian kéo dài chính xác nhất.
Ta vào VoIPSwitch Manager -> Tariffs.
Prefix Tiền tố phù hợp để thanh toán cướic phí. Thông thường các mã quốc gia hoặc toàn bộ số điện thoại để phù hợp cho quá trình thanh toán.
Voice rate Chi phí của một phút gọi đối với các cuộc gọi phù hợp với prefix đã định nghĩa ở trên.
6.5.4. Tạo người dùng và thêm tiền vào tài khoản cho khách hàng
Ta vào VoIPSwitch Manager -> GK/Registar Client, Sau đó ta sẽ điền các thông tin cấu hình. Trong thẻ general
Username Tên của khách hàng dùng để đăng nhập
Password Mật khẩu của khách hàng