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

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

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” .

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

${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

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

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,

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

UNIQUE KEY `name` (`name`), KEY `name_2` (`name`) (adsbygoogle = window.adsbygoogle || []).push({});

) 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 | +----+---+---+---+---+---+---+---+---+--- +

| 1 | 105 | no | default | rfc2833 | dynamic | yes | 105 | friend | 105 |

| 1 | 305 | no | default | rfc2833 | dynamic | yes | 305 | friend | 305 | +----+---+---+---+---+---+---+---+--- +

Như vậy ta đã tạo được thuê bao 105 và 305 mà không cần cấu hình trong các file asterisk và cũng không cần reload lại hệ thống

5.8.11 CDR (Call Detail Record)

Asterisk hỗ trợ việc lưu trữ các thông tin cuộc gọi trong cơ sở dữ liệu để tiện việc tra cứu . Cũng như ta có thể so sánh các thông tin này với hóa đơn hàng tháng của công ty điện thoại gởi cho ta . Nó cho phép ta phân tích lưu lượng thoại trong công ty , tìm ra 10 số phone thường gọi nhất , xem thời gian của các cuộc gọi , so sánh với thời gian trung bình trong các cuộc gọi . Nhờ vậy, ta hoàn toàn có thể phát hiện được việc liệu nhân viên công ty có sử dụng điện thoại một cách hoang phí trong giờ làm việc hay không . Việc sử dụng CDR có thể sử dụng database Mysql

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

để lưu các nhật ký cuộc gọi. Việc cài đặt và cấu hình CDR được cấu hình theo các bước sau:

Bước 1: cấu hình trong file /etc/asterisk/cdr_mysql.conf

[global] hostname=localhost dbname=asterisk password=123 passworduser=asterisklog uniqueid=yes

Bước 2: tạo bảng `table cdr` lưu trữ database chi tiết cuộc gọi ở mysql và

reload lại asterisk:

CREATE TABLE `cdr` (

`id` int(11) NOT NULL auto_increment,

`calldate` datetime NOT NULL default '0000-00-00 00:00:00', `clid` varchar(80) NOT NULL default '',

`src` varchar(80) NOT NULL default '', `dst` varchar(80) NOT NULL default '', `dcontext` varchar(80) NOT NULL default '', `duration` int(11) NOT NULL default '0', `billsec` int(11) NOT NULL default '0',

`disposition` varchar(45) NOT NULL default '', PRIMARY KEY (`id`);

ALTER TABLE `cdr` ADD INDEX ( `calldate` ); ALTER TABLE `cdr` ADD INDEX ( `dst` );

ALTER TABLE `cdr` ADD INDEX ( `accountcode` ); (adsbygoogle = window.adsbygoogle || []).push({});

Bước 3: Sử dụng ngôn ngữ lập trình PHP tạo giao diện web kết nối với

database asterisk để truy xuất dữ liệu. Tạo một file asterisk.php ở /usr/local/apache2/htdocs. Đoạn code thực hiện như sau:

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

<?php

echo"<image src='http://192.168.1.3/asterisk.gif '>"; ?>

<html> <head>

<title>Asterisk with CDR</title> <style> .title { FONT-WEIGHT: bold; FONT-SIZE: 30px; COLOR: #003063; } </style> </head> <body>

<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>

<TR>

<TD vAlign=top class=title align=center> *** CHI TIT CUC GI *** </TD> </TR> </table> <? $dbuser = 'root'; $dbhost = 'localhost';

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

$dbpass = '123'; $dbname = 'asterisk'; $dbtable = 'cdr';

$mysql_link = mysql_connect('localhost','root','123');

$column = mysql_list_fields($dbname, $dbtable, $mysql_link); $sql = "SELECT * FROM $dbtable";

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