Thiết lập các dịch vụ cơ bản

Một phần của tài liệu TỔNG ĐÀI DỊCH VỤ VOIP (Trang 60)

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

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

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 định một số chức năng hoạt động của phòng hội thoại.

Dưới đây là nội dung file cấu hình với ngữ cảnh Meetme: [Meetme] exten = > 600,1,Answer() same => n,Wait( 1) same => n,Authenticate(600) same => n,MeetMe(600,i,123123) same => n,Playback(conf-thereare)

3.4.7. DND (Do not Disturb)

CHƯƠNG 3: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CÁC DỊCH VỤ CƠ BẢN

hoạt dịch vụ. Để kích hoạt dịch vụ, thuê bao bấm số *11#. Để hủy dịch vụ DND, thuê bao bấm số *12#.

Việc cấu hình chi tiết được thực hiện trong file extensions.conf với [macro-DND_ON] và [macro-DND_OFF] như sau:

exten => _*11#,1,Macro(DND_ON) exten => _*12#,1,Macro(DND_OFF) [macro-DND_ON] exten => s,1,NoOp() same => n,set(DB(DND/${CALLERID(num)})=${FORWARD}) same => n,playback(auth-thankyou) same => n,wait(1) same => n,hangup() [macro-DND_OFF] exten => s,1,NoOp() same => n,set(DB(DND/${CALLERID(num)})=0) same => n,playback(auth-thankyou) same => n,wait(1) same => n,hangup() 3.4.8. Call Forward

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

a) Chuyển cuộc gọi tức thời

đã được cài đặt trước khi có một số gọi vào thuê bao đó. Để kích hoạt dịch vụ thuê bao bấm *12#XXX trong đó XXX là số cần chuyển đến. Để hủy dịch vụ thì thuê bao bấm *13#.

Cấu hình chi tiết trong file extensions.conf:

exten => _*12#.,1,set(FORWARD=${EXTEN:4}) same => n,Macro(CFIM_ON) exten => *13#,1,Macro(CFIM_OFF) [macro-CFIM_ON] exten => s,1,NoOp() same => n,set(DB(CFIM/${CALLERID(num)})=${FORWARD}) same => n,playback(auth-thankyou) same => n,wait(1) same => n,hangup() [macro-CFIM_OFF] exten => s,1,NoOp() same => n,set(DB(CFIM/${CALLERID(num)})=0) same => n,playback(auth-thankyou) same => n,wait(1) same => n,hangup()

b) Chuyển cuộc gọi khi máy đang 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. Để đăng kí dịch vụ thuê bao bấm *14#XXX trong đó XXX là số thuê bao sẽ chuyển tới. Để hủy dịch vụ thuê bao bấm *15#.

Cấu hình chi tiết trong file extension.conf là: exten => _*14#.,1,set(FORWARD=${EXTEN:4})

same => n,Macro(CFBS_ON) exten => *15#,1,Macro(CFBS_OFF)

CHƯƠNG 3: MÔ HÌNH TRIỂN KHAI VÀ THỰC HIỆN CÁC DỊCH VỤ CƠ BẢN [macro-CFBS_ON] exten => s,1,NoOp() same => n,set(DB(CFBS/${CALLERID(num)})=${FORWARD}) same => n,playback(auth-thankyou) same => n,wait(1) same => n,hangup() [macro-CFBS_OFF] exten => s,1,NoOp() same => n,set(DB(CFBS/${CALLERID(num)})=0) same => n,playback(auth-thankyou) same => n,wait(1) same => n,hangup()

c) 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. Để đăng kí dịch vụ thuê bao bấm số *16#XXX trong đó XXX là số thuê bao chuyển đến. Để hủy dịch vụ thuê bao bấm số *17#.

Cấu hình chi tiết trong file extension.conf là: exten => _*16#.,1,set(FORWARD=${EXTEN:4}) same => n,Macro(CFUN_ON) exten => *17#,1,Macro(CFUN_OFF) [macro-CFUN_ON] exten => s,1,NoOp() same => n,set(DB(CFUN/${CALLERID(num)})=${FORWARD}) same => n,playback(auth-thankyou) same => n,wait(1) same => n,hangup()

[macro-CFUN_OFF] exten => s,1,NoOp() same => n,set(DB(CFBS/${CALLERID(num)})=0) same => n,playback(auth-thankyou) same => n,wait(1) same => n,hangup() 3.4.9 Dịch vụ IVR

Tổng đài sẽ xây dựng một dịch vụ IVR (Inrteractive Voice Response) là một hệ thống trả lời điện thoại được điện toán hóa. Nó hướng dẫn người gọi đến những chọn lựa họ cần bằng cách bấm số theo một danh sách liệt kê sẵn (voice menu). Chúng ta sẽ thực hiện thu âm giọng nói với kịch bản có sẵn trước, người dùng chỉ bấm các phím điện thoại là có thể chọn điều mình mong muốn.

Dịch vụ IVR của tổng đài sẽ chỉ dẫn người dùng đến những dịch vụ sau:  Các cuộc gọi đến các phòng ban hay cá nhân.

 Hộp thư thoại.

 Dịch vụ conference room.  Dich vụ quà tặng âm nhạc.

 Gặp nhân viên phục vụ khách hàng. (adsbygoogle = window.adsbygoogle || []).push({});

Việc xây dựng kịch bản của IVR sẽ được thực hiện bằng cách cấu hình trong file extensions.conf, khi người dùng quay số 800 thì sẽ được chuyển vào trong dịch vụ IVR và được nghe lời hướng dẫn thực hiện.

Menu cho người dùng gồm:

 Phím 1: Nghe thông báo về các số điện thoại của các phòng ban  Phím 2: Vào hộp thư thoại để kiểm tra hộp mail của mình  Phím 3: Tham gia dịch vụ conference room

 Phím 4: Sử dụng dịch vụ quà tặng âm nhạc

Chương 4

XÂY DỰNG GIAO DIỆN QUẢN TRỊ

4.1 Giải pháp tổng quan

4.2 Thiết lập Asterisk Realtime 4.3 Thiết lập dịch vụ người dùng

4.4 Xây dựng giao diện quản trị nền Web cho tổng đài

Xây dựng giao diện quản trị cho tổng đài

Yêu cầu: Xây dựng giao diện quản trị tổng đài thực hiện các chức năng cơ bản như sau:  Quản lý user, thêm bớt, chỉnh sửa thông tin tài khoản như số gọi, callerid, dialplan,

mailbox….

 Quản lý hộp thư thoại voicemail, thiết lập các tùy chỉnh cho hộp thư  Quản lý các conference room

 Quản lý một số dịch vụ người dùng như DND, Call Forwarding.  Thiết lập chặn cuộc gọi ra ngoài qua PSTN đối với thuê bao tùy chọn.

4.1. Giải pháp tổng quan

Để thực hiện yêu cầu đề ra ở trên, chúng em đưa ra giải pháp sau:

 Sử dụng Asterisk Realtime Architecture để thực hiện việc thiết lập một số chức năng của hệ thống thông qua tương tác với cơ sở dữ liệu MySQL thay cho việc sử dụng các file cấu hình trong /etc/asterisk.

 Thực hiện tương tác giữa dialplan với cơ sở dữ liệu thông qua fund_odbc cho việc quản lý các dịch vụ người dùng.

 Sử dụng ngôn ngữ HTML, PHP, CSS để viết giao diện nền Web tương tác với cơ sở dữ liệu thực hiện chức năng quản trị tổng đài.

4.2 Thiết lập và kết nối cơ sở dữ liệu cho server Asterisk 4.2.1. Cài đặt và cấu hình MySQL trên CentOS 4.2.1. Cài đặt và cấu hình MySQL trên CentOS

Cài đặt MySQL trên CentOS

Để cài đặt MySQL trên CentOS, thực hiện các câu lệnh dưới đây. Trong quá trình cài sẽ được yêu cầu cài một vài gói kèm theo, chỉ việc Enter để tiến hành cài đặt:

$yum install mysql-server

Sau khi cài đặt xong, khởi động CSDL MySQL bằng lệnh:

$service mysqld start Cấu hình MySQL

Khi MySQL đã chạy, thực hiện việc đặt password cho tài khoản root và một vài lựa chọn khác bằng câu lệnh:

$/usr/bin/mysql_secure_installation

CHƯƠNG 4: XÂY DỰNG GIAO DIỆN QUẢN TRỊ

4.2.2. Cài đặt và cấu hình ODBC

Kết nối ODBC (ODBC connector) là một lớp cơ sở dữ liệu trừu tượng có khả năng hỗ trợ Asterisk trong việc giao tiếp với nhiều hệ quản trị cơ sở dữ liệu khác nhau mà không cần người phát triển phải tạo riêng từng kết nối riêng cho mỗi hệ quản trị cơ sở dữ liệu mà Asterisk muốn hỗ trợ. Nó giúp tiết kiệm rất nhiều thời gian trong việc phát triển và bảo trì mã hệ thống. Việc sử dụng ODBC có thể làm giảm một phần nhỏ trong hiệu suất thực thi của hệ thống vì chúng ta đã thêm một lớp ứng dụng giữa Asterisk và hệ quản trị cơ sở dữ liệu, nhưng điều này có thể được giảm bớt với một thiết kế phù hợp và nó cũng đáng giá khi nó cho tạo nên sức mạnh và sự linh hoạt trong việc kết nối với cơ sở dữ liệu cho hệ thống Asterisk. Hình dưới đây cho ta thấy cách Asterisk kết nối với hệ quản trị CSDL thông qua ODBC: (adsbygoogle = window.adsbygoogle || []).push({});

Hình 33 Mô hình kết nối giữa Asterisk và CSDL

Trước khi cài đặt connector trong Asterisk, chúng ta cần cài đặt ODBC lên Linux. Cài đặt ODBC drivers bằng lệnh:

$yum install unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel

Ta cũng cần cài đặt các gói unixODBC bởi vì Asterisk sử dụng chúng để build các module của ODBC.

Tiếp theo ta cài đặt drivers cho MySQL bằng lệnh:

Cấu hình ODBC cho MySQL

Cấu hình cho MySQL ODBC drivers được thực hiện trong file /etc/odbcinst.ini

Trong CentOS mặc định trong file đã chứa dữ liệu, bao gồm cả cho hệ quản trị CSDL MySQL, nhưng ta cần thay đổi như sau:

 [MySQL]

 Description = ODBC for MySQL

 Driver = /usr/lib/libmyodbc3.so

 Setup = /usr/lib/libodbcmyS.so

 FileUsage = 1

Kiểm tra để đảm bảo hệ thống có thể nhận được driver bằng câu lệnh bên dưới và nhận chuỗi trả về MySQL nếu thiết lập thành công:

#odbcinst –q –d

[MySQL]

Tiếp theo ta cấu hình file /etc/odbc.ini, file này được sử dụng để tạo một định danh mà Asterisk sử dụng để tham khảo tới cấu hình này. Nếu muốn thay đổi cơ sở dữ liệu, ta chỉ việc thay đổi lại cấu hình trong file này:

 [asterisk-connector]

 Description = MySQL connection to 'asterisk' database

 Driver = MySQL  Database = asterisk  Server = localhost  User = root  Password = 123123123  Port = 3306  Socket = /var/lib/mysql/mysql.sock Xác nhận kết nối ODBC

Cần đảm bảo ta có thể kết nối với cơ sở dữ liệu bằng cách sử dụng isql application. Ta sử dụng câu lệnh:

$ echo “select 1” | isql –v asterisk-connector

Một phần của tài liệu TỔNG ĐÀI DỊCH VỤ VOIP (Trang 60)