Asterisk server trong mô hình này sẽ đóng vai trò chính là chuyển mạch giữa các thuê bao nội bộ và kết nối với các thuê bao nội bộ ra bên ngoài PSTN hoặc đến thuê bao VoIP khác. Trong mô hình này để các thuê bao trong mạng nội bộ có thể gọi đến các thuê bao VoIP hoặc các dịch vụ qua đường internet thì cần phải đăng ký một số từ nhà cung cấp dịch vụ VoIP ( có thể đăng ký dịch vụ của nhà cung cấp voice777).
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 104 -
5.7.1 Cuộc gọi nội bộ giữa hai thuê bao sử dụng cùng giao thức báo hiệu
Hình 5.14: Mô hình thực hiện cuộc gọi nội bộ cùng giao thức
Khi một SoftPhone hay một Analog Phone cần gọi một Softphone hay một Analog Phone sử dụng cùng giao thức báo hiệu, người sử dụng chỉ cần bấm số điện thoại của Softphone hay Analog phone cần gọi.
Ví dụ: Softphone SIP 200 gọi analogphone 100 cùng chịu sự quản lý của asterisk PBX thì việc xử lý cuộc gọi gồm các bước sau:
- Bước 1: Softphone SIP 200 quay số 100 và báo hiệu lên tổng đài asterisk
sử dụng giao thức SIP.
- Bước 2: Asterisk sẽ thông báo cho Analogphone 100 có cuộc gọi đến từ Softphone 200 sử dụng giao thức SIP.
- Bước 3: Analogphone 100 ở trạng thái rỗi, nó báo hiệu cho asterisk server
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 105 -
- Bước 4: Khi cả hai thuê bao đã sẵn sàng cho cuộc gọi, hai bên truyền thông với nhau thông qua giao thức RTP.
Hình 5.15: Các bản tin trong cuộc gọi nội bộ
Sử dụng phần mềm ethereal để bắt gói phân tích báo hiệu, ta được kết quả như hình 5.15
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 106 -
5.7.2 Cuộc gọi nội bộ giữa hai thuê bao sử dụng khác giao thức báo hiệu
Hình 5.16: Mô hình thực hiện cuộc gọi nội bộ khác giao thức
Khi một SoftPhone hay một Analog Phone cần gọi một Softphone hay một Analog Phone sử dụng khác giao thức báo hiệu, người sử dụng chỉ cần bấm số điện thoại của Softphone hay Analog phone cần gọi.
Ví dụ: Analogphone 100 gọi Softphone IAX 300 cùng chịu sự quản lý của asterisk PBX thì việc xử lý cuộc gọi gồm các bước sau:
- Bước 1: Analogphone 100 quay số 300 và báo hiệu lên tổng đài asterisk
sử dụng giao thức SIP.
- Bước 2: Asterisk sẽ thông báo cho Softphone IAX 300 có cuộc gọi đến từ
Analog phone sử dụng giao thức báo hiệu IAX.
- Bước 3: Softphone IAX 300 ở trạng thái rỗi, nó báo hiệu cho asterisk server biết nó có thể nhận được cuộc gọi sử dụng giao thức báo hiệu IAX.
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 107 -
- Bước 4: Khi cả hai thuê bao đã sẵn sàng cho cuộc gọi, hai bên truyền thông với nhau thông qua giao thức RTP.
5.7.3 Cuộc gọi ra ngoài PSTN
Hình 5.17: Mô hình cuộc gọi ra ngoài PSTN
Khi một SoftPhone hay một Analog Phone cần gọi một số khác ở ngoài mạng PSTN, người sử dụng cần bấm: 9 + Số điện thoại cần gọi
Ví dụ: Softphone SIP 200 cần gọi ra ngoài PSTN với số cần gọi là 8991768, thì việc xử lí cuộc gọi gồm các bước sau:
- Bước 1: Softphone SIP 200 quay số 98991768 và báo hiệu lên tổng đài asterisk sử dụng giao thức SIP.
- Bước 2: Asterisk sẽ thông báo cho cổng FXO có cuộc gọi ra ngoài PSTN
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 108 -
PSTN) hoặc sử dụng giao thức SIP (đối với việc sử dụng Grandstream gọi ra ngoài PSTN)
- Bước 3: Thuê bao PSTN khi ở trạng thái rỗi, FXO báo cho asterisk server
biết thuê bao PSTN có thể nhận được cuộc gọi sử dụng giao thức báo hiệu IAX (đối với việc sử dụng card X100P) hoặc giao thức SIP (đối với việc sử dụng Grandstream).
- Bước 4: Khi cả hai thuê bao đã sẵn sàng cho cuộc gọi, hai bên truyền thông với nhau thông qua FXO.
Hình 5.18: Các bản tin cuộc gọi ra ngoài PSTN
5.8 Xây dựng các dịch vụ
5.8.1 IVR (Interactive voice response)
Dịch vụ IVR được sử dụng trong hệ thống để tạo lời chào khi có số gọi đến và asterisk sẽ định hướng theo sự tương tác của thuê bao gọi đến. Cụ thể trong hệ thống này được xây dựng khi có thuê bao bên ngoài gọi đến sẽ bật lời chào có nội
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 109 -
dung như sau: “ Chào mừng bạn đến với công ty chúng tôi, bấm số 1 để gặp số 100, bấm số 2 để gặp số 200, bấm số 3 để gặp số 300, để tham gia hội nghị với chúng tôi, bấm số 9, để sử dụng dịch vụ DISA bấm số 000”. Ngoài ra hệ thống cũng được lập trình cho thuê bao bên ngoài bấm thẳng vào số máy nhánh nếu biết số của máy nhánh.
Hệ thống sẽ tự động trả lời lặp lại 3 lần nếu không có sự tương tác nào của thuê bao gọi đến, sau đó hệ thống sẽ hủy kết nối.
Hình 5.19: Mô hình minh họa thực hiện dịch vụ IVR
Chi tiết được cấu hình trong file extensions.conf với ngữ cảnh được gán cho nó là mainmenu: [mainmenu] exten=>s,1,Answer();có cuộc gọi đến thì trả lời exten=>s,n,set(COUNT=0); tạo bộđếm đếm số lần phát lời chào exten=>s,n(ct1),Background(loichao); phát lời chào exten=>s,n,set(COUNT=$[${COUNT}+1}]); tăng bộđếm
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 110 -
exten=>s,n,gotoif($[${COUNT} = 3]?ct:ct1); Đã phát lời chào đủ 3 lần? exten=>s,n(ct),playback(vm-tambiet); phát lời tạm biệt exten=>s,n,hangup(); hủy kết nối exten=>1xx,SET(TEMP=${EXTEN}) exten=>1xx,goto(local_analog,${TEMP},1) exten=>2xx,SET(TEMP=${EXTEN}) exten=>2xx,goto(local_SIP,${TEMP},1) exten=>3xx,SET(TEMP=${EXTEN}) exten=>3xx,goto(local_IAX,${TEMP},1)
exten=>1,1,goto(local_analog,100,1); thuê bao gọi bấm 1 exten=>2,1,goto(local_SIP,200,1); thuê bao gọi bấm 2 exten=>3,1,goto(local_IAX,300,1); thuê bao gọi bấm 3
exten=>000,1,goto(custom-disa,s,1); thuê bao gọi sử dụng DISA exten=>9,1,goto(Meetme,555,1); Thuê bao gọi tham gia hội nghị
exten => i,1,Goto(mainmenu,s,1);phím bấm không hợp lệ
5.8.2 Voicemail (hộp thư thoại)
Asterisk cung cấp khả năng xây dựng ứng dụng VoiceMail, với khả năng này giúp cho người sử dụng điện thoại không bỏ lỡ bất cứ cuộc gọi điện thoại nào. Một số tính năng của hệ thống voiceMail:
- Khi người gọi không được trả lời, máy không được kết nối mạng hay máy điện thoại đang bận, hệ thống đều có thông điệp riêng để thông báo tình trạng của máy thuê bao được gọi và phát thông điệp mời để lại tin nhắn. - Mỗi hộp thư đều được quản lý bằng password và thư mục riêng.
- Khi thông điệp được nhận hệ thống VoiceMail có thể gửi qua Mail để thông báo, tất nhiên có kèm theo file thông điệp.
- Có thể kiểm tra VoiceMail trực tiếp trên máy điện thoại.
- Những thông điệp Lời chào trong hệ thống 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.
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 111 -
Để khai báo hôp thư thoại cho thuê bao, ta cấu hình trong file voicemail.conf
ở đường dẫn /etc/asterisk/voicemail.conf như sau:
300=>300,thanhphuoc,empty_dream2000@yahoo.com 100=>100,thanhphu,tieuphuphu2005@yahoo.com 200=>200,thanhphong,best_lionh@yahoo.com
Trong đó
- 300: tên mailbox
- 300: password của mailbox - thanhphuoc: tên người sử dụng
- empty_dream2000@yahoo.com: địa chỉ mail của người sử dụng
Ngoài ra còn cấu hình trong file sip.conf và iax.conf như đã khai báo ở trên. Lúc này các cuộc gọi sẽ được lưu vào mailbox của thuê bao.
Thuê bao muốn nghe thư thoại và thực hiện các tương tác sẽ bấm số 123 để xem mail hoặc thực hiện đăng nhập được cấu hình trong file extensions.conf:
[mailbox]
exten=>123,1,VoiceMailMain(s${CALLERID(num)}) exten=>123,2,Hangup
Khi nghe lời chào, thuê bao thực hiện các tương tác: Ấn số 1: để nghe.
Ân số 2: nghe mail trước đó Ân số 3: ngừng Ấn số 4: nâng cao Ấn số 5: lặp lại Ấn số 6: tiếp theo Ấn số 7: xóa Ấn số 8: chuyển tiếp Ấn số 9: lưu
Để lưu messages ta ấn số 9 với : Số 0 :new
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 112 -
Số 1: old Số 2: work Số 3: family Số 4: friend
5.8.3 Call Forwarding (chuyển cuộc gọi)
Chuyển cuộc gọi là tính năng hay được sử dụng trong bất kỳ hệ thống điện thoại nào cho phép thuê bao tự cài đặt khi cần thiết.
Có nhiều trường hợp để chuyển cuộc gọi bao gồm: - Chuyển cuộc gọi tức thời
- Chuyển cuộc gọi khi máy đang bận - Chuyển cuộc gọi khi không trả lời
5.8.3.1 Chuyển cuộc gọi tức thời
Chuyển cuộc gọi tức thời là dịch vụ cho phép thuê bao chuyển cuộc gọi đến
một số máy nào đó đã được cài đặt trước khi có một số gọi vào thuê bao đó. Trong hệ thống để thực hiện dịch vụ này thuê bao cần thực hiện như sau:
- Để kích hoạt dịch vụ chuyển cuộc gọi tức thời: bấm số *21#xxxxxx trong đó xxxxxxx là số điện thoại mà thuê bao muốn chuyển đến, sau đó sẽ nghe thông báo đã kích hoạt dịch vụ này và số mà thuê bao muốn chuyển đến.
- Để hủy bỏ dịch vụ chuyển cuộc gọi tức thời: bấm số #21#, sau đó sẽ nghe thông báo đã hủy dịch vụ này.
Việc cấu hình trong file /etc/asterisk/extensions đuợc thực hiện như sau:
[F_INM]
;Kích hoạt dịch vụ
exten => _#21*X.,1,set(DB(CFIM/${CALLERID(num)})=${EXTEN:4}) exten =>_#21*X.,n,playback(inm-o);phát thông báo
exten => _#21*X.,n,Saydigits(${EXTEN:4});phát số muốn chuyển exten =>_#21*X.,n,playback(auth-thankyou);phát lời cảm ơn exten => _#21*X.,n,Hangup;Hủy kết nối
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 113 -
exten => #21#,1,set(DB(CFIM/${CALLERID(num)})=0);hủy bỏ dịch vụ
exten => #21#,n,playback(inm-no);phát thông báo
exten => #21#,n,playback(auth-thankyou);phát lời cảm ơn exten => #21#,n,Hangup;Hủy kết nối
Hình 5.20: Các bản tin khi thực hiện chuyển cuộc gọi tức thời
5.8.3.2 Chuyển cuộc gọi khi bận
Chuyển cuộc gọi khi bận là dịch vụ cho phép thuê bao chuyển cuộc gọi đến
một số máy nào đó đã được cài đặt trước khi có một số gọi vào thuê bao đó nhưng thuê bao này đang bận. Trong hệ thống để thực hiện dịch vụ này thuê bao cần thực hiện như sau:
- Để kích hoạt dịch vụ chuyển cuộc gọi khi bận: bấm số *61#xxxxxx trong đó xxxxxxx là số điện thoại mà thuê bao muốn chuyển đến, sau đó sẽ nghe thông báo đã kích hoạt dịch vụ này và số mà thuê bao muốn chuyển đến.
- Để hủy bỏ dịch vụ chuyển cuộc gọi khi bận: bấm số #61#, sau đó sẽ nghe thông báo đã hủy dịch vụ này.
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 114 -
Việc cấu hình trong file /etc/asterisk/extensions đuợc thực hiện như sau:
[F_BSY]
;Kích hoạt dịch vụ
exten => _#61*X.,1,set(DB(CFIM/${CALLERID(num)})=${EXTEN:4}) exten =>_#61*X.,n,playback(inm-o);phát thông báo
exten => _#61*X.,n,Saydigits(${EXTEN:4});phát số muốn chuyển exten =>_#61*X.,n,playback(auth-thankyou);phát lời cảm ơn exten => _#61*X.,n,Hangup;Hủy kết nối
exten => #61#,1,set(DB(CFIM/${CALLERID(num)})=0);hủy bỏ dịch vụ
exten => #61#,n,playback(inm-no);phát thông báo
exten => #61#,n,playback(auth-thankyou);phát lời cảm ơn exten => #61#,n,Hangup;Hủy kết nối
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 115 -
5.8.3.3 Chuyển cuộc gọi khi không trả lời
Chuyển cuộc gọi khi không trả lời là dịch vụ cho phép thuê bao chuyển cuộc
gọi đến một số máy nào đó đã được cài đặt trước khi có một số gọi vào thuê bao đó nhưng thuê bao này đi vắng hoặc không trả lời. Trong hệ thống để thực hiện dịch vụ này thuê bao cần thực hiện như sau:
- Để kích hoạt dịch vụ chuyển cuộc gọi khi không trả lời: bấm số *51#xxxxxx trong đó xxxxxxx là số điện thoại mà thuê bao muốn chuyển đến, sau đó sẽ nghe thông báo đã kích hoạt dịch vụ này và số mà thuê bao muốn chuyển đến.
- Để hủy bỏ dịch vụ chuyển cuộc gọi khi không trả lời: bấm số #51#, sau đó sẽ nghe thông báo đã hủy dịch vụ này.
Việc cấu hình trong file /etc/asterisk/extensions đuợc thực hiện như sau: [F_NSWR]
;Kích hoạt dịch vụ
exten => _#51*X.,1,set(DB(CFIM/${CALLERID(num)})=${EXTEN:4}) exten =>_#51*X.,n,playback(inm-o);phát thông báo
exten => _#51*X.,n,Saydigits(${EXTEN:4});phát số muốn chuyển exten =>_#51*X.,n,playback(auth-thankyou);phát lời cảm ơn exten => _#51*X.,n,Hangup;Hủy kết nối
exten => #51#,1,set(DB(CFIM/${CALLERID(num)})=0);hủy bỏ dịch vụ
exten => #51#,n,playback(inm-no);phát thông báo
exten => #51#,n,playback(auth-thankyou);phát lời cảm ơn exten => #51#,n,Hangup;Hủy kết nối
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 116 -
Hình 5.22: Các bản tin thực hiện chuyển cuộc gọi khi không trả lời
5.8.4 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. Ví dụ như có một số bên ngoài gọi đến số 200 và cả hai bên đã thông thoại, thuê bao bên ngoài muốn chuyển cuộc gọi đến số 100, thì bên được gọi là số 200 sẽ bấm phím #, nghe thông báo transfer và bấm số 100 để chuyển cuộc gọi đến số 100.
Việc cấu hình trong file /etc/asterisk/externsions.conf thực hiện như sau: Thêm tham số T vào câu lệnh Dial, thiết lập group cho các thuê bao, hệ thống tự động sẽ kích hoạt dịch vụ Call Transfer.Ví dụ:
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 117 -
Hình 5.23: Các bản tin khi thực hiện dịch vụ transfer
5.8.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 8991768 gọi cho số 200 và nhờ chuyển máy để được gặp số 300. Khi đó số 200 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ố 300 trong trường hợp này là 701.
- Bước 2. Số 200 gác máy (trong lúc này số bên ngoài sẽ nghe nhạc) và gọi đến cho số 300 thông báo cho số đó biết là có một cuộc gọi đang đợi số 300 trên số parking 701.
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 118 -
Tại lúc này có hai trường hợp xảy ra.
a. Số 300 sẽ gọi số 701 để gặp số gọi vào là 8991768.
b. Số 300 không muốn gặp số bên ngoài 8991768 và lúc này số 200 sẽ quay số 701 thông báo số 300 không thể gặp số 8991768.
Cấu hình chi tiết trong file /etc/asterisk/ features.conf và file /etc/asterisk/extensions.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ẽ paking 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)
*File extensions.conf thông qua ngữ cảnh Parked như sau:
[Parked] exten=>700,1,Park() exten=>701,hint,park:701@parkedcalls exten=>701,1,Wait(1) exten=>701,2,ParkedCall(701) exten=>702,hint,park:702@parkedcalls exten=>702,1,Wait(1) exten=>702,2,ParkedCall(702)
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 119 -
SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 120 -
Hình 5.24: Các bản tin khi thực hiện dịch vụ call parking
5.8.6 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. Cách hoạt động nó như sau: ví dụ một thuê bao trong mạng PSTN gọi vào số 200, số 200 đang rung chuông, số 100 có cùng calllgroup và pickupgroup với 200 muốn bắt máy và đàm thoại với thuê bao trong mạng PSTN, khi đó thuê bao 100 sẽ bấm: 7200.