Call Transfer

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 116 - 163)

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.

Cấu hình trong file /etc/asterisk/extensions.conf với ngữ cảnh pickup như sau:

[pickup]

exten => _7.,1,SET(GLOBAL(PICKUPMARK)=${EXTEN:1})

SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 121 -

Hình 5.25: Các bn tin khi thc hin dch v call pickup (adsbygoogle = window.adsbygoogle || []).push({});

5.8.7 Meetme (chức năng hội nghị)

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. Trong hệ thống điện thoại truyền thống PSTN để có thể sử dụng được tính năng này chúng ta phải trả tiền còn đối với Asterisk là miễn phí. Để sử dụng hội nghị, thuê bao nội bộ cần bấm số 555, nghe thông báo mời nhập mật

SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 122 -

khẩu (600), 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ị.

Hình 5.26: Mô hình thc hin hi 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 => 600 ; to phòng hi ngh 600

hoặc

conf => 600,12345; 600 là tên phòng , 12345 là mt khu đăng nhp

* 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:

SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 123 -

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.

Pinsố 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 định một số chức năng hoạt động của phòng hội thoại, các chức năng có thể liệt kê ra như sau:

'm' – Người tham gia hi thoi ch nghe không được nói chuyn. 't' – Người hi thoi ch nói không được nghe.

'i' – Phát thông báo có người kết ni hay ri khi hàng đợi.

'p' – Thuê bao có th ri khi phòng hi thoi bng cách nhn phím #. 'X' – Thuê bao có th thoát khi phòng hi thoi bng cách nhp vào extention hp l ti ng cnh ${MEETME_EXIT_CONTEXT }, nếu biến này không

được thiết lp thì s dng extention trong ng cnh hin ti.

'd' – Thêm động vào phòng hi thoi không cn thiết lp s Pin. 'D' – Thêm động vào phòng hi thoi phi cn thiết lp s Pin. 'e' – Chn phòng hi thoi trng đầu tiên.

'E' – Chn phòng hi thoi trng đầu tiên không cn s Pin. 'v' – Hi thoi vi chếđộ Video.

'r' – Nếu chc năng này được chn thì cuc đàm thoi trong phòng hi thoi sẽ được thu âm vi định dng tp tin ${MEETME_RECORDINGFORMAT} và lưu vào v trí ${MEETME_RECORDINGFILE}.

'q' – Không phát âm thanh khi có thuê bao vào/ri khi phòng hi thoi. 'C' – Khi thuê bao vào phòng hi thoi sẽđược thông báo có bao nhiêu thuê bao đang trong phòng.

'M' – Thiết lp thông s này để phát ra âm nhc khi trong phòng hi thoi ch có mt người.

SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 124 -

'w' – Đợi cho đến khi thuê bao “Chđến phòng hi thoi. 'b' – Chy AGI script để thiết lp biến

{MEETME_AGI_BACKGROUND},script mc định là conf-background.agi 's' – Vào menu (user and administrator) khi nhn phím *.

'a' – Thiết lp chếđộ Admin. 'A' – Thiết lp chếđộ “Ch” . (adsbygoogle = window.adsbygoogle || []).push({});

'P' – Luôn luôn hi s Pin ngay cả đã chỉ định trong đối s hàm ng dng meetme().

Các Biến s dng trong hàm ng dng Meetme()

${MEETME_RECORDINGFILE} – Tp tin thu âm cuc hi thoi ( option 'r' ).

${MEETME_RECORDINGFORMAT} – Định dng tp tin thu âm(gsm, wav, ...).

${MEETME_EXIT_CONTEXT} – Ng cnh thoát ra t phòng hi thoi. ${MEETME_AGI_BACKGROUND} – AGI script .

${MEETMESECS} – S giây thuê bao trong phòng hi thoi.

Dưới đây là nội dung file cấu hình với ngữ cảnh Meetme:

[Meetme] exten => 999,1,Answer exten => 999,2,Wait(1) exten => 999,3,Authenticate(600) exten => 999,4,MeetMe(600) exten => 999,5,Playback(conf-thereare)

SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 125 -

SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 126 -

SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 127 -

Hình 5.27: Các bn tin khi thc hin chc năng hi ngh

5.8.8 DND (Do not Disturb - Dịch vụ chống làm phiền )

Dịch vụ này có thể cho phép thuê bao không nhận tất cả các cuộc gọi đến khi thuê bao kích hoạt dịch vụ, khi đó tất cả các cuộc gọi đến thuê bao sẽ được chuyển đến voicemail. Để kích hoạt dịch vụ, thuê bao bấm số *113, nghe phát thông báo “Bạn đã kích hoạt dịch vụ chống làm phiền”. Để hủy dịch vụ DND, thuê bao chỉ cần bấm lại số *113, nghe phát thông báo “Bạn đã hủy dịch vụ chống làm phiền”.

Việc cấu hình chi tiết được thực hiện trong file etc/asterisk/extensions.conf với ngữ cảnh DND.

SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 128 -

[DND] ;Dch vụđã kích hot? exten => *113,1,gotoif($[${DB(dnd/${CALLERID(num)})} = 1]?dn1:dn) ;Kích hot dch vexten => *113,n(dn),set(DB(dnd/${CALLERID(num)})=1) exten => *113,n,Answer exten => *113,n,playback(dnd-o); phát li gi exten => *113,n,playback(auth-thankyou) exten => *113,n,Hangup;Hy kết ni exten => *113,n(dn1);Answer exten => *113,n,set(DB(dnd/${CALLERID(num)})=0);Hy dch vexten => *113,n,playback(dnd-no);phát li gi exten => *113,n,playback(auth-thankyou) exten => *113,n,Hangup

5.8.9 DISA (Direct Inward System Access)

Dịch vụ cho phép thuê bao ở ngoài có thể sử dụng các dịch vụ mà thuê bao nội bộ trong mạng có thể có. Đây là một tính năng vượt trội của asterisk so với giá thành của nó. Ví dụ như một người ở nhà và muốn làm việc với đối tác ở nước ngoài, nhưng đây là công việc của công ty và anh ta muốn sử dụng đường line điện thoại công ty để giao dịch. Đối với asterisk, sử dụng giải pháp DISA có thể giải quyết vấn đề này một cách dễ dàng. Như vậy người này có thể sử dụng cuộc gọi tính cước nội hạt đối với anh ta nhưng vẫn có thể gọi ra quốc tế.

SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 129 -

Hình 5.28: Mô hình thc hin dch v DISA

Ví dụ một người có số điện thoại ở nhà là 8991717, gọi đến công ty có 2 line điện thoại đăng ký trên tổng đài PSTN có số là 8991768 và 8982525, giả sử người đó gọi đến số 8991768 để sử dụng dịch vụ DISA, người đó sẽ thực hiện như sau:

- Thuê bao nghe lời chào từ tổng đài asterisk, bấm 000 để sử dụng dịch vụ DISA, sau đó nhập mật khẩu để xác nhận.

- Nếu mật khẩu đúng, tổng đài sẽ phát âm mời gọi để thuê bao có thể thực hiện cuộc gọi quốc tế hay liên tỉnh thông qua line còn lại có số là 8982525. Như vậy người gọi đã sử dụng được dịch vụ DISA như mong muốn.

Việc cấu hình trong file /etc/asterisk/extensions.conf được thực hiện thông qua ngữ cảnh custom-disa như sau:

[custom-disa] exten => s,1,Answer exten=> s,2,wait(2)

exten => s,3,Authenticate(700) exten => s,4,DISA(no-password,out)

SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 130 -

SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 131 -

Hình 5.29:Các gói tin khi thc hin dch v DISA (adsbygoogle = window.adsbygoogle || []).push({});

5.8.10 Asterisk RealTime Architecture

Như chúng ta đã biết để cấu hình hệ thống Asterisk chúng ta thực hiện trên các tập tin dạng text như sip.conf, iax.conf. extentions.conf... sau đó để tập tin cấu hình có hiệu lực chúng ta cần phải phải thực hiện dòng lệnh CLI>reload

Một nhu cầu thực tế là khi cấu hình hệ thống asterisk, chẳng hạn như cho người sử dụng khai báo một thuê bao online mà không cần phải reload lại hệ thống asterisk thì thực hiện như thế nào.?

Thế là kiến trúc thời gian thực (Asterisk RealTime Architecture) ra đời nhằm đáp ứng nhu cầu thực tế trên và tất nhiên còn nhiều điều thú vị nữa chúng ta hãy cùng nhau khám phá.

Kiến trúc thời gian thực thay vì lưu tập tin cấu hình trên tập tin dạng text thì được lưu vào database ví dụ như Mysql. Kiểu kiến trúc thời gian thực đáp ứng nhu cầu user lớn vì không cần nạp tất cả user cùng một lúc ngay khi khởi động asterisk, tiết kiệm chi phí tài nguyên hệ thống rất nhiều.

SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 132 -

Asterisk không nạp danh sách các Sip peer/Sip User vào bộ nhớ. Khi có một cuộc gọi tới( incoming call) một extension do Asterisk quản lý được Asterisk tìm kiếm trong bảng( có chức năng tương tự SIP.conf) của Database đã được định hướng trong file SIP.conf.

Asterisk sẽ nạp cả dòng (record) chứa extension vào bộ nhớ. Đồng thời tiếp tục thực hiện hàm ứng dụng application đã được khai báo trong bảng chứa dialplan, được định hướng trong file extension.conf và file sip.conf. Cuộc gọi được thiết lập.

Khi một trong 2 bên truyền thông phát ra lệnh hangup thì Asterisk sẽ phát tín hiệu kết thúc kênh truyền thông giữa 2 thiết bị đầu cuối và xóa Record đã nạp vào bộ nhớ. Như vậy, Asterisk tra cứu Extension theo kiểu thời gian thực trái với trước kia là nó load tất cả các extension trong file sip.conf vào bộ nhớ.

Để thực hiện được dịch vụ này, ta phải tiến hành cài đặt và cấu hình Asterisk-addons.1.4.x và Mysql server. Đây là dịch vụ cộng thêm không có sẵn trong asterisk phải cài đặt thêm và chúng ta cần có một chương trình cơ sở dữ liệu để lưu các dữ liệu đáp ứng thời gian thực của asterisk, ở đây chúng ta dùng mysql. Các bước tiến hành cài đặt được tiến hành như sau:

Bước 1: download gói Asterisk-addons.1.4.x tại http://asterisk.org và untar vào thư mục /usr/src

Để đảm bảo gói Addon được cài đặt đúng, ta thực hiện lệnh #ln –s /usr/src/asterisk-1.4.x /usr/src/asterisk

Chuyển đường dẫn vào thư mục asterisk-addons1.4.x và tiến hành cài đặt #cd /usr/src/asterisk-addons1.4.x

#make clean #make install

Bước 2: kiểm tra xem đã cài đặt Mysql server chưa, nếu chưa thì tiến hành

download và cài đặt Mysql server và các thư viện kèm theo: libdbi-dbd-mysql, mysql-connector-odbc-3.51.12-2.2, mysql-libs, mysql, mysql-server, mysql-devel

Bước 3: cấu hình các file trong thư mục asterisk:

SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 133 -

[general] dbhost = localhost dbname = asterisk dbuser = root dbpass = 123 dbport = 3306 dbsock = /var/lib/mysql/mysql.sock * File /etc/asterisk/extconfig.conf:

sipusers => mysql, asterisk,sip_buddies sippeers => mysql, asterisk,sip_buddies extensions => mysql, asterisk,extensions

* File /etc/asterisk/sip.conf [general] rtcachefriends=yes * File /etc/asterisk/extensions.conf [default] switch => Realtime/default@extensions

Bước 4: tạo database và các bản tương ứng:

-Khởi động mysql : /etc/rc.d/init.d/mysqld start

-SET lại password cho truy cập tới Mysql cho user root: SET PASSWORD FOR root@localhost = ‘123’

-Đăng nhập vào mysql : mysql –u root –p 123

-Tạo cở sở dữ liệu mới : creat database asterisk; use asterisk;

- Tạo ra các bảng để chứa cơ sở dữ liệu : create tables Sip_buddies và Iax_buddies

CREATE TABLE ` Sip_buddies ` ( `id` int(11) NOT NULL auto_increment, `name` varchar(80) NOT NULL default '', `canreinvite` char(3) default 'yes',

SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 134 -

`context` varchar(80) default NULL, `dtmfmode` varchar(7) default NULL, `host` varchar(31) NOT NULL default '', `port` varchar(5) NOT NULL default '', `secret` varchar(80) default NULL, (adsbygoogle = window.adsbygoogle || []).push({});

`type` varchar(6) NOT NULL default 'friend', `username` varchar(80) NOT NULL default '', PRIMARY KEY (`id`),

UNIQUE KEY `name` (`name`), KEY `name_2` (`name`)

) TYPE=MyISAM ROW_FORMAT=DYNAMIC; CREATE TABLE ` Iax_buddies ` (

`id` int(11) NOT NULL auto_increment, `name` varchar(80) NOT NULL default '', `canreinvite` char(3) default 'yes',

`context` varchar(80) default NULL, `dtmfmode` varchar(7) default NULL, `host` varchar(31) NOT NULL default '', `port` varchar(5) NOT NULL default '', `secret` varchar(80) default NULL,

`type` varchar(6) NOT NULL default 'friend', `username` varchar(80) NOT NULL default '', PRIMARY KEY (`id`),

UNIQUE KEY `name` (`name`), KEY `name_2` (`name`)

SVTH: NGUYỂN THANH HIẾU GVHD: Ths. PHẠM THỊ XUÂN PHƯƠNG NGUYỄN THANH PHƯỚC - 135 -

Bước 5: ta có thể tạo được user thông qua database của asterisk bằng cách thêm dữ liệu vào table Sip_buddies và Iax_buddies

INSERT INTO Sip_buddies (

name,canreinvite,context,dtmfmode,host,port,type,username,secret) VALUES ('105','no','default','rfc2833','dynamic','yes',’friend’, '105','105'); INSERT INTO Iax_buddies (

name,canreinvite,context,dtmfmode,host,port,type,username,secret) VALUES ('305','no','default','rfc2833','dynamic','yes',’friend’, '305','305');

Bước 6: kiểm tra user vừa tạo bằng lệnh select table

| id | name | canreinvite | context | dtmfmode | host | port | secret | type | username |

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 116 - 163)