MỤC LỤC
LỜI MỞ ĐẦU 1
CHƯƠNG 1. ĐẶT VẤN ĐỀ 2
1.1. Cuộc sống hiện đại 2
1.1.1. Internet toàn cầu hóa 2
1.1.2. Sống gấp 3
1.2. Giải pháp 3
1.3. Nội dung của khóa luận 3
CHƯƠNG 2. TỔNG QUAN VỀ TCAT 6
2.1. Nhắn tin tức thì (IM) 7
2.2. WEB 8
2.3. SMS 10
2.4. Phân tích thiết kế 13
2.4.1 Biểu đồ ngữ cảnh 13
2.4.2. Cơ sở dữ liệu 13
CHƯƠNG 3. GIAO DIỆN IM 15
3.1. Tổng quan giao thức Yahoo Messenger (YMSG) 15
3.1.1. Sự khác nhau giữa các phiên bản 16
3.1.2. Cấu trúc một gói tin của YMSG 17
3.1.3. Dịch vụ 19
3.1.4. Status codes (mã trạng thái) 20
3.1.5. Session 21
3.2. Mô tả chi tiết giao thức YMSG 21
3.2.1. Verify 22
3.2.2. Xác thực (Authentication ) 23
3.2.3. Gửi /nhận tin nhắn 27
3.2.4. Gửi chú ý bắt đầu/dừng việc đánh máy 28
3.2.5. Logoff 29
3.2.7. Thêm bạn 30
3.2.8. Xóa nick trong danh sách bạn 31
3.3. Phân tích thiết kế module Yahoo bot 32
3.3.1. Ngôn ngữ 32
3.3.2. Cấu trúc của module 33
3.3.3. Tiến trình thực hiện 34
3.4. Tổng quan giao thức Google Talk 36
3.4.1. Các bước kết nối 37
3.4.2. Cấu trúc module 37
CHƯƠNG 4. GIAO DIỆN WEB 40
4.1. Tổng quan về Web 40
4.2. Ngôn ngữ 41
4.3. Thiết kết CSDL 41
4.4. Thiết kế module 44
CHƯƠNG 5. GIAO DIỆN SMS 50
5.1. Tổng quan về SMS 50
5.1.1. Định nghĩa SMS 50
5.1.2. Ưu điểm của SMS 51
5.2. Gửi tin SMS từ máy tính đến điện thoại di động 52
5.2.1. SMS Gateway kết nối trực tiếp tới SMSC 55
5.2.2. SMS Gateway kết nối SMSC thông qua GSM modem 57
5.3. Ngôn ngữ 58
5.4. Module SMS 59
5.4.1. Mô hình cấu trúc module 59
5.4.2. Tiến trình thực hiện 60
CHƯƠNG 6. CÁC DỊCH VỤ CUNG CẤP 62
6.1. Dịch vụ Chấp nhận/ Từ chối 62
6.1.1. Thiết kế CSDL 62
6.1.2. Hoạt động 63
6.2. Dịch vụ Người dùng tự định nghĩa 64
6.2.1. Thiết kế CSDL 65
6.2.2. Hoạt động 65
6.3. Dịch vụ Phiên dịch 67
6.4 Dịch vụ Thời tiết 68
6.5. Dịch vụ Nhắc việc 69
6.5.1. Tổng quan 69
6.5.2. Thiết kế CSDL 70
6.5.3 Hoạt động 73
CHƯƠNG 7. PHỤ LỤC 74
7.1. Cấu hình NowSMS kết nối trực tiếp tới SMSC của Viettel 75
7.2. Tạo kết nối Giữa NowSMS với GSM Modem 78
TÀI LIỆU THAM KHẢO 79
LỜI MỞ ĐẦU
Internet đang ngày càng phát triển nhằm đáp ứng nhu cầu của con người. Nhờ sự tiến bộ của khoa học nói chung và công nghệ thông tin nói riêng, diện mạo của Internet đang ngày càng rõ rệt và "có hình hài". Internet là kết quả tất yếu của nhu cầu cần được đáp ứng của con người, đó là tập hợp các nhu cầu cực kỳ phong phú và đa dạng của mọi người khắp nơi trên thế giới. Điều đó tạo nên sự phức tạp, sức hấp dẫn và cuốn hút của Internet.
Ngày nay, Internet được sử dụng rộng rãi trên toàn thế giới. Những ứng dụng trên Internet đã có bước phát triển bùng nổ, với nhiều loại hình dịch vụ mới như thương mại điện tử, giải trí trực tuyến, đào tạo trực tuyến, Sự ra đời của các dịch vụ trên Internet đã giúp ích rất nhiều cho cuộc sống của mọi người thuận tiện, thoải mái, tốt đẹp hơn.
Vì những lý do trên chúng tôi đã nảy ra ý định xây dựng lên chương trình có thể nhắn tin tự động, trả lời tự động đến nick Yahoo, GoogleTalk hay số điện thoại của người sử dụng với những nội dung đã được đăng ký với chúng tôi như giá chứng khoán, giá ngoại tệ, thời tiết,
Chương trình của chúng tôi xây dựng được gọi là TCat.
TCat có tính ứng dụng thực tiễn cao. Chúng tôi đã đưa vào thực tiễn một số dịch vụ của TCat như dịch vụ Phiên dịch, Nhắc việc. Dịch vụ Phiên dịch là dịch vụ giúp người sử dụng dịch một đoạn văn bản, một từ hoặc thậm chí cả một tài liệu. Dịch vụ này của chúng tôi sử dụng lại dịch vụ miễn phí của Google là Google Translate. Dịch vụ Nhắc việc là dịch vụ dịch vụ cho phép người sử dụng có thể đăng ký nhận tin nhắn tự động (nhắc việc) tới chính nick Yahoo, GoogleTalk hoặc số điện thoại của mình vào một thời điểm nào đó, hoặc khi một trang Web có sự thay đổi,
CHƯƠNG 1. ĐẶT VẤN ĐỀ
1.1. Cuộc sống hiện đại
1.1.1. Internet toàn cầu hóa
Toàn cầu hóa (Globalization) là “một xu hướng làm các mối quan hệ trở nên ít bị ràng buộc bởi địa lý lãnh thổ”, là khái niệm dùng để miêu tả các thay đổi trong xã hội và trong nền kinh tế thế giới, tạo ra bởi mối liên kết và trao đổi ngày càng tăng giữa các quốc gia, các tổ chức hay các cá nhân ở góc độ văn hoá, kinh tế, v.v. trên quy mô toàn cầu. Về bản chất thì toàn cầu hóa là sự mở rộng thị trường ra ngoài biên giới quốc gia.
Internet đang ngày càng phát triển nhằm đáp ứng nhu cầu của con người. Nhờ sự tiến bộ của khoa học nói chung và công nghệ thông tin nói riêng, diện mạo của Internet đang ngày càng rõ rệt và "có hình hài". Internet là kết quả tất yếu của nhu cầu cần được đáp ứng của con người, đó là tập hợp các nhu cầu cực kỳ phong phú và đa dạng của mọi người khắp nơi trên thế giới. Điều đó tạo nên sự phức tạp, sức hấp dẫn và cuốn hút của Internet.
Internet được sử dụng ngày càng rộng rãi. Và giờ đây Internet đã trở thành mạng toàn cầu.
Và tại Việt Nam, việc sử dụng Internet ngày phổ biến. Điều này thể hiện rõ ở số lượng người dùng gia tăng nhanh chóng, số lượng dịch vụ Internet ngày càng nhiều và thời gian truy cập Internet trong mỗi ngày cũng dài thêm. Theo kết quả khảo sát gần đây của công ty nghiên cứu thị trường TNS Public & Social Research Việt Nam tiến hành ở bốn thành phố lớn của Việt Nam gồm Thành phố Hồ Chí Minh, Hà Nội, Đà Nẵng và Cần Thơ với 1,200 người tham gia trả lời ý kiến, thì hiện nay người sử dụng Internet ở Việt Nam đang ngày càng dành nhiều thời gian trên mạng hơn, với thời lượng trung bình mỗi ngày là 43 phút trong năm 2008, thời lượng này gần gấp đôi so với hồi năm 2006.[ ]
Theo đó, có đến 72% số người trong độ tuổi 18 - 30 sử dụng Internet thường xuyên để tán gẫu (chat); và 81% số người trong độ tuổi 41-50 thường xuyên đọc tin tức trên Internet.
90 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2842 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Xây dựng hệ thống dịch vụ giá trị gia tăng trên nền dịch vụ nhắn tin tức thì qua hệ thống tin nhắn tức thì, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ực hiện ở hệ thống bên ngoài (có thể làm một nhà cung cấp dịch vụ nào đó hoặc tự xây dựng các hàm cung cấp dịch vụ).
CHƯƠNG 4. GIAO DIỆN WEB
4.1. Tổng quan về Web
World Wide Web, gọi tắt là Web hoặc WWW là một không gian thông tin toàn cầu mà mọi người có thể truy nhập (đọc và viết) qua các máy tính được kết nối với mạng Internet. Thuật ngữ này thường được hiểu nhầm là từ đồng nghĩa với chính thuật ngữ Internet. Nhưng Web thực ra chỉ là một trong các dịch vụ chạy trên Internet, chẳng hạn như dịch vụ thư điện tử, truyền file FTP. Web được phát minh và đưa vào sử dụng vào khoảng năm 1990, 1991 bởi viện sĩ Viện Hàn lâm Anh Tim Berners-Lee và Robert Cailliau (Bỉ) tại CERN, Geneva, Switzerland[[] Theo wikipedia
].
Các tài liệu trên World Wide Web được lưu trữ trong một hệ thống siêu văn bản (hypertext), đặt tại các máy tính trong mạng Internet. Người dùng phải sử dụng một chương trình gọi là trình duyệt web (web browser) để hiển thị siêu văn bản. Người dùng nhập thông tin tại ô địa chỉ (address), rồi sau đó chương trình sẽ tự động gửi thông tin đến máy chủ (web server) và hiển thị trên màn hình máy tính của người xem. Hoạt động truy tìm theo các siêu liên kết thường được gọi là duyệt Web.
Web cung cấp giao diện xử lý đơn giản, việc thiết kế Web cũng không tốn nhiều chi phí và đặc biệt hiện nay, Web đã trở nên phổ biến trên thế giới và cả ở Việt Nam.
Mục đích của chúng tôi khi xây dựng module Web là cung cấp cho người sử dụng một giao diện đơn giản, giúp người sử dụng thao tác dễ dàng với TCat. Đồng thời, ứng dụng Web sẽ đến với người dùng nhanh hơn. Vì đa phần ở máy người sử dụng đều đã có cài đặt sẵn trình duyệt web, người sử dụng muốn thao tác với TCat, đơn giản chỉ việc gõ địa trang Web trên thanh địa chỉ.
Thao tác đơn giản, đến với người sử dụng nhanh, chi phí phát triển có thể chấp nhận được. Các ứng dụng trên web đa phần đều là mã nguồn mở, được sự hỗ trợ của cộng đồng mã nguồn mở. Vì thế phát triển ứng dụng Web là một trong những chiến lược quan trọng.
Hơn nữa, theo như phân tích ở chương hai, chúng tôi dùng WEB làm cầu nối giữa các úng dụng chạy trên Desktop (các dịch vụ của IM, SMS) với CSDL. Vì vậy phần WEB đóng vai trò rất quan trọng trong TCat.
4.2. Ngôn ngữ
Có khá nhiều ngôn ngữ Web phía Server phổ biến hiện này như ASP.NET, JSP, PHP… Chúng tôi quyết định chọn ngôn ngữ phía Server là PHP.
PHP là một ngôn ngữ lập trình kịch bản hay một loại mã lệnh chủ yếu được dùng để phát triển các ứng dụng viết cho máy chủ, mã nguồn mở, dùng cho mục đích tổng quát. PHP rất thích hợp với web và có thể dễ dàng nhúng vào trang HTML. Do được tối ưu hóa cho các ứng dụng web, tốc độ nhanh, nhỏ gọn, cú pháp giống C và Java, dễ học và thời gian xây dựng sản phẩm tương đối ngắn hơn so với các ngôn ngữ khác nên PHP đã nhanh chóng trở thành một ngôn ngữ lập trình web phổ biến nhất thế giới.
Hơn nữa, cộng đồng mã nguồn mở viết bằng PHP là rất rộng lớn. Mã lệnh viết bằng PHP đơn giản và dễ hiểu, phát triển WEB trên PHP chúng tôi mong nhận được sự hỗ trợ của cộng đồng mã nguồn mở.
Về cơ sở dữ liệu, chúng tôi quyết định chọn hệ quản trị cơ sở dữ liệu MySQL.
MySQL là hệ quản trị cơ sở dữ liệu mã 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. MySQL là cơ sở dữ liệu tốc độ cao, ổn định và dễ sử dụng, có tính khả chuyển, 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í hoàn toàn cho nên có thể tải về MySQL từ trang chủ và có nhiều phiên bản cho các hệ điều hành khác nhau: phiên bản Win32 cho các hệ điều hành dòng Windows, Linux, Mac OS X, Unix, FreeBSD, NetBSD, Novell NetWare, SGI Irix, Solaris, SunOS, ...
PHP-MySQL là sự kết hợp rất được ưa chuộng trên thế giới, tính bảo mật khá cao, chạy ổn định và rất nhanh.
4.3. Thiết kết CSDL
Cơ sở dữ liệu đều được tập trung ở phần WEB
Bảng User gồm các trường
Id: khóa chính, là định danh của người sử dụng
Username: Tên đăng nhập
Password: Mật khẩu đăng nhập
Email: địa chỉ email
GroupId: Định danh nhóm làm việc
Money: Số tiền hiện tại trong tài khoản
Bảng FriendList gồm
ID: định danh.
Name: tên người bạn.
YahooNick: nick Yahoo.
GtalkNick: Nick Gtalk.
PhoneNumber: Số điện thoại.
Accept: Đồng ý nằm trong danh sách bạn hay không? Nếu người này đồng ý thì trường Accept có giá trị là Y hoặc G hoặc F hoặc cả 3 tương ứng với các trường hợp người này đồng ý trên nick Yahoo, Gtalk hay ở điện thoại
Owner: Chủ sở hữu.
Bảng Bot gồm
Id là một chuỗi số xác định định danh của các con bot. Chỉ có các con bot có id truong này mới được phép hoạt động
ActiveTime: Thời gian kết nối gần đây nhất, hệ thống sẽ căn cứ vào thời gian kết nối này để kết luận con bot này hiện có đang online hay không.
Bảng Group
Id: Định danh
Group name: Tên nhóm
Bảng GroupACL
Id: định danh
GroupId: Định danh của nhóm
Service code: mã dịch vụ
Allow: Châp nhận cho truy nhập hay không
Bảng Service
ServiceCode: mã dịch vụ
Description: Mô tả về dịch vụ
Mối liên hệ của các bảng được thể hiện giống hình dưới:
Hình 4. 1 Mối liên hệ giữa các bảng trong CSDL
Mối quan hệ giữa các bảng
Mỗi User chỉ thuộc một Group. Một Group có thể có nhiều User.
Mỗi Friend chỉ thuộc một User. Một User có thể có nhiều Friend.
Mỗi GroupACL chứa một Service và một Group
Mỗi User sẽ có một trường là GroupId. Đó là định danh của nhóm có User đó.
Mối Friend sẽ có một trường là OwnerId. Đó là định danh của User. Cho biết người bạn này thuộc User nào.
Group ACL là sự kết hợp của quan hệ nhiều - nhiều giữa 2 bảng Group và Service. GroupACL đặc trưng cho quyền truy cập của một nhóm vào các dịch vụ. Một nhóm có thể truy cập vào nhiều dịch vụ và ngược lại, một dịch vụ có thể được nhiều nhóm cho phép truy cập.
4.4. Thiết kế module
Như đã nói ở phần đầu chương hai, Phần WEB là một trong những phần khá quan trọng, làm nên kết cấu của TCat do các phần IM, hoặc SMS đều có các dịch vụ liên kết với cơ sở dữ liệu thông qua WEB. Nói một cách khác thì phần WEB chính là cầu nối giữa các dịch vụ với CSDL chính của TCat. Bởi vậy phần WEB không những cung cấp một giao diện đồ họa cho các xử lý của người sử dụng mà còn có thêm các dịch vụ Web tương thích với các dịch vụ được viết bởi SMS hay IM.
Cấu trúc cơ bản của module như sau:
Điểm vào duy nhất là file index.php và index2.php. File index.php đọc biến action và sẽ load những dịch vụ có tên trùng với biến action nằm trong thư mục modules. Có một vài dịch vụ đặc biệt như đăng ký nick, đăng nhập được chuyển ra ngoài. File index2.php được sử dụng cho các dịch vụ liên kết. Các dịch vụ liên kết truy cập vào file index2.php để tránh các đoạn HTML không cần thiết.
Thư mục moudules chứa toàn bộ các file dịch vụ sẽ được thực thi. File index.php sẽ gọi các moudle tùy theo biến action đưa vào. Nếu truy cập trực tiếp các moudule thì sẽ bị báo lỗi.
Các thư viện được sử nằm trong thư mục lib và gồm có:
DebugHelper là một thư viện mã nguồn mở dùng để kiểm tra các lỗi của chương trình. Nếu có một lỗi nào đó (có thể là warning, notice..) thì DebugHelper sẽ hiển thị số dòng bị lỗi để tiện xử lý. Cơ chế hiện thị lỗi của DebugHelper giống kiểu của Java, vì vậy giúp quét lỗi dễ dàng hơn, thuận tiện hơn. Nếu không có DebugHelper thì mỗi lần có lỗi, php chỉ in ra dòng bị lỗi (mà không in ra quá trình sinh ra lỗi, điều này khiến việc debug trở nên khó khăn).
MyDB.php là thư viện do chúng tôi tự viết nên, cung cấp các phương thức truy nhập CSDL dễ dàng hơn. Chỉ cần tạo ra một đối tượng MyDB sau đó thực thi một số phương thức có sẵn. Điều này rất tiện dụng và có hiệu quả cao hơn so với việc viết các hàm kết nối php với mysql thông thường.
Ví dụ để kết nối:
$db = new MYDB($cfg['db.host'], $cfg['db.user'],
$cfg['db.passwd']);
$db->setdb($cfg['db.dbname']);
Để thực hiện một truy vấn dùng:
$db->query(“Select * from User”);
Để lấy kết quả trả về dùng các phương thức sau:
while ($row = $db->getNext()) {
//Các lệnh thực thi trên biến $row
}
Function.php là thư viện do chúng tôi tự thiết kế nên cung cấp các hàm giúp quá trình viết code được nhanh hơn. Các hàm được cung cấp thuộc ba nhóm chính:
Nhóm hàm cung cấp các chức năng xử lý các biến. ví dụ như các hàm getVar(), postVar() … giúp lấy biến. Để đảm bảo tính bảo mật thì không nên dùng trực tiếp luôn biến từ $_POST hay $_GET mà các biến này phải qua xử lý để lấy ra đúng dữ liệu cần.
Nhóm hàm cung cấp các chức năng về HTML hoặc javascript. Ví dụ như các hàm jsRedirect() dùng để chuyển trang bằng javascript.
Nhóm hàm cung cấp các chức năng thao tác trên CSDL: Có một số thao tác trên CSDL phải thực hiện nhiều lần, hoặc một số thao tác muốn tổng quát hóa. Ví dụ như các hàm check_right() dùng để kiểm tra quyền truy nhập của người dùng với dịch vụ hiện hành.
User.php là một class do chúng tôi thiết kế nên. Class này cung cấp các thao tác trên xử lý trên User. Ví dụ như lấy username, password hay thậm chí có thể lấy các danh sách bạn bè. Class được viết ngắn gọn, dễ sử dụng và tích hợp.
Vậy làm sao để một dịch vụ khác kết nối đến dịch vụ được cung cấp ở WEB này? Để làm được điều đó, chúng tôi cung cấp một số chuẩn viết code. Theo các chuẩn này thì việc phát triển hai dịch vụ ở hai bên khác nhau (bên WEB và bên IM,SMS) có thể thực hiện bởi hai lập trình viên. Chuẩn viết code như sau:
- Biến action có giá trị là tên dịch vụ hiện đang thực thi. Điều này như đã đề cập ở trên. Trong file dịch vụ, lập trình viên phải tự bắt lấy biến này để biết tên dịch vụ là gì.
- Biến py có giá trị là mã của bên thực hiện nhiệm vụ ở phía IM hoặc SMS. Như thiết kế CSDL ở chương trên thì chỉ có các con Bot có mã nằm trong bảng BOT mới được phép yêu cầu dịch vụ. Điều này nhằm hạn chế khả năng mất mát thông tin hoặc rò rỉ thông tin của khách hàng. Nếu không có số bảo mật này thì mọi người ai cũng có thể gửi yêu cầu đến WEB. Nếu như vậy, WEB sẽ trả lại các thông tin nhạy cảm, đồng thời đánh dấu là đã được gửi rồi. Kẻ tấn công sẽ lấy được các thông tin đó còn người sử dụng sẽ không được con Bot gửi tin nhắn (vì thông tin đã được gửi rồi, nhưng đã bị người khác bắt).
Ngoài một số chuẩn qui định sẵn thì các lập trình viên ở hai phía có thể thống nhất với nhau cách một số chuẩn nhận dữ liệu khác nữa.
Các dịch vụ phía IM, SMS kết nối đến WEB đều phải thông qua file index2.php (một trong hai đầu vào). Thông qua file index2.php chúng tôi đã lược bỏ đi tất cả các đoạn HTML rườm rà không cần thiết, kết quả trả lại có kiểu plain-text (text thuần túy). Khi đó các dịch vụ phía IM, SMS không cần lược bỏ các thẻ HTML không cần thiết nữa, chỉ việc sử dụng dữ liệu luôn.
Hình 4. 2 Sơ đồ cấu trúc module WEB
Index.php
Index2.php
Dịch vụ ..
Dịch vụ ..
Dịch vụ ..
Dịch vụ ..
Đăng ký
Thư viện
Xác thực
Thư viện
Thư viện
Sơ đồ Hình 4. 2 Sơ đồ cấu trúc module WEB miêu tả cấu trúc của module WEB gồm các bước như sau:
Với người sử dụng, đầu tiên sẽ vào trang index.php. Trang này sẽ nạp các thư viện cần thiết trong thư mục lib. Nếu người sử dụng đã có nick (tài khoản) rồi thì không cần đăng ký lại nữa mà qua quá trình xác thực sẽ đến phần sử dụng các dịch vụ luôn. Còn trường hợp người sử dụng chưa có nick, họ sẽ phải đăng ký một nick, sau đó mới được phép sử dụng dịch vụ. Phần xác thực khá quan trọng trong việc phát triển của TCat sau này. Nếu như có ý tưởng thương mại hóa TCat, phần xác thực phải được chỉnh sửa sao cho phù hợp. Ví dụ như trong tài khoản của người đó còn bao nhiêu tiền thì được sử dụng những dịch vụ nào …
Với các dịch vụ phía IM hoặc SMS, đầu tiên sẽ phải vào trang index2.php. Sau đó các dịch vụ đó phải đưa ra mã số của mình. Phần xác thực sẽ tự động ghi lại thời gian xác thực và kiểm tra tính đúng đắn của mã số đó. Việc lưu lại thời gian xác thực có ý nghĩa khá quan trọng. Khi lưu lại thời gian xác thực, WEB sẽ biết được trong khoảng thời gian t nào đó, có bao nhiêu dịch vụ IM, SMS đã được xác thực. Như vậy có thể kết luận một cách gần đúng là có bao nhiêu dịch vụ IM, SMS đang online. Điều này có tính quyết định đến việc phân chia dữ liệu nếu như có nhiều module IM, SMS khác nhau cùng chạy.
Sau khi xác thực thành công thì index2.php sẽ nạp dịch vụ web mà IM, SMS yêu cầu. Sau đó trả về dữ liệu đã được nén lại.
Phương pháp nén dữ liệu theo kiểu text mà chúng tôi sử dụng là JSON.
JSON là viết tắt của từ JavaScript Object Notation, đó là là một kiểu định dạng dữ liệu chuyển đổi nhẹ cho máy tính, có tính khả đọc vì là kiểu văn bản text-based, dùng để biểu diễn các kiểu dữ liệu.
Định dạng JSON được mô tả chi tiết trong RFC 4627 [[] Xem RFC 4627 tại
] bởi Douglas Crockford. Thực chất của JSON chính là việc chuyển đổi các định dạng dữ liệu (như một mảng, đối tượng …) về thành một chuỗi text và tất nhiên có thể khôi phục lại được.
JSON được xây dựng trên hai cấu trúc:
* Là tập hợp của các cặp tên và giá trị (name-value). Trong những ngôn ngữ khác nhau, đây được coi như là một đối tượng (object), bản ghi (record), cấu trúc (struct), từ điển (dictionary), bảng băm (hash table), danh sách khoá (keyed list), hay mảng liên hợp.
* Là một tập hợp các giá trị đã được sắp xếp. Trong hầu hết các ngôn ngữ, JSON được coi như là một mảng, véc tơ, tập hợp hay là một dãy (sequence).
Đây là một cấu trúc dữ liệu phổ dụng. Hầu như tất cả các ngôn ngữ lập trình hiện đại đều hổ trợ trong một hình thức nào đó, tạo nên ý nghĩa của một định dạng hoán vị dữ liệu với các ngôn ngữ lập trình cũng đã được cơ sở hoá trên cấu trúc này. JSON ban đầu được viết ra để hỗ trợ Ajax trong JavaScript, tuy nhiên tính tiện dụng của JSON ngày càng được đón nhận. Cụ thể là vào năm 2005 Yahoo đã cung cấp các dịch vụ dưới chuẩn JSON[[] Theo
], năm 2006 Google cũng tiếp bước Yahoo cung cấp các dịch vụ dưới chuẩn JSON (ngoài các dịch vụ theo chuẩn Feed XML)[[] Theo
].
JSON cung cấp các API cho hầu hết các ngôn ngữ và đã nằm trong thư viện chuẩn của Python từ phiên bản Python 2.6 (phiên bản Python 2.5 chưa hỗ trợ JSON nên chúng tôi phải dùng một thư viện ngoài là PyJSON), đồng thời cũng được PHP hỗ trợ từ phiên bản PHP5.x. Thông tin chính thức của JSON được cập nhập trên trang chủ
Lý do chúng tôi sử dụng JSON thay thế cho các chuẩn XML là bởi vì JSON rất đơn giản. Khi muốn gửi một đối tượng nào đó, chỉ cần dùng hàm json_encode(). Hàm này trả về một chuỗi text là dữ liệu cần gửi đi. Khi muốn khôi phục lại đối tượng ban đầu, chỉ cần sử dụng hàm json_decode(). Hàm sẽ trả lại đối tượng như ban đầu. Với hai ngôn ngữ thông dịch cấp cao là PHP và Python thì sự liên kết này rất tuyệt vời. Nếu như sử dụng XML thì sẽ khó khăn khi phải parse đoạn XML để lấy dữ liệu, hơn nữa dữ liệu gửi bằng JSON nhẹ hơn dữ liệu XML.
Để bảo đảm tính an toàn, chúng tôi thiết kế sao cho các module IM, SMS kết nối đến WEB đều thông qua giao thức HTTPS.
CHƯƠNG 5. GIAO DIỆN SMS
5.1. Tổng quan về SMS
5.1.1. Định nghĩa SMS
Dịch vụ nhắn tin ngắn (SMS) là một giao thức viễn thông cho phép gửi các thông điệp dạng text ngắn (không quá 160 chữ cái), có trên hầu hết các điện thoại di động với khả năng truyền thông không dây[[]
].
Mỗi tin nhắn SMS chứa tối đa 140 bytes dữ liệu, vì vậy mỗi tin nhắn chứa:
• 160 kí tự 7-bit GSM được sử dụng (viết tin nhắn tiếng Anh không dấu – Bảng mã GSM Default Alphabet).
• 70 kí tự 16-bit Unicode UCS-2 được sử dụng (viết tin nhắn tiếng Việt có dấu – Bảng mã Unicode UCS-2).
Tin nhắn văn bản SMS hỗ trợ được hầu hết ngôn ngữ trên thế giới, hiển thị tốt với mọi ngôn ngữ được hỗ trợ bởi Unicode, bao gồm tiếng Ả rập, tiếng Trung Hoa, tiếng Nhật và tiếng Triều tiên,…
Bên cạnh đó, tin nhắn SMS còn chứa dữ liệu nhị phân, do đó có khả năng gửi nhạc chuông, hình ảnh, danh bạ, hay cấu hình WAP tới một điện thoại di động.
Một lợi thế khác của SMS là một ứng dụng có sẵn của tất cả các điện thoại GSM nên người sử dụng có thể sử dụng trên bất kì loại điện thoại GSM nào. Không giống như SMS, các công nghệ khác như WAP hay Java thì không được hỗ trợ trên các loại điện thoại di động đời cũ.
Dịch vụ GSM được sử dụng bởi hơn hai tỷ người trên 212 quốc gia và vùng lãnh thổ. Các mạng thông tin di động GSM cho phép có thể roaming với nhau do đó những máy điện thoại di động GSM của các mạng GSM khác nhau ở có thể sử dụng được nhiều nơi trên thế giới [[]
].
Tin nhắn SMS là một công nghệ rất thông dụng. Người Mỹ gửi SMS còn nhiều hơn gọi điện (trung bình mỗi người gửi 357 tin nhắn/tháng so với 204 cuộc gọi trong quý II/2008). Cuối năm 2008 đã thấy tổng số người sử dụng tin nhắn lên tới hơn ba tỷ. Hôm nay 76% của tất cả các thuê bao điện thoại di động trên toàn thế giới sử dụng tin nhắn SMS. [[]
]
5.1.2. Ưu điểm của SMS
Tin nhắn SMS có thể đọc và gửi bất cứ lúc nào :
Ngày nay hầu hết mỗi người đều có một điện thoại di động và sử dụng thường xuyên, vì vậy có thể gửi và nhận tin nhắn mọi lúc mọi nơi, bất kể là ở nhà, văn phòng hay trên xe buýt…
SMS được hỗ trợ trên 100% điện thoại GSM và có thể trao đổi với những mạng không dây khác :
Mọi điện thoại di động GSM đều hỗ trợ SMS. Mọi người không chỉ có thể trao đổi SMS với những người sử dụng di động cùng mạng mà còn có thể trao đổi SMS với những người sử dụng di động của các nhà cung cấp dịch vụ khác trên toàn thế giới.
Tin nhắn SMS có thể được gửi đến một máy điện thoại di động đang tắt :
Không giống như một cuộc điện thoại, mọi người có thể gửi một tin nhắn SMS đến cho người khác ngay cả khi người nhận không mở điện thoại hay đang ở trong vùng không phủ sóng. Hệ thống SMS của nhà cung cấp dịch vụ sẽ lưu giữ tin nhắn SMS lại và sau đó gửi cho người nhận khi điện thoại di động của người nhận được mở hoặc có sóng trở lại.
Tin nhắn SMS ít gây ồn ào hơn trong khi đang sử dụng điện thoại:
Không giống như một cuộc điện thoại, mọi người không cần đọc hay trả lời một tin nhắn SMS ngay lập tức. Hơn nữa, viết và đọc tin nhắn SMS không gây bất kỳ tiếng ồn nào tốt hơn là việc phải chạy ra khỏi một rạp hát hay thư viện để trả lời một gọi điện thoại.
Tin nhắn SMS là một công nghệ thích hợp cho việc xây dựng những ứng dụng không dây :
Tất cả điện thoại di động GSM đều hỗ trợ việc gửi tin SMS nên việc xây dựng những ứng dụng không dây dựa công nghệ SMS sẽ khiến cho số lượng người sử dụng tăng lên ngày càng cao.
Thứ hai, tin nhắn SMS có khả năng chứa dữ liệu nhị phân bên cạnh dữ liệu văn bản nên người dùng có thể chuyển nhạc chuông, hình ảnh, danh bạ điện thoại… đến máy khác.
Thứ ba, tin nhắn SMS cho phép thanh toán thương mại một cách tiện lợi. Đây chính là các dịch vụ gia tăng dựa trên tin nhắn SMS. Người sử dụng sẽ trả phí cho các tin nhắn với nội dung là những hình ảnh, nhạc chuông mà nhà cung cấp thu phí thông qua các mã số được gửi trong tin nhắn. Các mã số này được qui định bởi nhà cung cấp và quảng cáo đến với người sử dụng dịch vụ.
5.2. Gửi tin SMS từ máy tính đến điện thoại di động
Để có thể gửi tin được chúng tôi cần:
SMS Gateway đóng vai trò là cổng kết nối giữa hệ thống dịch vụ với mạng di động, thực hiện đóng gói nội dung và chuyển giao thức mạng, xử lý các kết nối với SMSC sử dụng một số giao thức của SMSC như SMPP, CIMD.
SMS Gateway có khả năng xử lý các kết nối đến điện thoại di động và các thiết bị GSM/GPRS. Để gửi và nhận tin nhắn SMS hoặc các tin nhắn văn bản trên điện thoại di động hoặc các thiết bị GSM / GPR chỉ cần biết làm thế nào để giao tiếp với SMS Gateway mà không cần phải biết bất cứ điều gì về các lệnh AT.
SMSC (Sort Message Service Center) được gọi là trung tâm tin nhắn, chịu trách nhiệm xử lý các thao tác của mạng không dây. Khi tin nhắn được gửi từ điện thoại di động sẽ đến SMSC đầu tiên. Nhiệm vụ chính của trung tâm tin nhắn là ấn định và kiểm soát đường đi cho tin nhắn SMS. Nếu người nhận không sẵn sàng (đang tắt máy chẳng hạn) thì tin nhắn SMS sẽ được giữ lại tại trung tâm và sẽ gửi đi khi người nhận đã sẵn sàng (bật máy lên lại).
Để có thể sử dụng được dịch vụ SMS cần phải biết số của trung tâm tin nhắn của mạng đang sử dụng. Mặc định khi lắp SIM của nhà cung cấp dịch vụ điện thoại thì số này đã được nhập vào. Nhưng trong trường hợp dùng nhiều SIM của các nhà cung cấp khác nhau có thể xảy ra trường hợp không sử dụng được dịch vụ tin nhắn SMS thì phải nhập vào số của trung tâm tin nhắn. Số của trung tâm tin nhắn thực chất là một số điện thoại di động được ghi theo chuẩn quốc tế (vd +849080....).
GSM Modem là một thiết bị có khả năng gửi tin nhắn với tốc độ cao trong mạng GSM, kết nối qua cổng nối tiếp của máy tính (hoặc là cổng USB với một trình điều khiển modem). GSM Modem là một modem đặc biệt có thể gắn SIM của các nhà cung cấp dịch vụ, hoạt động giống như một thuê bao di động. Từ góc nhìn của các nhà cung cấp dịch vụ thì GSM Modem là một điện thoại di động.
Tuy nhiên, GSM Modem cho phép các ứng dụng như NowSMS gửi và nhận tin nhắn thông qua giao diện modem.
Module SMS là một module của chương trình chúng tôi, để gửi tin nhắn cho người sử dụng. Để có thể nhắn tin được thì người dùng phải đăng ký tài khoản và nhập những thông tin cần thiết trên giao diện web của chúng tôi.
SMS Gateway và Module SMS giao tiếp với nhau thông qua giao thức HTTP trên môi trường Internet.
SMS Gateway và SMSC kết nối với nhau sử dụng giao thức SMPP dựa trên nền TCP/IP hoặc SMS Gateway kết nối tới GSM Modem.
Hiện nay, có rất nhiều phần mềm làm SMS Gateway. Ví dụ như Kannel, Azsender, NowSMS,…
Kannel là phần mềm được viết bằng ngôn ngữ lập trình C, có thể xử lý những kết nối tới SMSC, điện thoại di động và GSM/GPRS modem. Kannel có một interface HTTP/HTTPS cho việc gửi và nhận tin nhắn SMS. Kannel là một phần mềm miễn phí nhưng chỉ có thể cài đặt trên hệ điều hành Linux. Cấu hình Kannel phức tạp.
Azsender có hai bản: bản miễn phí và bản thương mại. Nếu sử dụng bản miễn phí thì tính năng của Azsender sẽ chỉ còn lại rất ít, không cung cấp một giao diện Web cho người sử dụng. Với bản thương mại của Azsender thì chi phí quá cao tùy theo kịch bản áp dụng cho mỗi đơn vị/cá nhân, giá từ 10.000.000 VNĐ đến 65.000.000 VNĐ. Hơn thế nữa Azsender đòi hỏi phải có phần cứng chuyên dụng.
NowSMS là một phần mềm cho phép gửi tin nhắn SMS, MMS; triển khai và phát triển nhanh chóng cho việc gửi tin SMS, MMS và giải pháp WAP Push. NowSMS có thể dễ dàng cài đặt thành SMS Gateway, MMS Gateway, WAP Push Proxy Gateway và trung tâm tin nhắn đa phương tiện MMSC (Multimedia Messaging Center) cho hệ điều hành Window 2000, XP, Vista hoặc Window Server 2003, 2008. NowSMS còn cung cấp một giao diện Web dễ dàng kết nối từ máy tính ở xa, yêu cầu một địa chỉ IP tĩnh cho Server được cài đặt NowSMS.
Do những điều kiện trên chúng tôi lựa chọn phần mềm NowSMS để cài đặt làm SMS Gateway.
Có hai mô hình để gửi tin SMS được chúng tôi sử dụng trong TCat đó là:
SMS Gateway kết nối trực tiếp với SMSC với các thông số đã được đăng ký với SMSC của Viettel.
SMS Gateway kết nối với SMSC thông qua GSM Modem.
5.2.1. SMS Gateway kết nối trực tiếp tới SMSC
SMS Gateway
(NowSMS)
HTTP
Application
Transport
Network
Datalink
Physical
Application
Transport
Network
Datalink
Physical
Module SMS
Network
Datalink
Physical
Router
INTERNET
Network
Datalink
Physical
Router
INTERNET
SMSC Viettel
SMPP
Hình 5. 1 SMS Gateway kết nối trực tiếp với SMSC
Hình 5.2 là hình thể hiện Module SMS kết nối với SMS Gateway trên giao thức HTTP truyền các thông số như số điện thoại người nhận, nội dung tin nhắc,… Khi nhận được các thông điệp trên SMS Gateway sẽ gửi các thông số đó đến SMSC (ở đây là SMSC của Viettel) trên giao thức SMPP. Sau đó SMSC sẽ gửi tin nhắn đó đến người nhận trên mạng di động.
Để cấu hình được SMS Gateway như hình 5.2 hãy xem ở phần phụ lục 7.1.1.
5.2.2. SMS Gateway kết nối SMSC thông qua GSM modem
Hình 5. 2 Mô hình gửi tin SMS với SMS Gateway kết nối với SMSC thông qua GSM Modem
SMSC
SMS Gateway
(NowSMS)
HTTP
Application
Transport
Network
Datalink
Physical
Application
Transport
Network
Datalink
Physical
Module SMS
Network
Datalink
Physical
Router
INTERNET
Cáp kết nối
Trong Hình 5. 2 Mô hình gửi tin SMS với SMS Gateway kết nối với SMSC thông qua GSM Modem: SMS Gateway kết nối với GSM Modem (là điện thoại di động có chức năng GSM Modem, có gắn sim của một nhà cung cấp dịch vụ di động) qua cáp kết nối. Phần cài đặt và cấu hình kết nối trên xin xem phụ lục 7.1.2. GSM Modem kết nối với SMSC của nhà cung cấp dịch vụ như là một điện thoại bình thường thông qua sóng di động.
Module SMS của chúng tôi kết nối với SMS Gateway dựa trên giao thức HTTP để gửi các yêu cầu nhắn tin tới các số điện thoại nào đó, nội dung nhắn tin và nhận các tin nhắn phản hồi lại.
5.3. Ngôn ngữ
Ngôn ngữ sử dụng để viết module SMS cũng giống như ngôn ngữ viết hai module Yahoobot và Gtalk bot, chúng tôi quyết định chọn là Python, là một ngôn ngữ dạng thông dịch (interpreter language), không phải tốn thời gian để biên dịch, liên kết..., chỉ cần viết và chạy.
Ngôn ngữ Python được phát triển theo GNU, hoàn toàn miễn phí và là mã nguồn mở. Có thể dùng Phython để phát triển các ứng dụng mà không cần phải trả bất kỳ một chi phí nào.
Python là một ngôn ngữ lập trình hướng đối tượng, chạy được trên nhiều hệ điều hành phổ biến hiện nay như Windows, Linux, Unix, Mac, đơn giản như các shellscript nhưng thực sự là ngôn ngữ để phát triển ngôn ngữ bậc rất cao (very-high-level-language).
Python cho phép chia nhỏ chương trình thành các module (tương tự java) mà có thể chạy độc lập không cần chương trình gốc.
Cú pháp của Python rõ ràng và ngắn gọn hơn nhiều so với C/C++, được đánh giá là ngôn ngữ có số lần gõ phím ít nhất khi viết chương trình tương tự với các ngôn ngữ khác như C/C++, Java ...
5.4. Module SMS
5.4.1. Mô hình cấu trúc module
Main program
Sms
Auto_run
Config.txtàcmd(s)
Sms
IM-CMD
Auto_run(Sms)
cmd.autorun(Sms)
SMS Gateway
Send(sodt, text)
Service
INTERNET
Import Sms
HTTP
MODULE SMS
Service
Service
Hình 5. 3 Kết nối của Module SMS với SMS Gateway
Main Program
Là chương trình chính chạy đầu tiên.
Import sms từ class SMS
SMS
Là class chuyển gửi các yêu cầu nhắn tin tới SMS Gateway trên giao thức HTTP, đóng vai trò như là cổng kết nối của Module SMS.
Auto_run
Là một luồng tự động chạy nhận biến sms từ Main program.
Đọc từng dòng của file config.txt lấy ra tên dịch vụ có chế độ tự động chạy.
Gọi hàm cmd.autorun(sms).
IM-CMD
Là một giao diện (interface) cung cấp hàm chính auto_run. Các dịch vụ phải thực thi giao diện này.
Gửi thông tin về người nhận tin nhắn: số điện thoại, nội dung tin nhắn tới cho class SMS thông qua hàm send(sodt, text).
Nhacviec
Là một dịch vụ của module sms, truy cập vào Internet lấy dữ liệu, thông tin về người nhận tin nhắn.
5.4.2. Tiến trình thực hiện
Chương trình chính khi khởi động sẽ tự động Import sms từ đối tượng SMS và truyền biến này cho Auto_run.
Tiến trình Autorun sẽ được kích hoạt trong chương trình chính. Khi khởi động, tiến trình Autorun sẽ đọc file config.txt. Trong file config.txt này sẽ liệt kê các dịch vụ muốn thực hiện chế độ chạy tự động.
Tiến trình Autorun sẽ lần lượt gọi dịch vụ này thông qua hàm autorun(sms). (là một hàm trong giao diện IMCMD). Với sms là một thể hiện (instance) của SMS. Hàm auto_run của dịch vụ sẽ tự xử lý dữ liệu (bằng nhiều cách) sau đó gửi tin nhắn thông qua biến sms.
Đa phần các dịch vụ cung cấp chế độ chạy tự động (autorun) đều không tự động xử lý dữ liệu. Bởi vì nếu tự xử lý dữ liệu thì sẽ rất tốn tài nguyên. Vì vậy, việc xử lý và lưu trữ dữ liệu đều được thực hiện ở hệ thống bên ngoài (có thể làm một nhà cung cấp dịch vụ nào đó hoặc tự xây dựng các hàm cung cấp dịch vụ).
CHƯƠNG 6. CÁC DỊCH VỤ CUNG CẤP
6.1. Dịch vụ Chấp nhận/ Từ chối
Khi một người nào đó muốn thêm một nick của người khác vào danh sách bạn (FriendList) của họ (ví dụ người A muốn thêm người B vào danh sách bạn). Một tin nhắn từ TCat sẽ gửi đến nick của người B. Nội dung tin nhắn yêu cầu người B xác thực lại thông tin trên. Nếu người B chấp nhận nhận tin nhắn do người A gửi thì người B gửi lại cho TCat tin nhắn chấp nhận, nếu không muốn thì gửi tin nhắn từ chối.
6.1.1. Thiết kế CSDL
Trong phần thiết kế CSDL của chương bốn có một bảng là Friend. Trong bảng đó có trường ba trường Accept_Y, Accept_G, Accept_M. Các trường Accept_Y, Accept_G, Accept_M với ý nghĩa người bạn này có đồng ý nằm trong danh sách bạn hay không? Nếu người này đồng ý thì trường Accept_Y, Accept_G, Accept_M có giá trị là 1. Ba trường này tương đương với việc đồng ý trên Yahoo, GoogleTalk, Mobile. Nếu không đồng ý thì ba trường này sẽ có giá trị là 0. Mặc định giá trị đầu tiên là -1. Điều này có nghĩa là lần đầu tiên, nếu muốn nhận tin nhắn, người này phải xác nhận (vì ba trường đều khác 1). Giá trị -1 mang ý nghĩa chưa gửi tin nhắn xác nhận cho các nick đó.
Cơ chế này nhằm mục đích tránh tình trạng spam tin nhắn. Giả sử một kẻ xấu muốn lợi dụng TCat để spam tin nhắn cho một cá nhân nào đó. Nếu không có cơ chế yêu cầu chấp nhận hoặc từ chối này thì mục đích của kẻ xấu sẽ thành hiện thực.
Thêm một điều nữa trong bảng Friend, đó là việc một người chỉ được thêm một người khác vào danh sách bạn một lần. Điều này cũng giúp tránh tình trạng spam tin nhắn.
Hình dưới mô tả mối quan hệ giữa hai bảng Friend và User
Hình 6. 1: Mối quan hệ Friend - User
6.1.2. Hoạt động
Dịch vụ này muốn hoạt động tốt thì cần có sự phối hợp giữa các module IM, SMS với WEB. Cơ chế của việc này như sau.
Các module IM, SMS chạy phía Client tạm gọi là các con bot. Các con bot này cứ trong một khoảng thời gian t sẽ gửi yêu cầu lấy danh sách các nick cần gửi tin nhắn. Dịch vụ bên phía Web sẽ kiểm tra CSDL, nếu có bản ghi thỏa mãn (trường accept_y, accept_g, accept_m tương ứng với ba dịch vụ là Yahoo, GoogleTalk hoặc di động bằng -1) thì lấy nick tương ứng ra, đưa vào một danh sách. Sau đó gửi trả lại con bot danh sách đó. Con bot căn cứ vào danh sách nhận được sẽ gửi tin nhắn đến các nick trong danh sách. Nội dung tin nhắn là việc hỏi người sử dụng có xác nhận hay không. Theo mô tả trên thì dịch vụ chấp nhận/ từ chối này phải có một hàm auto_run dùng để kiểm tra các nick chưa được hỏi vì dịch vụ này thuộc dạng chủ động. Người được hỏi không tương tác trực tiếp với con bot.
Để xác nhận đồng ý nhận tin nhắn, người sử dụng nhắn tin lại với cú pháp sau:
/accept [nick trên web của người gửi]
Ví dụ, một người có nick là user1 trên trang web của TCat muốn thêm một người bạn có nick yahoo là friend_u1_yahoo. Sau khi thực hiện thao tác thêm bạn trên trang web, một lát sau thì người bạn có nick yahoo là friend_u1_yahoo sẽ nhận được một lời nhắn từ TCat yêu cầu xác nhận. Khi đó người có nick friend_u1_yahoo muốn đồng ý, chỉ cần nhắn lại tin như sau:
/accept user1
Cơ chế của việc này như sau, khi nhận được tin nhắn /accept user1. Con bot sẽ phân tích cú pháp của tin nhắn đó. Dịch vụ được gọi lên là dịch vụ accept và tham số đưa vào là user1. Con bot sẽ gọi dịch vụ accept trong thư viện dịch vụ tương ứng. Dịch vụ accept làm nhiệm vụ gửi một thông điệp theo giao thức HTTPS, thông điệp này thông báo cho WEB biết dịch vụ cần gọi, mã số của con bot và nick của người dùng ra lệnh thêm bạn. Việc còn lại là ở phía WEB. WEB sẽ thay đổi giá trị trường AcceptX và trường SendX cho phù hợp sau đó gửi trả lại một thông báo là quá trình thay đổi thành công hay thất bại.
Quá trình từ chối cũng như vậy. Khi muốn từ chối người có nick friend_u1_yahoo sẽ gửi một tin nhắn với nội dung sau:
/reject user1
Cơ chế của việc này cũng tương tự như việc accept. khi nhận được tin nhắn /reject user1. Con bot sẽ phân tích cú pháp của tin nhắn đó. Dịch vụ được gọi lên là dịch vụ reject và tham số đưa vào là user1. Con bot sẽ gọi dịch vụ reject trong thư viện dịch vụ tương ứng. Dịch vụ reject làm nhiệm vụ gửi một thông điệp theo giao thức HTTPS, thông điệp này thông báo cho WEB biết dịch vụ cần gọi, mã số của con bot và nick của người dùng ra lệnh thêm bạn. Việc còn lại là ở phía WEB. WEB sẽ thay đổi giá trị trường AcceptX và trường SendX cho phù hợp sau đó gửi trả lại một thông báo là quá trình thay đổi thành công hay thất bại.
6.2. Dịch vụ Người dùng tự định nghĩa
Sẽ rất tuyệt khi người sử dụng có thể tự tạo dịch vụ của riêng mình chỉ với vài thao tác nhỏ. Dịch vụ người dùng tự định nghĩa cung cấp cơ chế giúp người sử dụng tạo ra cho chính họ một dịch vụ đơn giản. Dịch vụ này sẽ có một giao diện phía web giúp người sử dụng thuận tiện trong việc thêm dịch vụ. Mã của dịch vụ là udef. Dịch vụ này thuộc kiểu dịch vụ bị động, có nghĩa là chỉ trả lời khi có yêu cầu từ người khác. Thực chất của dịch vụ này là việc lấy thông tin từ trang web do người dùng cung cấp, vì thế khi sử dụng dịch vụ này, yêu cầu với người sử dụng là cần có một ít kiến thức lập trình web. Có thể bằng ngôn ngữ nào cũng được. Và họ phải upload trang web đó lên một web site nào đó để cho TCat có thể kết nối đến.
6.2.1. Thiết kế CSDL
Bảng udef gồm các trường sau
- keywork: từ khóa cho dịch vụ của bạn. Từ khóa là duy nhất và không được trùng, người sử dụng có thể tạo nhiều dịch vụ, nhưng các dịch vụ phải khác nhau về từ khóa và phải khác từ khóa của người khác.
- Link: Liên kết cần kết nối tới. Khi tạo một dịch vụ theo kiểu người dùng tự định nghĩa như thế này. Người sử dụng cần có một liên kết đến trang chứa thông tin của họ. Hoạt động của dịch vụ này thực chất là việc lấy nội dung từ trang chứa thông tin đó và trả lại cho người yêu cầu dịch vụ.
- User ID: định danh của người chủ dịch vụ này.
Hình dưới mô tả mối quan hệ giữa hai bảng User và Udef
Hình 6. 2: Mối quan hệ User và Udef
6.2.2. Hoạt động
Khi đăng ký một nick ở WEB, người sử dụng vào phần dịch vụ người dùng để xem các từ khóa và dịch vụ của mình. Không hạn chế số lượng dịch vụ do một người sử dụng tạo nên. Vì thế một người sử dụng có thể có rất nhiều dịch vụ và các dịch vụ này có thể trùng nhau.
Khi tạo dịch vụ, người sử dụng cần tìm một từ khóa, từ khóa này phải là duy nhất và không trùng với ai khác. Tiếp theo, người sử dụng phải cung cấp cho TCat biết liên kết đến nơi cung cấp thông tin người sử dụng đã đăng ký. Chẳng hạn người sử dụng muốn tạo một dịch vụ có từ khóa là dichvu và liên kết cung cấp thông tin là Khi đó người sử dụng cần điền vào ô trống Liên kết cung cấp thông tin là Để dịch vụ hoạt động hiệu quả thì hệ thống cho phép hai bên tương tác với nhau qua các tham số. Các tham số này đề nằm trên giao thức http có kiểu GET cụ thể như sau
Sender: cho biết nick người yêu cầu dịch vụ.
Text: cho biết chuỗi người yêu cầu dịch vụ nhập vào.
Như vậy việc phân tích các tham số truyền vào người sử dụng phải tự thực hiện ở file service.php của họ. Ví dụ cụ thể như sau, khi người yêu cầu dịch vụ yêu cầu dịch vụ dichvu với tham số là hello world
/udef dichvu hello word
TCat sẽ gửi yêu cầu kết nối đến liên kết lấy thông tin
Dịch vụ hoạt động như thế nào? Khi người yêu cầu dịch vụ gửi yêu cầu /udef dichvu hello world. Các module IM, SMS chạy phía client (tạm gọi là các con bot) sẽ nhận được tin nhắn trên. Sau khi phân tích cú pháp của tin nhắn, con bot biết được dịch vụ yêu cầu là udef. Con bot sẽ gửi yêu cầu đến phía web thông qua giao thức HTTPS kèm theo một số tham biến như tên dịch vụ, mã số của con bot, nick gửi yêu cầu, từ khóa và text. Lúc này, WEB sẽ đọc từ CSDL ra liên kết lấy thông tin, tiếp theo web kết nối đến liên kết đó để lấy thông tin. Tất cả các thông tin lấy được WEB trả lại cho con bot. Con bot trả lời người yêu cầu dịch vụ bằng nội dung của thông tin đó.
Ở đây xuất hiện một điểm cần lưu ý. Việc Web kết nối đến liên kết thông tin hay WEB chỉ trả lại liên kết thông tin cho con bot là tốt nhất? Điều này không thể trả lời một cách ngắn gọn được mà phải tùy theo từng trường hợp cụ thể. Tuy nhiên theo tiêu chí của hệ thống là viết các dịch vụ càng đơn giản càng tốt, vì thế chúng tôi quyết định cho WEB đọc thông tin từ liên kết thông tin. Và cũng do thời gian có hạn nên chúng tôi chưa thống kê được hai phương pháp kết nối trên thì phương pháp nào tối ưu hơn. Tuy nhiên xét về tính bảo mật thì khi xử lý thông tin trên WEB trước, sau đó thông tin được mã hóa và truyền theo giao thức HTTPS xuống Client, việc này an toàn hơn so với việc chúng ta gửi trang lấy tin cho con bot. Nếu gửi trang lấy tin cho con bot thì sẽ không an toàn trong vấn đề bảo mật, vì khi thông tin đến được con bot. Con bot sẽ mở một kết nối đến trang web nhận được. Hacker có thể bắt gói tin và biết được địa chỉ trang web đó, ngoài ra hacker còn có thể làm sai lệch DNS, khiến cho con bot kết nối đến một trang web khác trong khi vẫn cứ tưởng mình kết nối đúng trang web. Vì thế, chúng tôi tạm thời sử dụng phương pháp cho WEB kết nối đến liên kết thông tin do người sử dụng cung cấp.
6.3. Dịch vụ Phiên dịch
Dịch vụ phiên dịch hay còn gọi là translate, đây là dịch vụ giúp người sử dụng dịch một đoạn văn bản, một từ hoặc thậm chí cả một tài liệu. Dịch vụ này của chúng tôi sử dụng lại dịch vụ miễn phí của Google là Google Translate.
Khi người sử dụng muốn dịch một đoạn văn bản nào đó, người sử dụng gửi tin nhắn sau đến con bot. Cấu trúc tin nhắn
/translate [ngôn ngữ hiện tại] [ngôn ngữ muốn chuyển đến] [đoạn văn bản muốn dịch]
Con bot sẽ phân tích cú pháp của tin nhắn gửi, sau đó gọi dịch vụ Phiên dịch. Dịch vụ này sẽ kết nối đến trang web translate của Google, đưa các tham số theo giao thức HTTP, sau đó nhận lại một đoạn văn bản. Con bot lúc này sẽ phân tích đoạn văn bản này bằng hàm json_encode(), lấy được các thông tin cần thiết sau đó trả về người sử dụng.
Ví dụ khi người dùng gõ lệnh:
/translate en vi hello world
Con bot gọi dịch vụ Phiên dịch lên, truyền tham số bao gồm: ngôn ngữ hiện tại là Tiếng Anh (có mã là en), ngôn ngữ muốn chuyển là tiếng Việt (có mã là vi), đoạn văn bản là hello world. Sau đó, con bot kết nối đến trang web cung cấp dịch vụ translate của Google là sau đó truyền các tham số sau.
Values = {'client' : 't', 'text' : 'hello world','sl' : 'en','tl' : 'vi'}
GoogleTranslate sẽ trả về cho con bot một đoạn văn bản được mã hóa theo JSON. Dùng hàm json_encode() sẽ biến đoạn văn bản đó trở thành một mảng có cấu trúc như sau.
- Nếu đoạn văn bản sau khi encode có kiểu là ký tự thì đó chính là chuỗi mà ta cần.
- Nếu đoạn văn bản sau khi encode có kiểu mảng sẽ có cấu trúc như sau
[dịch nghĩa],[[giải thích],[ giải thích]]
Trong đó phần giải thích có cấu trúc như sau:
[khóa] ,[ý nghĩa 1] ,[ý nghĩa 2] ,..,[ý nghĩa n]
6.4 Dịch vụ Thời tiết
Dự báo thời tiết là một dịch vụ hay và cần thiết. Trên mạng cũng có một số trang web cung cấp dịch vụ dự báo thời tiết miễn phí. Dịch vụ dự báo thời tiết của chúng tôi sử dụng lại dịch vụ miễn phí của Yahoo là Yahoo Weather.
Khi người sử dụng muốn xem thời tiết của một khu vực nào đó, chỉ cần nhắn tin cho con bot với cấu trúc sau.
/weather [tên khu vực]
Con bot sẽ phân tích cú pháp của tin nhắn gửi, sau đó gọi dịch vụ weather. Dịch vụ này sẽ kết nối đến trang web Yahoo Weather, đưa các tham số theo giao thức HTTP, sau đó nhận lại một đoạn văn bản XML. Con bot lúc này sẽ phân tích đoạn văn bản này bằng, lấy được các thông tin cần thiết sau đó trả về người sử dụng.
Một bài toán khó đặt ra trong trường hợp này là việc YahooWeather lấy khu vực theo mã. Chẳng hạn Hà Nội thì có mã là VMXX0006. Nếu bắt người sử dụng nhớ mã này thì không hay. Vì thế, chúng tôi quyết định chỉ cung cấp dịch vụ dự báo thời tiết trong khu vực Việt Nam. Chúng tôi lập ra một bảng gồm hai trường (khóa và giá trị). Khóa tương ứng với tên tỉnh, thành phố. Giá trị tương ứng với mã tỉnh, thành phố đó (theo qui ước của Yahoo).
Ví dụ khi người dùng gõ lệnh:
/weather HaNoi
Con bot gọi dịch vụ Thời tiết lên, truyền tham số là mã thành phố ứng với tên thành phố. Sau đó, con bot kết nối đến trang web cung cấp dịch vụ YahooWeather,
Hai tham số p là mã thành phố và u là nhiệt độ được tính theo độ C. Yahoo sẽ trả lại một văn bản XML ghi đầy đủ thông tin thời tiết (sức gió, nhiệt độ, áp suât, dự báo ..). Công việc của con bot là phân tích văn bản XML, trả lại những thông tin cần thiết cho người dùng.
6.5. Dịch vụ Nhắc việc
6.5.1. Tổng quan
Để có thể sử dụng được dịch vụ thì người sử dụng phải có một tài khoản đã đăng ký với TCat (username) trên giao diện Web của chúng tôi. Nếu như người sử dụng chưa có tài khoản thì có thể đăng ký một tài khoản để sử dụng dịch vụ.
Dịch vụ nhắc việc là dịch vụ cho phép người sử dụng có thể đăng ký nhận tin nhắn tự động (nhắc việc) tới chính nick Yahoo, GoogleTalk hoặc số điện thoại của mình vào một thời điểm nào đó, hoặc khi một trang Web có thay đổi,…
Thời điểm người sử dụng đăng ký nhận tin nhắn có thể là một thời gian cố định nào đó (ví dụ thời gian là 2h00 ngày 30 tháng 2 năm 2010), hoặc cũng có thể là thời gian nào đó trong một ngày (ví dụ 8h hàng ngày). Một trang Web thay đổi ví dụ như khi có một bài viết trả lời mới trong diễn đàn, giá chứng khoán thay đổi, giá vàng, ngoại tệ thay đổi. Khi những sự kiện như trên xảy ra thì chúng tôi sẽ gửi tin nhắn nhắc việc tới người sử dụng.
Dịch vụ nhắc việc giúp cho người sử dụng không cần thiết phải nhớ lịch làm việc, lịch hẹn, vui chơi, sinh nhật của một ai đó,.. Chỉ cần người sử dụng đăng ký những thông tin cần thiết cho TCat. Và khi đến thời điểm mà người sử dụng yêu cầu nhắn tin tới nick Yahoo, GoogleTalk hoặc số điện thoại thì chúng tôi sẽ gửi tin nhắn tới với nội dung mà người sử dụng đã đăng nhập. Không chỉ có thể nhắn tin cho mình, người sử dụng có thể nhắn tin cho bất kỳ một ai đó ví dụ như bạn bè, người thân hoặc đồng nghiệp,…Để có thể nhắn tin cho người khác, có thể là một hoặc nhiều người với nhiều nick Yahoo, GoogleTalk hoặc số điện thoại, người sử dụng phải nhập những thông tin cần thiết cho chúng tôi.
Để có thể nhắn tin cho nhiều người một cách dễ dàng, thuận tiện hơn chúng tôi thiết lập một danh sách bạn bè (Friend List) cho người sử dụng dễ quản lý. Khi muốn nhắn tin cho ai đó, người sử dụng không cần phải nhớ nick Yahoo, GoogleTalk hay số điện thoại của người đó mà chỉ cần nhớ tên để thêm vào danh sách người nhận tin nhắn.
Dịch vụ nhắc việc của chúng tôi chia ra làm hai loại dịch vụ nhỏ:
Thứ nhất: dịch vụ nhắc việc theo thời gian. Tức là tin nhắn nhắc việc mà người sử dụng đăng ký chỉ được gửi vào một thời gian cố định mà người sử dụng đã đăng ký với dịch vụ của chúng tôi. Người sử dụng muốn sử dụng dịch vụ này phải nhập các thông tin cần thiết như nội dung tin nhắn, danh sách người nhận tin nhắn, thời gian cụ thể (giờ-phút-ngày-tháng-năm) cho chúng tôi.
Thứ hai: dịch vụ nhắc việc theo sự thay đổi của trang web. Tức là tin nhắn nhắc việc sẽ được tự động gửi đến cho người sử dụng khi có một sự kiện xảy ra. Sự kiện này đã được người sử dụng đăng ký trước, khi trang Web bị thay đổi. Để kích hoạt dịch vụ này người sử dụng phải nhập các thông tin về người nhận, thời gian hoặc một đường link (của trang web khi có thay đổi) trong giao diện Web của chúng tôi.
6.5.2. Thiết kế CSDL
Như phân tích ở phần trên, chúng tôi cung cấp hai loại dịch vụ nhắc việc. Nhắc việc theo một thời gian và nhắc việc theo sự biến đổi của trang web. Hình 6. 3: Mối quan hệ CSDL trong dịch vụ nhắc việc theo thời gian miêu tả chi tiết mối quan hệ cũng như các trường, các bảng trong dịch vụ nhắc việc theo thời gian
Hình 6. 3: Mối quan hệ CSDL trong dịch vụ nhắc việc theo thời gian
Bảng Nhacviecttg (nhắc việc theo thời gian) gồm có các trường
Nvid: định danh của một tiến trình nhắc việc.
Userid: tiến trình nhắc việc này thuộc về người có định danh này.
Text: thông điệp gửi mỗi khi tiến trình chạy.
Alert_time: thời điểm chạy.
Repeat: Có lặp lại nhắc việc theo ngày hay không?
Sended: đã gửi thông điệp đi chưa.
Bảng Nvttg_Friend là kết quả của việc nối hai bảng Friend với bảng Nhacviecttg theo quan hệ nhiều – nhiều.
Nvid : định danh của tiến trình nhắc việc
Friendid: định danh của một Friend
Send_y, send_g, send_m: đã gửi tin nhắn cho yahoo, GoogleTalk hay điện thoại chưa
Mối quan hệ giữa các bảng như sau: Mỗi Friend có thể nằm trong nhiều Nhacviecttg và mỗi Nhacviecttg có thể chứa nhiều Friend. Quan hệ giữa Nhacviecttg và Friend là quan hệ nhiều - nhiều nên phải sinh ra thêm một bảng nữa là Nvttg-Friend. Lấy một ví dụ cụ thể, một người dùng có Username là A đăng ký dịch vụ. Anh ta thêm vào trong danh sách bạn của mình 2 người có tên là A1 và A2. A muốn tạo một lịch nhắc việc vào buổi sáng 8h của các ngày, nhắc A1 uống thuốc. Khi đó bảng nhắc việc theo thời gian sẽ như sau:Nvid: 123 (một số nào đó), Userid: 82 (định danh của người dùng A), Text: Dậy uống thuốc, alert_time: 2009-06-01 08:00, repeat: 1, sended: 0. Bảng Nvttg-Friend sẽ có dạng như sau: nvid: 123 (định danh của tiến trình nhắc việc trên), friendid:4325 (định danh của A1), send_y: 0, send_g: 0, send_m: 0.
Hình 6. 4: Mối quan hệ CSDL trong dịch vụ nhắc việc theo sự thay đổi của trang web
Hình trên mô tả mối quan hệ các bảng trong dịch vụ nhắc việc theo sự thay đổi của một trang web. Bảng NhacviecLinkFriend là bảng sinh ra bởi mối quan hệ nhiều – nhiều giữa hai bảng NhacviecLink và Friend.
NhacviecLink gồm các trường:
Nvid: định danh của một tiến trình nhắc việc.
Userid: tiến trình nhắc việc này thuộc về người có định danh này.
Text: thông điệp gửi mỗi khi tiến trình chạy.
Link: Liên kết đến trang web cần theo giỏi.
Sended: đã gửi thông điệp đi chưa.
Bảng NhacviecLinkFriend là kết quả của mối quan hệ nhiều – nhiều giữa hai bảng NhacviecLink và Friend. Gồm các trường sau
Nvid : định danh của tiến trình nhắc việc
Friendid: định danh của một Friend
Send_y, send_g, send_m: lưu lại kết quả băm của trang web lần cuối cùng được gửi đi.
Mối quan hệ của hai bảng này cũng tương đương mối quan hệ của hai bảng Nhacviecttg và Friend.
6.5.3 Hoạt động
Khi người sử dụng tạo một tiến trình nhắc việc trên web, tùy theo người sử dụng chọn, có thể đó là tiến trình nhắc việc theo sự thay đổi của trang web hoặc nhắc việc theo thời gian cụ thể nào đó hoặc cả hai. Với tiến trình nhắc việc theo sự thay đổi của một trang web nào đó, người sử dụng phải điền địa chỉ trang web vào. Địa chỉ trang web phải đặc trưng cho sự thay đổi của trang web, thông thường đó là một link RSS Fed. Với tiến trình nhắc việc theo sự thay đổi của thời gian, người sử dụng phải điền vào thời gian cụ thể. Chọn chế độ có lặp lại việc này theo ngày hay không.
Sau khi người sử dụng lưu lại tiến trình nhắc việc. Các chương trình ở phía moudle IM, SMS (tạm gọi là các con bot) sẽ tiến hành kết nối đến WEB, lấy các thông tin nhắc việc. Việc kết nối này là hoàn toàn tự động và được thực hiện có chu kỳ (cứ t giây sẽ thực hiện). WEB sẽ xem trong CSDL của mình, ứng với mỗi dịch vụ nhắc việc có bao nhiêu nick cần được nhắc việc, có bao nhiêu con bot đang chạy. WEB thực hiện việc chia đều các nick cần được nhắc việc, sau đó gửi trả lại cho con bot một tập các nick cần nhắc việc kèm theo lời nhắn. Dữ liệu truyền tới con bot là dữ liệu được encode theo chuận JSON. Con bot sau khi decode dữ liệu, lấy ra được tập các nick và lời nhắn sẽ gửi thông điệp lần lượt đến các nick.
Vấn đề bảo mật rất quan trọng trong tiến trình nhắc việc. Mọi kết nối đến Server đều thông qua giao thức HTTPS, mỗi con bot khi kết nối cần đưa ra id của mình, WEB sẽ xác thực id đó, xem id có hợp lệ hay không, tiếp web đánh dấu vào trường thời gian của con bot. Việc này nhằm mục đích đánh giấu thời gian online gần đây nhất của con bot. Những con bot có thời gian online gần đây nhất trong khoảng t sẽ được coi là vẫn online. (Khoảng thời gian t với t là một số nguyên sẽ được qui định cụ thể trong TCat).CHƯƠNG 7. PHỤ LỤC
NowSMS là một phần mềm cho phép gửi tin nhắn SMS, MMS; triển khai và phát triển nhanh chóng cho việc gửi tin SMS, MMS và giải pháp WAP Push. NowSMS có thể dễ dàng cài đặt thành SMS Gateway, MMS Gateway, WAP Push Proxy Gateway và trung tâm tin nhắn đa phương tiện MMSC (Multimedia Messaging Center) cho hệ điều hành Window 2000, XP, Vista hoặc Window Server 2003, 2008.
NowSMS không phải là một nhà cung cấp dịch vụ tin nhắn SMS, cũng không phải là thay thế cho nhà cung cấp dịch vụ đó. Để có thể sử dụng NowSMS cần phải có kết nối tới nhà cung cấp dịch vụ gửi tin SMS hoặc một GSM Modem.
NowSMS là một công cụ nằm ở giữa nhằm đơn giản hóa quá trình kết nối một hoặc nhiều nhà cung cấp dịch vụ, quản lý một hoặc nhiều GSM Modem.
Giao diện chính của chương trình NowSMS sẽ như Hình 7. 1 Giao diện của NowSMS.
Hình 7. 1 Giao diện của NowSMS
7.1. Cấu hình NowSMS kết nối trực tiếp tới SMSC của Viettel
Đầu tiên, để có thể cấu hình cho NowSMS trở thành SMSGateway kết nối tới SMSC cần thêm một kết nối (Nhấn nút “add” trong phần SMSC của NowSMS. Sau đó chương trình sẽ xuất hiện một cửa sổ như Hình 7. 2 Lựa chọn kết nối tới SMSC.
Hình 7. 2 Lựa chọn kết nối tới SMSC
Lựa chọn kết nối thông qua “SMPP over TCP/IP”. Vì SMS Gateway giao tiếp với SMS thông qua giao thức SMPP trên nền TCP/IP.
Sau khi đã lựa chọn kết nối thì cần phải điền đầy đủ thông tin kết nối tới SMSC theo như Hình 7. 3 Cấu hình kết nối. Những thông tin này đã được đăng ký với SMSC nào đó rồi (Ở đây chúng tôi sử dụng kết nối tới SMSC của Viettel).
Hình 7. 3 Cấu hình kết nối
Điền đầy đủ các thông tin gồm có:
Server Host Name: địa chỉ của Server SMSC kết nối tới
Server Port: địa chỉ cổng kết nối tới SMSC
Username: tài khoản đăng nhập
Password: mật khẩu của tài khoản trên
Address Range: dải địa chỉ
Sender Range: địa chỉ gửi
Sau khi đã tạo được kết nối tới SMSC là việc chạy dịch vụ. Lựa chọn “Run as service” của SMS Gateway Service như Hình 7. 4 Chạy dịch vụ.
Hình 7. 4 Chạy dịch vụ
Sau khi thực hiện việc cấu hình như trên thì Nowsms sẽ chạy như là SMS Gateway và có thể gửi tin nhắn sms thông qua SMS Gateway này.
7.2. Tạo kết nối Giữa NowSMS với GSM Modem
Cũng tương tự như cấu hình kết nối ở phần trên. Nhưng ở đây không lựa chọn kết nối thông qua “SMPP over TCP/IP” nữa mà sẽ lựa chọn kết nối “GSM Phone or Modem” như Hình 7. 5 Kết nối tới modem.
Hình 7. 5 Kết nối tới modem
Sau khi đã lựa chọn kết nối thì cần phải lựa chọn thiết bị GSM Modem. GSM Modem đã được kết nối sẵn với máy tính thông qua cáp kết nối. Ở đây chúng tôi sử dụng điện thoại Nokia 5800 kết nối với máy tính đã cài đặt phần mềm PC Suite của hãng Nokia.
Hình 7. 6 Lựa chọn thiết bị GSM để kết nối
Trong Hình 7. 6 Lựa chọn thiết bị GSM để kết nối ở trên chúng tôi lựa chọn “Nokia 5800 XpressMusic USB Modem” làm GSM Modem để kết nối. Sau đó bấm nút “Test and Add Modem” sau đó Gateway sẽ tạo một kết nối tới GSM Modem.
TÀI LIỆU THAM KHẢO
Các file đính kèm theo tài liệu này:
- Xây dựng hệ thống dịch vụ giá trị gia tăng trên nền dịch vụ nhắn tin tức thì qua hệ thống tin nhắn tức thì.doc