Chương 4: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CUỘC GỌI CƠ BẢN 4.1. Mô hình triển khai hệ thống Asterisk
Asterisk PBX 192.168.1.30 Switch Analog Phone 1 [201] Router 192.168.1.1 Analog Phone 2 [202] Softphone SIP 1 [101] 192.168.1.2 Softphone SIP 2 [102] 192.168.1.3 Softphone SIP 3 [103] 192.168.1.4 Internet
Hình 16 Mô hình triển khai hệ thống
* Thông số về cấu hình thiết bị
Asterisk PBX: một PC cài đặt server Asterisk có cấu hình: CPU:
RAM: 512MB HDD:
OS: Centos 5.9
Card TDM400P gồm 2 cổng FXO, 2 cổng FXS được gắn trong Asterisk PBX. 3 máy tính cài đặt softphone sử dụng giao thức SIP.
2 analog phone kết nối với Asterisk PBX qua card TDM400P. Switch 8 cổng dùng để kết nối các thiết bị với nhau.
Router sử dụng để định tuyến và kết nối với nhà cung cấp dịch vụ Internet.
* Yêu cầu thực hiện:
Thực hiện cuộc gọi giữa các máy tính sử dụng Softphone.
Thực hiện cuộc gọi giữa các máy tính sử dụng Softphone vơi analog phone và ngược lại. Thực hiện một số dịch vụ cho tổng đài như IVR, voicemail, callpickup, call transfer,
video call.
* Tổ chức đầu số cho các thiết bị trong tổng đài
PHẦN II – XÂY DỰNG TỔNG ĐÀI DÙNG ASTERISK
Chương 4: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CUỘC GỌI CƠ BẢN
[2xx] dùng cho analog phone.
[500] dùng để kiểm tra thử hoạt động của tổng đài.
4.2. Thiết lập cấu hình cơ bản cho hệ thống
4.2.1. Lắp đặt card TDM400P và cấu hình
Card TDM400P (Model TDM22) bao gồm 2 cổng FXO và 2 cồng FXS. Trong phạm vi đồ án 2, chúng em chỉ sử dụng 2 cổng FXS để kết nối analog phone với tổng đài.
Hình 17 Card TDM400P
Trước khi lắp đặt card TDM400P cần tắt nguồn máy tính và kiểm tra cổng PCI có tương thích để gắn vào hay không. Sau khi kiểm tra và lắp đặt card khởi động lại máy tính để cấu hình cho card. Cấu hình cho card hoạt động thông qua 2 file cấu hình là system.conf trong thư mục /etc/dahdi và chan_dahdi.conf trong thư mục /etc/asterisk.
Trước tiên ta cấu hình các thông số chung cho card. Mở file cấu hình theo đường dẫn /etc/dahdi/system.conf và thêm vào:
# Specify that we would like DAHDI to generate tones that are # used in the United States.
Chương 4: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CUỘC GỌI CƠ BẢN
defaultzone = us
# We have 4 FXS ports; configure them to use FXO signaling. fxsks = 1,2
fxoks = 3,4
Sau đó ta sử dụng lệnh init để load lại modules và khởi tạo lại phần cứng: $ sudo /etc/init.d/dahdi start
Loading DAHDI hardware modules:
wctdm24xxp: [ OK ]
Running dahdi_cfg: [ OK ]
Sau khi cấu hình xong DAHDI ta tiếp tục cấu hình cho Asterisk giao tiếp với DAHDI. Mở file /etc/asterisk/chan_dahdi.conf và thêm vào:
[trunkgroups]
; No trunk groups are needed in this configuration.
[channels]
; The channels context is used when defining channels using the ; older deprecated method. Don't use this as a section name.
[phone](!) ;
; Template chứa các options chung cho các analog phone. ; usecallerid = yes hidecallerid = no callwaiting = no threewaycalling = yes transfer = yes echocancel = yes echotraining = yes immediate = no context = LocalSets
signalling = fxo_ks ; Sử dụng tín hiệu FXO cho kênh FXS
[phone1](phone) callerid = "USERE" dahdichan = 3
PHẦN II – XÂY DỰNG TỔNG ĐÀI DÙNG ASTERISK
Chương 4: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CUỘC GỌI CƠ BẢN
[phone2](phone) callerid = "USERF" dahdichan = 4
Để đảm bảo Asterisk đã load các file cấu hình ta sử dụng lệnh dahdi show channels trong màn hình CLI:
*CLI> dahdi show channels
4.2.2 Cấu hình các kênh SIP cho softphone
Trong phần này ta sẽ khai báo các kênh SIP dùng cho các softphone sử dụng giao thức SIP trong mạng. Các thông số trong phần [general] sẽ có hiệu lực trên tất cả các kênh trừ khi được khai báo lại trong từng kênh cụ thể.
Sau đây là các thông số dành khai báo riêng cho từng kênh SIP:
Name: đây là phần khai báo máy điện thoại extention ip sip, có thể là ký tự nhưng
thường là các con số quay vì trên các phím điện thoại thường là các con số mà thôi. Type: Kiểu kết nối thông tin user, peer hay friend
Host: Địa chỉ IP hay tên miền mà client kết nối với kênh này thường dùng giá trị là
“dynamic” cho tất cả client kết nối đến.
Secret : mật khẩu để sử dụng kênh này. Máy điện thoại phía client phải khai báo trùng
với thông số này thì mới sử dụng được. Context: Khai báo ngữ cảnh cho thuê bao.
Mailbox: Khai báo hộp thư thoại cho thuê bao.
Call-limit: Khai báo bao nhiêu cuộc gọi có thể thực hiện đồng thời đối với thuê bao.
Callgroup: Khai báo nhóm gọi cho thuê bao.
Pickupgroup: Khai báo nhóm pick up cho thuê bao.
Barge_rooms: Khai báo phòng hội nghị cho thuê bao.
Disallow: Khai báo codec nào không được hoạt động ứng với thuê bao.
Allow: Khai báo codec nào được hoạt động ứng với thuê bao.
Cụ thể trong file /etc/asterisk/sip.conf cấu hình 3 extensions 101, 102 và 103 cho 3 softphone dùng giao thức SIP.
[general]
context=unauthenticated ; default context for imcoming calls allowguest=no ; disable unauthenticated calls
srvlookup=yes ; enabled DNS SRV record lookup on outbound calls udpbinaddr=0.0.0.0 ; listen for UDP requests on all interfaces
Chương 4: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CUỘC GỌI CƠ BẢN
[office-phone](!) ; creat a template for our devices
type=friend ; the channel driver will match on username first, IP second context=LocalSets ; this is where calls from the device will enter the dial plan host=dynamic ; the device will register with asterisk
nat=yes ; assume device behind NAT dtmfmode=auto
disallow=all allow=ulaw allow=alaw
;defind device name and use the office-phone template [101](office-phone) secret=abc101 [102](office-phone) secret=abc102 [103](office-phone) secret=abc103
4.2.3 Cấu hình cho softphone
Sử dụng softphone Linphone phiên bản 3.5.2 dùng giao thức báo hiệu SIP. Giao diện phần mềm Linphone.
PHẦN II – XÂY DỰNG TỔNG ĐÀI DÙNG ASTERISK
Chương 4: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CUỘC GỌI CƠ BẢN
Hình 18 Giao diện softphone Linphone
Cấu hình softphone theo các bước sau:
Bước 1: Chọn Options – Preference
Hình 19 Cấu hình cho Linphone
Bước 2: Trong cửa sổ hiện ra chọn tab Manage SIP Accounts, chọn Add để tạo tài khoản SIP.
Chương 4: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CUỘC GỌI CƠ BẢN
Hình 20 Cấu hình cho Linphone
Bước 3: Sau khi khai báo xong chọn OK. Cửa sổ mới hiện ra yêu cầu nhập UserID và Password
của tài khoản.
Hình 21 Cấu hình cho Linphone
Bước 4: Ta điền UserID và Password lần lượt là 101 và abc101 như đã khai báo trong file
sip.conf. Sau đó chọn OK – Done. Giao diện chính phần mềm hiện ra với thông báo tài khoản đã đăng kí thành công. Lúc này ta có thể tiến hành cuộc gọi thông qua tổng đài.
PHẦN II – XÂY DỰNG TỔNG ĐÀI DÙNG ASTERISK
Chương 4: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CUỘC GỌI CƠ BẢN
Hình 22 Cấu hình cho Linphone
Cấu hình tương tự cho các softphone còn lại.
4.3. Xây dựng dialplan để thực hiện các thao tác gọi cơ bản
Trong mô hình này, Asterisk server đóng vai trò chuyển mạch giữa các thuê bao softphone sử dụng giao thức SIP và các analog phone được kết nối với tổng đài.
4.3.1. Xây dựng dialplan
Ta lập trình dialplan cho tổng đài bằng cách cấu hình file /etc/asterisk/extensions.conf như sau: [globals] USERA=SIP/101 USERB=SIP/102 USERC=SIP/103 USERD=SIP/104 USERE=DAHDI/3 USERF=DAHDI/4 [LocalSets] exten => 101,1,Dial(SIP/101)
Chương 4: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CUỘC GỌI CƠ BẢN exten => usera,1,Dial(${USERA}) exten => 102,1,Dial(SIP/102) exten => userb,1,Dial(${USERB}) exten => 103,1,Dial(SIP/103) exten => userc,1,Dial(${USERC}) ;DAHDI channels exten => 201,1,Dial(${USERE}) exten => 202,1,Dial(${USERF}) exten => 500,1,Answer() same => n,Playback(hello-world) same => n,Hangup() exten => 900,1,Goto(TestMenu,start,1) [TestMenu] exten => start,1,Answer() same => n,Playback(enter-ext-of-person) same => n,WaitExten(5) exten => 1,1,Playback(digits/1) same => n,Goto(TestMenu,start,1) exten => 2,1,Playback(digits/2) same => n,Goto(TestMenu,start,1) exten => i,1,Playback(pbx-invalid) same => n,Goto(TestMenu,start,1)
PHẦN II – XÂY DỰNG TỔNG ĐÀI DÙNG ASTERISK
Chương 4: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CUỘC GỌI CƠ BẢN
exten => t,1,Playback(vm-goodbye) same => n,Hangup()
4.3.2. Thực hiện cuộc gọi giữa 2 softphone
Sau khi xây dựng dialplan, ta thực hiện cuộc gọi giữa 2 softphone với nhau
Bước 1: Softphone 101 quay số 102 báo hiệu lên tổng đài Asterisk sử dụng giao thức SIP
Hình 23 Thực hiện cuộc gọi giữa 2 softphone
Chương 4: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CUỘC GỌI CƠ BẢN
Bước 3: Softphone 2 chấp nhận cuộc gọi chọn Answer. Cuộc gọi được thông thoại.
Hình 24 Thực hiện cuộc gọi giữa 2 softphone
PHẦN II – XÂY DỰNG TỔNG ĐÀI DÙNG ASTERISK
Chương 4: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CUỘC GỌI CƠ BẢN
4.3.3. Thực hiện cuộc gọi giữa softphone với analog phone
Thực hiện các bước tương tự như cuộc gọi giữa 2 softphone. Cuộc gọi thực hiện tốt.
Chương 5 XÂY DỰNG CÁC DỊCH VỤ TỔNG ĐÀI 5.1 Video Call 5.2 Voicemail 5.3 Call Transfer 5.4 Call Pickup 5.5 Call Parking 5.6 Meetme (Conference) 5.7 DND (Do not Disturb) 5.8 Call Forward
5.8.1 Chuyển cuộc gọi tức thời
5.8.2 Chuyển cuộc gọi khi máy đang bận 5.8.3 Chuyển cuộc gọi khi trả lời 5.8.3 Chuyển cuộc gọi khi trả lời
PHẦN II – XÂY DỰNG TỔNG ĐÀI DÙNG ASTERISK Chương 5: XÂY DỰNG CÁC DỊCH VỤ CHO TỔNG ĐÂÌ 5.1 Video Call
Với ứng dụng này sẽ cho phép thuê bao có thể sử dụng chức năng video. Nếu phía client có hỗ trợ video sẽ được nhận tín hiệu video từ client khác qua hệ thống Asterisk.
Chức năng Video được hỗ trợ qua kênh thông tin SIP nên được khai báo sử dụng qua tập tin cấu hình sip.conf. Thêm vào section [general] trong file cấu hình các dòng sau:
videosupport=yes ; Cho phép Asterisk hỗ trợ chức năng video allow=h263 ; H.263 video codec
allow=h263p ; H.263p enhanced video codec dtmfmode=rfc2833
canreinvite=no
Trong softphone Linphone chọn Enable video. Cuộc gọi bây giờ đã hỗ trợ video call.
Hình 25 Video Call
5.2 Voicemail
Một trong những tính năng phổ biến nhất trong các hệ thống tổng đài hiện đại là tính năng hộp thư thoại voicemail. Tính năng này giúp cho người sử dụng có thể lưu lại được nội dung các cuộc gọi để nghe lại sau trong khi có việc không thể nghe máy. Asterisk cung cấp một hệ thống voicemail rất linh hoạt cho người sử dụng, dưới đây là một số tính năng của hộp thư thoại:
Mỗi hộp thư được quản lý trong các thư mục riêng và được bảo vệ bởi password do người sử dụng chọn.
Có các lời chào khác nhau cho mỗi trạng thái busy hoặc unavailable. Có lời chào mặc định và có khả năng tùy biến.
Chương 5: XÂY DỰNG CÁC DỊCH VỤ CHO TỔNG ĐÂÌ
Khi thông điệp được nhận, hệ thống VoiceMail có thể gửi qua Mail để thông báo cho người sử dụng, có thể đính kèm theo file thông điệp.
Có thể chuyển tiếp voicemail hoặc phát quảng bá.
Để thiết lập dịch vụ voicemail ta cần cấu hình trong file /etc/asterisk/voicemail.conf như sau: [general] format=wav49|wav servermail=quockhanh2991@yahoo.com attach=yes skipms=3000 maxsilence=10 silencethreshold=128 maxlogins=3 sendvoicemail=yes [default] 101 => 1234,quockhanh,quockhanh.dn@gmail.com 102 => 1234,vantruong,nguyenvantruong.bk@gmail.com 103 => 1234,hoanggiang,hoanggiang.d19bk@gmail.com
Trong file /etc/asterisk/extensions.conf ta xây dựng macro và subroutine cho voicemail như sau: [macro-voicemail]
exten => s,1,Dial(${ARG1},10)
same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) same => n(unavail),VoiceMaill(${MACRO_EXTEN}@default,u) same => n,Hangup() same => n(busy),VoiceMaill(${MACRO_EXTEN}@default,b) same => n,Hangup() [subVoicemail] exten => s,1,Dial(${ARG1},10)
same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) same => n(unavail),VoiceMaill(${ARG2}@default,u)
same => n,Hangup()
same => n(busy),VoiceMaill(${ARG2}@default,b) same => n,Hangup()
PHẦN II – XÂY DỰNG TỔNG ĐÀI DÙNG ASTERISK Chương 5: XÂY DỰNG CÁC DỊCH VỤ CHO TỔNG ĐÂÌ
exten => 101,1,Macro(voicemail,${USERA})
exten => 102,1,GoSub(subVoicemail,start,1(${USERA},${EXTEN}))
Sau khi cấu hình xong, cuộc gọi đến các thuê bao 101 và 102 nếu máy bận hoặc không có người nhấc máy sau 10s, tính năng hộp thư thoại voicemail sẽ được khởi động để lưu lại nội dung cuộc gọi và hộp thư tương ứng.
Thuê bao muốn nghe lại thư thoại và thực hiện các tương tác bấm số 123 để thực hiện đăng nhập. Thao tác này được cấu hình trong file /etc/asterisk/extensions.conf như sau:
exten => 123,1,VoiceMailMain()
5.3 Call Transfer
Dịch vụ call transfer là dịch vụ chuyển cuộc gọi đến một số nào đó khi bên gọi yêu cầu bên được gọi chuyển. Yêu thuê bao muốn chuyển cuộc gọi đến phải cùng callgroup với thuê bao thực hiện chuyển cuộc gọi.
Ví dụ: Thuê bao 101 có callgroup là 1, thuê bao 102 và 103 có cùng callgroup là 2. Thuê bao 101
gọi cho thuê bao 103 và cả 2 đã thông thoại. Thuê bao 101 muốn chuyển cuộc gọi đến thuê bao 102 thì thuê bao được gọi là 103 sẽ bấm phím #, nghe thông báo transfer và bấm số 102 để chuyển cuộc gọi đến thuê bao 102.
Việc thiết lập dịch vụ được thực hiện trong file /etc/asterisk/extensions.conf bằng cách thêm option t và T để kích hoạt dịch vụ Call Transfer.
exten => 103,1,Dial(${USERC},10,tT)
5.4 Call Pickup
Call pickup là dịch vụ cho phép chúng ta nhận cuộc gọi từ xa trong cùng một nhóm hay nhận cuộc gọi từ một máy điện thoại đang rung chuông bất kỳ.
Bất kỳ số điện thoại nào trong cùng một nhóm với các thông số callgroup và pickupgroup giống nhau đều có thể nhận cuộc gọi khác trong cùng nhóm đó. Các thông số này được cấu hình trong file /etc/asterisk/sip.conf khi khai báo tạo tài khoản user đã được cấu hình ở trên.
Ví dụ: khi thuê bao 101 khác nhóm gọi tới thuê bao 102. Thuê bao 103 có cùng callgroup và
pickupgroup với thuê bao 102 có thể bấm *8 để nghe cuộc gọi.
Ngoài ra thuê bao không cùng nhóm cũng có thể sử dụng được call pickup nếu ta cấu hình trong file /etc/asterisk/extensions.còn như sau:
exten => _**xxx,1,Pickup(${EXTEN:2}@LocalSets)
Khi đó thuê bao bất kì có thể nghe cuộc gọi đến thuê bao khác bằng cách bấm ** và số thuê bao muốn nghe.
5.5 Call Parking
Call Parking là dịch vụ thực hiện chuyển cuộc gọi có quản lý. Nguyên lý hoạt động của nó như sau:
Chương 5: XÂY DỰNG CÁC DỊCH VỤ CHO TỔNG ĐÂÌ
Ví dụ : Số bên ngoài 101 gọi cho số 102 và nhờ chuyển máy để được gặp số 103. Khi đó số 102
sẽ thực hiện các bước như sau:
Bước 1: Quay số #700 một con số parking sẽ được thông báo cho số 102 trong trường
hợp này là 701.
Bước 2: Số 102 gác máy (trong lúc này số bên ngoài sẽ nghe nhạc) và gọi đến cho số 103
thông báo cho số đó biết là có một cuộc gọi đang đợi số 103 trên số parking 701.
Tại lúc này có hai trường hợp xảy ra.
a. Số 103 sẽ gọi số 701 để gặp số gọi vào là 101.
b.Số 103 không muốn gặp số bên ngoài 101 và lúc này số 102 sẽ quay số 701 thông báo số 103 không thể gặp số 101.
Cấu hình chi tiết trong file /etc/asterisk/features.conf như sau: *File features.conf:
[general]
parkext => 700 ; con số mà người nhận cuộc gọi quay để nhận số parking parkpos => 701-709 ; Con số mà cuộc gọi sẽ parking trên đó
oncontext => parkedcalls ;ngữ cảnh parking cuộc gọi
parkingtime => 60; Số giây mà một cuộc gọi có thể parking (mặc định là 45 giây)
5.6 Meetme (Conference)
Chức năng hội thoại cho phép nhiều người có thể cùng nhau trao đổi nói chuyện với nhau, nơi mà mọi người cùng gọi đến để trao đổi nói chuyện gọi là phòng hội thoại “room”, Asterisk cho phép tạo ra nhiều phòng hội thoại “room” tuỳ vào nhu cầu người sử dụng. Để sử dụng hội nghị, thuê bao nội bộ cần bấm số 600, nghe thông báo mời nhập mật khẩu, sau khi nhập mật khẩu đúng sẽ nghe lời gọi cảm ơn và bây giờ thuê bao có thể tham gia hội nghị.
Để cấu hình thực hiện một phòng hội thoại “room” chúng ta lần lượt cấu hình như sau: