Xây dựng IP-PBX

Một phần của tài liệu xây dựng và thiết kế một hệ thống thoại đáp ứng trong thực tế cho các doanh nghiệp nhỏ (Trang 103 - 163)

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 thc hin cuc gi ni b cùng giao thc

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 bn tin trong cuc gi ni 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 thc hin cuc gi ni b khác giao thc

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 cuc gi 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. (adsbygoogle = window.adsbygoogle || []).push({});

- 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 bn tin cuc gi 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 mng bn đến vi công ty chúng tôi, bm s 1 để gp s 100, bm s 2 để gp s 200, bm s 3 để gp s 300, để tham gia hi ngh vi chúng tôi, bm s 9, để s dng dch v DISA bm 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 ha thc hin dch 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ó cuc gi đến thì tr li exten=>s,n,set(COUNT=0); to bộđếm đếm s ln phát li chào exten=>s,n(ct1),Background(loichao); phát li 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 li chào đủ 3 ln? exten=>s,n(ct),playback(vm-tambiet); phát li tm bit exten=>s,n,hangup(); hy kết ni 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 gi bm 1 exten=>2,1,goto(local_SIP,200,1); thuê bao gi bm 2 exten=>3,1,goto(local_IAX,300,1); thuê bao gi bm 3

exten=>000,1,goto(custom-disa,s,1); thuê bao gi s dng DISA exten=>9,1,goto(Meetme,555,1); Thuê bao gi tham gia hi ngh

exten => i,1,Goto(mainmenu,s,1);phím bm không hp 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 (adsbygoogle = window.adsbygoogle || []).push({});

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 hot dch 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 mun chuyn exten =>_#21*X.,n,playback(auth-thankyou);phát li cm ơn exten => _#21*X.,n,Hangup;Hy kết ni

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);hy b dch v

exten => #21#,n,playback(inm-no);phát thông báo (adsbygoogle = window.adsbygoogle || []).push({});

exten => #21#,n,playback(auth-thankyou);phát li cm ơn exten => #21#,n,Hangup;Hy kết ni

Hình 5.20: Các bn tin khi thc hin chuyn cuc gi tc thi

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 hot dch 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 mun chuyn exten =>_#61*X.,n,playback(auth-thankyou);phát li cm ơn exten => _#61*X.,n,Hangup;Hy kết ni

exten => #61#,1,set(DB(CFIM/${CALLERID(num)})=0);hy b dch v

exten => #61#,n,playback(inm-no);phát thông báo

exten => #61#,n,playback(auth-thankyou);phát li cm ơn exten => #61#,n,Hangup;Hy kết ni

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 mun chuyn exten =>_#51*X.,n,playback(auth-thankyou);phát li cm ơn exten => _#51*X.,n,Hangup;Hy kết ni

exten => #51#,1,set(DB(CFIM/${CALLERID(num)})=0);hy b dch v

exten => #51#,n,playback(inm-no);phát thông báo

exten => #51#,n,playback(auth-thankyou);phát li cm ơn exten => #51#,n,Hangup;Hy kết ni

SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 116 - (adsbygoogle = window.adsbygoogle || []).push({});

Hình 5.22: Các bn tin thc hin chuyn cuc gi khi không tr li

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 bn tin khi thc hin dch 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 nhn cuc gi quay để nhn s parking parkpos => 701-709 ; Con s mà cuc gi s paking trên đó

oncontext => parkedcalls ;ng cnh parking cuc gi

parkingtime => 60 ; S giây mà mt cuc gi có th parking (mc đị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 bn tin khi thc hin dch 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.

Một phần của tài liệu xây dựng và thiết kế một hệ thống thoại đáp ứng trong thực tế cho các doanh nghiệp nhỏ (Trang 103 - 163)