Mô hình ứng dụng nàycho phép người dùng triển khai các hệ thống phục vụ tự động ở các ngân hàng, trườngđại học, trung tâm hỗ trợ khách hàng… Điểm nổi bật của mô hình ứng dụng này là phục
Trang 1LỜI CÁM ƠN
Lời đầu tiên tôi xin cám ơn chân thành và sâu sắc đến Thầy TS PHAN THÀNH CÔNG đã dành rất nhiều thời gian hướng dẫn tôi một cách tận tâm và sâu sát để
giúp tôi hoàn thành tốt luận văn này
Xin gởi lời cám ơn đến Thầy TS TÔ TUẤN đã có những góp ý hết sức tận tâm và
quý báu cho bản luận văn này
Tiếp theo tôi xin gởi lời cám ơn chân thành đến quý Thầy Cô Trường Đại Học Công Nghệ Thông Tin đã truyền đạt những kiến thức quý báu cho tôi trong suốt
quá trình học tập tại trường
Xin cám ơn các bạn học và các đồng nghiệp đã có những góp ý và động viên trong suốt thời gian qua
Cuối cùng xin cám ơn Gia Đình, Ba-Mẹ đã động viên tôi vượt qua mọi khó khăn
và trở ngại để hoàn thành tốt luận văn này
Trang 2
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Trang 3
NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN 1
Trang 4
NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN 2
Trang 5MỤC LỤC
MỤC LỤC 1
DANH MỤC CÁC TỪ VIẾT TẮT 4
DANH MỤC CÁC HÌNH 5
MỞ ĐẦU 1
CHƯƠNG 1: TỔNG QUAN 2
1.1 Giới thiệu 2
1.1.1 Các hệ thống ứng dụng tương tác với người dùng truyền thống 2
1.1.2 Xu thế hội tụ của các công nghệ 2
1.2 Mục tiêu nghiên cứu của luận văn 3
1.3 Giới thiệu các chương mục của luận văn 4
CHƯƠNG 2: KIẾN TRÚC VÀ CƠ CHẾ HOẠT ĐỘNG CỦA ASTERISK 5
2.1 Tổng quan về Asterisk 5
2.1.1 Giới thiệu chung về Asterisk 5
2.1.2 Các chức năng chính 6
2.1.2.1 Hộp thư thoại (Voicemail) 6
2.1.2.2 Chuyển cuộc gọi (Call Forwarding) 7
2.1.2.3 Hiển thị số gọi (Caller ID) 7
2.1.2.4 Tương tác thoại (IVR) 7
2.1.2.5 Chức năng Meet me conference 8
2.1.2.6 Chức năng Follow me 8
2.1.2.7 Hỗ trợ kênh kết nối ZAP 8
2.1.2.8 Time and Date 8
2.1.2.9 Call Parking 9
2.1.2.10 Remote call pickup 9
2.1.2.11 Privacy Manager 9
2.1.2.12 Backlist 9
2.2 Kiến trúc và cơ chế hoạt động 10
2.2.1 Phần lõi (core system) 10
2.2.1.1 Thành phần chuyển mạch PBX (PBX switching) 10
2.2.1.2 Thành phần khởi động ứng dụng (Application Launcher) 11
2.2.1.3 Thành phần chuyển đổi codec (Codec Translator) 11
2.2.1.4 Thành phần quản lý lịch biểu và I/O của hệ thống (Scheduler & I/O Manager) 11
2.2.1.5 Thành phần nạp động (Dynamic Module Loader) 11
2.2.2 Các API nạp động (Loadable Module API) 12
2.2.2.1 API dùng cho việc mã hóa và giải mã (Codec translator API) 12
2.2.2.2 API dùng cho các kênh kết nối (Asterisk Channel API) 12
2.2.2.3 API hỗ trợ cho việc định dạng file (Asterisk File Format API) 12
2.2.2.4 API hỗ trợ các ứng dụng bên ngoài (Asterisk Application API) 12
2.3 Tổng quan về tương tác thoại (IVR) 13
2.3.1 Kế hoạch quay số (Dialplan) 13
2.3.1.1 Ngữ cảnh (context) 14
2.3.1.2 Extension 14
2.3.1.3 Cơ chế bao hàm (include) của dialplan 15
Trang 62.3.2 Tương tác thoại (IVR) 20
2.3.2.1 Cơ chế hoạt động của IVR 21
2.3.2.2 Chức năng của IVR 21
2.3.2.3 Lợi ích của việc ứng dụng IVR 22
2.3.2.4 Một ứng dụng IVR 23
2.3.3 Giao diện cổng giao tiếp ứng dụng AGI (Asterisk Gateway Interface) 24
2.3.3.1 Cơ chế hoạt động của AGI 25
2.3.3.2 Khởi tạo ứng dụng AGI từ dialplan 25
2.3.3.3 Các hàm gọi từ xa được hỗ trợ thông qua AGI 25
2.3.3.4 Một ứng dụng AGI 26
2.3.3.5 Giao diện cổng giao tiếp ứng dụng phân tán (FastAGI) 28
2.4 Kết luận 29
CHƯƠNG 3: TỔNG QUAN VỀ NGÔN NGỮ VoiceXML 31
3.1 Giới thiệu chung về VoiceXML 31
3.2 Kiến trúc của một hệ thống ứng dụng trên nền VoiceXML 32
3.3 Cơ chế hoạt động của một hệ thống VoiceXML 33
3.4 Cấu trúc và quá trình thực thi của tài liệu VoiceXML 34
3.4.1 Giới thiệu chung 34
3.4.2 Quá trình thực thi của một tài liệu 34
3.4.3 Thực thi một ứng dụng đa tài liệu 36
3.4.4 Ứng dụng (Applications) 36
3.4.5 Các hội thoại cấp con (Sub-dialog) 36
3.5 Cấu trúc và ý nghĩa của các thành phần bên trong tài liệu VoiceXML 37
3.5.1 Cấu trúc của một hội thoại (dialog) 37
3.5.1.1 Thành phần form của tài liệu 37
3.5.1.2 Thành phần menu của tài liệu 49
3.5.1.3 Các thành phần liên kết trong tài liệu 51
3.5.2 Văn phạm và cơ chế nhập liệu cho người dùng 52
3.5.3 Kịch bản (scripting) và các luồng điều khiển 56
3.5.3.1 Biến và biểu thức 56
3.5.3.2 Điều khiển sự kiện 57
3.5.3.3 Một số phần tử khác liên quan đến nội dung thực thi của tài liệu VXML 58
3.6 Giải thuật phiên dịch các form trong tài liệu VoiceXML (FIA) 60
3.6.1 Cơ chế phiên dịch đối với form 60
3.6.2 Mô tả cụ thể của giải thuật FIA 61
3.6.2.1 Giai đoạn khởi tạo (Initializing phase) 62
3.6.2.2 Giai đoạn lựa chọn và thu thập thông tin (Select phase và Collect phase) 64
3.6.2.3 Giai đoạn xử lý chính (Process phase) 65
3.7 Kết luận 69
CHƯƠNG 4: XÂY DỰNG HỆ PHỤC VỤ TỰ ĐỘNG TRÊN NỀN ASTERISK 70
4.1 Giới thiệu 70
4.2 Kiến trúc chung của hệ thống 71
4.2.1 Tổng đài Asterisk 71
4.2.2 Trình duyệt tài liệu VoiceXML (VoiceXML browser) 72
4.2.3 Máy chủ ứng dụng (Application server) 72
4.2.4 Trình chủ SATC 72
4.3 Hiện thực các module 73
4.3.1 Trình chủ SATC (SATC Server) 73
4.3.2 Trình duyệt VoiceXML (VoiceXML browser) 76
Trang 74.4.1 Biên dịch và cài đặt 79
4.4.2 Cấu hình trên Asterisk 79
4.4.3 Cơ chế vận hành của hệ thống 81
4.5 Kết luận 83
CHƯƠNG 5: KẾT QUẢ THỰC NGHIỆM 84
5.1 Mô hình ứng dụng 84
5.2 Cấu hình và tổ chức dữ liệu của hệ thống 85
5.2.1 Định nghĩa kế hoạch quay số của hệ thống 85
5.2.2 Tổ chức cơ sở dữ liệu thông tin người dùng của hệ thống 86
5.2.3 Xây dựng tài liệu VoiceXML cho ứng dụng 86
5.2.4 Kịch bản hỗ trợ việc truy vấn cơ sở dữ liệu trên máy chủ ứng dụng 88
5.3 Cơ chế hoạt động của hệ thống 89
5.4 Đánh giá kết quả đạt được 90
5.5 Kết luận 91
CHƯƠNG 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 92
6.1 Kết luận 92
6.2 Hướng phát triển 93
TÀI LIỆU THAM KHẢO 94
Trang 8DANH MỤC CÁC TỪ VIẾT TẮT
ASR : Automated Speech Recognition
IVR: Interactive Voice Response
SSXML: Speech Synthesis Markup Language
SRGP: Speech Recognition Grammar Specification
GRXML: Grammar Recognition XML
VXML: Voice Extension Markup Language
DTMF: Dual Tone Multi Frequency
STT: Speech-To-Text
TTS: Text-To-Speech
SATC: Simple ASCII Telephony Control
AMI: Asterisk Manager Interface
AGI: Asterisk Gateway Interface
FastAGI: Fast Asterisk Gateway Interface
IAX: Internal Asterisk Exchange
TDM: Time-division Multiplexing
FIA: Form Interpretation Algorithm
Trang 9DANH MỤC CÁC HÌNH
Hình 2.1: Một mô hình ứng dụng thực tiễn của Asterisk
Hình 2.2: Kiến trúc cơ bản của một hệ thống Asterisk
Hình 3.1: Kiến trúc của một hệ thống ứng dụng VoiceXML
Hình 3.2: Một ứng dụng VoiceXML đa tài liệu
Hình 3.3: Cấu trúc chung của một form trong tài liệu VoiceXML Hình 3.4: Mô hình tóm tắt của giải thuật FIA
Hình 3.5: Minh họa một form được xử lý bởi giải thuật FIA
Hình 3.10: Mô hình tóm tắt về hoạt động của văn phạm ngữ nghĩa Hình 4.1: Kiến trúc của hệ phục vụ tự động trên nền Asterisk Hình 4.2: Cấu trúc họat động của trình chủ SATC
Hình 4.3: Cấu trúc họat động của trình duyệtVoiceXML
Hình 5.1: Mô hình của một hệ phục vụ tự động cho ngân hàng
Trang 10MỞ ĐẦU
Ngày nay với sự phát triển vượt bậc của Internet, các nguồn thông tin khắp nơi trênthế giới đều được chia sẻ với nhau thông qua mạng Internet toàn cầu Với sự hỗ trợcủa công nghệ và Internet, các chia sẻ thông tin, các trao đổi kinh doanh và cả việcmua bán cũng như các giao tác khác của việc kinh doanh cũng đều được thực hiệntrên môi trường trực tuyến (online)
Bên cạnh Internet thì viễn thông cũng được đánh giá là một lĩnh vực phát triển khámạnh mẽ trong những năm gần đây Tuy nhiên với nhu cầu phát triển của các hệthống ứng dụng thông minh tương tác với nguời dùng như Call Center, Help line,Tele marketing,… thì hệ thống viễn thông hiện tại không thể hỗ trợ hiệu quả Một hệthống phục vụ thông minh và hiệu quả phải đảm bảo tối ưu về chi phí, tự động hóa vềhoạt động và ứng dụng các công nghệ hiện đại ngày nay như VoiceXML một ngônngữ đánh dấu mở rộng cho việc phát triển các ứng dụng trong lĩnh vực viễn thông thế
hệ mạng tiếp theo (NGN)
Luận văn đã xây dựng và triển khai thành công mô hình ứng dụng phục vụ tự độngvới VoiceXML trên nền tổng đài mã nguồn mở VoIP Asterisk Mô hình ứng dụng nàycho phép người dùng triển khai các hệ thống phục vụ tự động ở các ngân hàng, trườngđại học, trung tâm hỗ trợ khách hàng…
Điểm nổi bật của mô hình ứng dụng này là phục vụ tự động, chi phí tối thiểu cho việctriển khai (do xây dựng trên hệ thống mã nguồn mở) và quan trọng nhất là nó tạo nên
sự hội tụ của công nghệ viễn thông và Internet vốn đang phát triển rất mạnh hiện naytrên thế giới
Với những thành công đạt được thì luận văn cũng còn những hạn chế do yếu tố giới hạn về thời gian Những những tính năng khiếm khuyết của hệ thống sẽ được tiếp tục nghiên cứu và phát triển trong thời gian tới để mô hình ứng dụng được xây dựng sẽ hoàn thiện hơn
Trang 11CHƯƠNG 1: TỔNG QUAN 1.1 Giới thiệu
1.1.1 Các hệ thống ứng dụng tương tác với người dùng truyền thống
Các hệ thống viễn thông vẫn không ngừng phát triển và được ứng dụng vào đời sốngcủa con người bởi tính tiện lợi cũng như hiệu quả mang lại của nó Chúng sử dụngmột dạng thức giao tiếp mang tính chất tự nhiên đó là ngôn ngữ con người Hơn thếnữa, các hệ thống mạng điện thoại di động không dây làm cho việc truy cập đến cácmạng điện thoại dễ dàng và linh động hơn Trong các hoạt động kinh doanh, người ta
đã sử dụng công nghệ IVR (Interactive Voice Response) trong việc tự động hóa mộtphần việc phục vụ khách hàng Tuy nhiên tất cả các ứng dụng phục vụ tự động đượcxây dựng trên nền công nghệ truyền thống trên đều dựa vào tính chất tự nhiên Điểmgiới hạn lớn nhất là những công nghệ này chỉ được xây dựng cho các ứng dụngchuyên biệt sử dụng các ngôn ngữ lập trình cấp cao và rất khó trong việc tối ưu hóacũng như mở rộng
1.1.2 Xu thế hội tụ của các công nghệ
Ngày nay với xu thế phát triển chung và khuynh hướng hội tụ của hai nền công nghệ
là Internet và viễn thông đã tạo ra thuận lợi lớn cho các nhà phát triển ứng dụng Sựhội tụ này sẽ tạo ra những ứng dụng đa dịch vụ và tận dụng được thế mạnh của cả hailĩnh vực nêu trên
Xuất phát từ những giới hạn của các ứng dụng IVR truyền thống và xu hướng hội tụcủa các công nghệ tương lai, những tổ chức nghiên cứu và công ty lớn trong lĩnh vựcviễn thông như: W3C, IBM, Lucent, AT&T, Motorola… đã xây dựng một chuẩncông nghệ chung cho các ứng dụng tương tác với người dùng đó là ngôn ngữ đánhdấu mở rộng cho thoại VoiceXML VoiceXML còn được gọi là ngôn ngữ siêu vănbản của các ứng dụng viễn thông Nó hỗ trợ xây dựng các ứng dụng tương tác vớingười dùng dựa trên nền Internet kết hợp với các hệ thống viễn thông
Trang 12Đặc biệt, với sự phát triển của các hệ thống chuyển mạch gói (packet switch) hiện naythì các hệ thống viễn thông truyền thống dần chuyển từ chuyển mạch kênh (circuitswitch) sang chuyển mạch gói Các hệ thống chuyển mạch gói sẽ tận dụng được tối đaviệc phát triển các dịch vụ cho người dùng từ hai nền công nghệ Internet và viễnthông Một hệ thống tổng đài chuyển mạch gói mã nguồn mở nổi tiếng được nhiềungười dùng biết đến là Asterisk với những ưu điểm như: miễn phí (mã nguồn mở),được xây dựng bởi cả một cộng đồng lớn trên thế giới, có đầy đủ những tính năng củamột hệ thống PBX, dễ nâng cấp và phát triển…
Thế nên việc triển khai VoiceXML trên tổng đài Asterisk sẽ đóng góp một phần quantrọng trong việc tạo ra một mô hình ứng dụng hội tụ của hai công nghệ lớn là viễnthông và Internet Mô hình này sẽ cho phép hiện thực các hệ thống phục vụ tự độngdựa trên sự tương tác qua ngôn ngữ tự nhiên hay phím nhập với chi phí tối ưu Tháchthức lớn nhất cho việc triển khai là sự am hiểu về công nghệ VoiceXML, kiến trúcbên trong của hệ thống Asterisk và giải pháp tích hợp VoiceXML vào Asterisk
1.2 Mục tiêu nghiên cứu của luận văn
Luận văn tập trung nghiên cứu về VoiceXML, kiến trúc bên trong của Asterisk cũngnhư các giao diện hỗ trợ xây dựng ứng dụng của hệ thống này Phần tiêu điểm quantrọng nhất của nghiên cứu là xây dựng trình duyệt VoiceXML để tích hợp công nghệVoiceXML vào hệ thống Asterisk và tạo ra một mô hình ứng dụng phục vụ tự độngcho các hệ thống tương tác và trả lời tự động ở các ngân hàng (thông tin về tài khoảncủa khách hàng), trường đại học (thông tin về điểm thi, lịch học, …), các trung tâm hỗtrợ khách hàng…
Mô hình ứng dụng được xây dựng có những điểm ưu việt sau:
- Cho phép truy cập thông tin được lưu trữ trên các Webserver cộng tác
- Cho phép tận dụng các công cụ phát triển Web đã có để xây dựng cácứng dụng IVR dựa trên VoiceXML mà không phải quan tâm đến IVR platform ởmức thấp và các chi tiết truy cập cơ sở dữ liệu
- Cho phép giảm thiểu chi phí đầu tư ban đầu, chi phí duy trì hoạt động
và nâng cấp hệ thống
Trang 131.3 Giới thiệu các chương mục của luận văn
Phần trình bày của luận văn sẽ bao gồm các nội dung chính sau:
Chương 1: Tổng quan
Giới thiệu tổng quan về bối cảnh chọn đề tài, mục tiêu nghiên cứu và những đónggóp của luận văn
Chương 2: Kiến trúc và cơ chế hoạt động của Asterisk
Giới thiệu về kiến trúc bên trong của Asterisk ở góc độ lập trình Tìm hiểu về cácchức năng cũng như khả năng hỗ trợ ứng xây dựng ứng dụng với IVR Phần quantrọng nhất là cơ chế hoạt động của giao diện hỗ trợ xây dựng ứng dụng củaAsterisk (AGI và FastAGI)
Chương 3: Tổng quan về VoiceXML
Giới thiệu tổng quan về ngôn ngữ đánh dấu mở rộng cho thoại VoiceXML Phầnnày sẽ giới thiệu đầy đủ về cấu trúc và ý nghĩa của các phần tử bên trong một tàiliệu VoiceXML Giải thuật phiên dịch các form (FIA) bên trong tài liệu cũngđược trình bày kỹ ở phần này
Chương 4: Xây dựng hệ phục vụ tự động trên nền Astterisk
Xây dựng một mô hình ứng dụng phục vụ tự động thông qua việc tích hợpVoiceXML vào hệ thống Asterisk Phần chính yếu của hệ thống là trình duyệt tàiliệu VoiceXML Trình duyệt này đóng vai trò quan trọng trong việc duyệt qua nộidung của tài liệu VoiceXML dựa trên giải thuật phiên dịch các form (FIA) vàtương tác với Asterisk cũng như máy chủ ứng dụng để đáp ứng các yêu cầu củangười dùng
Chương 5: Kết quả thực nghiệm
Giới thiệu một mô hình ứng dụng cụ thể của ứng dụng trong hệ thống phục vụ tựđộng của ngân hàng và đánh giá kết quả đạt được
Chương 6: Kết luận và hướng phát triển
Tổng kết những thành quả đạt được và hướng mở rộng phát triển trong tương laicủa nghiên cứu
Trang 142 CHƯƠNG 2: KIẾN TRÚC VÀ CƠ CHẾ HOẠT ĐỘNG CỦA
ASTERISK 2.1 Tổng quan về Asterisk
2.1.1 Giới thiệu chung về Asterisk
Mark Spencer đã cho ra đời một phần mềm mã nguồn mở Asterisk (năm 1999) thựchiện chức năng của một tổng đài truyền thống (PBX) và được xem là một sự kiện làmthay đổi lớn ngành công nghiệp viễn thông vốn đã từ lâu ở vị thế độc quyền [2].Asterisk là hệ thống chuyển mạch mềm (soft switch), là phần mềm nguồn mở đượcviế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ủatổng đài PBX và hơn thế nữa Asterisk cho phép kết nối đến hầu hết các mạng có sẵnnhư IP, PSTN với nhau thông qua các chuẩn giao thức SIP, MGCP, H323 và đặc biệtIAX (Inter-Asterisk eXchange), một giao thức riêng của Asterisk [1]
Asterisk thoạt đầu được phát triển trên nền x86 cho Linux, nhưng giờ đây nó cũng cóthể biên dịch và chạy trên OpenBSD, FreeBSD, Mac OS X và Microsoft Windows
Hình 2.1: Một mô hình ứng dụng thực tiễn của Asterisk
Trang 15Hệ thống Asterisk được rất nhiều người dùng đón nhận với những ưu điểm:
- Hỗ trợ VoIP, nên có thể tận dụng tối đa đường truyền Internet và có thể sử dụngmọi lúc mọi nơi
- Là phần mềm mã nguồn mở nên có thể nghiên cứu và phát triển theo mục đíchriêng
- Chi phí cho việc triển khai, bảo trì củng như sử dụng là thấp rất nhiều lần so vớicác hệ thống tổng đài truyền thống
Asterisk hoàn toàn có thể được ứng dụng thay thế cho các hệ thống truyền thốngnhư:
- PBX (Private Branch eXchange)
- IVR (Interactive Voice Response)
- Conferencing Server
- Calling Card Application
- Predective Dialer
- Call Queuring with Remote Agents
- Remote office for existing PBX
- Number Translation
2.1.2 Các chức năng chính
Asterisk hỗ trợ rất nhiều tính năng cho người dùng Ngoài những tính năng cơ bảncủa một PBX thuần túy Asterisk còn hỗ trợ một số tính năng sau:
2.1.2.1 Hộp thư thoại (Voicemail)
Cho phép hệ thống nhận các thông điệp tin nhắn ở dạng thoại của người dùng
Khi một điện thoại đăng ký tính năng Voicemail thì mỗi khi có cuộc gọi đến mà máybận hay không nhấc máy, hệ thống sẽ định hướng trực tiếp các cuộc gọi đến hộp thưthoại tương ứng
Asterisk có khả năng lưu thư thoại và gửi chúng dưới dạng một file đính kèm đến mộtđịa chỉ email được chỉ định trước
Trang 16Voicemail cung cấp cho người sử dụng nhiều tính năng lựa chọn như:
- Lưu giữ các tin nhắn thoại (incoming voice message) trong các hộp thư đinhnghĩa của người dùng
- Xác nhận khi truy cập vào hộp thư thoại bằng mật mã
- Gửi mail báo khi có thông điệp Voicemail mới
- Chuyển và nhận tin nhắn từ một hộp thư thoại khác
2.1.2.2 Chuyển cuộc gọi (Call Forwarding)
Chức năng này 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 khibậ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ớithời gian định trước
2.1.2.3 Hiển thị số gọi (Caller ID)
Chức năng này cho phép xác định thông tin của số thuê bao gọi đến Thông tin này cóthể bao gồm số và tên của số gọi đến Tính năng này rất hữu ích, nó cho phép biếtchính xác số gọi đến, gọi từ đâu và trong một số trường hợp biết chắc số đó là ai Dựavào tính năng này người dùng có thể quyết định tiếp nhận hay không tiếp nhận cuộcgọi dựa vào caller ID (Ngăn một số cuộc gọi ngoài ý muốn)
2.1.2.4 Tương tác thoại (IVR)
IVR (Interactive Voice Response) là một kỹ thuật cho phép hệ thống tương tác tựđộng với người dùng Các tổ chức và công ty ngày càng triển khai rộng rãi các ứngdụng dựa trên chức năng IVR nhằm mục tiêu giảm thiểu chi phí
Thông thường các IVR sử dụng cơ chế “pre-record voice prompt” và các tùy chọn đểchuyển tải thông tin đến người dùng và cơ chế nhập phím DTMF được dùng để thuthập thông tin input của người dùng Với các hệ thống IVR hiện đại thì chức năng thuthập thông tin input của người dùng sẽ dựa trên cơ chế nhập dữ liệu thoại kết hợp vớinhận dạng giọng nói
Trang 17Các ứng dụng được xây dựng dựa trên công nghệ IVR bao gồm:
- Voice-Mail, Fax-Mail
- Đặt mua hàng
- Truy vấn thông tin đặt mua và chuyển hàng
- Đặt và kiểm tra thông tin vé máy bay
- Các dịch vụ của ngân hàng (chuyển tiền, kiểm tra tài khoản, )
- Thông tin về giá (của các sản phẩm hay chứng khoán)
- Thông tin địa chỉ các nơi giải trí trong thành phố…
2.1.2.5 Chức năng Meet me conference
Asterisk hỗ trợ chức năng conferencing tương đối tốt Người dùng có thể cấu hìnhmột hoặc nhiều conference room khác nhau với các mã pin tương ứng Tính năng nàycho phép tổ chức các cuộc hội thảo trực tuyến từ xa rất hiệu quả
2.1.2.6 Chức năng Follow me
Một tính năng khá hay khác cũng được Asterisk hỗ trợ đó là Follow me Với tínhnăng này người dùng hoàn toàn có thể nhận được cuộc gọi đến số của mình thông quađiện thoại di động hay PSTN khi không có ở bàn làm việc để nhận cuộc gọi Cuốicùng hệ thống sẽ chuyển cuộc gọi vào hộp thư thoại nếu tất cả các kênh liên lạc trênđều bận
2.1.2.7 Hỗ trợ kênh kết nối ZAP
Asterisk hỗ trợ người dùng cấu hình nhiều giao diện giao tiếp analog hay digital đểkết nối với các mạng PSTN khác thông qua ZAP card Chúng ta có thể cấu hình nhiềuZAP card trên một hệ thống để hỗ trợ nhiều kênh giao tiếp khác nhau
2.1.2.8 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 ứng dụng cụ thể khác, ví dụ nhân viên chỉ được cho phép sử dụng máy điện thoạitrong 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ênngoài
Trang 182.1.2.9 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 gọi đang chờ trên đó và từ đây có thể gặp nhau và đàm thoại
2.1.2.10 Remote call pickup
Đây là tính năng cho phép người dùng 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 Tính năng này rất hữu ích khi ngườidùng không ở nơi bàn làm việc của mình nhưng vẫn muốn nhận được cuộc gọi đếnmột cách tựu động không cần cơ chế chuyển cuộc gọi
2.1.2.11 Privacy Manager
Asterisk cung cấp tính năng tiện dụng khác nữa là chỉ cho phép một số điện thoạiđượ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ó trongdanh sách định sẵn sẽ không thực hiện cuộc gọi được
2.1.2.12 Backlist
Chức năng 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)
Trang 192.2 Kiến trúc và cơ chế hoạt động
Một hệ thống Asterisk sẽ có kiến trúc cơ bản như sau [10]:
Hình 2.2: Kiến trúc cơ bản của một hệ thống Asterisk
Kiến trúc của một hệ thống Asterisk bao gồm hai thành phần quan trọng sau:
2.2.1 Phần lõi (core system)
Phần lõi của một hệ thống Asterisk bao gồm các thành phần chính sau[8]:
Trang 202.2.1.2 Thành phần khởi động ứng dụng (Application Launcher)
Là thành phần giữ vai trò cho việc nạp các ứng dụng của hệ thống như: Voicemail,File playback hay liệt kê danh bạ (Directory listing) Thành phần này được dùng để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…
2.2.1.3 Thành phần chuyển đổi codec (Codec Translator)
Thành phần này giữ vai trò quan trọng trong việc sử dụng các module codec trongviệc mã hóa và giải mã các chuẩn định dạng nén của dữ liệu âm thanh được dùngtrong công nghệ viễn thông Nhiều module codec được thiết lập sẵn bên trong hệthống và chúng sẽ được lựa chọn cho việc mã hóa và giải mã dữ liệu sao cho đảm bảođược chất lượng của dữ liệu âm thanh và tối ưu băng thông đường truyền
2.2.1.4 Thành phần quản lý lịch biểu và I/O của hệ thống (Scheduler & I/O Manager)
Thành phần này đóng vai trò quan trọng trong việc điều khiển lịch biểu cho các tác vụcấp thấp và quản lý hệ thống nhằm tối ưu hóa hiệu suất hoạt động của hệ thống trongmọi tình huống Scheduler and I/O Manager đảm nhiệm các ứng dụng nâng cao, cácchức năng được phát triển bởi cộng đồng phát triển Asterisk
2.2.1.5 Thành phần nạp động (Dynamic Module Loader)
Khi Asterisk khởi động, đầu tiên thành phần Dynamic module loader sẽ nạp và khởitạo cho từng thành phần: driver của thiết bị, các kênh giao tiếp, các format, các thànhphần cuối của việc ghi âm chi tiết cuộc gọi, codec, các ứng dụng và hơn thế nữa đó làliên kết với các API tương ứng bên trong của hệ thống
Sau khi việc khởi tạo của hệ thống hoàn tất thành công, hệ thống PBX SwitchingCore của Asterisk sẽ chuyển sang trạng thái sẵn sàng hoạt động chuyển mạch cuộcgọi Các cuộc gọi được chuyển mạch tuỳ vào kế hoạch quay số dialplan được thể hiệntrong file cấu hình extension.conf
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ếpnhư SIP, Zaptel, IAX Nên hệ thống Asterisk phải đảm trách nhiệm vụ liên kết cácgiao tiếp khác nhau đó để xử lý cuộc gọi
Trang 212.2.2 Các API nạp động (Loadable Module API)
Hệ thống Asterisk có bốn 4 nhóm API chức năng chính hỗ trợ cho các module, thiết
bị phần cứng và các giao thức của hệ thống:
2.2.2.1 API dùng cho việc mã hóa và giải mã (Codec translator API)
Cung cấp các API hỗ trợ cho việc mã hóa và giải mã nhiều lọai định dạng âm thanh khác nhau GMS, G729, U-Law, Mu-Law,…
2.2.2.2 API dùng cho các kênh kết nối (Asterisk Channel API)
Cung cấp API hỗ trợ cho việc điều khiển các loại cuộc gọi của người dùng đến cáckết nối như: VoIP, ISDN, PRI hay các công nghệ khác API này sẽ điều khiển mộtcách chi tiết ở mức thấp của các kết nối nêu trên Đây là đầu mối cho việc kết nối cáccuộc gọi tương thích với nhiều chuẩn khác nhau như SIP, IAX, H323 Zaptel…
2.2.2.3 API hỗ trợ cho việc định dạng file (Asterisk File Format API)
Cung cấp API điều khiển việc đọc và ghi các chuẩn định dạng file khác nhau
như mp3, wav, gsm…cho việc lưu trữ thông tin trong hệ thống
2.2.2.4 API hỗ trợ các ứng dụng bên ngoài (Asterisk Application API)
Cung cấp API cho phép thực thi nhiều module tác vụ thực hiện nhiều chức năng khácnhau trên hệ thống Các module bao gồm tất cả các ứng dụng được thực thi trong hệthống Asterisk như hôp thư thoại, hiển thị thông tin cuộc gọi, hội thảo trực tuyến, liệt
kê danh bạ …và tất cả những ứng dụng khác có thể được phát triển bởi cộng đồngAsterisk hay người dùng [1]
Một API rất quan trọng hỗ trợ người dùng phát triển các ứng dụng của mình đó làAsterisk Gateway Interface (AGI, tương tự như CGI trên nền Web) Đây là cơ chếkích hoạt ứng dụng bên ngoài, cho phép phát triển các ứng phức tạp với một số ngônngữ như PHP, Perl, Java hay C/C++ Với API này, khả năng viết các ứng dụng và tùybiến rất lớn
Trang 22Kiến trúc trên có những ưu điểm sau:
- Sử dụng những API trên Asterisk sẽ đạt được một mức độ trừu tượng hóa giữacác chức năng cốt lõi của hệ thống (như một PBX) với các công nghệ khác tồn tạitrong công nghệ viễn thông
- Cơ chế module hóa sẽ cho phép Asterisk tích hợp một cách hiệu quả giữa các hệcông nghệ phần cứng chuyển mạch kênh (Circuit switching) truyền thống đã tồntại với các công nghệ chuyển mạch gói (Packet switching) đang phát triển mạnh
mẽ ngày nay và trong tương lai
- Khả năng hỗ trợ nạp các codec module cho phép hệ thống có thể tối ưu hóa việcnén dữ liệu thoại để truyền đi một cách hiệu quả trên hệ thống chuyển mạch gói(Packet switch) Đặc biệt là việc truyền dữ liệu thoại trên các đường truyền cóbăng thông thấp như modem truyền thống mà vẫn đảm bảo được chất lượng của
dữ liệu thoại
- Các ứng dụng API cung cấp một cơ chế xây dựng và sử dụng rất uyển chuyển cácmodule ứng dụng để thực hiên những chức năng cũng rất uyển chuyển theo yêucầu sử dụng Bên cạnh đó các API này sẽ tạo ra một cơ chế mở cho phép ngườidùng phát triển các ứng dụng phù hợp từng nhu cầu và tình huống thực tiễn
2.3 Tổng quan về tương tác thoại (IVR)
2.3.1 Kế hoạch quay số (Dialplan)
Dialplan được xem là trái tim của Asterisk vì mọi thứ đều được bắt đầu từ đây[9]
Có 2 file quan trọng giữ vai trò cấu hình cho dialplan trong Asterisk được lưu ở thưmục /etc/asterisk là:
- extensions.conf: là tập tin cấu hình truyền thống cho dialplan và vẫn được khuyến
khích sử dụng nhiều nhất Các thông tin trong file cấu hình được biểu thị ở dạngkịch bản đơn giản
- extensions.ael: sử dụng ngôn ngữ mở rộng mới của Asterisk để định nghĩa
dialplan
Trang 23Một dialplan cơ bản dạng truyền thống bao gồm các thành phần sau:
2.3.1.1 Ngữ cảnh (context)
Một dialplan thường được chia thanh nhiều phần khác nhau và được gọi là các ngữcảnh (context) [9] Bất cứ dialplan nào cũng sẽ bắt đầu với ngữ cảnh [general] Ngữcảnh này sẽ là nơi định nghĩa các cấu hình toàn cục của hệ thống
Ngoại trừ ngữ cảnh toàn cục của hệ thống nêu trên bắt buộc phải là có tên là general,thì các ngữ cảnh khác hoàn toàn có thể được đặt tên tùy ý:
Thế nên mỗi khi thay đổi thông tin trong file extension.conf, thì file yêu cầu hệ thốngkhởi nạp lại thông qua lệnh “reload now” hay “extensions reload”
Cú pháp đầy đủ của một extension như sau:
Exten => Extension, Priority, Application
- Extension: Tên hoặc là số được gọi đến
- Priority: độ ưu tiên thực thi của extension Extension có giá trị của độ ưu tiên thấp
nhất sẽ được ưu tiên thực hiện trước
- Application: cho Asterisk biết là phải thực thi ứng dụng nào tương ứng với cuộc gọi
Dưới đây là các hàm cơ bản thường được sử dụng trong extension:
- Answer(): trả lời cuộc gọi Khi có một cuộc gọi đến ứng bởi tín hiệu rung chuông,
ứng dụng này sẽ báo với Asterisk trả lời cuộc gọi
- Hangup(): ứng dụng này ngược lại với Answer(),cuộc gọi sẽ bị kết thúc khi ứng
dụng này được gọi
- Playback(file_audio): thực thi một file âm thanh được chỉ định bởi biến file_audio.
Các file âm thanh mặc định được lưu ở thư mục “/var/lib/asterisk/sounds/”
Trang 24- Wait(number): thực hiện trạng thái chờ trong vòng number giây trước khi chuyển
sang các ứng dụng khác
- NoOp(string): hệ thống sẽ không làm gì cả khi gặp ứng dụng này và chuỗi “string”
sẽ được hiển thị trên CLI của hệ thống
- VoiceMail(mailbox,u): Cho phép người dùng chuyển tin nhắn vào hộp thư thoại
- VoiceMailMain(): cho phép người dùng nhận tin nhắn trong hộp thư thoại
- AGI(): hàm thực thi các ứng dụng AGI
Ví dụ: một ngữ cảnh có các extension như sau:
2.3.1.3 Cơ chế bao hàm (include) của dialplan
Với cơ chế này hệ thống sẽ cho phép định nghĩa một ngữ cảnh có thể bao hàm nhiềungữ cảnh khác bên trong nó
Trang 252.3.1.4 Lập trình với dialplan
Trong Asterisk các thủ tục hay chương trình ứng dụng có thể được lập trình nội tạithông qua các hàm ứng dụng được xác định trong các extension của dialplan.Dialplan bản chất định nghĩa của nó giống như một chương trình cơ bản Ngoài ra nócòn hỗ trợ thêm các tính năng sau:
Biến có thể được khai báo và gán giá trị ngay trong dialplan
Biến được tạo ra và gán giá trị thông qua hàm Set()
Thông thường có 3 loại biến cơ bản sau được sử dụng trên hệ thống Asterisk:
Cú pháp khai báo và gán giá trị trong hàm Set() như sau:
Set(<Tên_biến>=<giá_trị>, g)
Ví dụ:
exten => 1004,1,Set(READABLEANYWHERE = 23,g)
exten => 1004,n,NoOp(${READABLEANYWHERE})
Cú pháp khai báo và gán giá trị trong hàm Set() như sau:
Set(<Tên_biến>=<giá_trị>)
Ví dụ:
exten => 1005,1,Set(READABLEHEREONLY= 42)
exten => 1005,n,NoOp(${READABLEHEREONLY})
có thể được truy xuất trực tiếp trong dialplan mà không cần khai báo
Trang 26Ví dụ:
exten => 1006,1,NoOp(Dialed number: ${EXTEN})
định nghĩa Đề mục được nhảy đến này có thể trong cùng một extension:
Trang 27lệnh goto(), nhưng lệnh chỉ được thực hiện khi biểu thức điều kiện được thỏa.
exten => 1014,1,Answer()
exten => 1014,n,Set(Favoritestation = 0815)
exten => 1014,n,NoOp(Check to see if ${Favoritestation} is calling.)
exten => 1014,n,GotoIf($[${CALLERID(num) = ${Favoritestation}]?yes,no)
thực thi ngay khi người gọi cúp máy
Trang 28- Extension t: điều khiển việc timeout của một ngữ cảnh Nếu như không
có input của người dùng cho một IVR menu trong một khoảng thời gian nhất địnhthì extension này sẽ được thực thi
Ví du:
[mainmenu]
exten => 10,1,Answer()
exten => 10,n,Background(marryme); "Marry me? Press 1 for yes, 2 for no."
exten => 1,1,Playback(thank-you-cooperation) ; 1 => "Thank you."
exten => 1,n,Hangup()
exten => 2,1,Playback(hangup-try-again) ; 2 => "Hang up and try again."
exten => 2,n,Hangup()
exten => t,1,Hangup() ; no input => hang up
người dùng Tuy nhiên có trường hợp là chúng ta không biết rõ tên cũng như sốđiện thoại gọi đến (chẳng hạn từ mạng PSTN) thì Asterisk hỗ trợ một extension đăcbiệt đó là s
Trang 29Ví dụ: Nếu như một số gọi đến mà không nằm trong các số đã được định nghĩa trongcác extension khác thì extension s sẽ được thực thi.
Macro: để làm giảm tính phức tạp của các đề mục định nghĩa trong dialplan,
Asterisk hỗ trợ cơ chế định nghĩa macro Thay vì phải định nghĩa toàn bộ các đề mụctrong một ngữ cảnh, thì tất cả các phần phức tạp và được gọi nhiều đến nhiều lần sẽđược định nghĩa trong một macro
Khai báo của một macro tương ứng như sau:
[macro-macroname]
;Khai báo của các ngữ cảnh
Macro được gọi đến trong một ngữ cảnh thông qua cú pháp sau: Macro(macroname)
2.3.2 Tương tác thoại (IVR)
Như đã giới thiệu ở trên, cơ chế tương tác thoại (IVR) cho phép các nhà khai thác xâydựng hệ thống tương tác với người dùng hay các hệ thống phục vụ tự động sao chophát huy tối đa khả năng tự động của hệ thống và giảm thiểu chi phí về nhân lực.Phần này sẽ trình bày về cơ chế hoạt động, các mudule liên quan cũng như những lợiích mang lại từ việc sử dụng cơ chế này
Trang 302.3.2.1 Cơ chế hoạt động của IVR
Cuộc gọi sẽ được chuyển đến ứng dụng IVR tương ứng được định nghĩa sẵn bởi hệthống Mỗi một số được gọi đến sẽ tương ứng với việc thực thi một số ứng dụngtương ứng IVR sẽ xác định ứng dụng tương ứng của một số được gọi thông các biến
hệ thống được định nghĩa sẵn ở dạng kich bản hệ thống mà chúng ta thường goi làdialplan
Ứng dụng IVR đầu tiên khi nhận được một cuộc gọi nó sẽ trả lời tự động cho cuộc gọi
đó và xử lý các dịch vụ được yêu cầu, chẳng hạn như Voicemail Một ứng dụng hoàntoàn có thể tự nó xử lý một cuộc gọi của người dùng hoặc chuyển đến cho các ứngdụng khác xử lý các yêu cầu thêm vào của khách hàng hoặc nó có thể chuyển cuộcgọi đến cho người phục vụ (Live agent) Một ứng dụng sẽ thực thi các yêu cầu củangười dùng dựa trên các thủ tục riêng của nó đã được định nghĩa sẵn Khi một ứngdụng kết thúc thì cuộc gọi sẽ kết thúc hay sẽ được chuyển sang cho một ứng dụngkhác
Như vậy một ứng dụng IVR được xây dựng chủ yếu dựa vào việc định nghĩa các phần
tử bên trong của dialplan để khai thác các hàm dịch vụ hay ứng dụng sẵn có của hệthống
2.3.2.2 Chức năng của IVR
Một hệ thống ứng dụng IVR có các chức năng cơ bản sau:
- Chấp nhận cuộc gọi
- Phát thông điệp dạng âm thanh đến người dùng
- Ghi âm một thông tin nhập vào của người dùng
- Hỗ trợ cơ chế nhập từ bàn phím (DTMF)
- Nhận dạng được các tone đặc biệt khác được cung cấp bởi chuẩn viễn thông
- Nhận dạng được việc kết thúc cuộc gọi của người dùng
- Ngừng cuộc gọi
- Fax
- Conferencing
- Nhận dạng giọng nói (ASR: Automatic Speech Recognition)
- Kiểm tra người nói (Speaker Verification): xác định xem ai là người đang nói
Trang 31- Phiên dịch từ văn bản sang giọng nói (Text-to-Speech): đọc lại một đoạn thôngtin chẳng hạn như Email qua điện thoại đến người dùng
- VoiceXML: liên kết các ứng dụng Web đến các ứng dụng IVR
Một số ví dụ đơn giản cho việc ứng dụng IVR vào thực tế: Khi gọi điện thoại đến một công ty thuê bao thường nghe thông điệp như “Xin chào mừng bạn đã gọi đến công
ty của chúng tôi! Xin vui lòng nhấn phím 1 để gặp phòng nhân sự, phím 5 gặp phòng
dự án hay phím 0 để được hướng dẫn thêm” 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 đến các ứng dụng tiếp theo haychuyển đến một người nhận cuộc gọi cụ thể
2.3.2.3 Lợi ích của việc ứng dụng IVR
Việc ứng dụng công nghệ IVR vào các hệ thống tổng đài sẽ mang lại các lợi ích sau:
- Tiền xử lý cuộc gọi: các cuộc gọi trước khi được chuyển đến người xử lý cuộcgọi (Live agent) sẽ được xử lý trước một cách tự động bởi hệ thống
- Thay thế hoàn toàn cho Live agent: chẳng hạn như việc thực hiện mua hàng haytruy cập các thông tin mà không cần phải có người phục vụ Hệ thống sẽ có thêmtùy chọn cho phép người dùng liên lạc trực tiếp với live agent bằng cách chonmột tùy chọn khác nếu như họ không thích được phục vụ một cách tự động bởi hệthống
- Cung cấp cho người dùng một phương thức để truy cập vào hệ thống dữ liệu đượclưu ở dạng cơ sở dữ liệu mà không cần kết nối Internet
- Tiết kiệm thời gian cho khách hàng khi có nhiều yêu cầu phục vụ
- Giảm thiểu số nhân viên yêu cầu phục vụ bởi hầu hết các chức năng phục vụ đều
có thể được thực hiện một cách tự động thông qua cơ chế IVR của hệ thống
- Với các lợi ích nêu trên sẽ mang lại cơ hội sinh thêm lợi nhuận cho các nhà pháttriển và triển khai dịch vụ thông qua việc cung cấp các dịch vụ quan hệ kháchhàng cơ bản, lợi nhuận thêm vào từ các công ty viễn thông, cung cấp các dịch vụgia công về IVR
Trang 322.3.2.4 Một ứng dụng IVR
Dưới đây là trình bày của một ứng dụng IVR đơn giản dựa trên các hàm dịch vụ của
hệ thống như: Dial(), Background(), Answer(), Hangup(),…
Khi thuê bao gọi đến số tổng đài của công ty sẽ có thông điệp phát ra “Rất hân hạnh
vì bạn đã gọi đến công ty A&Z của chúng tôi, xin vui lòng nhấn phím 1 để gặp Phòng Nhân Sự, nhấn phím 2 gặp Phòng Dự Án hay nhấn phím 0 để được hướng dẫn thêm”.
Các kịch bản sẽ được định nghĩa trong file extention.conf như sau:
Trang 33exten => s,n,Background(help_audio) ; Thông tin hướng dẫn
Đoạn kịch bản trên có thể giải thích như sau : tất cả các cuộc gọi đến đều đượcchuyển đến ngữ cảnh [mainmenu] trong ngữ cảnh này hàm ứng dụng
Background(thanks_audio) sẽ thực hiện phát ra thông điệp “Rất hân hạnh vì bạn đã gọi đến công ty A&Z của chúng tôi, xin vui lòng nhấn phím 1 để gặp Phòng Nhân Sự, nhấn phím 2 gặp Phòng Dự Án hay nhấn phím 0 để được hướng dẫn thêm”.
Sau khi thuê bao nhấn phím 1 sẽ được đưa đến ngữ cảnh [submenu_1] ứng với ngữ cảnh của phòng nhân sự
2.3.3 Giao diện cổng giao tiếp ứng dụng AGI (Asterisk Gateway Interface)
AGI (Asterisk Gateway Interface) là một giao diện cho phép thêm vào các chức nănghay ứng dụng cho Asterisk với các ngôn ngữ lập trình khác nhau như: C/C++, PHP,Perl,…Thông qua giao diện này các ứng dụng có thể điều khiển dialplan của hệthống Đối với các ứng dụng IVR thuần túy nêu trên có một nhược điểm lớn nhất đó
là các chức năng truy cập dữ liệu (database, dữ liệu trên máy ở xa,…) hay tính toánnâng cao hoàn toàn không thể thực hiên được thông qua các thủ tục định nghĩa sẵn Với AGI các yêu cầu trên hoàn toàn có thể thực hiện được bởi AGI cho phép ngườidùng tự định nghĩa và lập trình các ứng dụng riêng của mình và sau đó khai báo đểđược gọi đến thông qua dialplan
Trang 34Mặc định các ứng dụng AGI sẽ được lưu ở thư mục “/var/lib/asterisk/agi-bin/”.
2.3.3.1 Cơ chế hoạt động của AGI
Thay vì cung cấp các hàm API cho việc lập trình, các kịch bản AGI sẽ giao tiếp vớiAsterisk thông qua các kênh giao tiếp được biết đến như là STDIN, STDOUT vàSTDERR trên môi trường lập trình Unix (là 3 cơ chế nhập, xuất và báo lỗi cơ bản trêncác hệ Unix)
Một kịch bản AGI sẽ thực hiện các tác vụ trên như sau:
- Đọc từ STDIN để lấy thông tin và dữ liệu từ Asterisk
- Ghi dữ liệu vào STDOUT để gửi sang cho Asterisk
- Ghi thông tin lỗi vào STDERR để gửi thông tin debug sang cho Asterisk
2.3.3.2 Khởi tạo ứng dụng AGI từ dialplan
Một ứng dụng AGI sẽ được khởi tạo từ dialplan của hệ thống nếu như nó được khaikhai báo trong một đề mục của một extension
Cú pháp khai báo như sau:
agi-2.3.3.3 Các hàm gọi từ xa được hỗ trợ thông qua AGI
AGI cho phép một ứng thực thi một số tác vụ trên hệ thống thông qua các hàm gọi từ
xa sau:
answer: chấp nhận một cuộc gọi đến
channel_status: trả về trạng thái của một kênh kết nối hiện tại
exec: thực thi một ứng dụng
Trang 35hangup: cúp máy
verbose: gửi thông tin log đến màn hình console của Asterisk
get_data: yêu cầu nhập liệu của phím
wait_for_digit: chờ đến khi có một phím được nhấn
receive_char: nhận vào một ký tự nhập từ bàn phím
set_extension: thay đổi extension của một kênh thoại
send_text: gửi một đoạn văn bản đến các kênh kết nối (nếu các kênh này có hỗ trợ) noop: hàm này không làm gì cả
receive_char: nhận vào một ký tự từ kênh thoại (nếu kênh thoại có hỗ trợ)
receive_text: nhận 1 đoạn văn bản từ kệnh thoại (nếu kênh thoại có hỗ trợ)
record_file: ghi âm và lưu vào file
say_digits: đọc một dãy các số
say_number: đọc một số
say_date: đọc thông tin ngày với giá trị được truyền vào
say_datetime: đọc thông tin giờ theo định dang quy định được truyền vào
send_text: gửi 1 đoạn văn bản nhập đến kênh thoại (nếu kênh thoại có hỗ trợ)
set_music: bật hoặc tắt chế độ music_on_hold
stream_file: gửi một file âm thanh trên kênh thoại
set_autohangup: đặt chế độ cúp máy tự động
set_callerid: đặt callerid cho kênh hiện tại
set_context: thiết lập một ngữ cảnh kênh truyền
set_priority: đặt độ ưu tiên cho dialplan của kênh kết nối
control_stream_file: gửi một file âm thanh trên một kênh kết nối và cho phép người
nghe điều khiển luồng dữ liệu
2.3.3.4 Một ứng dụng AGI
Một ứng dụng IVR thực hiện một công việc đơn giản là khi người dùng dial vào số
1900 thì hệ thống sẽ:
- Gửi lời chào đến người dùng
- Sau đó hệ thống sẽ download bản tin của CNN từ Internet và phát cho người dùngnghe
Trang 36- Cuối cùng hệ thống sẽ kết thúc cuộc gọi
Ứng dụng trên sẽ bao gồm 2 phần cơ bản sau:
- Phần kịch bản trong dialplan trong tập tin extensions.conf để thực hiện các côngviệc trên:
## Khai báo các biến
$AGI = new Asterisk::AGI;
## Download file audio dang wav từ website CNN
getstore(" $url" , " $podcast" )
## Chuyển nội dung file từ định dạng wav sang mp3
system(" lame silent mp3input scale 2 abr 32 -m m -h $podcast $resampled" )
## Trả lời cuộc gọi
$AGI->answer;
Trang 372.3.3.5 Giao diện cổng giao tiếp ứng dụng phân tán (FastAGI)
Nhược điểm lớn nhất của AGI là các ứng dụng được phải nằm trên cùng máy chạyAsterisk và được thực thi trên chính máy này Điều này sẽ ảnh hưởng ít nhiều đếnhiệu suất hoạt động của hệ thống đặc biệt là khi hệ thống phải đáp ứng nhiều cuộc gọi
và thực thi nhiều ứng dụng cùng lúc Xuất phát từ vấn đề trên, cộng đồng mã nguồn
mở Asterisk đã phát triển thêm một dạng mở rộng của AGI đó chính là FastAGI VớiFastAGI, một ứng dụng có thể được gọi từ một máy ở xa trên mạng
Ứng dụng sẽ đóng vai trò là server và Asterisk sẽ đóng vai trò là client Server sẽ lắngnghe trên cổng mặc định là 4573
Khai báo kịch bản trong dialplan của FastAGI sẽ có cú pháp như sau:
exten => extension,priority,FastAGI(agi://hostname[:port][/script],arguments)
- hostname: địa chỉ hay tên của máy chạy ứng dụng FastAGI
- port: cổng lắng nghe của ứng dụng AGI trên máy chủ (mặc định là 4573)
- script: tên ứng dụng FastAGI trên máy chủ
Trang 38- arguments: danh sách các đối số truyền vào cho ứng dụng nếu có
Ví dụ:
exten => 1900,1,Answer()
exten => 1900,2,PlayBack(hello_audio)
exten => 1900,3, FastAGI( agi://www.agi-app.com/ fastagi_app.agi)
Khi người dùng gọi đến số 1900 hệ thống sẽ gửi lời chào và sau đó sẽ kết nối đến
máy chủ chạy ứng dụng FastAGI www.agi-app.com trên cổng 4573 và yêu cầu thực
thi ứng dụng fastagi_app.agi
2.4 Kết luận
Sự ra đời của FastAGI được xem là một hướng đột phá của việc hỗ trợ phát triển cácứng dụng IVR trên hệ thống Asterisk Với FastAGI, các nhà phát triển và khai thácdịch vụ viễn thông có thể phát triển thoải mái các ứng dụng mong muốn của mình màkhông bị ràng buộc về các yếu tố giới hạn của hệ thống như: các hàm dịch vụ ít ỏi,các truy xuất giới hạn, hiệu suất hoạt động của hệ thống,…
Tuy nhiên, việc phát triển các ứng dụng thuần túy với AGI hay FastAGI vẫn gặp mộtgiới hạn rất lớn đó là khả năng mở rộng của ứng dụng
Ví dụ một hệ thống ứng dụng IVR được xây dụng dựa trên FastAGI có chức năngcung cấp thông tin truy vấn về thông tin tài khoản ngân hàng của người dùng Hệthống này cung cấp các chức năng như:
- Khi người dùng gọi vào, hệ thống yêu cầu nhập mã tài khoản và xác thực
- Sau đó hệ thống sẽ truy cập vào cơ sở dữ liệu để lấy thông tin tài khoản của ngườidùng (tên tài khoản và số dư còn lại trong tài khoản)
- Thông báo thông tin về tài khoản của người dùng
Do yêu cầu chung, người dùng muốn biết thêm thông tin về lãi suất hiện tại mà tạikhoản của họ được nhận hàng tháng
Sự phát sinh yêu cầu trên đòi hỏi các nhà khai thác dịch vụ phải xây dựng bổ sungthêm tinh năng cung cấp thông tin lãi suất theo tháng nếu khách hàng yêu cầu
Các yêu cầu trên sẽ dẫn đến một số vấn đề sau:
- Trong một số trường hợp ứng dụng phức tạp, đòi hỏi phải thay đổi tất cả các moduleliên quan và phải biên dịch lại hoàn toàn mã nguồn của ứng dụng
Trang 39- Việc bổ sung tính năng này phải yêu cầu lập trình và người lập trình phải là người
có kinh nghiệm về hệ thống cũng như kiến thức lập trình
- Hai vấn đề nêu trên sẽ làm nãy sinh thêm chi phí về thời gian và nhân lực rất nhiềunếu thay đổi là phức tạp
Xuất phát từ các nhược điểm nêu trên của các ứng dụng IVR trên Asterisk cũng nhưcác hệ thống viễn thông khác, các tổ chức lớn và các công ty hàng đầu về lĩnh vựcviễn thông đã làm việc với nhau để tìm ra một chuẩn công nghệ mới hỗ trợ các nhàphát triển ứng dụng trên nền công nghệ viễn thông Chuẩn mới này phải thỏa mãn cácyêu cầu cơ bản như:
- Tính dễ xây dụng và phát triển: không đòi hỏi người phải có kinh nghiệm nhiều vẫn
có thể xây dựng và phát triển ứng dụng của mình sau khi đã có một nền ứng dụng xâydựng sẵn
- Tận dụng được thế mạnh mạng chuyển mạch gói và công nghệ Web trên nềnInternet (vốn đã và đang có một vị thế phát triển mạnh mẽ toàn cầu)
Chuẩn mới được xây dựng là VoiceXML Nó được xem là một ngôn ngữ siêu văn bảncho công nghệ viễn thông Với VoiceXML người dùng hoàn toàn có thể duyệt qua vàthực thi nội dung các ứng dụng giống như duyệt Web thông qua cơ chế tương tácthoại (voice) hay nhập phím (DTMF)
Điểm mấu chốt quan trọng nhất là xây dựng mô hình ứng dụng (framework) hoànchỉnh với VoiceXML Mô hình ứng dụng này có nhiệm vụ thao tác trên các tài liệuVoiceXML và thực thi các chỉ thị bên trong nó Khi đã có mô hình ứng dụng choVoiceXML thì việc xây dựng ứng dụng đơn giản hơn việc xây dựng các ứng dụngIVR truyền thống Việc phát triển thêm các yêu cầu nâng cao của ứng dụng được thựchiện hoàn toàn trên các tài liệu VoiceXML
Trang 403 CHƯƠNG 3: TỔNG QUAN VỀ NGÔN NGỮ VoiceXML
3.1 Giới thiệu chung về VoiceXML
VoiceXML (Voice Extensible Markup Language) là ngôn ngữ đánh dấu mở rộng cholĩnh vực viễn thông và là một chuẩn công nghệ mới dựa trên nền XML
Mục tiêu xây dựng VoiceXML là phát huy khả năng của việc phát triển ứng dụng trênnền Web cũng như những thế mạnh của các hệ thống thoại tương tác với người dùng VoiceXML còn được gọi là ngôn ngữ đánh dấu mở rộng dùng cho công nghệ viễnthông VoiceXML hỗ trợ các nhà phát triển ứng dụng trong việc xây dựng các ứngdụng Voice tương tác với người dùng dựa trên nền Internet
VoiceXML cung cấp một phương cách tốt hơn cho việc phát triển các ứng dụngtương tác với người dùng qua giọng nói hay nhập phím VoiceXML sử dụng cơ chếnhập phím (DTMF) và nhận dạng giọng nói (ASR) cho việc xây dựng thông tin đầuvào của người dùng và Pre-recorded Audio, Text-to-Speech cho việc tạo dữ liệu đầura
VoiceXML có tiềm năng làm thay đổi phương thức phát triển các dịch vụ khách hàng
và thông tin qua điện thoại Bên cạnh đó, nó sẽ tạo thêm cơ hội cho người khiếm thịhoặc những người luôn truy cập Web trong khi dùng tay và mắt vào việc khác.Ngoài ra VoiceXML còn giúp các nhà phát triển không phải nhọc công với việc lậptrình các ứng dụng ở cấp thấp (Low level) rất phức tạp và tốn nhiều nhân lực cũngnhư thời gian VoiceXML sẽ cho phép các nhà phát triển ứng dụng tích hợp các dịch
vụ thoại và dữ liệu với nhau sử dụng cơ chế client-server truyền thống