1. Yêu cầu phần cứng
Tùy
theo mục đích sử dụng và số lượng người dùng hệ thống sẽ được trang bị phần
cứng theo các mức độ khác nhau. Dưới đây là một khuyến nghị từ cộng đồng sử
dụng asterisk
|
Mục
đích
|
Số
lượng các kênh
|
Cấu
hình tối thiểu
|
|
Thử
nghiệm, học tập
|
1-5
|
400-MHz
x86, 256 MB RAM
|
|
Hệ
thống cho văn phòng hoặc nhà riêng
|
5-10
|
1-GHz
x86, 512 MB RAM
|
|
Hệ
thống cho doanh nghiệp nhỏ
|
Tới
15 kênh
|
3-GHz
x86, 1 GB RAM
|
|
Hệ
thống thương mại cỡ vừa và lớn
|
Hơn
15
|
Dual
CPUs hoặc triển khai trên nhiều server
|
2. Cài đặt Asterisk
2.1. Lắp đặt phần cứng
Máy
chủ: chú ý thông số điện thế trên khe PCI phải tương thích với các card giao
tiếp cần kết nối
Card
giao tiếp mạng: Kết nối máy chủ với mạng IP
Card
giao tiếp analog: Kết nối máy chủ với mạng PSTN. Card này có hai loại
FXO
– Foreign eXchange Office – Kết nối tới nhà cung cấp PSTN
FXS
– Foreign eXchange Station – Kết nối các điện thoại PSTN vào PBX
Hình
1:
Mô hình kết nối phần cứng Asterisk
server
Thông
tin về các loại card cũng như giá cả của chúng có thể tham khảo tại trang web http://www.digium.com
Hiện
tại tôi sử dụng hai card để nghiên cứu và xây dựng tài liệu này đó là card
TDM400P. (01 card 4 port FXO –TDM04B và 01 card 4 port FXS – TDM40B)
2.2. Yêu cầu phần mềm
Ø
Hệ điều hành: Linux based. Để thử
nghiệm và xây dựng tài liệu này, tôi sử dụng bản phân phối Redhat linux 9.0
Ø
Zapata driver – zaptel trong trường
hợp sử dụng các card kết nối FXO/FXS để nối với mạng PSTN. Nếu hệ thống ko sử
dụng các card này (chỉ là IP đơn thuần) thì có thể sử dụng module ztdummy
thay thế. Zapata driver có thể download tại http://downloads.digium.com/pub/telephony/zaptel/
Ø
Các yêu cầu về thư viện và trình
biên dịch:
Ø
Trình biên dịch gcc phiên bản 3.x
trở lên
Ø
Gói mã nguồn nhân kernel-source (với
phiên bản nhân 2.4)
Ø
Thư viện bison: giúp asterisk phân
tích câu lệnh CLI
Ø
Thư viện openssl và openssl-devel
trợ giúp việc mã hóa
Ø
Thư viện libnewt và gói devel liên
quan để biên dịch zaptel driver
Tóm
lại: Các gói phần mềm cần thiết ở thời điểm hiện tại bao gồm
asterisk-1.4.4.tar.gz
zaptel-1.4.2.1.tar.gz
Các
gói rpm cần cài đặt thêm cho bản RedhatLinux 9.0 (nếu chưa cài)
gcc-3.2.2-5
bison-1.35-6
openssl-devel-0.9.7a-2
openssl-0.9.7a-2
newt-0.51.4-1
newt-devel-0.51.4-1
kernel-source-2.4.20-8
Chú
ý khi cài các gói trên sẽ có thông báo cần cài đặt một số gói khác liên quan.
2.3. Biên dịch và cài đặt
Để
đơn giản, ta copy các file nén vào thư mục /usr/src rồi dùng lệnh sau
giải nén :
cd /usr/src/
tar -zxvf zaptel-*.tar.gz
tar -zxvf asterisk-*.tar.gz
Sau
khi giải nén, ta có các thư mục chứa mã nguồn tương ứng. Thực hiện biên dịch và
cài đặt cho với từng gói này như các phần dưới đây
2.3.1. Biên dịch và cài đặt Zaptel
Asterisk
sử dụng module chan_zap để giao tiếp với nhân hệ điều hành và điều khiển phần
cứng. Giao diện điều khiển zaptel là một module động được nạp vào nhân hệ điều
hành. Ở đây chúng ta sẽ biên dịch và sử dụng hai module chính đó là zaptel.o và
wctdm.o
Để
biên dịch được module zaptel trong với nhân hệ điều hành Redhat Linux 9.0 (bản
nhân 2.4), trình biên dịch cần tìm kiếm các file tiêu đề và thư viện
kernerl-source tại thư mục /usr/linux-2.4. Tuy nhiên, gói kernel-source lại đặt
các file này trong thư mục /usr/src/linux-2.4.20-8. Vậy nên cần tạo một slink
với tên linux-2.4 đến thư mục này như sau:
ln –s /usr/src/linux-2.4.20-8 /usr/srv/linux-2.4
Trước
khi biên dịch, ta có thể thay đổi một số tham số trong file zconfig.h. Các tham
số này sẽ ảnh hưởng đến hoạt động của trình điều khiển sau khi biên dịch. Một
số tham số có thể thay đổi và tính năng của chúng được mô tả trong bảng sau:
|
Tính
năng
|
Cấu
hình mặc định
|
|
Boost
ringer
|
/*
#define BOOST_RINGER */
|
|
Disable
m-law/A-law precomputation
|
/*
#define CONFIG_CALC_XLAW */
|
|
Enable
MMX optimization
|
/*
#define CONFIG_ZAPTEL_MMX */
|
|
Choose
echo cancellation method
|
/*
#define ECHO_CAN_STEVE */
/*
#define ECHO_CAN_STEVE2 */
/*
#define ECHO_CAN_MARK */
#define
ECHO_CAN_MARK2
/*
#define ECHO_CAN_MARK3 */
|
|
Enable
aggressive suppression
|
/*
#define AGGRESSIVE_SUPPRESSOR */
|
|
Disable
echo cancellation
|
/*
#define NO_ECHOCAN_DISABLE */
|
|
Enable
HDLC
|
/*
#define CONFIG_ZAPATA_NET */
|
|
Enable
ZapRAS
|
/*
#define CONFIG_ZAPATA_PPP */
|
|
Enable
Zaptel’s watchdog
|
/*
#define CONFIG_ZAPTEL_WATCHDOG */
|
|
Set
default tone zone
|
#define
DEFAULT_TONE_ZONE 0
|
|
Enable
CAC ground start signaling
|
/*
#define CONFIG_CAC_GROUNDSTART */
|
|
TDM400P
Revision H PCI ID workaround
|
/*
#define TDM_REVH_MATCHALL */
|
Thông
tin cụ thể về tính năng cũng như tối ưu hóa thiết bị dựa trên các tham số này
sẽ được tìm hiểu và trình bày trong một phần khác. Để đơn giản, tôi sử dụng
thông số mặc định để biên dịch và cài đặt module zaptel. Các lệnh biên dịch và
cài đặt như sau:
cd /usr/src/zaptel-version
make distclean
./configure
make
make install
make config
Lưu
ý với lệnh ./configure, chúng ta có thể thêm vào một số tham số. Để biết chi
tiết các tham số này, gõ lệnh ./configure –help. Lệnh make config sẽ tạo script
trong thư mục khởi động hệ điều hành để nạp module vào nhân khi hệ thống khởi
động.
Với
lệnh make instal, module zaptel và một số ứng dụng sẽ được cài đặt vào hệ thống
trong đó có hai công cụ hỗ trợ rất hiệu quả đó là ztcfg và zttool. Công cụ
ztcfg dùng để kiểm tra và cấu hình thiết bị dựa trên file cấu hình
/etc/zaptel.conf. Công cụ zttool được sử dụng để kiểm tra trạng thái của thiết
bị. Sử dụng lệnh man để xem thông tin chi tiết về hai chương trình này.
Để
bắt đầu khởi động trình điều khiển thiết bị, tôi sử dụng lệnh sau đây:
/etc/init.d/zaptel start
Để
kiểm tra module zaptel đã được nạp vào bộ nhớ chưa, ta dùng lệnh lsmod. Kết quả
lệnh thực lsmod của tôi như sau:
Chú
ý các dòng gạch chân chính là module điều khiển thiết bị zaptel
Ta
có thể thay đổi tham số của module wctdm bằng lệnh modprobe để tối ưu hóa hoạt
động của module này. Vấn đề này sẽ được tìm hiểu và trình bày sau.
2.3.2. Biên dịch Asterisk
Để
biên dịch và cài đặt mặc định, ta thực hiện các lệnh sau
cd /usr/src/asterisk-version
make distclean
./configure
make
make install
make samples
Lệnh
make samples sẽ tạo ra các file cấu hình mẫu với các tham số mặc định giúp cho
việc thiết lập và cài đặt asterisk được nhanh chóng và dễ dàng hơn. Chúng ta sẽ
điều chỉnh các tham số này trong các phần sau.
Sau
khi biên dịch và cài đặt thành công, chúng ta có thể khởi động và sử dụng
Asterisk với các tham số mặc định như trên. Có nhiều cách để khởi động asterisk
nhưng cách đơn giản nhất là thực hiện lệnh sau:
/usr/sbin/asterisk
Để
vào chế độ dòng lệnh của asterisk ta dùng một trong hai cách sau
/user/sbin/asterisk –cvvvv
Nếu
asterisk chưa chạy hoặc
/user/sbin/asterisk –rvvvv
Nếu
asterisk đang hoạt động
Để
tạo các script khởi động asterisk khi boot hệ thống, sử dụng lệnh sau khi make
install
make config
3. Thiết lập cấu hình Asterisk
server
3.1. Cấu trúc thư mục của Asterisk
Asterisk
sử dụng một số thư mục trong hệ thống file Linux để lưu trữ các lệnh thực thi,
dữ liệu và các tham số cấu hình. Vị trí và tên các thư mục này có thể thay đổi
khi ta biên dịch hệ thống (khi chạy lệnh configure trước khi make – gõ
./configure –help để xem chi tiết). Theo mặc định, Asterisk sử dụng các thư mục
sau:
/etc/asterisk:
Chứa các file cấu hình của Asterisk (trừ file zaptel.conf được đặt tại thư mục
/etc)
/usr/lib/asterisk/modules:
Chứa các module động của Asterisk server. Các module này sẽ được nạp khi chạy
hoặc khởi động lại dịch vụ
/var/lib/asterisk:
Chứa các file và một số thư mục dữ liệu phục vụ cho hoạt động của Asterisk như
các file sound, các file thực thi kịch bản cuộc gọi, khóa mã hóa dữ liệu…
/var/spool/asterisk/:
Chứa một số file và thư mục liên quan đến hoạt động của Asterisk server như lưu
trữ voice mail, ghi nhớ cuộc gọi…
/var/run/:
Chứa file ghi process ID của Asterisk server phục vụ việc quản lý tiến trình
/var/log/asterisk/:
Chứa các file log hoạt động của Asterisk server trong đó có thư mục
/var/log/asterisk/cdr-csv chứa dữ liệu phục vụ việc ghi cước sử dụng
Ngoài
ra, các lệnh thực thi của Asterisk server được lưu trữ trong các thư mục của hệ
thống như /usr/sbin, /user/lib …
3.2. Các file cấu hình của Asterisk
Ngoại
trừ file cấu hình thiết bị zaptel.conf, các file chứa các tham số cấu hình của
Asterisk server đều được đặt trong thư mục /etc/conf (theo mặc định). Asterisk
sử dụng rất nhiều tham số cấu hình trong các file khác nhau để thiết lập các
tham số hoạt động của dịch vụ như tham số trả lời tự động (amd.conf), tham số
phục vụ ghi cước (cdr.conf), tham số mã hóa (codecs.conf). Ở đây tôi chỉ xin
tập trung vào một số file cấu hình chính quyết định đến hoạt động của Asterisk
server như kịch bản cuộc gọi, dữ liệu người dùng, kết nối PSTN… Các tham số
khác có thể thiết lập mặc định nhờ lệnh make samples như hướng dẫn ở phần trên.
Chúng
ta sẽ cần xem xét các tham số cấu hình trong các file sau:
-
zaptel.conf : Các tham số cấu
hình cho trình điều khiển card giao tiếp
-
zapata.conf : Cấu hình cho
asterisk giao tiếp với phần cứng
-
extensions.conf : Thiết lập các
kịch bản cuộc gọi
-
sip.conf : Thông tin cấu hình
người dùng và giao thức báo hiệu SIP
-
iax.conf : Thông tin cấu hình
người dùng và cuộc gọi theo kênh IAX
Chú
ý khi thay đổi các tham số trong các file cấu hình trên, cần khởi động lại
Asterisk server để dịch vụ hoạt động với các tham số mới.
3.3. Cấu hình card giao tiếp zaptel
Trong
thí nghiệm này, tôi sử dụng hai server để lắp đặt hai card zaptel khác nhau đó
là card 4 cổng FXO TDM04B và card 4 cổng FXS TDM40B. Như đã trình bày ở trên,
cổng FXO được sử dụng để kết nối với đường dây của nhà cung cấp dịch vụ điện
thoại, cổng FXS được sử dụng để kết nối các điện thoại analog thông thường với Asterisk
server. Điểm khác biệt dễ nhận biết nhất giữa hai loại cổng này đó là cổng FXS
cung cấp âm quay số (dial tone) trong khi cổng FXO thì không có. Do vậy khi ta
kết nối một điện thoại analog vào cổng FXS, ta sẽ thấy âm chờ quay số ở điện
thoại trong khi nếu nối vào cổng FXS thì sẽ không có âm này. Chính vì vậy, khi
gắn card có cổng FXS vào máy tính, cần phải cấp nguồn cho các cổng FXS để card
này có thể phát âm quay số và phát báo hiệu chuông tới điện thoại. Trên module
FXS có cổng để kết nối nguồn điện từ máy tính vì vậy cần chú ý kết nối nguồn
cho module này.
Các
cổng giao tiếp sẽ được định nghĩa và xác định dựa vào kiểu báo hiệu nó sử dụng
trong file cấu hình zaptel.conf. Cổng FXO sẽ được khai báo sử dụng kiểu báo
hiệu FXS và tương ứng cổng FXS sẽ được khai báo sử dụng kiểu báo hiệu FXO.
Dưới
đây, tôi xin trình bày việc cấu hình với từng loại cổng giao tiếp và thử nghiệm
chúng theo từng bước
Cấu
hình file zaptel.conf
Cấu
hình file zapata.conf
Đặt
kịch bản cuộc gọi
Kiểm
tra hoạt động
3.3.1. Cấu hình cổng FXO
Các
tham số tối thiểu cần đặt trong file /etc/zaptel.conf như sau:
fxsks=1,2,3,4
loadzone=us
defaultzone=us
Dòng
đầu tiên chỉ ra báo hiệu sử dụng là fxsks cho các cổng từ 1 đến 4 (do toàn bộ 4
cổng của card đều là FXO). FXS chỉ ra kiểu báo hiệu còn KS là loại giao thức.
Có ba loại giao thức như sau:
Loop
start (ls):
Ground
start (gs):
Kewlstart
(ks): Tối ưu loop start với khả năng nhận biết kết nối xa hơn và thường được
lựa chọn làm giao thức báo hiệu mạch analog cho asterisk
Tham
số loadzone chỉ ra tập các tham số như nhạc chuông, báo bận… được sử dụng cho
các cổng tương ứng. Tham số defaultzone sẽ được sử dụng nếu không đặt loadzone
cho cổng này.
Sau
khi thiết lập cấu hình zaptel, nạp lại module cho thiết bị bằng lệnh sau:
/etc/init.d/zaptel restart
Hoặc
nạp trực tiếp module vào nhân
modprobe wctdm
Chú
ý: Có thể lệnh khởi động trên sẽ gặp thông báo bận do module đang được sử dụng
bởi Asterisk. Nếu gặp thông báo này, ta tắt chương trình asterisk bằng lệnh
sau:
killall -9 asterisk
Rồi
thực thi lại các lệnh ở trên
Sau
khi nạp được module, kiểm tra lại hệ thống bằng lệnh ztcfg:
ztcfg –vv
Sau
đây là kết quả của tôi:
Tiếp
theo, ta sẽ cấu hình cho Asterisk giao tiếp với card zaptel bằng các tham số
trong file zapata.conf như sau:
[trunkgroups]
; Định nghĩa các nhóm trung kế tại đây. Mặc định có thể bỏ
qua
[channels]
; Các giá trị mặc định
usecallerid=yes
hidecallerid=no
callwaiting=no
threewaycalling=yes
transfer=yes
echocancel=yes
echotraining=yes
; Định nghĩa các cổng
context=incoming ; Cuộc
gọi đến sẽ ứng với context [incoming]
signalling=fxs_ks ; Dùng kiểu
báo hiệu FXS cho cổng FXO
channel => 1
; Đường thoại PSTN gắn tại cổng số 1
callerid=incoming <123> ; Định nghĩa ID cho cuộc gọi
đến123>
Khi
có cuộc gọi đến cổng số 1, Asterisk server sẽ phải thực thi các tác vụ để đáp
ứng cuộc gọi. Như cấu hình ở trên, Asterisk server sẽ tìm đến kịch bản cuộc gọi
tại context [incoming] trong file extension.conf. Để tạo kịch bản test, trong
file extension.conf ta thêm một kịch bản như sau:
[incoming]
; incoming calls from the FXO port are directed to this
context
from zapata.conf
exten => s,1,Answer( )
exten => s,2,Echo( )
Với
kịch bản trên, các cuộc gọi đến sẽ được kết nối với một bộ lặp để nhắc lại lời
người gọi.
Để
kiểm tra card, sử dụng lệnh zttool để theo dõi hoạt động của thiết bị, khi kết
nối line thoại vào cổng số 1 thì thông tin hiển thị tại zttool hình dưới đây:
Chú
ý số 1 được gạch chân hiển thị 01 đường kết nối.
Sử
dụng một điện thoại khác (di động hoặc cố định) gọi đến số thuê bao của line
thoại gắn vào card thì Asterisk server sẽ nhấc máy và khởi động bộ lặp hoạt
động.
3.3.2. Cấu hình cổng FXS
Cũng
giống như với cổng FXO, cấu hình cổng FXS được thực hiện với tham số cấu hình
tại các file như sau
File
zaptel.conf
fxoks=1-4 ; Chú ý fxoks cho cổng FXS
loadzone=us
defaultzone=us
Load
lại module bằng lệnh /etc/init.d/zaptel restart rồi dùng lệnh ztcfg –vv cho kết
quả như sau
Trong
file zapata.conf
[trunkgroups]
; Mặc định bỏ qua
[channels]
; Các giá trị cấu hình mặc định
usecallerid=yes
hidecallerid=no
callwaiting=no
threewaycalling=yes
transfer=yes
echocancel=yes
echotraining=yes
immediate=no
; Tham số khai báo cho cổng FXS
context=internal ;
Sử dụng context [internel] cho cuộc gọi đi
signalling=fxo_ks ; Dùng
báo hiệu FXO cho cổng FXS
channel =>
1 ; Điện
thoại nối với cổng 1
Để
kiểm tra thiết bị, tôi tạo một kịch bản gọi lặp với số gọi đến là 1080 trong
file cấu hình extension.conf như sau
[internal]
exten => 1080,1,Answer( )
exten => 1080,2,Echo( )
Gắn
đường thoại từ một điện thoại analog vào cổng số 1 trên card, sử dụng công cụ
zttool để kiểm tra thiết bị tôi được kết quả như sau:
Khi
chưa nhấc máy điện thoại
Khi
nhấc máy
Máy
điện thoại phát âm mời quay số, quay 1080 để khởi động bộ lặp của Asterisk
server. (Chú ý chỉ khi khởi động Asterisk server thì mới có âm mời quay số tại
máy điện thoại, khi Asterisk chưa khởi động thì chỉ có tín hiệu báo tới máy
điện thoại chứ không có âm mời quay số).
3.4. Cấu hình người dùng và sử dụng softphone sử dụng
Trong
phần này, tôi sẽ trình bày về cách cấu hình để thêm người dùng sử dụng dịch vụ
VoIP cho Asterisk server. Có nhiều loại người dùng tương ứng với các giao thức
báo hiệu khác nhau được sử dụng trong Asterisk server tuy nhiên có hai dạng
thường được sử dụng nhất đó là SIP và IAX. SIP là giao thức báo hiệu có tính mở
cao, được sử dụng phổ biến trong nhiều thiết bị VoIP hiện tại. Tuy nhiên nó có
một điểm yếu đó là khả năng hoạt động bị giới hạn khi NAT giữa các lớp mạng khác
nhau. Thông tin cụ thể về giao thức báo hiệu này sẽ được trình bày trong một
phần khác.
Giao
thức báo hiệu thứ hai thường được sử dụng với Asterisk đó là IAX
(Inter-Asterisk-eXchange). Đây là một giao thức thường được sử dụng để kết nối
giữa các Asterisk server với nhau. Ngoài ra IAX còn được sử dụng cho các server
dạng FWD (Free World Dialup) khi người dùng không cần quan tâm đến hệ thống
mạng của server cũng như client. Tuy nhiên, không nhiều các thiết bị VoIP hỗ
trợ giao thức này.
3.4.1. Cấu hình SIP
Thông
tin về SIP được đặt trong file cấu hình sip.conf với các tham số được chia làm
hai phần:
-
Phần tham số chung: Chứa các tham số chung cho toàn bộ Asterisk server
-
Phần người dùng: Chứa thông tin về từng người dùng
File
sip.conf chứa các tham số đơn giản nhất sẽ như sau:
[general]
context=default
srvlookup=yes
;Phần sau khai báo người dùng huydd với mật khẩu là
“matkhau”
[huydd]
type=friend
secret=matkhau
qualify=yes
nat=no
; Không sử dụng NAT
host=dynamic ; Địa chỉ sẽ được
xác định khi đăng ký SIP
canreinvite=no
context=internal ; Sử dụng context internal cho huydd
3.4.2. Cấu hình IAX
Tương
tự như với SIP, các tham số IAX đặt trong file iax.conf cũng bao gồm hai phần
chính đó là phần chứa tham số chung [general] và phần cho từng người
dùng. File cấu hình đơn giản iax sẽ chứa thông tin như sau:
[general]
bandwidth=low
disallow=lpc10
jitterbuffer=no
forcejitterbuffer=no
tos=lowdelay
autokill=yes
; Khai báo người dùng huydd_iax với mật khẩu “matkhau”
[huydd_iax]
type=friend
callerid=huydd_iax ;Thông tin
hiển thị khi gọi đến
username=huydd_iax
secret=matkhau
context=internal
host=dynamic
3.4.3. Cấu hình và sử dụng softphone
Có
nhiều softphone hỗ trợ SIP có thể sử dụng với Asterisk server mà thông dụng
nhất đó là sản phẩm Xlite và EyeBeam của CounterPath Solutions. Có thể download
bản dùng thử với các tính năng cơ bản tại http://www.counterpath.com/xlitedownload.html
Để
cấu hình tài khoản SIP cho Xlite, ta nhập các thông số như hình dưới đây:
Ở
đây, máy chủ Asterisk có địa chỉ tương ứng với tên miền sip1.cdit.com.vn
Sau
khi nhập thông tin về người dùng, Xlite sẽ tiến hành đăng ký với Asterisk
server. Trong trường hợp đăng ký thành công, server sẽ hiện thị thông tin log
(gõi lệnh asterisk –rvvvvvv trước khi chạy Xlite trên máy trạm để hiển thị
thông tin) như sau
Còn
trên cửa sổ Xlite sẽ hiển thị người dùng đang đăng ký hiện tại
Với
giao thức IAX, do được thiết kế riêng cho báo hiệu liên server nên không nhiều
softphone hỗ trợ giao thức này. Ở đây tôi sử dụng sản phẩm softphone Firefly
của hãng Frehstel. Các tham số cấu hình được thiết lập cho người dùng IAX được
mô tả như hình dưới đây:
Sau
khi nhập thông tin, trên Asterisk server sẽ hiển thị thông tin như hình dưới
đây cho biết đăng ký thành công
Ta
có thể dùng các softphone ở trên để quay đến số 1080 đã thiết lập ở các phần
trước để kiểm tra.
3.5. Kịch bản cuộc gọi (dial plan)
Có
thể coi dialplan chính là trái tim của hệ thống Asterisk. Nó sẽ quyết định
Asterisk server làm gì với các cuộc gọi đến, các số gọi đi. Thực chất, dialplan
chính là một dãy các chỉ thị mà Asterisk server thực hiện theo ứng với một điều
kiện đầu vào tương ứng với số gọi đi hoặc đến. Các chỉ thị này được đặt trong
file cấu hình extension.conf và các file include liên quan được chỉ ra trong
file extension.conf.
Kịch
bản cuộc gọi trong Asterisk server được phân thành các vùng khác nhau được gọi
là context. Mỗi người dùng hoặc các phần tử hệ thống thuộc các context khác
nhau thực hiện theo các chỉ thị của context đó. Theo như hướng dẫn cấu hình ở
các phần trên, hiện tại chúng ta cần cấu hình 2 context:
-
Internal: Cho các thiết bị nối vào
cổng FXS và các thuê bao SIP, IAX gọi lẫn nhau và gọi qua PSTN
-
Incoming: Cho kết nối gọi vào từ
mạng PSTN
Ngoài
ra, hệ thống còn một context chung chứa các tham số tổng quát đó là general.
Mỗi context sẽ được đặt trong một vùng bắt đầu bằng ký hiệu tên context trong
cặp ngoặc [], ví dụ [incoming]. Dưới đây tôi sẽ khai báo kịch bản cuộc gọi phục
vụ mục tiêu sau:
-
Cuộc gọi đến từ mạng PSTN sẽ được
chuyển đến địa chỉ thuê bao SIP huydd
-
Cuộc gọi đến các thuê bao SIP sẽ
chuyển tới đia chỉ tương ứng
-
Cuộc gọi đến các thuê bao mạng PSTN
sẽ bắt đầu với đầu số 9
File
cấu hình extension.conf như sau:
[general]
static=yes
writeprotect=no
clearglobalvars=no
userscontext=internal
[incoming]
exten => s,1,Dial(SIP/huydd)
[internal]
exten => _[a-z].,1,Dial(SIP/${EXTERN},30)
exten => _[a-z].,1,Hangup()
exten => _9.,1,Dial(Zap/g1/${EXTERN:1})
exten => _9.,2,Hangup()
Đến
đây ta có thể sử dụng softphone cũng như điện thoại để kiểm tra và thử nghiệm
hệ thống
4. Kết luận
Chỉ
với một số thiết bị phần cứng đơn giản kết hợp với asterisk, chúng ta hoàn toàn
có thể tổ chức một tổng đài hoàn chỉnh để thử nghiệm dịch vụ VoIP cũng như kết
nối giữa mạng IP và PSTN. Hướng dẫn trên đây mới chỉ là một số bước cơ bản để
thiết lập hệ thống. Còn rất nhiều chủ đề liên quan để có thể tối ưu cũng như
làm phong phú thêm kịch bản dịch vụ mà tôi chưa có đủ thời gian nghiên cứu và
trình bày ở đây. Tuy nhiên tôi hi vọng sẽ có dịp để nghiên cứu và trình bày
thêm về hệ thống rất thú vị này.