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
128 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 4189 | Lượt tải: 5
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:
- Xây dựng trung tâm quà tặng âm nhạc trên nền Asterisk.pdf