Triển khai hệ thống

Một phần của tài liệu tìm hiểu công nghệ voip và xây dựng hệ thống callcenter trên nền asterisk (Trang 80 - 100)

7325010 là con số nhận được khi thuê bao chủ gọi quay số

5.4.Triển khai hệ thống

5.4.1. Mô hình hệ thống

Trong hệ thống thực tế triển khai trong đồ án gồm có:

• 1 Server Linux (CentOS 5) trên đó cài đặt phần mềm Asterisk version 1.6.0 version 1.6.0

• 1 Server cài Microsoft SQL Server 2005• 2 Softphone (X-lite) • 2 Softphone (X-lite)

Cấu hình đề nghị đối với PC cài đặt server Asterisk: CPU P4 2.4 Ghz

RAM 512 HDD 40G

5.4.1. Cài đặt các gói phần mềm

Hệ Điều Hành CENTOS 5.2

Sử dụng đĩa cài đặt CentOS version 5.2 và cài đặt mặc định các gói của hệ thống. Sau khi cài xong thì cần cài thêm các gói nhỏ sau để có thể cài và chạy được phần mềm Asterisk: - gcc - gcc++ - kernel-devel - bison - openssl - ncurses - curl - unixODBC, unixODBC-devel - libtool - mysql-connector-odbc, mysql-devel - php-mysql, php, php-mcrypt

Gõ lệnh sau dưới chế độ root để tự động cài đặt tất cả các gói cần thiết:

#yum -y install gcc gcc-c++ kernel-devel bison openssl-devel libtermcap- devel ncurses-devel doxygen curl-devel newt

devel mlocate lynx tar wget nmap bzip2 mod_ssl crontabs vixie-cron speex speex- devel unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel mysql-connector- odbc mysql mysql-devel mysql-server php-mysql php-mbstring php

mcrypt flex screen qt-devel subversion php*gd php-odbc

Cài đặt phần mềm Asterisk

Download các gói phần mềm: • Asterisk phiên bản 1.6.0:

http://downloads.digium.com/pub/asterisk/asterisk-1.6.0.tar.gz Giải nén chúng vào thư mục /usr/src:

tar -vxzf asterisk-1.6.0.tar.gz

Tiến hành cài đặt:

cd /usr/src/asterisk-1.6.20 ./configure;make;make install

make samples (chú ý cài lần đầu phải có lệnh này) Cài đặt Softphone

Softphone được sử dụng ở đây là phần mềm X-Lite. Tiến hành download X- Lite 3.0 tại www.counterpath.com và cài đặt bình thường.

Phần mềm hỗ trợ lập trình giao tiếp với Asterisk

Cài đặt thêm gói FreeTDS để hỗ trợ kết nối với Database SQL Server tại: ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz

Tiến hành cài đặt: ./configure;make;make install

Ngoài ra còn cần cài các gói để chuyển định dạng file âm thành từ mp3 sang gsm sau: mpg123, lame, sox.

Cơ Sở dữ liệu

Cài đặt SQL Server 2005

[070786] Type = friend Username = truonglh Secret = 12345678 Host = dynamic Context = test Disallow = all Allow = gsm Allow = ulaw Allow = alaw [7777] Type = friend Username = hungbd Secret = 12345678 Host = dynamic Context = test Disallow = all Allow = gsm Allow = ulaw Allow = alaw Extension.conf exten=>1900,1,answer() exten=>1900,2,goto(mainmenu,s,1) [mainmenu] exten=>s,1,Background(chaomung) exten=>s,2,waitexten(30) exten=>s,3,Playback(camon) exten=>s,4,hangup() exten=>0,1,goto(nvtv,s,1)

exten=>1,1,goto(kqxs,s,1) exten=>2,1,goto(qtan,s,1) exten=>3,1,goto(saimenu,s,1) exten=>4,1,goto(saimenu,s,1) exten=>5,1,goto(saimenu,s,1) exten=>6,1,goto(saimenu,s,1) exten=>7,1,goto(saimenu,s,1) exten=>8,1,goto(saimenu,s,1) exten=>9,1,goto(saimenu,s,1) exten=>*,1,goto(saimenu,s,1) exten=>#,1,goto(saimenu,s,1) [nvtv] exten=>s,2,SetMusicOnHold(truonglh) exten=>s,3,queue(nhanvien) [kqxs] exten=>s,1,AGI(ketquaxoso.php) exten=>s,2,waitexten(30) exten=>*,1,goto(kqsx,s,1) exten=>#,1,goto(mainmenu,s,1) exten=>s,3,hangup() [qtan] exten=>s,1,AGI(quatangamnhac.php) exten=>s,2,waitexten(30) exten=>*,1,goto(qtan,s,1) exten=>#,1,goto(mainmenu,s,1) exten=>s,3,hangup() [saimenu] exten=>s,1,Playback(saimenu)

Musiconhold.conf [truonglh] mode=custom directory=/var/lib/asterisk/moh application=/usr/local/bin/mpg123 -q -r 8000 -f 8192 -b 2048 --mono -s random=yes Agent.conf [general] musiconhold=>truonglh agent=>1111,1111,truonglh agent=>2222,2222,hungbd Queue.conf [nhanvien] strategy=ringall member => Agent/1111 member => Agent/2222 Cấu hình Softphone

Hình 36 Cấu hình Softphone (adsbygoogle = window.adsbygoogle || []).push({});

Cấu hình giao tiếp với Microsoft Sql Server 2005 Freetds.conf

[MySqlServer] host = 192.168.1.4 port = 1433

tds version = 5.0 client charset =UTF-8

odbcinst.ini

[SqlServer]

FileUsage = 1 CPtimeout= Cpreuse odbc.ini [MyDsn] Description=MS Sql Server Driver=SqlServer Server=192.168.1.4 DataBase=truonglh Port=1433 TDS_Version=8.0 5.4.1. Lập trình cho hệ thống

Giới thiệu AGI

Asterisk Gateway Interface ( AGI ) là một chuẩn giao tiếp với Asterisk . AGI cho phép Astersik gọi thực thi một chương trình ngoài để mở rộng nhiều chức năng của Astersik như điều khiến các kệnh thoại , phát âm thanh , đọc số DTMF , liên kết với cơ sở dữ liệu …. Các chương trình ngoài được gọi là AGI Script , ta có thể lập trình ra các AGI Script bằng nhiều ngôn ngữ lập trình khác nhau như Perl, PHP, C, C#, Java.

Trong lập trình giao tiếp với Asterisk, cần phân biệt hai khái niệm API và AGI. API là giao diện lập trình ứng dụng, thường được cung cấp dưới dạng đầu vào là các lời gọi hàm đến một thư viện nào đó của ứng dụng. Còn AGI thực chất cung cấp cho lập trình viên một kênh giao tiếp với Asterisk thông qua các con trỏ file (file Pointer) là STDIN, STDOUT, STDERR. Vì vậy công việc lập trình cũng trở nên đơn giản hơn vì không phải đính kèm với một thư viện nào của Asterisk.

Khi bắt đầu mỗi script, Asterisk sẽ truyền các biến môi trường và giá trị của nó đến AGI script. Ví dụ:

agi_request: quangtangamnhac.php agi_channel: Zap/1-1

agi_language: vi agi_callerid:

agi_context: default agi_extension: 123 agi_priority: 2

Sau khi truyền các biến này thì Asterisk sẽ gửi một dòng trống để dánh dấu kết thúc các biến môi trường và chuyển quyền điều khiển cho script.

Trong file cấu hình extensions.conf, ta gọi script như sau:

[default]

exten => 123,1,Answer( )

exten => 123,2,AGI(quatangamnhac.php)

Các file code

Các Script được viết bằng ngôn ngữ PHP, sử dụng thư viện PHPAGI để giao tiếp với Asterisk.

Khi gọi đến số 1900, hệ thống sẽ đưa người gọi đến mainmenu, là ngữ cảnh chính, ở đây người gọi sẽ được nghe một lời chào mừng cùng lời hướng dẫn bấm phím. Hệ thống sẽ chờ người dùng bấm phím trong vòng 30 giây, nếu người dùng không bấm phím trong khoảng thời gian đó thì hệ thống sẽ phát ra lời cảm ơn và kết thúc cuộc gọi, còn ngược lại nếu người dùng bấm phím 1 sẽ được đưa đến ngữ cảnh [kqxs] để tra cứu thông tin về kết quả xổ số, phím 2 sẽ được đưa đến ngữ cảnh [qtan ] để gửi quà tặng âm nhạc, phím 0 sẽ được đưa đến ngữ cảnh [nvtv] để gặp nhân viên tư vấn. Còn phím bất kỳ không phải 3 phím trên sẽ được đưa đến ngữ cảnh [saimenu], ở đây người gọi sẽ được nghe thông báo không tồn tại menu vừa nhập, sau đó được đưa trở lại menu [mainmenu] với priority là 2 để tiếp tục nhập phím khác.

File ketquaxoso.php

Trong file này có các hàm :

__GetKQXS($day,$month,$year) :Để truy vấn vào cơ sở dữ liệu và lấy ra

kết quả với ngày tháng năm tương ứng. function __GetKQXS($day,$month,$year) {

$sqlconnect = odbc_connect(MyDsn,sa,12345678) or die ("Could not connect");

$query = "select ketqua from KQXS where date=".$date; $res= odbc_exec($sqlconnect, $query) or die ("Could not exec"); if (odbc_fetch_row($res)) { $ketqua = odbc_result($res,"ketqua"); return $ketqua; } else { return $ketqua; } }

__ConvertNumber($number) : Để chuyển đổi 1 số bất kỳ thành một chuỗi

có thể phát thanh được (Ví dụ số 1002 sẽ được chuyển đổi thành chuỗi &mot&nghin&không&trăm&linh&hai). function __ConvertNumber($number) { while (strpos($number,'0')===0) { $number=substr($number,1); } if (($number < 0) || ($number > 999999999)) { }

$Gn = floor($number / 1000000); /* Millions (giga) */ $number -= $Gn * 1000000; (adsbygoogle = window.adsbygoogle || []).push({});

$kn = floor($number / 1000); /* Thousands (kilo) */ $number -= $kn * 1000;

$Hn = floor($number / 100); /* Hundreds (hecto) */ $number -= $Hn * 100;

$Dn = floor($number / 10); /* Tens (deca) */ $n = $number % 10; /* Ones */

$res = ""; if ($Gn) {

$res .= __ConvertNumber($Gn) . "&million"; }

if ($kn) {

$res .= __ConvertNumber($kn) . "&thousand"; } if(($Hn==0)&&($kn!=0)) { $res .="&0&hundred"; } if ($Hn) {

$res .= __ConvertNumber($Hn) . "&hundred"; } $ones = array("", "1", "2", "3", "4", "5", "6", "7", "8", "9"); $tens = array("", "10", "20", "30", "40", "50", "60", "70", "80", "90"); if ($Dn || $n) { if ($Dn < 1) { $res .= ($Hn>0?"&linh&":"&") . $n;

else {

$res .= "&" . $tens[$Dn]; if ($n)

{

$res .= "&" . ($n==1?"mot":$ones[$n]); } } } if (empty($res)) { $res = "0"; } return $res; } File quatangamnhac.php

msbh($msbh): để kiểm tra tính hợp lệ của mã bài hát do người gọi nhập vào.

function msbh($msbh) {

$sqlconnect = odbc_connect(MyDsn,sa,12345678) or die ("Could not connect");

$query = "select * from MSBH where msbh=".$msbh; $res= odbc_exec($sqlconnect, $query) or die ("Could not exec"); if (odbc_fetch_row($res))

{

return true; }

{

return false; }

}

Ngoài ra còn rất nhiều những hàm khác như kiểm tra tính hợp lệ của thời gian gửi quà tặng, thời gian phải đảm bảo đúng định dạng và không được là thời gian trong quá khứ:

function ktratg($tg) { global $time; foreach ($tg as $digit) { if($digit=="#") { return false; } } $phut=$tg[0].$tg[1]; $gio=$tg[2].$tg[3]; $ngay=$tg[4].$tg[5]; $thang=$tg[6].$tg[7]; $thanght=substr($time,8,2); if($thanght<$thang) { return true; } if($thanght==$thang) {

{ return true; } if($ngayht==$ngay) { $gioht=substr($time,0,2); if($gioht<$gio) { return true; } if($gioht==$gio) { $phutht=substr($time,2,2); if($phutht<$phut) { return true; } } } } return false; }

5.5. Kết quả thực nghiệm

Vào chế độ dòng lệnh của Asterisk từ terminal của Linux.

Hình 37 Màn hình Asterisk CLI Khi một Softphone đăng ký vào về thống:

Hình 39 Gọi tới 1900

Khi người gọi lựa chọn menu tra cứu kết quả xổ số (Bấm phím 1).

Hình 40 Người gọi chọn tra cứu kết quả xổ số Người gọi chọn menu Gửi quà tặng âm nhạc (Bấm phím 2). (adsbygoogle = window.adsbygoogle || []).push({});

Hình 41 Người gọi chọn Gửi quà tặng âm nhạc

5.6. Đánh giá hệ thống

Asterisk là một phần mềm mã nguồn mở nhỏ gọn, linh hoạt, mạnh mẽ nhưng cũng không kém phần phức tạp. Đồ án này mới chỉ đề cập đến hai chức năng được sử dụng chủ yếu của Asterisk là Chuyển Mạch Mềm (SoftSwitch) và Lập trình Ứng dụng trên nền Asterisk sử dụng giao diện lập trình Asterisk. Do khuôn khổ của đồ án nên còn nhiều vấn đề thú vị khác mà em chưa thể trình bày được.

Các kết quả đã đạt được trong đồ án tốt nghiệp này:

• Làm chủ được hệ thống Linux - Asterisk: cài đặt, cấu hình, quản trị.

• Xây dựng được hai ứng dụng khá hay và hữu ích là tra cứu kết quả xổ số và đặc biệt là dịch vụ quà tặng âm nhạc–Một dịch vụ mà em rất thích vì ý nghĩa của nó.

• Hệ thống đảm bảo chất lượng cuộc gọi tốt và ổn định trong mạng local

Tuy nhiên đồ án chỉ dừng lại ở việc test với các Softphone trong cùng một mạng LAN nên chất lượng tốt và ổn định, còn chưa thực hiện đối với mạng PSTN nên chưa nắm được chất lượng cuộc gọi trong trường hợp này.

5.7. Hướng phát triển

• Hoạt động với mạng PSTN

• Xây dựng thêm các dịch vụ mới như tra cứu thông tin chứng khoán,Tỷ giá đô la, dự báo thời tiết…

• Nghiên cứu các cơ chế bảo mật cho Asterisk, xây dựng hệ thống điện thoại Internet đảm bảo an toàn

• Tìm hiểu cách nâng cao hiệu năng và chất lượng cho hệ thống VoIP nhằm đáp ứng được số lượng người dùng nhiều hơn nữa.

• Nghiên cứu mảng điện thoại qua Internet: nghiên cứu, cài đặt, quản trị…

DANH MỤC CÁC THUẬT NGỮ VÀ TỪ VIẾT TẮT

1. QoS (Quality of Service ): Chất lượng dịch vụ.

2. Codec (Compressor/De-compressor) là một tập các quy luật được sử dụng để

chuyển đổi các tín hiệu thoại dạng Analog sang tín hiệu số và ngược lại. Có nhiều thuật toán codec để thực hiện chuyển đổi tín hiệu analog sang tín hiệu số dạng nhị phân (0, 1) như G711, GSM, G729… Ứng với mỗi thuật toán có những ưu điểm riêng, đặc biệt là việc tối ưu sử dụng băng thông trên đường truyền. Mục tiêu cuối cùng là các thuật toán đưa ra phải đảm bảo chất lượng cuộc gọi nhất và tiết kiệm băng thông nhất. G729 là thuật toán codec tốt nhất hiện nay trong hệ thống VoIP. Với hệ thống Asterisk để sử dụng thuật toán này cần phải mua bản quyền sử dụng vì đây là codec không miễn phí sử dụng.

3. IAX (Inter Asterisk eXchange): IAX là giao thức báo hiệu Voip được phát

triển bởi tác giả của phần mềm Asterisk để khắc phục những hạn chế trong giao thức SIP. Không giống như giao thức SIP chuyển tải thoại và báo hiệu trên hai kênh khác nhau (out of band), IAX chuyển tải thoại và báo hiệu trên cùng một kênh (in band). IAX giải quyết được vấn đề NAT đề cập trên phần giao thức SIP. Mặt khác IAX là giao thức tối ưu trong việc sử dụng băng thông, cho phép nhiều gói dữ liệu thoại trên cùng một IP header, cơ chế chuyển tải nhiều cuộc gọi trên cùng một gói IP được gọi là trung kế(Trunk). 4. PBX (Private Branch Exchange): PBX hay còn gọi là PABX - Private

Automatic Branch Exchange là hệ thống tổng đài nội bộ được đặt tại nhà thuê bao, từ Automatic ở đây muốn nói đến là hệ thống tổng đài điện tử tự động nhưng hiện nay đa số là tổng đài PBX điện tử tự động nên từ trên thực sự không còn cần thiết nữa. Hiện nay với việc phát triển mạnh mẽ của công nghệ VoIP, chúng ta còn có thêm thuật ngữ IP PBX. Đây là hệ thống chuyển mạch PBX với công nghệ VoIP.

5. PSTN (Public Switched Telephone Network): mạng điện thoại chuyển mạch

công cộng

6. TDM (Time Division Multiplexing): Là kỹ thuật ghép kênh phân chia thời

gian nhiều tín hiệu có thể truyền đồng thời trên một đường truyền, TDM được sử dụng chuyển thoại trong hệ thống mạng PSTN. Có hai chuẩn ghép kênh TDM cơ bản là E1 với 30 kênh thoại trên một khung tốc độ 2Mbps và T1 với 24 kênh thoại tốc độ 1.5Mbps.

8. PCM (Pulse Code Modulation ): thuật toán mã hóa đường truyền của mạng

VoIP cũng tương tự như mạng chuyển mạch kênh. PCM là thuật toán có tần số lấy mẫu là 8Khz (125ms/mẫu).

9. RTP (Real-time Transport Protocol): là một giao thức internet chuẩn được

sử dụng rộng rãi trong các ứng dụng thời gian thực như điện thoại Internet, video streaming. Giao thức RTP định nghĩa cách thức cho phép các ứng dụng quản lý việc truyền tải thông tin với thời gian thực (real-time transmission)

10.RTCP (Real Time Control Protocol): Giao thức điều khiển thời gian thực (adsbygoogle = window.adsbygoogle || []).push({});

được dùng để gửi các gói tin điều khiển cho những bên tham dự vào cuộc gọi. Chức năng chính của nó là thu nhận được thông tin phản hồi về chất lượng dịch vụ của RTP.

11.SIP (Session Initiation Protcol ):Giao thức khởi tạo phiên, là giao thức báo

hiệu điều khiển lớp ứng dụng được dùng để thiết lập, duy trì, kết thúc các phiên truyền thông đa phương tiện (multimedia)

12.NGN (Next Generation Network ) :Mạng thế hệ mới

13.IVR (Interactive Voice Response) : Tương tác thoại

14.AGI (Asterisk Gateway Interface ) : là một chuẩn giao tiếp với Asterisk .

AGI cho phép Astersik gọi thực thi một chương trình ngoài để mở rộng nhiều chức năng của Astersik như điều khiến các kệnh thoại , phát âm thanh , đọc số DTMF , liên kết với cơ sở dữ liệu …. Các chương trình ngoài được gọi là AGI Script , ta có thể lập trình ra các AGI Script bằng nhiều ngôn ngữ lập trình khác nhau như Perl, PHP, C, C#, Java.

Tài liệu tham khảo

[2] RFC 3550 RTP : Real-time Transport Protocol [3] RFC 3605 RTCP : Real-time Control Protocol

[4] Jonathan Davidson, Jame Peter, Manoj Bhatia, Satish Kalodindi, Sudipto Mukherjee

“ Voice over IP Fundamentals, Second Edition ”

Cisco.Press.Voice.over.IP.Fundamentals.2nd.Edition.Jul.2006.chm [5] Protocol of VoIP : http://www.protocols.com/voip.htm

[6] Wiley Publishing, Inc- VoIP for Dumies - by Timothy Kelly

[7] Building Telephony Systems With Asterisk- David Gomillion Barrie Dempster

[8] Asterisk - The future of Telephony - 2nd Edition-O’reilly Publisher

[9] Đồ án tốt nghiệp mạng thế hệ mới NGN cua Đỗ Hoàng Tiến-ĐTVT3-K45- ĐHBKHN

[10] Một số tài liệu tiếng Việt khác về công nghệ VoIP, điện thoại Internet, Mạng thế hệ mới, Asterisk…

[11] http://www.04hcb.net/ [12] http://www.voip-info.org/

Một phần của tài liệu tìm hiểu công nghệ voip và xây dựng hệ thống callcenter trên nền asterisk (Trang 80 - 100)