3.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 luận văn, chúng em sử dụng 2 cổng FXS để kết nối analog phone với tổng đài và 1 cổng FXO để kết nối với tổng đài PSTN.
Hình 21 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.
loadzone = br defaultzone = br
# 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
CHƯƠNG 3: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CÁC DỊCH VỤ CƠ BẢN
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. context= incoming busydetect=yes busycount=4 hanguponpolarityswitch=yes callprogress=no group = 1 signalling = fxs_ks channel => 1-2 [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 [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
3.2.2. Thiết lập cuộc gọi qua internet
3.2.2.1. Cấu hình trên Asterisk
Để server Asterisk cho phép việc kết nối và thực hiện cuộc gọi qua Internet, ta thiết lập trong file sip.conf như sau:
localnet = 192.168.1.0/255.255.255.0 externhost = quockhanh2991.no-ip.biz externrefresh = 60 nat=yes qualify=yes Trong đó:
Localnet: dải địa chỉ IP local đặt server Asterisk. Externhost: tên miền của server Asterisk.
Externrefresh: thời gian cập nhật lại địa chỉ ứng với tên miền của server Asterisk. Nat: thiết lập server asterisk nằm sau NAT.
3.2.2.2. Đăng kí tên miền
Trong luận văn này, do server Asterisk không có IP cố định nên ta cần đăng kí một tên miền được đồng bộ với IP WAN của server để thuận lợi trong việc sử dụng dịch vụ. Ở đây em sử dụng dịch vụ tên miền miễn phí được cung cấp ở trang www.noip.com.
CHƯƠNG 3: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CÁC DỊCH VỤ CƠ BẢN
Hình 22 Đăng kí tên miền cho server
Sau khi đăng kí tài khoản, ta sẽ được cung cấp 1 tên miền miễn phí. Ta cần tiền hành download và cài đặt Dynamic Update Client (DUC) lên server Asterisk để có thể tự động phát hiện sự thay đổi IP WAN của server và update tương ứng với tên miền vừa tạo bằng các câu lệnh sau:
cd /usr/local/src/
wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
tar xf noip-duc-linux.tar.gz
cd noip-2.1.9-1/
make install
Sau khi cài đặt xong, ta tiến hành thiết lập cho DUC bằng câu lệnh:
/usr/local/bin/noip2 –C
Chương trình sẽ yêu cầu nhập username và password đã được đăng kí, host name muốn cập nhật và thời gian cho mỗi lần cập nhật, ta chỉ việc điền các thông tin tương ứng để hoàn tất việt thiết lập.
3.2.2.3. NAT Port
Hình 23 Giao diện NAT port trên router
Trong đó:
Port 5060: dùng cho các gói báo hiệu trong giao thức SIP.
Port 10000-20000: dùng cho các gói audio và video truyền theo giao thức RTP.
3.2.2.4. Thiết lập STUN
Trên máy client, trong softphone ta cần thiết lập STUN (Session Traversal Utilities for NAT) cho phép các máy client tìm ra địa chỉ công khai của mình, loại NAT mà chúng đang đứng sau và cổng phía Internet được NAT gắn liền với cổng nội bộ nào đó. Thông tin này được sử dụng để thiết lập giao tiếp UDP giữa softphone trên máy client và server Asterisk.
CHƯƠNG 3: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CÁC DỊCH VỤ CƠ BẢN
Hình 24 Thiết lập STUN trên softphone
3.2.3. 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.
Callgroup: Khai báo nhóm gọi cho thuê bao.
Pickupgroup: Khai báo nhóm pick up 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
tcpenable=no ; disable TCP support
[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
3.2.4. 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.
CHƯƠNG 3: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CÁC DỊCH VỤ CƠ BẢN
Hình 25 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 26 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. Khai báo các thông số cấu hình của tài khoản. Ở đây ta làm cho tài khoản SIP 101.
Hình 27 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 28 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.
CHƯƠNG 3: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CÁC DỊCH VỤ CƠ BẢN
Hình 29 Cấu hình cho Linphone
Cấu hình tương tự cho các softphone còn lại.
3.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.
3.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: [LocalSets] exten => _1xx,1,Dial(SIP/${EXTEN}) same => n, Hangup() exten => 201,1,Dial(DAHDI/3) same => n, Hangup() exten => 202,1,Dial(DAHDI/4) same => n, Hangup()
exten => _9.,1,Dial(DAHDI/2/${EXTEN:1}) same => n, Hangup()
3.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 30 Thực hiện cuộc gọi giữa 2 softphone
CHƯƠNG 3: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CÁC DỊCH VỤ 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 31 Thực hiện cuộc gọi giữa 2 softphone
3.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.
3.4. Thiết lập các dịch vụ cơ bản 3.4.1. Video Call 3.4.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.
CHƯƠNG 3: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CÁC DỊCH VỤ CƠ BẢN
3.4.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.
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 attach=yes skipms=3000 maxsilence=10 silencethreshold=128 maxlogins=3 [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()
Sau đó ta sửa lại các extensions như sau: exten => _1xx,1,Macro(voicemail,${EXTEN})
Sau khi cấu hình xong, cuộc gọi đến các thuê bao 1xx 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ố 600 để 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 => 600,1,VoiceMailMain()
3.4.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 => _1xx,1,Dial(${EXTEN},10,tT)
3.4.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.
CHƯƠNG 3: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CÁC DỊCH VỤ CƠ BẢ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.
3.4.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:
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)
3.4.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: * File /etc/asterisk/meetme.conf: tạo ra phòng hội thoại “room”
conf = > 5001,123123; 5001 là tên phòng , 123123 là mật khâu đăng nhập
* File /etc/asterisk/extentions.conf: khai báo phòng hội thoại “room” trong kế hoạch dialplan để cho mọi người có thể gọi đến. Sử dụng câu lệnh có cấu trúc như sau: Cú pháp:
MeetMe( [ confno ][,[ options ][,pin ]])
Trong đó:
Confno con số của phòng hội thoại nếu thông số này không khai báo thì khi đăng nhập hệ thống sẽ yêu cầu nhập vào.
Pin số mật khẩu đăng nhập.
Options là thông số lựa chọn không có hoặc có nhiều thông số kết hợp với nhau để xác