SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 43
3.3.4. CẤU HÌNH HỆ THỐNG CHO HAI DỊCH VỤ 3.3.4.1. CẤU HÌNH FILE EXTENSIONS.CONF 3.3.4.1. CẤU HÌNH FILE EXTENSIONS.CONF
[tongdai]
exten => 18001234,1,Answer(500)
exten => 18001234,n,goto(mainmenu,s,1) ;MENU CHINH
[mainmenu]
exten => s,1,Noop(Welcome to hoc vien con nghe buu chinh vien thong) exten => s,2,Answer(500) exten => s,3,Background(loi_chao_mainmenu) ;chờ khach nhấn số chọn lọai dịch vụ exten => s,4,WaitExten(30) exten => s,5,Playback(goodbye) exten => s,6,Hangup() ;nghe lại exten => *,1,goto(mainmenu,s,3) ;khach chon so 1
exten => 1,1,goto(KQXS,s,1) ;nhảy đến nhãn KQXS ;khach chon so 2
exten => 2,1,goto(tuyen_dung,s,1) ;nhảy đến nhãn tuyen_dung ;khách chọn số khác thì nhảy đến saimenu exten => _X,1,goto(saimenu,s,1) ;MENU SAI [saimenu] exten => s,1,Playback(nhap_sai_mainmenu) exten => s,n,goto(mainmenu,s,3) ;MENU KQXS [KQXS]
exten => s,1,Noop(Welcome to AGI- tra cu ket qua xs vietlott) exten => s,n,AGI(KQXS.php)
exten => s,n,goto(mainmenu,s,3) exten => s,n,Hangup()
;MENU TUYEN DUNG [tuyen_dung]
exten => s,1,Noop(Welcome to AGI- tra cu thong tin tuyen dung) exten => s,n,AGI(tuyendung.php)
exten => s,n,goto(mainmenu,s,3) exten => s,n,Hangup()
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 44
3.3.4.2. CẤU HÌNH AGI SCRIPT
- Truy cập file agi-bin qua đường dẫn /var/lib/asterisk/agi-bin - Tạo 2 file script tên KQXS.php và tuyendung.php
- Tiến hành viết code cho từng file
▪ Code file KQXS.php #!/usr/bin/php <?php require('phpagi/phpagịphp'); set_time_limit(30); //-----------------Connect database-----------------------------------------// $dbservertype='mysql'; $servername='127.0.0.1'; $dbusername='root'; $dbpassword='tel4vn'; $dbname='kqxsvietlott'; mysql_connect($servername,$dbusername,$dbpassword); mysql_select_db($dbname); //-----------------xử lý dia plan--------------------------------------------// $agi = new AGI();
$agi->answer(500);
$agi->stream_file('cam_on_xs'); ketquakhac:
$num_rows = 0;
//-----------vịng lặp chờ nhận thơng tin phía khách--------------------// while($num_rows ==0 )
{
//-----------------lấy dữ liệu khách nhập vào------------------------------// $get_ngayxs = $agi->get_datắmoi_nhap_ngay_xs',30000,2); $ngayxs = $get_ngayxs['result'];
$agi->noop("Ngay xo so ban vua nhap la: ".$ngayxs);
// ----------------lấy dữ liệu trong database ra----------------------------// $get = mysql_query("select * from kqxs where ngayxs='$ngayxs'");
$num_rows = mysql_num_rows($get);
//-----------nếu khơng có dữ liệu phù hợp thì $num_rows == 0--------// if ($num_rows == 0)
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 45
{
$agi->stream_file('nhap_sai_ngay_xs'); }
}
//-------- nếu đúng thì thốt khỏi vịng lặp chạy lệnh tiếp theo---------// sleep(1); $agi->stream_file('cho_giay_lat'); $result = mysql_fetch_array($get); $cap1 = $result["cap_mot"]; $cap2 = $result["cap_hai"]; $cap3 = $result["cap_ba"]; $cap4 = $result["cap_bon"]; $cap5 = $result["cap_nam"]; $cap6 = $result["cap_sau"]; //----------đọc kết quả xổ số----------------------------------------------// nghelai: $agi->stream_file('ket_q_xs_lá); if($cap1>=1 and $cap1<=9) { $agi->say_number(0); $agi->say_number($cap1); } else{$agi->say_number($cap1);} sleep(1);
if($cap2>=1 and $cap2<=9) { $agi->say_number(0); $agi->say_number($cap2); } else{$agi->say_number($cap2);} sleep(1);
if($cap3>=1 and $cap3<=9) { $agi->say_number(0); $agi->say_number($cap3); } else{ $agi->say_number($cap3);} sleep(1);
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 46
if($cap4>=1 and $cap4<=9) { $agi->say_number(0); $agi->say_number($cap4); } else{ $agi->say_number($cap4);} sleep(1);
if($cap5>=1 and $cap5<=9) { $agi->say_number(0); $agi->say_number($cap5); } else{$agi->say_number($cap5);} sleep(1);
if($cap6>=1 and $cap6<=9) {
$agi->say_number(0); $agi->say_number($cap6); }
else{$agi->say_number($cap6);}
//---------------hướng dẫn nghe lại------------------------------// $get_nghelai = $agi->get_datắnghe_lai_xs',20000,1); $nghelai = $get_nghelai['result'];
if($nghelai==1){goto nghelai;}
else if($nghelai==2){goto ketquakhac;} else if($nghelai==3){goto vemenu9;} $agi->stream_file('sai_tam_biet'); $agi->Hangup(); vemenu9: sleep(1); mysql_close(); ?>
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 47 ▪ Code file tuyendung.php
#!/usr/bin/php <?php
require('phpagi/phpagịphp'); set_time_limit(30);
//-----------play file lời chào----------------------------------------// $agi = new AGI();
$agi->answer(500);
$agi->stream_file('cam_on_td'); sleep(1);
//----------lấy mã công ty-------------------------------------------// chonCty:
$macty=0;
$get_maCty = $agi->get_datắnhap_maCtý,20000,1); $maCty = $get_maCty['result'];
$agi->noop("ma cong ty ban vua nhap la: ".$maCty); //----------------------------------------------------
if($maCty == 1){sleep(1);
$agi->stream_file('chon_vnpt'); }
else if($maCty == 2){sleep(1);
$agi->stream_file('chon_viettel'); }
else if($maCty == 3){sleep(1); $agi->stream_file('chon_fpt'); }
else if($maCty != 1 or 2 or 3){sleep(1); $agi->stream_file('nhap_saí); goto chonCty; } sleep(1); //----------lấy mã ngành-----------------------------------------------// chonNganh: $get_maNganh = $agi->get_datắnhap_maNganh',20000,1); $maNganh = $get_maNganh['result'];
$agi->noop("ma nganh ban vua nhap la: ".$maNganh); if($maNganh == 1){$agi->stream_file('cho_giay_lat');} else if($maNganh==2){$agi->stream_file('cho_giay_lat');}
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 48 else if($maNganh==3){$agi->stream_file('cho_giay_lat');} else if($maNganh != 1 or 2 or 3) { $agi->stream_file('nhap_saí); goto chonNganh; } //-------hàm xử lý đối số khách hàng nhập vào--------------------------// if($maCty==1 and $maNganh==1){$chonNganh=11;}
else if($maCty==1 and $maNganh==2){$chonNganh=12;} else if($maCty==1 and $maNganh==3){$chonNganh=13;} else if($maCty==2 and $maNganh==1){$chonNganh=21;} else if($maCty==2 and $maNganh==2){$chonNganh=22;} else if($maCty==2 and $maNganh==3){$chonNganh=23;} else if($maCty==3 and $maNganh==1){$chonNganh=31;} else if($maCty==3 and $maNganh==2){$chonNganh=32;} else if($maCty==3 and $maNganh==3){$chonNganh=33;}
//-------play file tuyển dụng mà hàm vừa xử lý-------------------------// nghelai:
$agi->noop("ma cong ty va ma nganh la: ".$chonNganh); //$agi->noop("ma nganh ban vua nhap la: ".$bien); switch($chonNganh){
case 11:
$agi->stream_file('mang_vnpt'); break;
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 49 $agi->stream_file('votuyen_vnpt'); break; case 13: $agi->stream_file('truyendan_vnpt'); break; case 21: $agi->stream_file('mang_viettel'); break; case 22: $agi->stream_file('votuyen_viettel'); break; case 23: $agi->stream_file('truyendan_viettel'); break; case 31: $agi->stream_file('mang_fpt'); break; case 32: $agi->stream_file('votuyen_fpt'); break; case 33: $agi->stream_file('truyendan_fpt'); break; default: break;
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 50
}
//--------------hướng dẫn nghe lại--------------------------// $get_nghelai = $agi->get_datắnghe_lai_td',20000,1); $nghelai = $get_nghelai['result'];
$agi->noop("ma nghe lai vua nhap la: ".$nghelai); if($nghelai==1){goto nghelai;}
else if($nghelai==2){goto chonNganh;} else if($nghelai==3){goto chonCty;} else if($nghelai==4){goto vemenu9;} $agi->stream_file('sai_tam_biet'); $agi->Hangup();
vemenu9: sleep(1); ?>
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 51
3.3.5. KẾT QUẢ ĐẠT ĐƯỢC
Trong quá trình thực hiện đề tài, em đã thực hiện được các dịch vụ của tổng đài bằng lập trình PHPAGI:
✓ Dịch vụ tra cứu kết quả xổ số vietlott
Hình 3.6: Kết quả Demo dịch vụ xổ số
✓ Dịch vụ tra cứu thông tin tuyển dụng
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 52
CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI 4.1. ĐÁNH GIÁ CHUNG 4.1. ĐÁNH GIÁ CHUNG
Nhìn chung tổng đài IP PBX Asterisk là một giải pháp cung cấp tổng đài điện thoại khá hồn hảo, các cơng ty có mơ hình phân bố rộng có thể áp dụng triển khai khá tốt. các dịch vụ triển khai tương đối hoàn thiện, mở ra nhiều hướng để triển khai nhiều dịch vụ khác có tính ứng dụng caọ Sau đây là đánh giá lại ưu điểm và nhược điểm của tổng đài và các dịch vụ.
4.1.1. ƯU ĐIỂM
✓ Nền tảng mã nguồn mở chạy trên nền Linux cụ thể là CentOS và cộng đồng sử dụng lớn giúp việc hoàn thiện hệ thống tốt hơn.
✓ Xây dựng hệ thống với chi phí thấp, giàu tính năng ( IVR, Voicemail…)
✓ Các dịch vụ đề tài thực hiện được chính là những dịch vụ được khách hàng sử dụng nhiều hiện naỵ Nội dung trong đề tài khơng chỉ nói đến cách cung cấp các dịch vụ mà còn đưa ra các giải pháp giúp cho doanh nghiệp có thể dễ dàng triển khai các dịch vụ theo ý của mình. Việc xây dựng các dịch vụ có các tính năng như thế nào đều có thể thực hiện được bằng cách thay đổi các script trong lập trình PHPAGỊ Với việc triển khai các dịch vụ bằng lập trình, chúng ta có thể linh động và dễ dàng hơn trong việc đáp ứng yêu cầu của khách hàng.
4.1.2. NHƯỢC ĐIỂM
✓ Tín ổn định khơng cao bằng điện thoại truyền thống. do hệ thống phụ thuộc nhiều vào server, đường truyền internet, bị chặn bởi Firewall…khi các vấn đề này giải quyết không hợp lý sẽ sinh ra không ổn định trong hoạt động.
✓ Thói quen sử dụng softphone khơng nhiều, việc sử dụng softphone để gọi điện thoại không tiện lợi bằng điện thoại truyền thống trong khi đầu tư IP Phone có chi phí khá caọ
✓ Các dịch vụ triển khai trong đề tài có chất lượng âm thanh chưa tốt. Dịch vụ tra cứu thơng tin tuyển dụng chưa có nhiều cơ sở dữ liệu, mức độ khả thi khơng cao vì nội dung tuyển dụng khá dài có thể khắc phục bằng ứng dụng tin nhắn vào dịch vụ tra cứu thông tin.
✓ Cơ sở dữ liệu được sử dụng trong đề tài này là MySQL, thông tin được cập nhật nhờ vào người quản trị cơ sở dữ liệụ Do đó, dịch vụ khó có thể xây dựng các dịch vụ có thơng tin thay đổi thường xuyên như: giá vàng, dự báo thời tiết hay tỷ số các trận bóng đá… Để có thể giải quyết các vấn đề này, sự kết hợp giữa Asterisk và Web service sẽ là hướng phát triển cho việc triển khai các dịch vụ.
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 53
4.2. HƯỚNG PHÁT TRIỂN ĐỀ TÀI
✓ Vì thời gian làm đồ án có hạn, cũng như kiến thức về linux và tổng đài Asterisk không sâu nên đồ án dừng lại ở mức độ xây dựng một tổng đài nội bộ và triển khai 2 dịch vụ cơ bản. khi triển khai thực tế có rất nhiều khó khăn về mặt xử lý kỹ thuật cũng như đảm bảo QoS và bảo mật hệ thống, sửa lỗi trong các cấu hình đặc thù mạng thực tế của từng của cơng tỵ
✓ Hướng phát triển của đề tài là triển khai thực tế một tổng đài Asterisk có cơ chế bảo mật, đảm bảo QoS. Có thể phát triển thành một trung tâm hỗ trợ khách hàng (Call center).
✓ Cung cấp các dịch vụ giá trị gia tăng hồn thiện mang tính ứng dụng thực tế caọ Kết hợp với Web Service triển khai các dịch vụ có cơ sở dữ liệu động.
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 54
PHỤ LỤC 1 Các Lệnh Tham Khảo Trong AGI
▪ Answer
- Cấu trúc: array, answer() - Chức năng: Trả lời các kênh - Kết quả: -1: Lỗi
0: Thành cơng - Ví dụ: $agi → answer(); ▪ Get_data
- Cấu trúc: $bien=$agi->get_datăfile audio, [timeout], [max digits])
- Chức năng: phát ra một file audio và nhận một DTMF, file audio được mặc định nằm trong /var/lib/asterisk/sounds, nếu sau khi file âm thanh phát xong, người dùng khơng nhấn một digit nào thì sau một khoảng thời gian $timeout câu lệnh này sẽ kết thúc, $max_digits là số digits tối đa được nhấn.
- Kết quả: Kí tự nhận được từ người sử dụng [‘result’]: lưu giữ kí tự
- Ví dụ: $get_nghelai = $agi->get_dată‘beep’,20000,1); $nghelai = $get_nghelai['result'];
- Người dùng nhấn kí tự sau tiếng “beep”, kí tự được lưu giữ trong [‘result’]. Sau lệnh $nghelai = $get_nghelai['result'], kí tự được lưu trong biến
$nghelai ▪ Say_number
- Cấu trúc: SAY NUMBER <number> <escape digits>
- Chức năng: Đọc một số nhận được, trong quá trình đọc các digits, nếu như một trong các escape_digits được nhấn thì việc đọc sẽ dừng lại
- - Kết quả: -1: Nếu như bị lỗi
0: Q trình đọc hồn tất mà khơng bị ngắt bởi một escape_digit nào
Value: hiển thị mã ASCII của escape_digit được nhấn - Ví dụ: $agi->say_digits("123456","*#1")
Hệ thống sẽ đọc số 123456. Trong quá trình đọc, nếu như một trong 3 digits *, # hoặc 1 được nhấn thì việc đọc sẽ dừng lại
▪ Stream_file
- Cấu trúc: STREAM FILE <filename> <escape digits> [sample offset] - Chức năng: Phát một audio file $filename, audio file này sẽ được dừng lại
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 55 sample_offset được sử dụng, hệ thống sẽ thực hiện độ lệch thời gian khi phát audio file
- Kết quả: -1: Nếu như bị lỗi
0: hồn tất cơng việc phát audio file mà không bị ngắt bởi một escape_digit nào
Value: hiển thị mã ASCII của escape_digit được nhấn - Ví dụ: $agi->stream_file("baothuc0","*#1","2000");
Hệ thống sẽ phát file "baothuc0". Trong quá trình phát, nếu như một trong 3 digits *, # hoặc 1 được nhấn thì việc phát sẽ dừng lại, "2000" ứng với độ lệch thời gian khi bắt đầu phát file "baothuc0"
▪ Hangup
- Cấu trúc: Hangup(channelname)
- Chức năng: giải phóng cuộc gọi của một kênh, mật định khơng có channelname sẽ giải phóng kênh hiện tại
- Kết quả: -1: Nếu như lỗi
0: Giải phóng cuộc gọi thành cơng - Ví dụ: $agi->Hangup();
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 56
PHỤ LỤC 2 Các Lệnh Được Sử Dụng Với MySQL
▪ Mysql_connect
- Cấu trúc: resource mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]])
- Chức năng: Lệnh này sẽ trả về một pointer kết nối vào database - Ví dụ: $username = "root"; $user name để vào MySQL
$password = "123456"; password để vào MySQL $hostname = "127.0.0.1";
mysql_connect($hostname, $username, $password) or die("Unable to connect to MySQL");
printf ( "Connected to MySQL"); mysql_close();
Sau khi thực hiện các lệnh trên, chúng ta sẽ thấy được “Connected to
MySQL” trên Asterisk. Nếu như không thể kết nối vào MySQL thì kiểm tra lại username, password và hostname
▪ Mysql_query
- Cấu trúc: mysql_query ( string query [, resource link_identifier [, int result_mode]])
- Chức năng: sau khi đã đăng nhập vào được database, lệnh này được dùng để thực hiện sự truy vấn trong databasẹ Các kiểu đơn giản nhất của truy vấn chính là INSERT, UPDATE hay DELETE database, các kiểu truy vấn này không trả về kết quả sau khi truy vấn mà đơn giản chỉ là thêm vào, thay đổi hoặc xóa thơng tin trong databasẹ
- Ví dụ: $get = mysql_query("select * from kqxs where