MỤC LỤCMỤC LỤC 1
DANH MỤC HÌNH VẼ 16
LỜI MỞ ĐẦU 18
LỜI CẢM ƠN 19
CHƯƠNG 1. 20
TỔNG QUAN VỀ VOIP 20
1.1. Giới thiệu. 20
1.2. Cấu trúc mạng VoIP. 21
1.3. Đặc điểm dịch vụ VoIP. 23
1.4. Chất lượng dịch vụ trong mạng VoIP. 24
1.5. Các giao thức truyền thông thời gian thực. 27
1.5.1. Giao thức RTP. 27
1.5.2. Giao thức RTCP. 28
CHƯƠNG 2. 30
CÁC GIAO THỨC BÁO HIỆU 30
2.1. Giao thức H323. 30
2.1.1. Giới thiệu. 30
2.1.2. Các thành phần cơ bản của hệ thống H323. 30
2.1.3. Tập giao thức H323. 33
2.1.4. Quá trình thiết lập cuộc gọi H323. 35
2.2. Giao thức khởi tạo phiên SIP. 36
2.2.1. Giới thiệu. 36
2.2.2. Tính năng của SIP. 37
2.2.3. Các thành phần trong hệ thống SIP. 37
2.2.4. Các bản tin của SIP. 39
2.2.5. Quá trình thiết lập cuộc gọi 41
2.3. So sánh với H.323. 44
CHƯƠNG 3. 46
MẠNG THẾ HỆ MỚI NGN 46
3.1. Sự hình thành mạng NGN 46
3.2. Các đặc điểm của NGN 47
3.3. Những vấn đề mà mạng thế hệ mới cần giải quyết 47
3.4. Công nghệ chuyển mạch mềm – Softswitch. 48
3.4.1. Những hạn chế của tổng đài chuyển mạch kênh. 48
3.4.2. Định nghĩa chuyển mạch mềm (Softswitch). 49
3.4.3. Những lợi ích của Softswitch. 50
3.5. Kiến trúc của mạng NGN 52
3.5.1. Lớp truyền tải 53
3.5.2. Lớp điều khiển và báo hiệu cuộc gọi 54
3.5.3. Lớp ứng dụng và dịch vụ. 54
3.5.4. Lớp quản lý. 54
3.6. Các phần tử trong mạng NGN 55
3.7. Các dịch vụ chính trong mạng NGN 56
CHƯƠNG 4. 57
TÌM HIỂU ASTERISK 57
4.1. Giới thiệu. 57
4.2. Kiến trúc Asterisk. 58
4.3. Một số tính năng cơ bản. 60
4.4. Các ngữ cảnh ứng dụng. 62
4.5. Tổ chức thư mục của Asterisk. 66
4.6. Một số lệnh thao tác trên hệ thống asterisk. 69
4.7. Cách thức cấu hình trên các tập tin cơ bản. 70
4.8. Cách thức hoạt động của tập tin cấu hình. 70
4.9. Giới thiệu dialplan. 72
CHƯƠNG 5. 76
XÂY DỰNG HỆ THỐNG CALLCENTER TRÊN NỀN ASTERISK 76
5.1. Giới thiệu. 76
5.2. Mục đích Yêu cầu. 76
5.3. Phân tích thiết kế. 77
5.3.1. Kịch bản cho hệ thống. 77
5.3.2. Biểu đồ phân rã chức năng. 84
5.3.3. Biểu đồ ngữ cảnh. 85
5.3.4. Biểu đồ luồng dữ liệu mức đỉnh. 87
5.3.5. Cơ sở dữ liệu. 88
5.4. Triển khai hệ thống. 90
5.4.1. Mô hình hệ thống. 90
5.4.2. Cài đặt các gói phần mềm 91
5.4.3. Cấu hình hệ thống Asterisk. 93
5.4.4. Lập trình cho hệ thống. 97
5.5. Kết quả thực nghiệm 104
5.6. Đánh giá hệ thống. 106
5.7. Hướng phát triển. 107
DANH MỤC HÌNH VẼHình 1 : Cấu trúc mạng VoIP. 9
Hình 2 Một số chuẩn mã hóa tín hiệu. 12
Hình 3 Gói RTP. 13
Hình 4 Cấu trúc gói tin RTP. 14
Hình 5 Cấu trúc gói tin RTCP. 16
Hình 6: Các thành phần mạng H323. 18
Hình 7: Tập giao thức H323. 20
Hình 8 Quá trình thiết lập cuộc gọi trong H323. 23
Hình 10 Một số trường header đơn giản. 27
Hình 11 : Hoạt động của Proxy server. 28
Hình 12 : Hoạt động của Redirect Server được trình bày như hình. 29
Hình 13 Quá trình thiết lập và hủy một phiên kết nối của SIP. 31
Hình 14 : Topo mạng NGN 35
Hình 15 : Cấu trúc mạng và báo hiệu PSTN 36
Hình 16 So sánh chuyển mạch kênh và chuyển mạch mềm 39
Hình 17 : Kiến trúc NGN 40
Hình 18 : Mô hình mạng NGN 43
Hình 19 : Sơ đồ tổng quan Asterisk. 45
Hình 20 : Kiến trúc Asterisk. 46
Hình 21 : IP PBX 50
Hình 22 : Kết nối IP PBX với PBX 51
Hình 23 : Kết nối giữa các Server Asterisk. 51
Hình 24 : Triển khai server IVR, VoiceMail, Hội Thoại 52
Hình 25 : Phân phối cuộc gọi hàng đợi 53
Hình 26 Cấu trúc cây thư mục. 55
Hình 27 Kịch bản Menu chính của hệ thống. 65
Hình 28 Quy trình tra cứu kết quả xổ số. 67
Hình 29 Quy trình gửi quà tặng âm nhạc. 70
Hình 31 Biểu đồ phân cấp chức năng. 72
Hình 32 Biểu đồ ngữ ảnh. 73
Hình 33 Biểu đồ luồng dữ liệu mức đỉnh. 74
Hình 35 Cơ sở dữ liệu. 75
Hình 36 Mô hình logic hệ thống. 77
Hình 37 Cấu hình Softphone. 83
Hình 38 Màn hình Asterisk CLI. 91
Hình 39 Softphone đăng ký vào hệ thống. 91
Hình 40 Gọi tới 1900. 92
Hình 41 Người gọi chọn tra cứu kết quả xổ số. 92
Hình 42 Người gọi chọn Gửi quà tặng âm nhạc. 93
LỜI MỞ ĐẦU Sự phát triển của mạng Internet là một bước ngoặt lớn mang đậm tính lịch sử trong lĩnh vực công nghệ thông tin. Nó có những tác động to lớn và tích cực không chỉ riêng trongl lĩnh vực công nghệ thông tin mà còn cả trong mọi lĩnh vực của đời sống xã hội. Nó làm thay đổi tư duy, khả năng nhận thức, tăng cường mở rộng khả năng hiểu biết về thế giới quan, thúc đẩy xã hội phát triển một cách nhanh chóng. Sự bùng nổ của Internet không chỉ là sự gia tăng số lượng các nhà khai thác dịch vụ, số người tham gia mà còn gia tăng về số lượng dịch vụ và chất lượng dịch vụ. Nếu trước đây chúng ta biết đến Internet như là một nguồn để tìm kiếm thông tin, giải trí thì ngày nay, Internet còn đưa thêm rất nhiều dịch vụ mới và đa phần những dịch vụ này rất gần gũi thân thiết với con người như dịch vụ thư điện tử, dịch vụ đa phương tiện, dịch vụ thương mại điện tử Và gần đây nhất là dịch vụ điện thoại Internet (VoIP).
Bắt đầu từ năm 1994, truyền thông Internet đã bắt đầu được thử nghiệm và phát triển mạnh mẽ từ năm 1995. Hiện nay truyền thông qua mạng Internet đã phát triển rất mạng và với rất nhiều ứng dụng như điện thoại, thư thoại, fax, hội nghị video, chia sẻ tài liệu
Điện thoại IP sẽ là một xu thế không thể tránh khỏi, sẽ dần dần thay thế điện thoại truyền thống. Việc tìm hiểu và xây dựng các ứng dụng dựa trên công nghệ VoIP là điều cần thiết và sẽ mang lại những lợi ích to lớn.
Vì những lý do trên mà em đã đi đến thực hiện đồ án tốt nghiệp của mình với đề tài : “Tìm hiểu công nghệ VoIP và xây dựng hệ thống Callcenter trên nền Asterisk” .
97 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 3677 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đề tài Tìm hiểu công nghệ VoIP và xây dựng hệ thống Callcenter trên nền Asterisk, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
vai trò là Proxy Server, Redirect Server, Location Sever.
Gatekeeper: cho phép các thuê bao H323 đăng ký , nhận thực, đồng thời giám sát các kết nối Multimedia giữa các đầu cuối H323.
Signalling Gateway: thực hiện chức năng Gateway báo hiệu
Media Sever: Nó cho phép sự tương tác giữa thuê bao và các ứng dụng thông qua thiết bị điện thoại, Ví dụ như nó có thể trả lời cuộc gọi, đưa ra một lời thông báo, đọc thư điện tử, thực hiện chức năng của IVR.
MediaGateway: là thiết bị truyền thông kết nối với mạng chuyển mạch kênh hiện tại và mạng NGN. Nó cung cấp các cổng kết nối trực tiếp với đường trung kế của mạng PSTN và mạng di động và biến đổi các luồng TDM đó thành những gói IP và ngược lại. Các Gateway này hoạt động đơn thuần như một thiết bị kết nối trung gian, được điều khiển bởi Softswitch.
Access Gateway: là Gateway truy cập có thể cung cấp truy cập đa dịch vụ như xDSL, VoDSL, POTS/ISDN.....
IP client: là các thiết bị đầu cuối IP hỗ trợ các giao thức H323, SIP. các đầu cuối này có thể thực hiện những cuộc gọi Multimedia trong mạng của nó hay gọi thoại ra mạng PSTN thông qua softswitch. Các đầu cuối này có thể là IP phone, PBX trên nền IP.....
Hình 18 : Mô hình mạng NGN
Các dịch vụ chính trong mạng NGN
Ứng dụng làm SS7, PRI Gateway ( giảm tải Internet ).
Trung kế ảo - tổng đài chuyển mạch gói chuyển tiếp.
Tổng đài chuyển mạch nội hạt
Thoại trên băng thông rộng.
TÌM HIỂU ASTERISK
Giới thiệu
Asterisk là hệ thống chuyển mạch mềm, là phần mềm nguồn mở được viết bằng ngôn ngữ C chạy trên hệ điều hành linux thực hiện tất cả các tính năng của tổng đài PBX và hơn thế nữa. Asterisk ra đời vào năm 1999 bởi một sinh năm 1977 tên là Mark Spencer, Anh ta viết phần mềm này ban đầu không ngoài mục đích hỗ trợ cho công ty của mình trong việc liên lạc đàm thoại hỗ trợ cộng đồng người sử dụng và phát triển Linux.
Asterisk là một PBX và nhiều hơn thế. Asterisk là một phần mềm mang tính cách mạng, tin cậy, mã nguồn mở và miễn phí mà biến một PC rẻ tiền thông thường chạy Linux thành một hệ thống điện thoại doanh nghiệp mạnh mẽ. Asterisk là một bộ công cụ mã nguồn mở cho các ứng dụng thoại và là một server xử lý cuộc gọi đầy đủ chức năng. Asterisk là một nền tảng tích hợp điện thoại vi tính hoá kiến trúc mở. Nhiều hệ thống Asterisk đã được cài đặt thành công trên khắp thế giới. Công nghệ Asterisk đang phục vụ cho nhiều doanh nghiệp. Hiện nay Asterisk trên đà phát triển nhanh được rất nhiều doanh nghiệp triển khai ứng dụng cho công ty của mình. Đây là xu thế tất yếu của người sử dụng điện thoại, vì các công ty đều có mạng máy tính và cần liên lạc với nhau trong công việc giữa các phòng ban hoặc chi nhánh và cần một chi phí thấp thậm chí không phải tốn chi phí khi thực hiện các cuộc gọi trên mạng nội bộ của công ty.
Không gói gọn thông tin liên lạc trong công ty mà các ứng dụng giao tiếp với mạng PSTN hoặc mạng VOIP (như voice777) cho phép gọi ra bất cứ số điện thoại
nào có trên mạng PSTN.
Ngoài ra việc tích hợp vào các ứng dụng như CRM và hệ thống Outlook làm cho khả năng ứng dụng của Asterisk linh hoạt hơn đáp ứng nhu cầu cần thiết cho người sử dụng điện thoại.
Asterisk thoạt đầu được phát triển trên GNU/Linux nền x86 (Intel), nhưng giờ đây nó cũng có thể biên dịch và chạy trên OpenBSD, FreeBSD và Mac OS X và Microsoft Windows.
Hình 19 : Sơ đồ tổng quan Asterisk
Asterisk là hệ thống chuyển mạch tích hợp vừa là công nghệ truyền thống TDM vừa là chguyển mạch voip. Hình trên cũng cho thấy khả năng giao tiếp của hệ thống. Giao tiếp với điện thoại analog thông thường, giao tiếp với thiết bị điện thoại voip, ngoài ra còn có thể giao tiếp với mạng PSTN và các nhà cung cấp voip khác.
Kiến trúc Asterisk
Hình 20 : Kiến trúc Asterisk
Về cơ bản kiến trúc của Asterisk là sự kết hộp giữa nền tảng công nghệ điện thoại và ứng dụng điện thoại. công nghệ điện thoại cho VOIP như SIP, H323, IAX, MGCP... các công nghệ điện thoại cho hệ thống chuyển mạch mạch TDM như T1, E1, ISDN và các giao tiếp đường truyền thoại Analog. Các ứng dụng thoại như chuyển mạch cuộc gọi, tương tác thoại, caller ID, voicemail, chuyển cuộc gọi… Asterisk có một số chức năng chính đóng vai trò quan trọng trong hệ thống chuyển mạch cuộc gọi. Khi khởi động hệ thống Asterisk thì chức năng Dynamic Module Loader thực hiện nạp driver của thiết bị, nạp các kênh giao tiếp, các format, codec và các ứng dụng liên quan, đồng thời các hàm API cũng được liên kết nạp vào hệ thống.
Sau đó hệ thống PBX Switching Core của Asterisk chuyển sang trạng thái sẵn sàng hoạt động chuyển mạch cuộc gọi, các cuộc gọi được chuyển mạch tuỳ vào kế hoạch quay số (Dialplan) được thực hiện cấu hình trong file extension.conf. Chức năng Application Launchar để rung chuông thuê bao, quay số, định hướng cuộc gọi, kết nối với hộp thư thoại…
Scheduler and I/O Manager đảm nhiệm các ứng dụng nâng cao, các chức năng được phát triển bởi cộng đồng phát triển asterisk..
Codec Translator xác nhận các kênh nén dữ liệu ứng với các chuẩn khác nhau có thể kết hợp liên lạc được với nhau.
Tất cả các cuộc gọi định hướng qua hệ thống Asterisk đều thông qua các giao tiếp như SIP, Zaptel, IAX. Nên hệ thống Asterisk phải đảm trách nhiệm vụ liên kết các giao tiếp khác nhau đó để xử lý cuộc gọi.
Hệ thống cũng bao gồm 4 chức năng API chính:
Codec translator API : các hàm đảm nhiệm thực thi và giải nén các chuẩn khác nhau như G711, GMS, G729…
Asterisk Channel API : Giao tiếp với các kênh liên lạc khác nhau, đây là đầu mối cho việc kết nối các cuộc gọi tương thích với nhiều chuần khác nhau như SIP, IAX, H323. Zaptel…
Asterisk file format API : Asterisk tương thích với việc xử lý các loại file có định dạng khác nhau như Mp3, wav, gsm…
Asterisk Aplication API : Bao gồm tất cả các ứng dụng được thực thi trong hệ thống Asterisk như voicemail, callerID…
Ngoài ra, Asterisk còn có thư viện Asterisk Gateway Interface (AGI, tương tự như CGI) - cơ chế kích hoạt ứng dụng bên ngoài, cho phép viết kịch bản phức tạp với một số ngôn ngữ như PHP hay Perl. Nói chung, khả năng viết các ứng dụng tùy biến rất lớn.
Một số tính năng cơ bản
Asterisk có rất nhiều tính năng đã được giới thiệu ở trên nhưng để hiểu rõ hết tất cả các tính năng trên thật sự là thách thức đối với chúng ta. Trong phần này chúng tôi sẽ giới thiệu một số tính năng với các ứng dụng cụ thể để hiểu hơn về hệ thống asterisk.
Voicemail (hộp thư thoại)
Đây là tính năng cho phép hệ thống nhận các thông điệp tin nhắn thoại, mỗi máy điện thoại được khai báo trong hệ thống Asterisk cho phép khai báo thêm chức năng hộp thư thoại. Mỗi khi số điện thoại bận hay ngoài “vùng phủ sóng” thì hệ thống asterisk định hướng trực tiếp các cuộc gọi đến hộp thư thoại tương ứng đã khai báo trước. Voicemail cung cấp cho người sử dụng nhiều tính năng lựa chọn như : password xác nhận khi truy cập vào hộp thư thoại, gửi mail báo khi có thông điệp mới.
Call Forwarding(chuyển cuộc gọi)
Khi không ở nhà, hoặc đi công tác mà người sử dụng không muốn bỏ lỡ tất cả các cuộc gọi đến thì hãy nghĩ ngay đến tính năng chuyển cuộc gọi. Đây là tính năng thường được sử dụng trong hệ thống Asterisk. Chức năng cho phép chuyển một cuộc gọi đến một hay nhiều số máy điện thoại được định trước.
Một số trường hợp cần chuyển cuộc gọi như : Chuyển cuộc gọi khi bận, chuyển cuộc gọi khi không trả lời, chuyển cuộc gọi tức thời, chuyển cuộc gọi với thời gian định trước.
Caller ID (hiển thị số gọi)
Chức năng này rất hữu dụng khi một ai đó gọi đến và ta muốn biết chính xác là gọi từ đâu và trong một số trường hợp biết chắc họ là ai. Ngoài ra Caller ID còn là chức năng cho phép chúng ta xác nhận số thuê bao gọi đến có nghĩa là dựa vào caller ID chúng ta có tiếp nhận hay không tiếp nhận cuộc gọi từ phía hệ thống Asterisk. Ngăn một số cuộc gọi ngoài ý muốn.
Automated attendant (chức năng IVR)
Chức năng tương tác thoại có rất nhiều ứng dụng trong thực tế, khi gọi điện thoại đến một cơ quan hay xí nghiệp thuê bao thường nghe thông điệp như “Xin chào mừng bạn đã gọi đến công ty chúng Tôi hãy nhấn phím 1 để gặp phòng kinh doanh, phím 2 gặp phòng kỹ thuật…” sau đó tuỳ vào sự tương tác của thuê bao gọi đến, hệ thống Asteisk sẽ định hướng cuộc gọi theo mong muốn.
Khi muốn xem điểm thi, muốn biết tiền cước điện thoại của thuê bao, muốn biết tỉ giá Đôla hiện nay như thế nào, hay kết quả sổ số … tất các những mong muốn trên đều có thể thực hiện qua chức năng tương tác thoại.
Time and Date
Vào từng thời gian cụ thể cuộc gọi sẽ định hướng đến một số điện thoại hay một chức năng cụ thể khác, ví dụ trong công ty giám đốc muốn chỉ cho phép nhân viên sử dụng máy điện thoại trong giờ hành chánh còn ngoài giờ thì sẽ hạn chế hay không cho phép gọi ra bên ngoài.
Call Parking
Đây là chức năng chuyển cuộc gọi có quản lý. Có một số điện thoại trung gian và hai thuê bao có thể gặp nhau khi thuê bao được gọi nhấn vào số điện thoại mà thuê bao chủ gọi đang chờ trên đó và từ đây có thể gặp nhau và đàm thoại.
Remote call pickupe
Đây là tính năng cho phép chúng ta từ máy điện thoại này có thể nhận cuộc gọi từ máy điện thoại khác đang rung chuông
Privacy Manager
Khi một người chủ doanh nghiệp triển khai Asterisk cho hệ thống điện thoại của công ty mình nhưng lại không muốn nhân viên trong công ty gọi đi ra ngoài trò chuyện với bạn bè, khi đó Asterisk cung cấp 1 tính năng tiện dụng là chỉ cho phép số điện thoại được lập trình được phép gọi đến những số máy cố định nào đó thôi, còn những số không có trong danh sách định sẵn sẽ không thực hiện cuộc gọi được.
Backlist
Backlist cũng giống như Privacy Manager nhưng có một sự khác biệt là những máy điện thoại nằm trong danh sách sẽ không gọi được đến máy của mình (sử dụng trong tình trạng hay bị quấy rối điện thoại).
Và còn rất nhiều tính năng nữa mà hệ thống asterisk có thể cung cấp cho người sử dụng, trên đây chỉ là một số tính năng thường được sử dụng mà thôi, Để biết nhiều hơn chi tiết hơn các tính năng còn lại có thể tham khảo tại website www.asterisk.org.
Các ngữ cảnh ứng dụng
Asterisk thực hiện rất nhiều ngữ cảnh ứng dụng khác nhau tuỳ vào nhu cầu sử dụng, dưới dây là những ngữ cảnh ứng dụng thường được sử dụng trong thực tế triển khai hệ thống asterisk.
Tổng đài voip IP PBX
Hình 21 : IP PBX
Đây là hệ thống chuyển mạch voip được xây dựng phục vụ các công ty có nhu cầu thực hiện trên nền tảng mạng nội bộ đã triển khai. Thay vì lắp đặt một hệ thống PBX cho nhu cầu liên lạc nội bộ thì nên lắp đặt hệ thống voip điều này sẽ làm giảm chi phí đáng kể. Hệ thống có thể liên lạc với mạng PSTN qua giao tiếp TDM.
Kết nối IP PBX với PBX
Một ngữ cảnh đặt ra ở đây là hiện tại Công ty đã trang bị hệ thống PBX bây giờ cần trang bị thêm để đáp ứng nhu cầu liên lạc trong công ty sao cho với chi phí thấp nhất, giải pháp để thực hiện đó là trang bị hệ thống asterisk và kết nối với hệ thống PBX đang tồn tại qua luồng E1. Ngoài ra để tăng khả năng liên lạc với mạng PSTN và VOIP khác, Công Ty có thể thực hiện kết nối với nhà cung cấp dịch vụ voip.
Hình 22 : Kết nối IP PBX với PBX
Kết nối giữa các server Asterisk
Hình 23 : Kết nối giữa các Server Asterisk
Phương pháp trên ứng dụng rất hiệu quả cho các công ty nằm rãi rác ở các vị trị địa lý khác nhau nhằm giảm chi phí đường dài. Ví dụ Công ty Mẹ có trụ sở đặt tại nước Mỹ và các Chi nhánh đặt tại Việt Nam với các địa điểm Thành phố Hồ Chí Minh và Hà Nội. Thông qua mạng WAN của Công Ty các cuộc gọi nội bộ giữa các vị trí khác nhau sẽ làm giảm chi phí đáng kể. Ngữ cảnh này về mặt pháp luật không cho cuộc gọi từ Mỹ vào Việt Nam.
Các ứng dụng IVR, VoiceMail, Điện Thoại Hội Nghị
Hình 24 : Triển khai server IVR, VoiceMail, Hội Thoại
Ứng dụng thực hiện các server kết nối với hệ thống PSTN hay tổng đài PBX để triển khai các ứng dụng như tương tác thoại IVR. Một ví dụ cho ứng dụng tương tác thoại đó là cho biết kết quả sổ số hay kiểm tra cước cuộc gọi giống dịch vụ 19001260 vậy. thoại cùng nói chuyện với nhau. Ứng dụng VoiceMail thu nhận những tin nhắn thoại từ phía thuê bao giống như chức năng hộp thư thoại của Bưu Điện Thành phố triển khai. Còn chức năng điện thoại hội nghị thiết lập cho nhiều máy điện.
Chức năng Phân phối cuộc gọi tự động ACD
ACD (Automatic Call Distribution): Phân phối cuộc gọi tự động. Đây là chức năng ứng dụng cho nhu cầu chăm sóc khách hàng hay nhận phản hổi từ phía khách hàng. Công ty có khả năng tiếp nhận cùng một lúc 10 cuộc gọi như thế cuộc gọi thứ 11 gọi đến thì hệ thống giải quyết như thế nào?. Bình thường thì sẽ nghe tín hiệu bận nhưng với chức năng phân phối cuộc gọi sẽ đưa thuê bao đó vào hàng đợi để chờ trả lời, trong khi chờ trả lời cuộc gọi thuê bao có thể nghe những bài hát hay do asterisk cung cấp, trong lúc này nếu 1 trong mười số điện thoại trở về trạng thái rỗi thì cuộc gọi đang chờ sẽ được trả lời. Giống như chức năng của dịch vụ 1080 hay 116 của Bưu Điện Thành Phố vậy.
Hình 25 : Phân phối cuộc gọi hàng đợi
Tổ chức thư mục của Asterisk
/etc/asterisk/
Thư mục /etc/asterisk/ chứa tất cả các tập tin cấu hình của hệ thống Asterisk ngoại trừ tập tin Zaptel.conf được đặt tại thư mục /etc/.
/usr/lib/asterisk/modules/
Thư mục /usr/lib/asterisk/modules/ chứa tất cả các module cần thiết để asterisk hoạt động. Bên trong thư mục là các ứng dụng khác nhau, các codec, các định dạng âm thanh(format) và các kênh thôngtin(channel). Theo mặc định Asterisk sẽ nạp tất cả các module vào lúc khởi động. Chúng ta có thể không cho nạp một module bất kỳ bằng cách không khai báo sử dụng trong tập tin modules.conf. Lưu ý khi không cho nạp module thì phải biết chắc module đó không làm ảnh hưởng hoạt động của asterisk nếu không lỗi sẽ xuất hiện.
/var/lib/asterisk
Các thư mục con của thư mục /var/lib/asterisk/ bao gồm:
agi-bin/
Thư mục agi-bin/ chứa các script của người dùng mà Asterisk có thể định vị sử dụng qua các ứng dụng AGI. AGI là phần giao tiếp với ngôn ngữ lập trình script để thực hiện một số công việc của Asterisk từ bên ngoài.
mohmp3/
Khi cấu hình Asterisk sử dụng tính năng Music on Hold, tính năng hoạt động sẽ thực hiện lấy các tập tin mp3 tại thư mục moh/. Tập tin định dạng theo chuẩn của Asterisk nên khi sử dụng các file Mp3 thông thường cần có sự chuyển đổi thích hợp trước khi chép vào thư mục trên để sử dụng.
sounds/
Tất cả các tập tin âm thanh liên quan đến nhắc thoại của Asterisk được đặt tại thư mục sounds/. Nội dung của các tập tin chứa trong thư mục được liệt kê qua tập tin sounds.txt đặt tại thư mục mã nguồn của Asterisk. Còn nội dung của các tập tin âm thanh được mở rộng thêm được liệt kê trong tập tin sounds-extra.txt đặt trong thư mục được trích ra khi bung gói asterisk-sounds.
/var/spool/asterisk/
Thư mục /var/spool/asterisk/ Chứa nhiều thư mục con bao gồm outgoing/, qcall, tmp/, voicemail/. Asterisk luôn kiểm qua thư mục outgoing và qcall vì đây là hai thư mục chứa các tập tin dạng text chứa thông tin yêu cầu cuộc gọi. Các tập tin đó cho phép tạo ra cuộc gọi đơn giản bằng cách chép tập tin đúng cấu trúc quy định vào thư mục outgoing/. Sau đây là cấu trúc cây thư mục:
Hình 26 Cấu trúc cây thư mục
Thư mục tmp/ sử dụng để lưu trữ những thông tin tạm, để luôn bảo đảm không xảy ra tình trạng đọc và viết tập tin cùng một lúc. Khi yêu cầu xử lý tập tin chúng ta thao tác trên thư mục tmp/ trước khi lưu vào tập tin đích. Tất cả các lời nhắc thoại từ phía người sử dụng và các lời nhắc thoại sử dụng cho thao tác hộp voicemail đều được chứa trong thư mục voicemail/. Một hộp thư thoại được tạo ra ứng với một máy nội bộ trong tập tin voicemail.conf, sẽ được tạora một thư mục con tương ứng cho máy nội bộ đó tại thư mục voicemail/.
/var/run/
Thư mục /var/run/ chứa thông tin process ID(pid) cho tất cả các tiến trình đang hoạt động trong hệ thống, bao gồm cả Asterisk. Lưu ý là ứng với mỗi hệ điều hành thư mục /var/run/ có thể khác.
/var/log/asterisk/
Thư mục /var/log/asterisk/ là nơi Asterisk chứa tất cả các tập tin nhật ký hay còn gọi là tập tin log. Chúng ta có thể tuỳ biến các loại thông tin được lưu trong các tập tin log khác nhau qua tập tin cấu hình logger.conf đặt tại thư mục /etc/asterisk.
/var/log/asterisk/cdr-csv
Thư mục /var/log/asterisk/cdr-csv được sử dụng để lưu chi tiết cuộc gọi CDR, hông tin mặc định về chi tiết thông tin cuộc gọi lưu trữ trong tập tin Master.CVS, hưng thường thì ứng với mỗi mã accountcode sẽ tạo một thư mục riêng để lưu chi tiết cuộc gọi cho máy đó.
Một số lệnh thao tác trên hệ thống asterisk
Asterisk có hai thành phần được xây dụng tích hợp với nhau và chạy song song nhau:
Asterisk Server bình thường chạy ở chế độ nền(background) giống các sevices rong window.
Asterisk Client ở chế độ dòng lệnh CLI giao tiếp với Asterisk Server, thực thi ác lệnh để kiểm tra, hay xem các thông tin của server.
Để Chạy và dừng Asterisk ở chế độ nền chúng ta thực hiện lệnh sau:
#/etc/init.d/asterisk (start|stop)
Một khi Asterisk đã chạy chúng ta có thể chuyển qua chế độ CLI từ dấu nhắc lệnh của linux như sau:
#asterisk –r
Khi vào chế độ lệnh nếu muốn thoát về lại dấu nhắc linux chúng ta dùng lệnh: CLI>exit
Các lệnh cơ bản thực hiện tại CLI>:
Bất cứ khi nào chỉnh sửa các tập tin cấu hình chúng ta đều cần phải nạp lại để các thay đổi có hiệu lực, điều đó thực hiện bằng lệnh:
#CLI>reload
Bật chế độ debug cho kênh thông tin SIP hoặc IAX2
#CLI> IAX2 debug
#CLI> SIP debug
Tắt chế độ debug cho kênh thông tin SIP hoặc IAX2
#CLI> IAX2 no debug
#CLI> SIP no debug
Hiển thị các trạng thái thông tin của users, peers và channels của SIP hoặc IAX2:
#CLI> sip show users
#CLI> sip show peers
#CLI> sip show channels
#CLI> iax2 show peers
#CLI> iax2 show users
#CLI> iax2 show channels
Cách thức cấu hình trên các tập tin cơ bản
Tất cả các file cấu hình cho hệ thống Asterisk đều nằm tại thư mục etc/asterisk ngoại trừ file zaptel.conf cấu hình cho phần cứng TDM nằm tại thư mục /etc. Cách thức cấu hình giống như tập tin .ini của Window. Các nội dung sau dấu chấm phảy “;”là nội dung chú thích trong file cấu hình. Tất cả các khoảng trắng trong file cấu hình đều được bỏ qua và không có ý nghĩa.Cú pháp thực hiện giống nhau
Trong file cấu hình còn có hai phép gán rất thường xuyên được sử dụng, phép gán “=” là dùng cho việc gán các biến, còn phép gán “=>” dùng cho việc gán các đối tượng sau đây là một ví dụ cho file cấu hình:
Extension.conf
;
;Đây là các dòng chú thích
;
[section]
Key=value ; gán giá trị cho biến
[section2]
Key=>object ; Gán giá trị cho đối tượng
Cú pháp thực hiện giống nhau cho tất cả các file cấu hình nhưng có vài kiểu khác nhau cho mỗi file cầu hình dựa vào thức cách hoạt động của chúng.
Cách thức hoạt động của tập tin cấu hình
Có ba kiểu cách thức hoạt động của tập tin cấu hình như sau:
Simple Group
Có hiệu lực trên từng dòng trong file. Đây là kiểu cấu hình đơn giản nhất thường sử dụng trong các file extention.conf, meetme.conf, voicemail.conf tương ứng với mỗi dòng khai báo là một đối tượng có ý nghĩa trên dòng đó. Ví dụ:
Extention.conf
[section]
object1=> op1,op2,op3
object2=> op1b,op2b,op3b
Trong ví dụ trên mỗi dòng tương ứng với các toán tử khác nhau object1 có các toán từ op1, op2, op3 trong khi đó object2 lại có các toán từ op1b, op2b, op3b.
Option inheritance
Đây là cấu hình kiểu thừa kế thường được cấu hình trong các file zapata.conf, agent.conf. với kiểu cấu hình này thì các dòng phía dưới có thể thừa kế các thông số dòng phía trên, tương ứng với mỗi section các dòng phía dưới có thể thay đổi các thông số cho tương ứng.
Ví dụ:
Extention.conf
[section]
Op1=bas
Op2=adv
Object1=>1
Op1=int
Object1=>2
Với cấu hình trên có thể giải thích như sau object1=>1 thừa hưởng hai thông số ở phía trên đó là op1=bas và op2=adv trong khi đó đối với object1=>2 với thông số op1=int được khai báo lại nên object1=>2 được thừa kế từ hai thông số op1=int và op2=adv.
Complex Entity
Với cấu kiểu này được tổ chức thành nhiều entity, ứng với mỗi entity có nhiều thông số được khai báo, mỗi entity ở đây chính là các section để khai báo các kênh thông tin. Cấu hình thường được sử dụng trong các file iax.conf, sip.conf. Ví dụ:
Extention.conf
[entity1]
Op1=value1
Op2=value2
[entity2]
Op1=value3
Op2=value4
Entity1 có các giá trị value1 và value2 cho thông số op1 và op2, trong khi đó cũng là thông số op1 và op 2 nhưng có các giá trị khác là value3 và value4 cho entity2.
Giới thiệu dialplan
Dialplan là trái tim của hệ thống asterisk. Dialplan cho biết các cuộc gọi sẽ được xử lý như thế nào qua hệ thống asterisk. Dialplan bao gồm tập hợp các dòng lệnh hay các ứng dụng theo một trình tự nào đó mà hệ thống phải thực hiện để đáp ứng nhu cầu chuyển mạch cuộc gọi. Để hiểu rõ và cấu hình thành công hệ thống asterisk thì điều kiện tiên quyết là phải biết như thế nào dialplan hoạt động.
Dialplan là công việc thiết lập cho hoạt động của hệ thống như định hướng các cuộc gọi vào và ra hệ thống, đó là một danh sách các bước hay các lệnh liên tục nhau để thực hiện một tác vụ nào đó mà hệ thống phải thực hiện theo. Khác biệt với các hệ thống điện thoại truyền thống tất cả các công việc cấu hình hệ thống đều là từ phía người sử dụng. Hệ thống chúng ta có hoàn chỉnh tốt hay không phụ thuộc rất nhiều vào việc chúng ta hiểu rõ vào dialplan hay không.
Dialplan được cấu hình qua tập tin extension.conf, liên quan đến việc cấu hình dialplan có những khái niệm cần nắm đó là:
Extentions: Điện thoại nội bộ.
Priorities: Thứ tự thực hiện.
Applications: Các ứng dụng.
Contexts: Các ngữ cảnh.
Extentions
Dialplan là một tập gồm nhiều extention, khi một cuộc gọi tương ứng với extention nào thì ứng dụng cho cuộc gọi đó sẽ được thực hiện. extention có thể đơn giản với một đích danh cụ thể như 8051, letoan hay là một chuỗi so mẫu được thực hiện như _9xxx. Ví dụ :
/etc/asterisk/extention.conf
exten=>8051,1,dial(sip/8051,20)
exten=>8051,2,hangup()
“exten=>” giống nhau cho mỗi dòng thực hiện trong dialplan, 8051 là số điện thoại mà thuê bao quay hay là extention, còn các con số 1 và 2 là các priorites tức là thứ tự thực hiện các lệnh. Khi thuê bao quay số 8051 thì đỗ chuông máy ip sip 8051 nếu trong vòng 20 giây mà thuê bao không nhấc máy thì kết thúc cuộc gọi.
Extension là thành phần mà asterisk thực hiện theo, được kích hoạt khi có cuộc gọi vào extension chính là con số mà thuê bao đó cần gọi. Trong mỗi ngữ cảnh sẽ có thể có nhiều extension. Extenstion chính là hạt nhân để hệ thống xác định cuộc gọi cần thực hiện. Extenstion hoàn chỉnh gồm có các phần :
exten => Name,priority,application( )
Name (Tên ký tự hoặc con số) của extension.
Priority (Mỗi extension có thể bao gồm nhiều bước mỗi bước được gọi là“priority”).
Application (or command) Thực hiện một ứng dụng cụ thể nào đó cho cuộc gọi.
Một ví dụ cụ thể như sau:
/etc/asterisk/extention.conf
exten => 7325010,1,Dial(Zap/1,20)
exten => 7325010,2,Voicemail(u7325010)
exten => Tương ứng với mỗi ứng dụng thực hiện
7325010 là con số nhận được khi thuê bao chủ gọi quay số.
1, 2 là các “priority” thứ tự được thực hiện 1 rồi tới 2…
Trong ví dụ của chúng ta con số 7325010 sẽ được gửi đến kênh zap/1 rung chuông tối đa 20 giây. Nếu sau 20 giây không trả lời thì cuộc gọi sẽ được định hướng đến hộp thư thoại u7325010 chữ u ở đây có nghĩa là “ 'u'navailable message”.
Priorities – Thứ tự thực hiện
Priorities là thứ tự thực hiện các ứng dụng trong dialplan, khi thứ tự “1” được thực hiện thì kế tiếp là ứng dụng tại thứ tự số “2” được thực hiện, kể từ vertion 1.2 của Asterisk thay vì sử dụng gán một con số cụ thể cho thứ tự thực hiện như trên thì ở đây có thể gán ký tự “n” cho mọi dòng “exten=>” điều này sẽ nói với asterisk là ứng dụng với thứ tự tiếp theo sẽ thực hiện.
Ví dụ:
/etc/asterisk/extention.conf
exten=>8051,2,hangup()
exten=>8051,1,dial(sip/8051,20)
Ở ví dụ trên dòng có thứ tự “2” đứng trước dòng có thứ tự “1”, nhưng khi thực hiện diaplan thì dòng có thứ tự Priorities “1” ưu tiên thực hiện trước bất kể thứ tự sắp xếp như thế nào.
Aplications – Các hàm ứng dụng
Đây là phần quan trọng trong diaplan tức là ứng dụng nào sẽ được thực hiện trên mỗi dòng, các ứng dụng như thực hiện quay số,trả lời cuộc gọi hay đơn giản là nhấc gác máy để biết thêm thông tin về các ứng dụng cũng như các thông số kèm theo thì hãy dùng lệnh show Aplications trên giao tiếp dòng lệnh của asterisk: CLI> show Aplications
Contexts - Ngữ cảnh
Đầu tiên hãy hình dung như thế này, khi Cô Giáo và Sinh Viên trao đổi về môn cơ sở tin học viễn thông có nghĩa là ngữ cảnh(context) lúc này chỉ tập trung vào lĩnh vực viễn thông mà thôi. Như vậy ngữ cảnh (context) đã được giới hạn trong một tình huống cụ thể, đối với Asterisk ở đây cũng thế khi nói đến ngữ cảnh (context) thì thường quan tâm đến trường hợp cụ thể nào đó, điều này rõ ràng rằng trong hệ thống sẽ có rất nhiều ngữ cảnh(context) khác nhau. Ví dụ khi gọi đến tổng đài Asterisk có một thông điệp thông báo như sau “Chào mừng các Bạn gọi đến công ty chúng tôi hãy nhấn phím 1 để gặp phòng kinh doanh phím 2 gặp phòng kỹ thuật…” khi người gọi chọn phím 1 thì hệ thống sẽ chuyển đến một ngữ cảnh (context) là [PhongKinhDoanh] khi người gọi nhấn phím 2 thì hệ thống sẽ định hướng cuộc gọi qua ngữ cảnh (context) [PhongKyThuat] như vậy ứng với mỗi trường hợp hệ thống sẽ có ngữ cảnh khác nhau, ngữ cảnh được đặt trong dấu [].
Ví dụ:
/etc/asterisk/extention.conf
[PhongKinhDoanh]
exten => 7325010,1,Dial(SIP/${EXTEN}),20)
exten => 7325010,2,Voicemail(u${EXTEN})
[PhongKyThuat]
exten => _9.,1,Dial(SIP/${EXTEN})
Ngoài ta đối với việc cấu hình cho các kênh thoại thì ngữ cảnh ở đây là việc xử lý các cuộc gọi tương ứng với kênh đó qua kế hoạch diaplan.
/etc/asterisk/sip.conf
[8051]
Type=friend
Context=Tu_SIP
………………
[8052]
Type=friend
Context=noibo
………………
/etc/asterisk/extention.conf
[noibo]
exten=>8051,1,dial(sip/8051,20)
exten=>8051,2,hangup()
[Tu_SIP]
exten=>8052,1,dial(sip/8052,20)
exten=>8052,2,hangup()
Khi thuê bao 8052 nhấc máy thì Asterisk chuyển cuộc gọi này đến ngữ cảnh [noibo] và chờ nhận con số quay, nếu thuê bao 8052 quay số 8051 thì số máy 8051 sẽ rung chuông trong vòng 20 giây, nếu qua 20 giây mà thuê bao 8051 không nhấc máy thì cuộc gọi sẽ kết thúc. Khi thuê bao 8051 nhấc máy thì Asterisk chuyển cuộc gọi này đến ngữ cảnh [Tu_SIP] và chờ nhận con số quay, nếu thuê bao 8051 quay số 8052 thì số máy 8052 sẽ rung chuông trong vòng 20 giây, nếu qua 20 giây mà thuê bao 8052 không nhấc máy thì cuộc gọi sẽ kết thúc.
XÂY DỰNG HỆ THỐNG CALLCENTER TRÊN NỀN ASTERISK
Giới thiệu
Sự bùng nổ của Internet, việc ứng dụng ngày càng rộng rãi của thương mại điện tử và các ứng dụng đa phương tiện (multimedia) đã làm cho nhu cầu về trao đổi thông tin một cách trong suốt (transparent) giữa khách hàng với các cơ sở dữ liệu (Database) ngày càng tăng.
Call center là khái niệm chỉ dịch vụ/trung tâm chăm sóc khách hàng (CSKH) qua điện thoại, websites đang hứa hẹn trở thành một lĩnh vực hoạt động kinh doanh đầy tiềm năng tại Việt Nam, trong bối cảnh hội nhập với thế giới.
Hệ thống Call Center là điểm tiếp nhận mọi thông tin, yêu cầu từ phía khách hàng dưới mọi hình thức: thoại, e-mail, SMS, web, fax... và không phụ thuộc vào vị trí xuất phát của nguồn thông tin để phục vụ công tác CSKH, tiếp nhận yêu cầu, giải quyết khiếu nại... Ví dụ như một khách hàng muốn truy cập vào tài khoản ngân hàng của mình họ sẽ được hệ thống Call Center kết nối trực tiếp tới cơ sở dữ liệu (CSDL) của ngân hàng đó. Sau đó khách hàng sẽ tương tác trực tiếp với CSDL để thực hiện các yêu cầu của mình.
Mục đích Yêu cầu
Trong đồ án này sẽ tập trung xây dựng một hệ thống Callcenter với 3 chức năng chính. Khi khách hàng gọi tới tổng đài 1900 sẽ được nghe lời chào và hướng dẫn bấm phím.
Bấm phím 1
Cho phép khách hàng tra cứu thông tin kết quả xổ số một ngày bất kỳ, ngày tháng năm được nhập từ bàn phím có dạng xxyyzzz. Trong đó xx là ngày, yy là tháng và zzzz là năm. Nếu khách hàng nhập sai ngày tháng năm sẽ được thông báo và yêu cầu nhập lại.Ngày tháng năm được coi là sai khi khách hàng nhập vào chuỗi số có chưa ký tự *,# hoặc là một ngày tháng khống có kết quả trong database. Kết quả trả lời hoàn toàn là âm thanh thoại.
Bấm phím 2
Sử dụng dịch vụ quà tặng âm nhạc, cho phép khách hàng có thể gửi tặng một bản nhạc tới những người thân của mình cùng với lời nhắn của chính người gửi, thời điểm gửi sẽ do người gửi quyết định.khách hàng sẽ được hướng dẫn để nhập mã quà tặng,số điện thoại người nhận và thời gian gửi quà tặng, nếu khách hàng nhập sai sẽ được thông báo và yêu cầu nhập lại.Mã quà tặng sẽ là một chuỗi số có 4 chữ số, bị coi là không đúng khi chuỗi số chưa ký tự *,# hoặc là không tồn tại quà tặng này.Số điện thoại sẽ là một chuỗi số khách hàng nhập tùy ý cho tới khi nhấn phím #. Khách hàng sẽ được nghe lại số điện thoại vừa nhập và lời hướng dẫn nhấn phím # để đi đến bước tiếp theo, nhấn phím bất kỳ để nhập lại số điện thoại.Thời gian gửi quà tặng sẽ là một chuỗi số có dạng xxyyzztt, trong đó xx là phút, yy là giờ, zz là ngày và tt là tháng gửi quà tặng. Thời gian được coi là không đúng khi chuỗi số khách hàng nhập vào chứa ký tự *, # hoặc là một thời điểm trong quá khứ so với thời gian hiện tại của hệ thống. Cuối cùng khách hàng sẽ ghi âm lại lời nhắn của chính mình để gửi tới người nhận. Sau đó là lời cảm ơn và kết thúc quá trình gửi quà tặng.
Bấm phím 0
Cho phép kết nối trực tiếp khách hàng với nhân viên tư vấn chăm sóc khách hàng.
Hệ thống xây dựng đáp ứng được các chức năng đã đề ra, giải quyết tối đa các yêu cầu gọi đến và đảm bảo chất lượng âm thanh thoại.
Phân tích thiết kế
Kịch bản cho hệ thống
Khách hàng gọi đến 1900:
nhấn phím 1
nhấn phím 0
Chào mừng bạn đến với trung tâm vụ và chăm sóc khách hàng của chúng tôi. Nhấn phím 1 tra cứu kết quả xổ số. Nhấn phím 2 để gửi quà tặng âm nhạc, nhấn phím 0 để gặp nhân viên tư vấn khách hàng..
nhấn phím 2
Gặp nhân viên tư vấn
Gửi Quà tặng âm nhạc
Tra cứu kết quả xổ số
Menu chính
Hình 27 Kịch bản Menu chính của hệ thống
Quy trình tra cứu kết quả xổ số
Nhập ngày tháng năm , nhấn * để nhập lại
Đọc kết quả xổ số ngày tháng năm vừa được nhập
Ngày tháng năm đúng
Nhập ngày tháng năm muốn tra cứu kết quả xổ số theo định dạng:xxyyzzzz. Với xx là ngày, yy là tháng, còn zzzz là năm
Ngày tháng năm bạn nhập không đúng, xin vui lòng nhập lại.
Ngày tháng năm sai
Nhập lại ngày tháng năm
Kiểm tra ngày tháng năm
Cảm ơn quý khách đã sử dụng dịch vụ, nhấn * để tra cứu kết quả khác, nhấn # để trở về menu trước
Kết thúc cuộc gọi
Nhấn * để tra cứu kết quả khác
Không nhấn phím * hoặc # trong 30 giây
Nhấn # để trở về menu chính
Trở về menu chính
Hình 28 Quy trình tra cứu kết quả xổ số
Quy trình gửi quà tặng âm nhạc
Nhập mã quà tặng
Nhập lại mã quà tặng
Nhập số điện thoại người nhận quà tặng, nhấn phím # để kết thúc nhập số điện thoại và chuyển sang bước tiếp theo
Mã sai
Nhập mã số quà tặng, kết thúc bằng phím #. Để biết mã số quà tặng truy cập trang web:www…
Kiểm tra mã quà tặng
Mã số sai, xin vui lòng nhập lại
Mã đúng
Nhập số điện thoại người nhận
Đặt ngày giờ gửi quà tặng bằng cách nhấn giờ và ngày theo định dạng: giờgiờphútphút*ngàyngàythángtháng. Kết thúc bằng phím #
Ngày giờ đúng
Ghi âm lại lời nhắn và thực hiện đặt lịch gửi quà tặng
Ngày giờ nhập không đúng, xin vui lòng nhập lại
Hãy để lại lời nhắn sau tiếng Bíp
Nhập lại ngày giờ
nhấn phím #
Ngày giờ sai
Kiểm tra ngày giờ gửi quà tặng
Đọc lời nhắn
Nhập ngày giờ gửi quà
Quà tặng đã được gửi .Cám ơn quý khách đã sử dụng dịch vụ.
Kết thúc
gửi quà tặng
Không nhấn phím * hoặc # trong 30 giây
Trở về menu chính
Trở về đầu quy trình quà tặng âm nhạc
Nhấn phím *
Nhấn phím #
Hình 29 Quy trình gửi quà tặng âm nhạc
Quy trình gặp nhân viên tư vấn
Đưa vào hàng đợi chờ được trả lời đồng thời được nghe nhạc chờ
Nhân viên tư vấn trả lời khách hàng khi tớ lượt khách hàng đó
Kết thúc cuộc gọi
Hình 30 Gặp nhân viên tư vấn
Biểu đồ phân rã chức năng
Hình 31 Biểu đồ phân cấp chức năng
Biểu đồ ngữ cảnh
Hình 32 Biểu đồ ngữ ảnh
Biểu đồ luồng dữ liệu mức đỉnh
Hình 33 Biểu đồ luồng dữ liệu mức đỉnh
Để thực hiện được chức năng tra cứu kết quả xổ số, đầu vào người dùng phải nhập là ngày tháng năm muốn tra cứu. Sáu đó hệ thống sẽ truy vấn tới cớ sở dữ liệu với ngày tháng năm tương ứng, nếu có tồn tại kết quả thì hệ thống sẽ trả vè kết quả cho người gọi dưới dạng âm thanh, ngược lại nếu không tồn tại kết quả thì hệ thống sẽ thông báo và yêu cầu người gọi nhập ngày tháng năm khác.
Để có thể thực hiện được việc gửi quà tặng trong tương lai, phải sử dụng đến một tiện ích là Crontab của Linux, một tiện ích tương tự như schedule task của Window. Dựa vào đây, ta sẽ đặt lịch để tới thời điểm trong tương lai, Linux sẽ tự động thực thi một file .sh, file này đã được tạo ra trong quá trình người gửi gọi đến cho hệ thống. Nó có nhiệm vụ là di chuyển file .call, cũng đã được tạo ra trong quá trình người gửi gọi tới hệ thống. Khi file .call được di chuyển vào thư mục OUTGOING của Asterisk, hệ thống sẽ tự động gọi tới số điện thoại người nhận, thực thi file .php đã được tao ra như file .call và file .sh ở trên. Và file .php này sẽ thực hiện nhiệm vụ đọc số điện thoại người gửi, play lời nhắn và bản nhạc mà người gửi đã đăng ký...
Cơ sở dữ liệu
Cớ sở dữ liệu phục vụ cho hệ thống cũng khá đơn giản.
Hình 35 Cơ sở dữ liệu
Trong đó bảng KQXS dùng để lưu kết quả xổ số, trường date dùng dể lưu ngày tháng năm, trường ketqua dùng để lưu kết quả của ngày tháng năm đó. Trường ketqua sẽ có dạng:
0=XXXX&1=YYYY&2=ZZZZ-TTTT...
XXXX sẽ là giải đặc biệt, YYYY là giải nhất, ZZZZ và TTTT…là các giải nhì…
Bảng MSBH dùng để lưu mã số bài hát, trường msbh là mã số bài hát và trường tenbaihat là tên của bài hát. Bảng này nhằm mục đích để kiếm tra tính hợp lệ của mã bài hát khi khách hàng nhập vào.
Triển khai hệ thống
Mô hình hệ thống
Hình 36 Mô hình logic 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
1 Server cài Microsoft SQL Server 2005
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
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
Ngoài ra còn cần mod_ssl, wget…
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:
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
Cấu hình hệ thống Asterisk
Cấu hình các file .conf như sau:
Sip.conf
[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)
exten=>s,2,goto(mainmenu,s,2)
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 37 Cấu hình Softphone
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]
Description = Microsoft SQL Server
Driver = /usr/local/lib/libtdsodbc.so
Setup = /usr/lib/libtdsS.so
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
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)
{
$ketqua="";
$date=$day*1000000+$month*10000+$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 999999999))
{
}
$Gn = floor($number / 1000000); /* Millions (giga) */
$number -= $Gn * 1000000;
$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;
}
else
{
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)
{
$ngayht=substr($time,6,2);
if($ngayht<$ngay)
{
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;
}
Kết quả thực nghiệm
Vào chế độ dòng lệnh của Asterisk từ terminal của Linux.
Hình 38 Màn hình Asterisk CLI
Khi một Softphone đăng ký vào về thống:
Hình 39 Softphone đăng ký vào hệ thống
Khi gọi tới 1900
Hình 40 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 41 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).
Hình 42 Người gọi chọn Gửi quà tặng âm nhạc
Đá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.
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ị…
PHỤ LỤC
DANH MỤC CÁC THUẬT NGỮ VÀ TỪ VIẾT TẮT
QoS (Quality of Service ): Chất lượng dịch vụ.
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.
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).
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.
PSTN (Public Switched Telephone Network): mạng điện thoại chuyển mạch công cộng
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.
VoIP (Voice over Internet Protocol): một giao thức truyền tín hiệu giọng nói gói trong giao thức IP đã có sẵn.
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).
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)
RTCP (Real Time Control Protocol): Giao thức điều khiển thời gian thực đượ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.
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)
NGN (Next Generation Network ) :Mạng thế hệ mới
IVR (Interactive Voice Response) : Tương tác thoại
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
[1] RFC 3261 SIP : Session Initiation Protocol
[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 :
[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]
[12]
Các file đính kèm theo tài liệu này:
- Tìm hiểu công nghệ VoIP và xây dựng hệ thống Callcenter trên nền Asterisk.doc