Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk

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 truyền thông. Nó có những tác động to lớn và tích cực không chỉ riêng trong 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à cung cấp 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ạnh 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ế tất yếu, 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à nhóm đã lựa chọn thực hiện đồ án tốt nghiệp của mình với đề tài : “Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk”. MỤC LỤC QUYẾT ĐỊNH GIAO ĐỀ TÀI . i NHẬN XÉT GIÁO VIÊN HƯỚNG DẨN . ii NHẬN XÉT GIÁO VIÊN PHẢN BIỆN . iii MỤC LỤC iv DANH MỤC HÌNH VẼ viii LỜI MỞ ĐẦU xi LỜI CẢM ƠN xii GIỚI THIỆU ĐỀ TÀI VÀ HƯỚNG GIẢI QUYẾT ĐỀ TÀI . xiii Chương I 1 TÌM HIỂU VỀ ASTERISK 1 1.1 Giới thiệu. 1 1.2 Kiến trúc Asterisk. 2 1.3 Một số tính năng cơ bản. 4 Chương II 7 TỔNG QUAN VỀ VOIP VÀ MẠNG NGN 7 2.1 Giới thiệu. 7 2.2 Cấu trúc mạng VoIP. 7 2.3 Đặc điểm dịch vụ VoIP. 9 2.4 Chất lượng dịch vụ trong mạng VoIP. 10 2.5 Các giao thức. 13 2.5.1 Streaming. 13 2.5.1.1 . Giao thức RTP. 13 2.5.1.2 . . Giao thức RTCP. 14 2.5.2 Signaling. 16 2.5.2.1 . Giao thức H323. 16 2.5.2.1.1Giới thiệu. 16 2.5.2.1.2Các thành phần cơ bản của hệ thống H323. 17 2.5.2.1.3Tập giao thức H323. 20 2.5.2.1.4Quá trình thiết lập cuộc gọi H323. 22 2.5.2.2 . . Giao thức khởi tạo phiên SIP. 23 2.5.2.2.1Giới thiệu. 23 2.5.2.2.2Tính năng của SIP. 23 2.5.2.2.3Các thành phần trong hệ thống SIP. 24 2.5.2.2.4Các bản tin của SIP. 25 2.5.2.2.5Quá trình thiết lập cuộc gọi 27 2.5.3 So sánh với H.323. 31 2.6 Mạng thế hệ mới NGN 32 2.6.1 Sự hình thành mạng NGN 32 2.6.2 Các đặc điểm của NGN 33 2.6.3 Những vấn đề mà mạng thế hệ mới cần giải quyết 33 2.6.4 Công nghệ chuyển mạch mềm – Softswitch. 34 2.6.4.1 . . Những hạn chế của tổng đài chuyển mạch kênh. 34 2.6.4.2 . Định nghĩa chuyển mạch mềm (Softswitch). 35 2.6.4.3 . . Những lợi ích của Softswitch. 36 2.6.5 Kiến trúc của mạng NGN 37 2.6.5.1 . . Lớp truyền tải 38 2.6.5.2 . Lớp điều khiển và báo hiệu cuộc gọi 39 2.6.5.3 . Lớp ứng dụng và dịch vụ. 39 2.6.5.4 . . Lớp quản lý. 39 2.6.6 Các phần tử trong mạng NGN 40 2.6.7 Các dịch vụ chính trong mạng NGN 41 Chương III CÁC MÔ HÌNH ỨNG DỤNG VÀ CẤU HÌNH HOẠT ĐỘNG CHO ASTERISK 42 3.1 Tổng đài voip IP PBX . . 42 3.2 Kết nối IP PBX với PBX . . 42 3.3 Kết nối giữa các server Asterisk 43 3.4 Các ứng dụng IVR, VoiceMail, Điện Thoại Hội Nghị . 44 3.5 Chức năng Phân phối cuộc gọi tự động ACD . 45 3.6 Tổ chức thư mục của Asterisk. 46 3.7 Một số lệnh thao tác trên hệ thống asterisk. 48 3.8 Cách thức cấu hình trên các tập tin cơ bản. 49 3.9 Cách thức hoạt động của tập tin cấu hình. 50 3.10 . Tập tin cấu hình. 51 3.10.1 Giới thiệu dialplan. 51 3.10.2 Giao diện SIP . . 56 3.10.3 Hộp thư thoại (Voicemail) . . 59 3.10.4 Nhạc chờ (Music On Hold) . 60 3.10.5 Hàng đợi (Queue) . 62 Chương IV. XÂY DỰNG TRUNG TÂM QUÀ TẶNG ÂM NHẠC TRÊN NỀN ASTERISK 64 4.1 Giới thiệu . 64 4.2 Mục đích Yêu cầu . 64 4.3 Phân tích thiết kế. 65 4.3.1 Kịch bản cho hệ thống. 65 4.3.2 Biểu đồ phân rã chức năng. 69 4.3.3 Biểu đồ ngữ cảnh. 70 4.3.4 Biểu đồ luồng dữ liệu mức đỉnh. 70 4.3.5 Giới thiệu về tiện ích Auto dial out . 71 4.3.6 Cơ sở dữ liệu. 73 4.4 Triển khai hệ thống. 73 4.4.1 Mô hình hệ thống. 73 4.4.2 Cài đặt các gói phần mềm. 74 4.4.2.1 . Hệ Điều Hành Ubuntu 8.04. 74 4.4.3 Cấu hình hệ thống Asterisk. 84 4.4.4 Giới thiệu AGI 87 4.5 Kết quả thực nghiệm 106 KẾT LUẬN 112

pdf128 trang | Chia sẻ: lvcdongnoi | Lượt xem: 4080 | Lượt tải: 5download
Bạn đang xem trước 20 trang tài liệu Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
hoàn toàn có thể thay đổi phù hợp với ngữ cảnh sử dụng, không nhất thiết phải sử dụng thông điệp mặc định . Cấu hình chức năng voicemail Sau đây là các bƣớc xây dựng hệ thống Voicemail Tạo hộp thƣ có tên là [hopthu] trong tập tin voicemail.conf : [hopthu] 3003=>1234,hai,lyhai06@yahoo.com. Trong tập tin sip.conf khai báo nhƣ sau: [3003] type=friend username=3003 Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 60 Chương III : Các mô hình ứng dụng và cấu hình hoạt động cho Asterisk secret=121212 host=dynamic context=testhopmail mailbox=3003@hopthu. Trong tập tin extensions.conf khai báo nhƣ sau: [testhopmail] exten => 3003,1,Dial(SIP|3003,45) exten => 3003,2,VoiceMail(u3003@hopthu) ; nếu không trả lời thì chuyển đến hộp thƣ thoại exten =>3003,102,VoiceMail(b3003@hopthu) ; ứng dụng Dial() gởi cuộc gọi đến priority n+101 nếu đƣờng dây bận. Kiểm tra Voicemail: Ứng dụng VoicemailMain() quản lí các user của PBX để truy cập vào voicemail của họ. Ví dụ: exten => 500,1,VoiceMailMan() Extension 500 đƣa đến hệ thống voicemail.Trong trƣờng hợp này, hệ thống sẽ nhắc user đƣa vào số của mailbox và password, nếu giá trị đƣa vào hợp lệ, user sẽ nghe đƣợc nội dung của mailbox đó . 3.10.4 Nhạc chờ (Music On Hold MOH) Tính năng MOH của Asterisk với nhiều ứng dụng thực tế rất thiết thực, một số ứng dụng tiêu biểu nhƣ trong khi giử máy để gặp ngƣời khác, thuê bao có thể nghe âm nhạc giải trí để quên đi thời gian chờ đợi, khi chờ trả lời cuộc gọi thuê bao sẽ nghe âm nhạc thay vì hồi âm chuông, hoặc phát ra một thông điệp thông báo cho một tác vụ nào đó. Cấu hình tính năng MOH Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 61 Chương III : Các mô hình ứng dụng và cấu hình hoạt động cho Asterisk Chép toàn bộ tập tin nhạc vào thƣ mục mặt định /var/lib/asterisk/mohmp3 .Sau đó khai báo trong tập tin cấu hình /etc/asterisk/musiconhold.conf với nội dung: [default] mode=files directory=/var/lib/asterisk/mohmp3 random=yes Nếu random=no thì tất cả các tập tin âm thanh trong thƣ mục mohmp3 sẽ thực hiện theo thứ tự. Nếu random=yes sẽ thực hiện một tập tin âm thanh ngẫu nhiên trong thƣ mục. Sau khi cấu hình xong chúng ta có thể test bằng cách cấu hình kế hoạch quay số trong tập tin /etc/asterisk/extensions.conf nhƣ sau : ;các dòng này phải đƣợc đặt cùng ngữ cảnh với các thuê bao exten => 9000,1,Answer() exten => 9000,n,SetMusicOnHold(default) exten => 9000,n,WaitMusicOnHold(15) exten => 9000,n,Hangup() Khi thuê bao quay số 9000 hệ thống sẽ trả lời sau đó phát ra một bài nhạc ngẫu nhiên trong thƣ mục default, trong vòng 15s sau đó gác máy Chúng ta có thể tạo ra một lớp thƣ mục khác với lớp default sau đó chép tất cả các tập tin âm nhạc vào thƣ mục này và đồng thời khai báo trong tập tin cấu hình /etc/asterisk/musiconhold.conf thì chúng ta có thể sử dụng chức năng MOH. Sau đây là quá trình thực hiện : Tạo thƣ mục mới #mkdir /var/lib/asterisk/mohmp3/newclass Khai báo tập tin cấu hình /etc/astersik/musiconhold.conf [newclass] Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 62 Chương III : Các mô hình ứng dụng và cấu hình hoạt động cho Asterisk mode=files directory=/var/lib/asterisk/mohmp3/newclass random=yes Đoạn kế hoạch quay số trong tập tin extensions.conf nhƣ sau: exten=> 9000,1,Answer() exten=> 9000,n,SetMusicOnHold(newclass) exten=> 9000,n,WaitMusicOnHold(15) exten=> 9000,n,Hangup() 3.10.5 Hàng đợi (Queue) Hàng đợi tạo ra một chỗ logic để xếp các caller vào cho đến khi chúng ta sẵn sàng trả lời cuộc gọi.Hàng đợi là một cung cụ rất mềm dẻo và mạnh mẽ cho các hệ thống dịch vụ khách hàng. Cấu hình: Tất cả các cấu hình liên quan đến hàng đợi, nằm trong tập tin /etc/astersik/queues.conf. Để định nghĩa một hàng đợi, chúng ta bắt đầu bằng tên hàng đợi, đƣợc đặt trong dấu ngoặc vuông “[]”.Đây cũng là số để các extension khác có thể truy cập vào queue thông qua số này.Do đó tốt nhất nên đặt tên hàng đợi dƣới dạng số .Ví dụ: [1000]. Sau đó chúng ta phải thiết lập các tham số cho hàng đợi.Đầu tiên là nhạc chờ trong hàng đợi, chúng ta sẽ chỉ ra class chứa những tập tin âm thanh đã upload lên hệ thống (nhƣ mô tả trong phần Music On Hold): music = music_class Tiếp theo chúng ta định nghĩa một thông báo, nếu nhƣ chúng ta muốn.Điều này giúp phát một tập tin âm thanh thông báo đến các điện thoại viên (agent) khi anh ta (cô ta ) trả lời cuộc gọi đến từ hàng đợi. Chức năng này sẽ hữu ích nếu chúng ta có các agent trả lời nhiều hàng đợi, nó sẽ giúp thông báo cho agent biết cuộc gọi này đi từ hàng đợi nào tới . Nếu muốn dùng, phải chắc chắn rằng chúng ta có tập tin âm thanh: /var/lib/asterisk/sounds/..Thiết lập chức năng này bằng câu lệnh: Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 63 Chương III : Các mô hình ứng dụng và cấu hình hoạt động cho Asterisk announce= Bây giờ chúng ta cần cấu hình qui luật đổ chuông cho các agent trong hàng đợi . Chúng ta nên quyết định điều này dựa vào đặc thù của công việc mà hàng đợi đó phải làm.Ví dụ nếu thiết lập chức năng ringall cho hàng đợi, ta dùng: strategy = ringall Khi đó,nếu một cuộc gọi đƣợc vào hàng đợi, tất cả các điện thoại của các agent trong hàng đợi mà đang rỗi đều đổ chuông và sẵn sàng nhận cuộc gọi . Tiếp theo chúng ta thiết lập timeout. Đây là thời lƣợng mà mỗi cuộc gọi sẽ đổ chông trƣớc khi hàng đợi xem xét cuộc gọi không đƣợc trả lời .Chúng ta nên thiết lập thời gian này đủ lớn để các agent đủ thời gian nhấc máy và trả lời điện thoại .Giá trị thƣờng dùng là 15ms : timeout=15 Bây giờ chúng ta thiết lập thời gian đợi trƣớc khi bắt đầu thử lại sau khi đổ chuông hết tất cả các extension trong hàng đợi mà không đƣợc trả lời .Giá trị thƣờng dùng là 0. retry=0 Tiếp theo chúng ta thiết lập giới hạn bao nhiêu cuộc gọi đƣợc xếp vào hàng đợi.Nếu chúng ta muốn cho phép mọi cuộc gọi đều vào hàng đợi, thì thiết lập giá trị 0: maxlen=0 Cuối cùng, chúng ta định nghĩa các thành viên trong hàng đợi.Đơn giản chúng ta chỉ cần thêm các dòng lệnh theo định dạng nhƣ sau: member => agent/extension_number member => agent/extension_number Trong đó, extension_number là các số của agent mà ta đã định nghĩa trong tập tin agents.conf Và cứ nhƣ thế ta tiếp tục địng nghĩa các hàng đợi khác với các tham số phù hợp để đáp ứng nhu cầu đề ra . Số lƣợng hàng đợi chúng ta định nghĩa có thể là không giới hạn, chỉ phụ thộc vào nguồn tài nguyên của server . Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 64 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Chương IV XÂY DỰNG TRUNG TÂM QUÀ TẶNG ÂM NHẠC TRÊN NỀN ASTERISK 4.1 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 thông 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. Các 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 chăm sóc khách hàng 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 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. Các dịch vụ truyền thông giải trí hoạt động một cách tự động cũng đang đáp ứng đƣợc phần lớn nhu cầu của khách hàng. Mặt khác các tổng đài tự động giảm chi phí đáng kể cho nhà đầu tƣ và giảm số lƣợng nhân viên trực tổng đài nhƣ: Tổng đài trả lời tự động kết quả xổ số, tỉ giá đô la chứng khoáng, dự báo thời tiếc, quà tặng âm nhạc, quà tặng trái tim. 4.2 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 2 chức năng chính. Khi khách hàng gọi tới tổng đài 1234 sẽ đƣợc nghe lời chào và hƣớng dẫn bấm phím. 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 của tổng đài. Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 65 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk 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. Bấm phím 1  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 không tồn tại mã quà tặng này. Số điện thoại sẽ là một chuỗi số 4 chữ số khách hàng nhập. Thời gian gửi quà tặng sẽ là một chuỗi số có dạng hhmm, trong đó hh là giờ, mm là phút. Thời gian đƣợc coi là không đúng khi chuỗi số khách hàng nhập vào là một số nhỏ hơn 0000 hoặc lớn hơn 2400. Sau đó tổng đài yêu cầu nhập vào ngày tháng theo định dạng mmddyyyy, với mm là tháng, dd là ngày và yyyy là năm gửi quà tặng. Ngày tháng đƣợc xem là không đúng khi ngày tháng năm nhập vào nhỏ hơn thời gian hiện tại của hệ thống hoặc nhập mm nhỏ hơn 00 hoặc lớn hơn 12 hoặc yyyy lớn hơn năm 2020. 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.  Tổng đài sẽ yêu cầu bấm phím “*” để tiếp tục gửi quà tặng âm nhạc hay bấm phím “#” để trở về [mainmenu]. Nếu sau 30s không nhấn phím thì hệ thống tự động Hangup. 4.3 Phân tích thiết kế 4.3.1 Kịch bản cho hệ thống Khách hàng gọi đến 1234: Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 66 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Kịch bản Menu chính của hệ thống Quy trình gửi quà tặng âm nhạc. 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 để 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.. Gặp tổng đài viên Gửi Quà tặng âm nhạc Menu chính Nhập mã quà tặng Nhập lại mã quà tặng Mã sai iể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 Nhập m số quà tặng 4 chữ số. Để biết m số quà tặng truy cập trang web:www… Nhập số điện thoại người nhận quà tặng Đặt giờ gửi quà tặng b ng cách nhấn giờ theo định dạng: giờgiờphútphút Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 67 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Giờ đúng Giờ nhập không đúng, xin vui lòng nhập lại Nhập lại giờ Giờ sai iểm tra ngày gửi quà tặng Nhập giờ gửi quà Đặt ngày gửi quà tặng b ng cách nhấn ngày theo định dạng: thángtháng ngàyngàynămnăm. iểm tra giờ gửi quà tặng H y để lại lời nhắn sau tiếng Bíp Ngày nhập không đúng, xin vui lòng nhập lại Ngày đúng Ngày sai Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 68 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Quy trình gửi quà tặng âm nhạc. Quy trình gặp nhân viên tư vấn Ghi âm lại lời nhắn và thực hiện đặt lịch gửi quà tặng Quà tặng đ đư c gửi .Cám ơn qu khách đ sử dụng dịch vụ. ết thúc gửi quà tặng Trở về đầu quy trình quà tặng âm nhạc Trở về menu chính Nhấn phím # Nhấn phím * Không nhấn phím * hoặc # trong 30 giây Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 69 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk 4.3.2 Biểu đồ phân rã chức năng Hình 4.1 Biểu đồ phân cấp chức năng Đư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ới lư t khách hàng đó ết thúc cuộc gọi Gặp nhân viên tƣ vấn CALL CENTER Gặp tồng đài viên Gửi quà tặng âm nhạc Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 70 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk 4.3.3 Biểu đồ ngữ cảnh Hình 4.2 Biểu đồ ngữ ảnh 4.3.4 Biểu đồ luồng dữ liệu mức đỉnh Hình 4.3 Biểu đồ luồng dữ liệu mức đỉnh Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 71 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk 4.3.5 Giới thiệu về tiện ích Auto dial out Để 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 gọi Auto dial out trong Asterisk đó là asterisk call file. Asterisk call file là một cấu trúc file mà khi chuyển vào thƣ mục thích hợp, có thể tự động thực hiện các cuộc gọi sử dụng Asterisk. Call file là cách tuyệt vời để thực hiện các cuộc gọi tự động mà không cần sử dụng các tính năng phức tạp của Asterisk nhƣ AMI Cách thức hoạt động của Call file: Di chuyển call file vào thƣ mục /var/spool/asterisk/outgoing/ Trong file modules.conf đặt autoload=no để chắc chắn rằng file pbx_spool.so đƣợc load, ngƣợc lại thì nó sẽ không hoạt động. Nếu thay đổi thời gian call file trong tƣơng lai, Asterisk sẽ chờ cho đền khi giờ hệ thống phù hợp với thời gian thay đổỉ ở lần trƣớc đó để thực hiện call file. Asterisk sẽ thông báo và ngay lập tức thực hiện các chỉ thị đƣợc xác định trong file call. Điều này có thể bao gồm kết nối với một bối cảnh Asterisk dialplan, hoặc thực hiện một dialplan. Sau đó asterisk sẽ gỡ bỏ call file ra khỏi thƣ mục /var/spool/asterisk/outgoing/ Cú pháp của 1 call file: Xác định làm thế nào để gọi Channel: : kênh để sử dụng cho cuộc gọi. CallerID: "name" : Caller ID đƣợc gọi. MaxRetries: Số lần thử gọi lại tối đa khi thất bại (không bao gồm cuộc gọi ban đầu, ví dụ nhƣ 0 thì tổng số cuộc gọi thực hiện là). Mặc định là 0. RetryTime: thời gian(s) giữa hai lần thử. Mặc định là 300 (5 phút). WaitTime: thời gian (giây) để đợi câu trả lời. Mặc định là 45. Account: Thiết lập các mã tài khoản để sử dụng. Nếu cuộc gọi đƣợc trả lời, kết nối nó ở đây: Context: Bối cảnh trong extensions.conf Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 72 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Extension: đƣợc định nghĩa trongi extensions.conf Priority: ƣu tiên extension để bắt đầu Set: Thiết lập một biến để sử dụng trong logic extension Application : ứng dụng Asterisk để chạy (sử dụng thay vì xác định bối cảnh extension và ƣu tiên) Data: Các tùy chọn dữ liệu cho ứng dụng Ví dụ: tạo 1 call file đơn giản Channel: SIP/2000 CallerID: 2000 MaxRetries: 2 RetryTime: 60 WaitTime: 30 Extension: call-test-file Trong file Extension.conf [call-file-test] Exten=> 10,1,Answer() Exten=> 10,n,Wait(2) Exten=> 10,n,Playback(hello-world) Exten=> 10,n,Hangup Hệ thống sẽ tự động kiểm tra liên tục tất cả các file .call trong thƣ mục var/spool/asterisk/outgoing, nếu thời gian tạo ra file .call bằng đúng thời gian hệ thống thì hệ thống sẽ tự động gọi đến số điện thoại theo context đƣợc tạo trong file .call. Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 73 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk 4.3.6 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 4.4 Cơ sở dữ liệu 4.4 Triển khai hệ thống 4.4.1 Mô hình hệ thống Hình 4.5 Mô hình logic hệ thống 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. Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 74 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trong hệ thống thực tế triển khai trong đồ án gồm có:  1 Server Linux (Ubuntu 8.04) trên đó cài đặt phần mềm Asterisk version 1.4.x, MySQL 5.0, PHPAdmin.  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 4.4.2 Cài đặt các gói phần mềm. 4.4.2.1 Hệ Điều Hành Ubuntu 8.04 Sử dụng đĩa cài đặt Ubuntu version 8.04 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: Update your Ubuntu packages Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 75 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk # apt-get update # apt-get upgrade Install required # apt-get install mc build-essential linux-headers-`uname -r` # apt-get install libncurses5-dev libssl-dev libmysqlclient15-dev libnewt-dev zlib1g-dev # apt-get install libxml2-dev libtiff4-dev libaudiofile-dev # apt-get install openssh-server curl sox lame mpg123 Đặt lại mật khẩu nhƣ mật khẩu root mysql server, hãy nhớ rằng đây chỉ là vì lợi ích sử dụng, sau này bạn phải thay đổi nó thành mật khẩu của bạn. # apt-get install apache2 mysql-server php5 php5-cli php5-gd php5-mysql php-pear php-db 4.4.2.2 Cài đặt phần mềm Asterisk +Tạo thƣ mục lƣu trữ các tập tin cài đặt Asterisk # cd /usr/src # mkdir asterisk # cd asterisk + Dùng lệnh wget để tải các gói cài đặt Asterisk. Các gói này đƣợc lấy từ trang web chính của Asterisk bằng các click chuột phải vào dòng download của các gói cài đặt và chọn Copy Link Location. + Ta lần lƣợt download các gói tin về thƣ mục /usr/src/asterisk gồm: -Asterisk-1.4.21.2 -Zaptel-1.4.21.1 -Libpri-1.4.7 -Addons-1.4.7 +Bằng cách sử dụng các lệnh sau: # wget 1.4.21.2.tar.gz # wget 1.4.12.1.tar.gz # wget Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 76 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk # wget 1.4.7.tar.gz Giải nén chúng vào thƣ mục /usr/src/asterisk Tiến hành cài đặt: Install libpri # tar -zxf libpri-1.4.7.tar.gz # cd libpri-1.4.7 # make # make install # cd ../ Install Zaptel # tar -zxf zaptel-1.4.12.1.tar.gz # cd zaptel-1.4.12.1 # ./configure # make menuconfig Press x to save selections # make # make install # make config # cd ../ Install Asterisk # tar -zxf asterisk-1.4.21.2.tar.gz # cd asterisk-1.4.21.2 # ./configure # make menuconfig Press x to save selections # make Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 77 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk # make install # make samples # cd ../ Install Asterisk addons # tar -zxf asterisk-addons-1.4.7.tar.gz # cd asterisk-addons-1.4.7 # ./configure # make menuconfig # make # make install # make samples # cd ../ 4.4.2.3 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. 4.4.2.4 Cài đặt PhpMyAdmin Các chức năng của PhpMyAdmin  PhpMyAdmin có thể quản lý toàn bộ MySQL Server.  Xem dữ liệu, xóa CSDL, bảng, view, trƣờng và các chỉ số.  Tạo, sao chép, xóa, đổi tên và thay đổi CSDL, các bảng các trƣờng và chỉ số.  Bảo trì Server, các CSDL và các bookmark hay bất kì câu lệnh SQL hoặc một lô các câu lệnh. Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 78 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk  Nạp những tệp văn bản vào các bảng.  Đọc vào tạo nhiều văn bảng.  Xuất dữ liệu ra nhiều kiểu định dạng CSV, XML, PDF, Open text, Spreadsheet của open Word, Exel, Latex định đạng.  Quản trị đa server.  Quản lý ngƣời dùng và những đặc quyền.  Kiểm tra các thực thể liên kết trong bảng MyISAM.  Sử dụng truy vấn bằng ví dụ, tạo các truy vấn phức tạp một cách tự động.  Tìm kiếm toàn bộ trong dữ liệu hoặc một dữ liệu con của nó.  Thực hiện nhớ dữ liệu với bất kì định dạng sử dụng với những chức năng đƣợc thiết lập trƣớc, nhƣ là hiển thị dữ liệu định dạng ảnh hay các đƣờng liên kết.  Hỗ trợ bảng và khóa dạng InnoDB.  Hỗ trợ MySQLi.  Hỗ trợ với hơn 50 ngôn ngữ. Cài đặt Có nhiều cách cài đặt PhpMyAdmin trên Linux, trong phần này xin hƣớng dẫn cách cài đặt PhpMyAdmin bằng dòng lệnh.  Cài đặt Apache Để bắt đầu chúng tôi sẽ hƣớng dẫn cài đặt Apache. 1. Mở phần Terminal (Applications > Accessories > Terminal) 2. Copy/Paste dòng mã sau vào Terminal và nhấn phím enter: sudo apt-get install apache2 Terminal sẽ hỏi mật khẩu của bạn, nhập nó vào và nhấn enter. Kiểm tra Apache. Để chắc chắn mọi thứ đã đƣợc cài đặt chính xác, chúng ta sẽ tiến hành kiểm tra Apache để đảm bảo nó hoạt động đúng cách. Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 79 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk 1. Mở trình duyệt và sau đó nhập địa chỉ web sau đây vào ô địa chỉ: 2. Bạn sẽ thấy một thƣ mục có tên là apache2-default/. Mở thƣ mục đó ra, bạn sẽ nhận đƣợc thông báo là “It works!” và bạn đã thành công.  Cài đặt PHP. Tiếp theo chúng ta sẽ tiến hành cài đặt PHP 5. Bƣớc 1: Mở lại phần Terminal (Applications > Accessories > Terminal) . Bƣớc 2: Copy/Paste dòng lệnh sau vào Terminal và nhấn enter: sudo apt-get install php5 libapache2-mod-php5. Bƣớc 3: Hợp lệ để PHP làm việc và tƣơng thích với Apache và chúng ta phải khởi động lại nó. Nhập vào câu lệnh sau trong Terminal để thực hiện điều này: sudo /etc/init.d/apache2 restart. Kiểm tra lại PHP. Để đảm bảo không có vấn đề gì phát sinh đối với PHP, hãy kiểm tra lại nó bằng các bƣớc sau: Bƣớc 1: Trong Terminal, copy và paste dòng lệnh sau rồi nhấn enter: sudo gedit /var/www/testphp.php Câu lệnh này sẽ mở một file có tên là phptest.php. Bƣớc 2: Copy/Paste dòng lệnh sau vào file phptest: Bƣớc 3: Lƣu và đóng file lại Bƣớc 4: Mở trình duyệt web của bạn và nhập vào địa chỉ sau: Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 80 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Bạn sẽ thấy giao diện sau: Hình 4.6 giao diện trang php khi cài đặt Việc cài đặt cả Apache và PHP đã thành công!  Cài đặt MySQL Bƣớc 1: Lại tiếp tục mở lại Terminal và đƣa vào dòng lệnh sau: sudo apt-get install mysql-server Bƣớc 2 (không bắt buộc): Để các máy tính khác trong mạng xem đƣợc server mà bạn đã tạo, đầu tiên là bạn phải chỉnh sửa “Bind Address”. Bắt đầu bằng việc mở Terminal để sửa file my.cnf. gksudo gedit /etc/mysql/my.cnf Tại dòng bind-address = 127.0.0.1 Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 81 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk đổi địa chỉ 127.0.0.1 thành địa chỉ IP của bạn Bƣớc 3: Đây là bƣớc quan trọng, nhập dòng lệnh sau vào Terminal: mysql -u root -p Gõ dòng lệnh sau: mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('yourpassword'); (Hãy thay đổi yourpassword bằng mật khẩu mà bạn chọn) Bƣớc 4: Giờ chúng ta sẽ tiến hành cài đặt chƣơng trình phpMyAdmin, đây là một công cụ đơn giản để chỉnh sửa cơ sở dữ liệu của bạn. Copy/paste dòng lệnh sau vào Terminal: sudo apt-get install libapache2-mod-auth-mysql php5-mysql phpmyadmin Sau khi đã cài đặt mọi thứ, bƣớc tiếp theo cần thực hiện là làm cho PHP có thể làm việc cùng với MySQL. Để thực hiện điều này, chúng ta cần mở file php.ini bằng cách nhập vào dòng lệnh sau: gksudo gedit /etc/php5/apache2/php.ini Trong file này, chúng ta cần bỏ dấu chú thích ở dòng lệnh sau bằng cách bỏ đi dấu chấm phẩy đầu dòng (;): ;extension=mysql.so Thay đổi nó thành nhƣ sau: extension=mysql.so Giờ thì bạn có thể khởi động lại Apache và hoàn thiện toàn bộ quá trình cài đặt! sudo /etc/init.d/apache2 restart  Cài đặt phpMyAdmin apt-get install phpmyadmin Trong khi cài đặt, bạn sẽ đƣợc nhắc chọn các máy chủ web đó sẽ đƣợc sử dụng để chạy phpMyAdmin. Chọn Apache2. Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 82 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Sau khi cài đặt ,thực hiện lệnh sau để sao chép các thƣ mục phpMyAdmin vào thƣ mục / var / www / . (Theo mặc định nó đƣợc cài đặt trong thƣ mục / usr / share / phpmyadmin /.) ln -s /usr/share/phpmyadmin/ /var/www/phpmyadmin Bây giờ bạn có thể vào các trang đăng nhập phpMyAdmin bằng cách trỏ trình duyệt của bạn: Sau khi kết thúc quá trình cài đặt theo bài hƣớng dẫn tnhƣng nếu vẫn chƣa khởi động đƣợc phpmyadmin thì fix nhƣ sau: gedit /etc/apache2/apache2.conf Thêm vào dòng : Include /etc/phpmyadmin/apache.conf Và sau đó restart lại apache bằng lệnh /etc/init.d/apache2 restart Quá trình cài đặt PhpMyAdmin đã hoàn tất, để vào giao diện của nó ta vào trình duyệt gõ lệnh : Sử dụng PhpMyAdmin Sau khi vào trình duyệt gõ lệnh thì sẽ hiển thị cửa sổ yêu cầu nhập vào user, pass, và CSDL nếu có : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 83 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Hình 4.7 Đăng nhập PhpMyAdmin Sau khi đăng nhập đúng sẽ ra màn hình hiển thị: Hình 4.8:Giao diện của PhpMyAdmin sau khi đăng nhập thành công Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 84 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk 4.4.3 Cấu hình hệ thống Asterisk Cấu hình các file .conf nhƣ sau: Extensions.conf: //để tặng nhạc [guiqua] exten=>10,1,Ringing() exten=>10,n,Answer() exten=>10,n,Wait(1) exten=>10,n,Playback(do-an/${MSG}) exten=>10,n,Wait(1) exten=>10,n, Playback (do-an/${MABH}) exten=>10,n,Hangup() [qtangamnhac] exten=>1234,1,Answer() exten=>1234,2,goto(mainmenu,s,1) [mainmenu] exten=>s,1,Background(chaomung) exten=>s,2,waitexten(30) exten=>s,3,Playback(goodbye) exten=>s,4,hangup() exten=>0,1,goto(nvtv,s,1) exten=>1,1,goto(qtan,s,1) exten=>2,1,goto(saimenu,s,1) exten=>3,1,goto(saimenu,s,1) Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 85 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk 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) [qtan] exten=>s,1,AGI(qtamnhac.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(chonsai) exten=>s,2,goto(mainmenu,s,2) [nvtv] exten=>s,1,SetMusicOnHold(hanly) exten=>s,2,queue(nhanvien) [agent] exten=> 900,1,Answer() exten=> 900,n,AgentLogin() file queues.conf: Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 86 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk [nhanvien] strategy=ringall member => Agent/1111 member => Agent/2222 file agents.conf: agent => 2222,2222,ThanhTung agent => 1111,1111,TanHan file musiconhold.conf [hanly] mode=custom directory=/var/lib/asterisk/moh application=/usr/local/bin/mpg123 -q -r 8000 -f 8192 -b 2048 --mono -s random=yes Cấu hình Softphone Để cấu hình tài khoản SIP cho X-Lite (máy 2000), vào Show Menu - SIP Account Setting, ta nhập các thông số nhƣ hình sau đây: Hình 4.9 đăng ký tài khoản SIP cho softphone X-Lite Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 87 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Sau khi nhập đầy đủ các thông tin nhƣ trên, X-Lite sẽ tiến hành đăng ký với Asterisk server . Nếu đăng ký thành công, ta có màn hình hiển thị của X-Lite nhƣ sau: Hình 4.10 đăng ký cho softphone thành côngLập trình cho hệ thống 4.4.4 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 Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 88 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk 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) File quatangamnhac.php #!/usr/bin/php -q <?php { $link=mysql_connect("localhost","root","quangngai"); if(!$link){die("Could not connect to MySQL");} mysql_select_db("kuhan",$link) or die ("could not open db".mysql_error()); $parm_error_log = '/tmp/qtangamnhac.log'; $parm_debug_on = 1; $parm_temp_dir = '/tmp'; $parm_call_dir = '/var/spool/asterisk/outgoing'; $parm_maxretries = 3; $parm_waittime = 60; $parm_retrytime = 60; Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 89 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk $parm_wakeupcallerid = 'quatangamnhac'; $parm_chan_ext = 0; // ---------------------------------------------------- // END CONFIG PARMS //----------------------------------------------------- GLOBAL $stdin, $stdout, $stdlog, $result, $parm_debug_on, $parm_test_mode; // These setting are on the WIKI pages ob_implicit_flush(false); set_time_limit(30); error_reporting(0); $stdin = fopen( 'php://stdin', 'r' ); $stdout = fopen( 'php://stdout', 'w' ); if ($parm_debug_on) { $stdlog = fopen( $parm_error_log, 'w' ); fputs( $stdlog, "---Start---\n" ); } // ASTERISK * Sends in a bunch of variables, This accepts them and puts them in an array // while ( !feof($stdin) ) { $temp = fgets( $stdin ); if ($parm_debug_on) Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 90 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk fputs( $stdlog, $temp ); // Strip off any new-line characters $temp = str_replace( "\n", "", $temp ); $s = explode( ":", $temp ); $agivar[$s[0]] = trim( $s[1] ); if ( ( $temp == "") || ($temp == "\n") ) { break; } } $channel = $agivar[agi_channel]; if (preg_match('.^([a-zA-Z]+)/([0-9]+)([0-9a-zA-Z-]*).', $channel, $match) ) { $sta = trim($match[2]); $chan = trim($match[1]); } $callerid = $agivar[agi_callerid]; if (preg_match('//', $callerid, $match) ) { $cidn = trim($match[1]); } else { if (preg_match('/([0-9]+)/', $callerid, $match) ) Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 91 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk { $cidn = trim($match[1]); } else $cidn = -1; } // Check if we have an outstanding Wakeup Call file if ( $parm_chan_ext ) $dir_check = "$chan.$sta.call"; else $dir_check = "ext.$cidn.call"; if ($parm_debug_on) fputs( $stdlog, "Checking Directory [$parm_call_dir] Check=[$dir_check]\n" ); $outc=0; $dir_handle = opendir( $parm_call_dir ); while( $file = readdir($dir_handle ) ) { if ($parm_debug_on) fputs( $stdlog, "File=$file\n" ); if (strstr( $file, $dir_check ) ) $out[$outc++] = $file; } closedir( $dir_handle ); Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 92 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk //========================================================== =============== // This is where we interact with the caller. Answer the phone and so on //========================================================== =============== $rc = execute_agi( "ANSWER "); sleep(1); if ( !$rc[result] ) $rc = execute_agi( "STREAM FILE chaomung \"\" "); $rc[result] = 0; while ( !$rc[result] ) { $rc = execute_agi( "STREAM FILE auth-thankyou \"0123456789\" "); if ( !$rc[result] ) $rc = execute_agi( "STREAM FILE nhapgio \"0123456789\" "); // If we get here, they haven't pressed anything yet. if ( !$rc[result] ) $rc = execute_agi( "GET DATA beep 15000 4"); if ( $rc[result] != -1 ) { if ($parm_debug_on) fputs( $stdlog, "We have num digits:" . strlen( $rc[result]) . "- $rc[result] \r\n\r\n" ); Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 93 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk if ( strlen( $rc[result] ) == 2 ) { $num= $rc[result]-48; while ( strlen($num) 0 ) { $rc = execute_agi( "WAIT FOR DIGIT 15000"); if ( $rc[result] >= 48 && $rc[result] <= 57 ) $num .= $rc[result] - 48; else $rc[result] = 0; } if (strlen($num) == 4 ) $rc[result] = $num; } if ($parm_debug_on) fputs( $stdlog, "Checking Results [$rc[result]] \r\n\r\n" ); if ( $rc[result] > 2359 || strlen( $rc[result]) < 4 || substr($rc[result],2,2) > 59 || $rc[result] < 0) { $rc[result] = 0; $rc = execute_agi( "STREAM FILE auth-thankyou \"\" "); } Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 94 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk if (strlen( $rc[result] ) == 4 && $rc[result] == 0 ) $rc[result] = -2; // Special 00:00 time } } if ( $rc[result] == -2 ) $rc[result] = '0000'; else if ( $rc[result] == -1 ) exit; // The user hung up // Save the time entered $wtime = $rc[result]; // We don't know who the user is, so if its less than 1300 it could be AM or PM, so prompt // them for am pm if ( $wtime != -1 && $wtime < 1300 ) { $rc[result] = 0; while ( !$rc[result] ) { if ( !$rc[result] ) $rc = execute_agi( "GET DATA sangchieu 15000 1"); } switch( $rc[result] ) { case '1': // Set to AM should be under 1159 or less Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 95 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk if ( $wtime > 1159 ) $wtime -= 1200; $rc[result] = 0; break; case '2': // Set to PM should be equal or over 1200 if ( $wtime < 1159 ) $wtime += 1200; $rc[result] = 0; break; } } $rc[result] = 0; while ( !$rc[result] ) { $rc = execute_agi( "STREAM FILE soduocgoi \"0123456789\" "); if ( !$rc[result] ) $rc = execute_agi( "GET DATA beep 15000 4"); $sogoi = $rc[result]; } $rc[result] = 0;$BADFLAG=0 ; while (( !$rc[result] )||(!$BADFLAG)) { $rc = execute_agi( "STREAM FILE date \"0123456789\" "); if ( !$rc[result] ) Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 96 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk $rc = execute_agi( "GET DATA beep 15000 8"); $rc[result] = trim($rc[result]); $rc[result] = ltrim($rc[result]); if (substr($rc[result],4,4)<date("Y")) : $BADFLAG=1 ; endif ; if (substr($rc[result],4,4)>2020) : $BADFLAG=1 ; endif; if (substr($rc[result],0,2)<01) : $BADFLAG=1 ; endif ; if (substr($rc[result],0,2)>12) : $BADFLAG=1 ; endif ; if ((substr($rc[result],0,2)<date("m"))&&(substr($rc[result],4,4)<date("Y"))) : $BADFLAG=1 ; endif ; if (substr($rc[result],2,2)<01) : $BADFLAG=1 ; endif ; if (substr($rc[result],2,2)>31) : $BADFLAG=1 ; endif ; Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 97 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk if ((substr($rc[result],0,2)<date("m"))&&(substr($rc[result],2,2)<date("d"))&&(substr ($rc[result],4,4)<date("Y"))) : $BADFLAG=1 ; endif ; if ($BADFLAG) $BADFLAG=0; else $BADFLAG=1; $ngaythang = $rc[result]; } $rc[result] = 0; while ( !$rc[result] ) { $rc = execute_agi( "STREAM FILE nhapmsbh \"0123456789\" "); if ( !$rc[result] ){ $rc = execute_agi( "GET DATA beep 15000 4"); $msbh = $rc[result]; $row=mysql_query("select mabh from mabaihat where mabh='$msbh'"); $rows = mysql_fetch_array($row); if($rows){ $rc[result]=1; } else $rc[result]=0; } Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 98 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk } $rc[result] = 0; // if ( !$rc[result] ) // $rc = execute_agi( "STREAM FILE loighiam"); if ( !$rc[result]) $rc = execute_agi( "RECORD FILE /var/lib/asterisk/sounds/do- an/$wtime.$ngaythang.$sogoi gsm \"0123456789\" -1"); // At this point we have a millitary time in the $wtime variable if ( $parm_chan_ext ) { $wakefile = "$parm_temp_dir/$wtime.$chan.$sta.call"; $callfile = "$parm_call_dir/$wtime.$chan.$sta.call"; } else { $wakefile = "$parm_temp_dir/$wtime.$ngaythang.$sogoi.call"; $callfile = "$parm_call_dir/$wtime.$ngaythang.$sogoi.call"; } if ($parm_debug_on) fputs( $stdlog, "Wakeup File [$wakefile]\n" ); // Open up a wakeup file to write it out. $wuc = fopen( $wakefile, 'w'); if ( $wuc ) { Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 99 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk // Delete any old Wakeup call files this one will override for ($i=0; $i < $outc; $i++ ) { if( file_exists( "$parm_call_dir/$out[$i]" ) ) { if ($parm_debug_on) fputs( $stdlog, "Unlinking Old File [$parm_call_dir/$out[$i]]\n" ); unlink( "$parm_call_dir/$out[$i]" ); } } if ( $parm_chan_ext ) fputs( $wuc, "channel: $chan/$sta\n" ); else fputs( $wuc, "channel: SIP/$sogoi\n" ); fputs( $wuc, "maxretries: $parm_maxretries\n"); fputs( $wuc, "retrytime: $parm_retrytime\n"); fputs( $wuc, "waittime: $parm_waittime\n"); fputs( $wuc, "callerid: $parm_wakeupcallerid\n"); fputs( $wuc, "Extension: 10\n"); fputs( $wuc, "context: guiqua\n"); fputs( $wuc, "Set: MSG=" . $wtime . "." . $ngaythang . "." . $sogoi . "\n" ); fputs( $wuc, "Set: MABH=" . $msbh . "\n" ); fclose( $wuc ); Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 100 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk $w = getdate(); $w['hours'] = substr( $wtime, 0, 2 ); $w['minutes'] = substr( $wtime, 2, 2 ); $w['day'] = substr( $ngaythang, 2, 2 ); $w['mon'] = substr( $ngaythang, 0, 2 ); $w['year'] = substr( $ngaythang, 4, 4 ); $time_wakeup = mktime( substr( $wtime, 0, 2 ), substr( $wtime, 2, 2 ), 0, substr( $ngaythang, 0, 2 ), substr( $ngaythang, 2, 2 ), substr( $ngaythang, 4, 4 )); $time_now = time( ); if ($parm_debug_on) fputs( $stdlog, 'time_wakeup=' . date('l dS \of F Y h:i:s A', $time_wakeup) . " ($time_wakeup) | time_now=" . date('l dS \of F Y h:i:s A',$time_now) . " ($time_now)\n" ); if ($parm_debug_on) fputs( $stdlog, 'Setting WAKEUP file to =' . date('l dS \of F Y h:i:s A', $time_wakeup) . " - $time_wakeup\n" ); touch( $wakefile, $time_wakeup, $time_wakeup ); rename( $wakefile, $callfile ) } else { if ($parm_debug_on) fputs( $stdlog, "Error opening file [$wakefile]\n" ) $rc = execute_agi( "STREAM FILE auth-thankyou \"\" "); if ( !$rc[result] ) Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 101 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk $rc = execute_agi( "STREAM FILE goodbye \"\" "); if ( !$rc[result] ) $rc = execute_agi( "HANGUP"); exit; } if ( $cidn && $parm_chan_ext == 0 ) { $rc = execute_agi( "STREAM FILE auth-thankyou \"\" "); if ( !$rc[result] ) $rc = execute_agi( "STREAM FILE auth-thankyou \"\" "); if ( !$rc[result] ) $rc = execute_agi( "SAY DIGITS $sogoi \"\" ") } say_wakeup( $wtime ); $rc[result] = 0; // } break; if ( !$rc[result] ) $rc = execute_agi( "STREAM FILE auth-thankyou \"\" "); if ($parm_debug_on) fclose($stdlog); exit; } // ---------------------------------------------- Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 102 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk // This will say military time in AM/PM format function say_wakeup( $wtime ) { GLOBAL $stdin, $stdout, $stdlog, $parm_debug_on; $pm = 0; if ($wtime > 1159 ) { $wtime -=1200; $pm = 1; } if ($wtime <= 59 ) $wtime += 1200 if ( strlen( $wtime ) == 3 ) $wtime = '0' . $wtime; $h = substr( $wtime, 0, 2 ); $h1 = substr( $wtime, 0, 1 ); $h2 = substr( $wtime, 1, 1 ); $m = substr( $wtime, 2, 2 ); $m1 = substr( $wtime, 2, 1); $m2 = substr( $wtime, 3, 1); if ($parm_debug_on) fputs( $stdlog, "Wakeup time is set to $wtime\n" ); $rc = execute_agi( "STREAM FILE rqsted-wakeup-for \"\" "); if ( !$rc[result] ) Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 103 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk { if ( $h1 == 0 ) $rc = execute_agi( "SAY NUMBER $h2 \"\""); else $rc = execute_agi( "SAY NUMBER $h \"\""); if ( !$rc[result] ) { if ($m == 0 ) $rc = execute_agi( "STREAM FILE digits/oclock \"\" "); else { if ( $m1 == 0 ) { $rc = execute_agi( "STREAM FILE digits/oh \"\" "); $rc = execute_agi( "SAY NUMBER $m2 \"\" "); } else $rc = execute_agi( "SAY NUMBER $m \"\""); } if ( !$rc[result] ) { if ( $pm ) $rc = execute_agi( "STREAM FILE digits/p-m \"\" "); else Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 104 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk $rc = execute_agi( "STREAM FILE digits/a-m \"\" "); } } } } //-------------------------------------------------- // This function will send out the command and get // the response back function execute_agi( $command ) { GLOBAL $stdin, $stdout, $stdlog, $parm_debug_on; fputs( $stdout, $command . "\n" ); fflush( $stdout ); if ($parm_debug_on) fputs( $stdlog, $command . "\n" ); $resp = fgets( $stdin, 4096 ); if ($parm_debug_on) fputs( $stdlog, $resp ); if ( preg_match("/^([0-9]{1,3}) (.*)/", $resp, $matches) ) { if (preg_match('/result=([-0-9a-zA-Z]*)(.*)/', $matches[2], $match)) { $arr['code'] = $matches[1]; $arr['result'] = $match[1]; Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 105 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk if (isset($match[3]) && $match[3]) $arr['data'] = $match[3]; return $arr; } else { if ($parm_debug_on) fputs( $stdlog, "Couldn't figure out returned string, Returning code=$matches[1] result=0\n" ); $arr['code'] = $matches[1]; $arr['result'] = 0; return $arr; } } else { if ($parm_debug_on) fputs( $stdlog, "Could not process string, Returning -1\n" ); $arr['code'] = -1; $arr['result'] = -1; return $arr; } } ?> Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 106 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk 4.5 Kết quả thực nghiệm Hình 4.11 Các SIP đăng ký vào server Hình 4.12 Agents login vào hệ thống Hình 4.13 Thuê bao gọi đến tổng đài Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 107 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Hình 4.14 Nhấn phím 1 đến quà tặng âm nhạc Hình 4.15 Nhập mã số bài hát Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 108 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Hình 4.16 Nhập số điện thoại đƣợc tặng Hình 4.17 Nhập giờ phút gửi bài hát Hình 4.18 Nhập ngày tháng năm gửi bài hát Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 109 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Hình 4.19 Để lại lời nhắn Hình 4.20 Nhấn phím 0 gặp nhân viên tƣ vấn Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 110 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Hình 4.21 Kết thúc cuộc gọi sau 30s không nhận đƣợc phím nhấn Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 111 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Hình 4.22 Tổng đài gọi đến số điện thoại đƣợc yêu cầu Hình 4.23 Trả lời và nhận quà tặng từ tổng đài Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 112 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk KẾT LUẬN 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 đề khác mà em chƣa thể trình bày. 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 ứng dụng là dịch vụ quà tặng âm nhạc Hệ thống đảm bảo chất lƣợng cuộc gọi tốt và ổn định trong mạng LAN 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 đánh giá đƣợ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 điện thoại qua Internet: nghiên cứu, cài đặt, quản trị… PHỤ LỤC Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 113 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk DANH MỤC CÁC THUẬT NGỮ VÀ TỪ VIẾT TẮT 1. QoS Quality of Service 2. Codec COder/DECoder 3. IAX Inter Asterisk eXchange 4. PBX Private Branch Exchange 5. PSTN Public Switched Telephone Network 6. TDM Time Division Multiplexing 7. VoIP Voice over Internet Protocol 8. PCM Pulse Code 9. RTP Real-time Transport Protocol 10. RTCP Real Time Control Protocol 11. SCCP Signaling Connection Control Part 12. RTSP Real Time Streaming Protocol 13. SIP Session Initiation 14. NGN Next Generation Network 15. IVR Interactive Voice Response 16. AGI Asterisk Gateway Interface 17. API Application Programming Interface 18. NAT Network Address Translator 19. PRI Primary Rate ISDN 20. ACD Advanced Call Distribution 21. AMP Asterisk Management Platform 22. ATA Analog Terminal Adaptor 23. CDR Call Detail Records 24. CGI Control Gate Interface 25. CRM Customer Relationship Management Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 114 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk 26. MGCP Media Gateway Control Protocol 27. NAT Network Address Translator 28. POTS Plain Old Telephone Service 29. PRI Primary Rate ISDN 30. RADIUS Remote Authentication Dial In User Service 31. SER SIP Express Route Tài liệu tham khảo Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk Trang 115 Chương IV : Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk [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.2 nd .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:

  • pdfXây dựng trung tâm quà tặng âm nhạc trên nền Asterisk.pdf
Luận văn liên quan