SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 32 INV (192.168.100.4:8000) 401 Unauthorized ACK INV (192.168.100.4:8000) 100 trying INV (192.168.100.4:17276) 100 trying 180 ringing 180 ringing 200OK(192.168.100.4:56846) ACK 200OK(192.168.100.8:17414) ACK 8000 17414 17276 56846 BYE BYE 200 OK 200 OK RTP RTP
Q trình thiết lập và giải phóng cuộc gọi nội bộ (201 gọi 202) được mơ tả trong hình sau:
User 201 Asterisk User 202 192.168.100.4:49747 192.168.100.8:5060 192.168.100.4:62299
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 33
1) User 201 gửi bản tin INVITE đến server yêu cầu thiết lập cuộc gọi đến 202, trong bản tin INVITE chứa phần SDP là các thông số địa chỉ ip, port, codecs,... mà 201 sử dụng trong quá trình truyền và nhận RTP
2) Server gửi lại bản tin 401 Unauthorized yêu cầu 201 chứng thực với thuật toán MD5 và chuỗi ký tự ngẫu nhiên noncẹ
3) 201 gửi bản tin ACK thông báo cho server biết là đã nhận được yêu cầu chứng thực từ server
4) 201 gửi lại bản tin INVITE với chuỗi chứng thực nằm trong phần Authorization
5) Server kiểm tra và xác định 201 đã chứng thực thành cơng, do đó server gửi bản tin 100 Trying để báo cho 201 chờ đợi trong khi server kết nối với 202
6) Server gửi bản tin INVITE đến 202. Chú ý phần SDP đã được server thay đổi với ip, port,codec,... của server. Với kết quả như thế này ta có thể suy ra rằng server sẽ tham gia vào quá trình truyền RTP giữa 201 và 202
7) 202 gửi 100 Trying báo cho server biết là đang xử lý
8) 202 gửi lại cho server tín hiệu hồi âm chng 180 Ringing
9) Server chuyển tiếp tín hiệu hồi âm chuông đến 201
10) Thuê bao 202 nhấc máy, gửi bản tin 200 OK chứa các thông số truyền nhận RTP trong phần SDP
11) Server gửi trả lại ACK thông báo cho 202 rằng server đã nhận được bản tin 200 OK
12) Server chuyển tiếp bản tin 200 OK đến 201. Cũng giống như trong bước (6) do server được cấu hình tham gia vào cả quá trình truyền thoại nên phần SDP đã được thay đổi thành ip, port, codecs,... của server
13) 1001 gửi bản tin ACK báo cho server biết mình đã nhận bản tin 200 OK Đến lúc này thì 201 và 202 đã thơng thoại với nhau, và server Asterisk làm
nhiệm vụ trung gian truyền tải tín hiệu thoại nàỵ
14) Sau khi kết thúc cuộc đàm thoại, thuê bao 202 cúp máy, gửi bản tin BYE đến server
15) Server gửi lại 200 OK cho phép 202 kết thúc phiên
16) Server gửi bản tin BYE cho 201 để báo phiên đã kết thúc
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 34
CHƯƠNG 3: XÂY DỰNG CÁC DỊCH VỤ GIÁ TRỊ GIA TĂNG TRÊN NỀN ASTERISK
3.1. GIỚI THIỆU
Dịch vụ giá trị gia tăng (viết tắt VAS, tiếng anh Value-ađed service) là thuật ngữ khá phổ biến dùng trong lĩnh vực công nghiệp viễn thông. Dịch vụ giá trị gia tăng được định nghĩa là những dịch vụ ngoài gọi và fax. Đối với điện thoại di động thì dịch vụ ngồi gọi (thoại) thì các dịch vụ khác ví dụ SMS, nhạc chờ, các dịch vụ trên nền Data như GPRS hay 3g...điều được xem là dịch vụ giá trị gia tăng.
Hệ thống tổng đài VoIP ngày càng phát triển mạnh mẽ với các lợi thế cuộc gọi nội bộ khơng mất phí, chuyển tiếp cuộc gọị cuộc gọi chờ… Đặc biệt, hệ thống tổng đài dựa trên cơng nghệ VoIP mang tính ứng dụng rất cao, có thể cung cấp cho khách hàng những dịch vụ thiết thực trong cuộc sống như quà tặng âm nhạc, dịch vụ tra xổ số, tra cứu điểm thi đại học…. Không chỉ dừng lại ở những dịch vụ đơn thuần, người sử dụng mong muốn có được nhiều tiện ích hơn, nhiều dịch vụ tốt hơn, hệ thống Asterisk có thể đáp ứng vấn đề này cho khách hàng của mình một cách tốt nhất.
Đề tài này tập trung nghiên cứu xây dựng các dịch vụ trên tổng đài Asterisk. Các dịch vụ được triển khai trong đề tài này bao gồm: dịch vụ tra cứu kết quả xổ số VIETLOTT, dịch vụ tra cứu thông tin tuyển dụng ngành viễn thông.
Các dịch vụ này được thực hiện dựa trên giao tiếp giữa Asterisk và AGI, sử dụng ngơn ngữ lập trình PHP để cung cấp những thông tin trên cơ sở dữ liệu của hệ thống cho khách hàng. Dựa trên PHP, các dịch vụ có thể được mở rộng một cách linh hoạt, đáp ứng được nhu cầu thực tế của khách hàng. Qua đó, các doanh nghiệp có thể sử dụng để tăng tính năng cho tổng đài nhằm chăm sóc khách hàng tốt hơn.
3.2. TỔNG QUAN MYSQL VÀ PHPAGI 3.2.1. MYSQL CƠ BẢN 3.2.1. MYSQL CƠ BẢN
MySQL là hệ quản trị cơ sở dữ liệu tự do nguồn mở phổ biến nhất thế giới và được các nhà phát triển rất ưa chuộng trong quá trình phát triển ứng dụng. Vì MySQL là cơ sở dữ liệu tốc độ cao, ổn định và dễ sử dụng, hoạt động trên nhiều hệ điều hành cung cấp một hệ thống lớn các hàm tiện ích rất mạnh. Với tốc độ và tính bảo mật cao, MySQL rất thích hợp cho các ứng dụng có truy cập CSDL trên internet. MySQL miễn phí hồn tồn cho nên bạn có thể tải về MySQL từ trang chủ.
3.2.1.1. KHÁI NIỆM CƠ BẢN VỀ CƠ SỞ DỮ LIỆU (CSDL)
▪ Cơ sở dữ liệu hay database dùng để chứa dữ liệụ Có nhiều loại cơ sở dữ liệu khác nhau như cơ sở dữ liệu quan hệ, CSDL hướng đối tượng, CSDL phân tán... Hiện nay, trong phần lớn các ứng dụng, người ta thường sử dụng CSDL quan hệ.
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 35
▪ Trong cở sở dữ liệu quan hệ sẽ có các bảng (table), trong các table sẽ có các trường dữ liệu (hay còn gọi là field)
3.2.1.2. CÁC LỆNH CƠ BẢN TRONG MYSQL
▪ Lệnh tạo Database: Create Database Database_Name;
▪ Lệnh dùng database: Use Database_Name;
▪ Xóa database: Drop Database db_Name;
▪ Lệnh tạo bảng: CREATE TABLE table_name(/*column_list*/);
Ví dụ: Cho bảng Sinhvien gồm có các thơng tin sau:
• TenSV: Tên sinh viên, kiểu varchar và chiều dài tối đa 255 ký tự
• MaSV: Mã sinh viên, kiểu INT và chiều dai là tối đa 11 số
• NamSinh: Năm sinh, kiểu INT và chiều dài tối đa là 4 số
Create Table Sinhvien(Tensv Varchar(255),Masv Int(11), Namsinh Int(4));
▪ Xóa bảng: Drop Table tb_name;
▪ Lệnh chèn các trường field vào table:
Insert Into table_name VALUES ('field_1', 'field_2', ..., 'field_n');
Ví dụ: Chèn thơng tin của sinh viên Nguyen Van An vào bản Sinhvien
Insert Into Sinhvien Values ('Nguyen Van An',’123’, '1996);
▪ khóa chính (Primary key): PRIMARY KEY(field)
Giả sử chúng ta có bảng SinhVien và mỗi sinh viên là một record, lúc này để nhận diện sinh viên thì ta khơng thể dựa vào tên của sinh viên được vì tên sinh viên có thể trùng nhaụ Chính vì vậy giải pháp là ta thêm một field MaSV và giá trị của nó cho mỗi SV là khác nhaụ
▪ Lệnh SELECT có nhiệm vụ lấy danh sách dữ liệu của một hoặc nhiều bảng trong database, cú pháp lệnh SELECT như sau:
SELECT field1, field2, field3, ...FROM table_name WHERE <dieu_kien_loc>
▪ Cập nhật dữ liệu trong bảng, cú pháp:
Update tên_bảng set tên_cột = Giá trị mới WHERE (điều kiện)
3.2.1.3. CÀI ĐẶT MYSQL TRÊN CENTOS 6
▪ Đăng nhập vào CentOS với tài khoản root
▪ Install MySQL
#yum install mysql mysql-devel mysql-server php-mysql –y #yum install php php-devel -y
#service mysqld start
# mysqladmin -u root password 'chien123' # chkconfig mysqld on
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 36
3.2.2. PHPAGI- LỚP THƯ VIỆN SỬ DỤNG NGÔN NGỮ PHP 3.2.2.1. GIỚI THIỆU VỀ PHPAGI 3.2.2.1. GIỚI THIỆU VỀ PHPAGI
▪ PHPAGI (PHP Asterisk Gateway Interface) được xem như là lớp thư viện cơ sở sử dụng ngôn ngữ PHP. PHPAGI cung cấp cho người sử dụng một thư viện để viết một AGI script dễ dàng và hiệu quả hơn.
▪ PHPAGI có thể được download tại: http://sourceforgẹnet/projects/phpagi/files/
3.2.2.2. CẤU TRÚC FILE CỦA PHPAGI
▪ Thư viện lớp PHPAGI bao gồm hai file sau:
phpagịphp: Lớp thư viện được dùng cho Asterisk AGI API
phpagi-asmanager.php: Lớp thư viện được dùng cho giao diện manager của Asterisk. Đây là lớp thư viện được bổ sung cho thư viện ở trên. Khi cài đặt lớp thư viện này cho AGI script, hệ thống sẽ tự động cài đặt lớp thư viện ở trên.
3.2.2.3. GỌI MỘT AGI SCRIPT TỪ DIAPLAN
▪ Việc sử dụng AGI được thực hiện đơn giản bằng cách sử dụng lệnh AGI(),với tên của AGI script được sử dụng như là một đối số.
exten => 201,1,Answer()
exten => 201,n,AGI(xinchaọphp,) exten =>201,n,hangup()
▪ AGI scripts thường được đặt trong thư mục: /var/lib/asterisk/agi-bin.
▪ File thư viện lớp phpagịphp được đặt trong thư mục: /usr/share/php.
▪ AGI Script có thể được lập trình bằng nhiều ngơn ngữ lập trình khác nhau như Perl, PHP, C, C#, Java ….Ở đây em chọn PHP làm ngơn ngữ để lập trình
3.2.2.4. LẬP TRÌNH AGI SCRIPT BẰNG PHP
Trong phần này, em sẽ đưa ra một ví dụ của lập trình AGI Script bằng PHP và phân tích để hiểu rõ hơn về AGỊ
Ví dụ: Từ softphone gọi vào tổng đài thông qua số 201, sau đó sẽ suất ra một lời chào
rồi kết thúc cuộc gọị Chương trình viết bằng ngơn ngữ php với tập tin là xinchaọphp
▪ Tạo 1 file xinchaọphp như sau: vào thư mục #cd /var/lib/asterisk/agi-bin Gõ lệnh #touch xinchaọphp sau đó mở file lên #vim xinchaọphp
1. #!/usr/bin/php 2. <?php
3. require 'phpagịphp'; 4. $agi = new AGI(); 5. $agi->answer();
6. $agi->stream_file("xinchao0"); 7. ?>
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 37 Dòng 1: Khai báo sử dụng ngôn ngữ php cho thực hiện giao tiếp agi
Dịng 2 và 7: Đóng và mở cho đoạn script php
Dòng 3: Sử dụng file phpagịphp cho thư viện lớp phpagi
Dòng 4: Hàm tạo AGỊ Kể từ dòng này trở đi, mỗi liên kết với Asterisk đều được thực hiện thơng qua biến $agi
Dịng 5: Đây là lệnh đầu tiên của phpagi, thư viện lớp được gọi ra
Dòng 6: Phát file xinchaọwav được đặt trong thư mục: /var/lib/asterisk/sounds/
3.3. XÂY DỰNG DỊCH VỤ TRA CỨU KẾT QUẢ XỔ SỐ VIETLOTT, THÔNG TIN TUYỂN DỤNG TIN TUYỂN DỤNG
Trong phần này sẽ tập trung xây dựng một hệ thống tổng đài trả lời tự động cho khách hàng với 2 dịch vụ chính là tra cứu kết quả xổ số và tra cứu thông tin tuyển dụng khi khách hàng gọi đến đầu số điện thoại 18001234 thì sẽ được nghe lời chào và hướng dẫn bấm phím.
3.3.1. GIỚI THIỆU TỔNG QUAN VỀ HỆ THỐNG
Máy A gọi vào đầu số tổng đài 18001234 sẽ nghe lời chào, sau đó là hướng dẫn sử dụng các dịch vụ của tổng đàị
- Bấm phím 1: Sử dụng dịch vụ tra cứu kết quả xổ số Vietlott
- Bấm phím 2: Sử dụng dịch vụ tra cứu thông tin tuyển dụng ngành viễn thơng - Bấm phím *: Nghe lại hướng dẫn
- Bấm phím #: Kết thúc cuộc gọi
Hình 3.1: Lưu đồ giải thuật menu chính của hệ thống
Phím 1 Phím 2 Customer call Bạn nhập sai cú pháp, xin vui lòng nhập lại Nhập Sai Lời chào và Hướng dẫn nhấn phím Kiểm tra cú pháp
Menu tra kết quả xổ số
Tra cứu thông tin tuyển dụng
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 38
3.3.2. DỊCH VỤ TRA CỨU KẾT QUẢ XỔ SỐ
Hình 3.2: Lưu đồ giải thuật dịch vụ xổ số vietlott
Lưu đồ sau đây trình bày q trình hệ thống tổng đài nhận thơng tin u cầu từ người sử dụng dịch vụ xổ số vietlott. Khách hàng nhấn phím 1 để sử dụng dịch vụ xổ số vietlott. Tiếp theo khách hàng sẽ được nghe lời chào về dịch vụ xổ số và được hướng dẫn cú pháp để tra cứu xổ số, nhập ngày cần tra kết quả, ngày khách hàng nhập phải có số 0 phía trước đối với các ngày bé hơn 10 và khác 0, ngày được người quản trị hệ thống cập nhật vào databasẹ
Sau khi khách hàng nhập ngày đúng với ngày mà vietlott mở thưởng thì kết quả sẽ được đọc cho khách hàng dị số (kết quả xổ số có 12 chữ số chia thành 6 cặp số).
Nếu khách hàng nhập sai ngày cần tra, hệ thống sẽ thông báo sai cú pháp và yêu cầu nhập lại ngàỵ
Khi kết quả được đọc hết sẽ có một yêu cầu, hỏi khách hàng có muốn nghe lại kết quả hay muốn tra thêm kết quả xổ số khác hoặc là quay về menu chính (chon loại dịch vụ).
Đọc kết quả xổ số Bạn nhập sai ngày hoặc dữ liệu bạn cần tra đã hết hạn, xin vui lòng nhập lại Đúng Sai
Hướng dẫn nghe lại hoặc tra kết quả khác
Kết thúc Hướng dẫn nhập ngày
quay thưởng của vietlott Dịch vụ xổ số vietlott phím 1 Kiểm tra cú pháp Kiểm tra cú pháp Đúng Sai
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 39 Nếu khách hàng nhập sai hệ thống sẽ thông báo nhập sai và kết thúc cuộc gọị
Phím số Nội dung
1 Nghe lại kết quả xổ số vừa tra 2 Tra kết quả xổ số khác
3 Chọn dịch vụ khác
Bảng 3.1: Ngữ cảnh hướng dẫn nghe lại dịch vụ xổ số 3.3.2.1. TẠO DATABASE CHO DỊCH VỤ 3.3.2.1. TẠO DATABASE CHO DỊCH VỤ
▪ Đăng nhập vào MySQL bằng lệnh: mysql -u root -p
▪ Tạo database tên kqxsvietlott: create database kqxsvietlott
▪ Chọn database vừa tạo: use kqxsvietlott
▪ Tạo bảng database tên kqxs:
create table kqxs(ngayxs varchar(2) NOT NULL,cap_mot varchar(2) NOT NULL,cap_hai varchar(2) NOT NULL,cap_ba varchar(2) NOT NULL,cap_bon varchar(2) NOT NULL,cap_nam varchar(2) NOT NULL,cap_sau varchar(2) NOT NULL,KEY(ngayxs));
▪ Kiểm tra các thuộc tính của bảng: describe kqxs;
Hình 3.3: Các thuộc tính của bảng kqxs
▪ Thêm các trường dữ liệu (field) vào bảng, các field này bao gồm ngày xổ số và kết quả xổ số tương ứng
INSERT INTO kqxs VALUES('03','02','15','20','32','33','44'); INSERT INTO kqxs VALUES('05','02','08','15','16','19','25'); INSERT INTO kqxs VALUES('07','03','77','09','18','28','39'); INSERT INTO kqxs VALUES('10','05','21','31','33','38','42'); INSERT INTO kqxs VALUES('12','02','13','15','17','18','41'); INSERT INTO kqxs VALUES('14','16','17','30','32','34','38'); INSERT INTO kqxs VALUES('17','02','05','12','21','22','40'); INSERT INTO kqxs VALUES('19','01','08','16','14','18','31');
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 40
INSERT INTO kqxs VALUES('21','10','11','13','14','16','38'); INSERT INTO kqxs VALUES('24','07','12','25','28','40','44'); INSERT INTO kqxs VALUES('26','01','20','28','32','42','44'); INSERT INTO kqxs VALUES('28','03','06','17','21','32','40');
▪ Trong đó ngày xổ số của vietlott là các ngày thứ 4, thứ 6, chủ nhật trong tuần, cho nên em chọn tháng có 30 ngày và ngày đầu tháng là thứ 2 để thực hiện tạo database làm demo cho đồ án.
▪ Show bảng vừa tạo ra: select * from kqxs;
Hình 3.4: Bảng database kqxs
Bảng trên miêu tả:
ngayxs (ngày xổ số) là các ngày trong một tháng, trong đó ngày 01 tương ứng với thứ 2 trong tháng đó, ngày 03 tương ứng thứ 4 và cũng là ngày vietlott mở thưởng vì trong một tuần vietlott quay thưởng vào thứ 4, thứ 6 và chủ nhật.
Cap_mot (cặp một) là cặp số thứ nhất trong 6 cặp số trúng giải jackpot. Tiếp theo là các cặp số kế tiếp cap_hai, cap_ba cho đến cap_saụ
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 41
3.3.3. DỊCH VỤ TRA CỨU THƠNG TIN TUYỂN DỤNG
Hình 3.5: Lưu đồ giải thuật dịch vụ tuyển dụng
bạn nhập khơng đúng vui lịng nhập lại
sai
Mời bạn chọn cơng ty muốn tra cứu Phím 1 : VNPT Phím 2 : VIETTEL Phím 3 : FPT chọn lĩnh vực tuyển dụng Phím 1: mạng Phím 2: vơ tuyến Phím 3: truyền dẫn Kiểm tra Dịch vụ tuyển dụng phím 2 Kiểm tra Kiểm tra Play file tuyển dụng
Tương ứng với các đối số nhập vào sai đúng sai đúng
Hướng dẫn nghe lại hoặc tra thông tin khác
đúng
bạn nhập không đúng vui lòng nhập lại
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 42 Lưu đồ sau đây trình bày q trình hệ thống tổng đài nhận thơng tin u cầu từ người sử dụng dịch vụ tra cứu thơng tin tuyển dụng. Khách hàng nhấn phím 2 để sử dụng dịch vụ tra cứu thông tin tuyển dụng.
Khách hàng sẽ được nghe lời chào về dịch vụ tra cứu thông tin tuyển dụng ngành viễn thông của khoa viễn thơng thuộc học viện cơng nghệ bưu chính viễn thơng TP.HCM và được hướng dẫn cú pháp để tra cứu tuyển dụng, như chọn công ty muốn tra cứu thông tin tuyển dụng. công ty tuyển dụng em demo gồm có 3 cơng ty lớn VNPT, VIETTEL và FPT. Nếu khách hàng nhập sai mã cần tra, hệ thống sẽ thông báo sai cú pháp và yêu cầu nhập lại mã.
Sau khi khách hàng chọn mã cơng ty, sẽ có một thơng báo yêu cầu chọn chuyên ngành viễn thơng muốn tra cứu, có 3 chun ngành lớn Mạng viễn thơng, Vơ tuyến và Truyền