You are on page 1of 14

Dial Plan cơ bản CTT602 – Hệ thống Viễn thông

DIAL PLAN CƠ BẢN

1. Mục tiêu :
Bài hướng dẫn giúp sinh viên có thể:

• Nắm được Dial Plan là gì, các biến, hàm và ứng dụng của Dial Plan
• Biết cách cài đặt các Dial Plan trong một số trường hợp cơ bản.

2. Nội dung
2.1. GIỚI  THIỆU  DIALPLAN    
Dialplan là trái tim của hệ thống Asterisk. Dialplan cho biết các cuộc gọi sẽ được xử lý
như thế nào qua hệ thống Asterisk. Dialplan bao gồm tập hợp các dòng lệnh hay các ứng
dụng theo một trình tự nào đó mà hệ thống phải thực hiện để đáp ứng nhu cầu chuyển
mạch cuộc gọi. Để hiểu rõ và cấu hình thành công hệ thống Asterisk thì điều kiện tiên
quyết là phải biết Dialplan hoạt động thế nào. Dialplan là công việc thiết lập cho hoạt
động của hệ thống như định hướng các cuộc gọi vào và ra hệ thống, đó là một danh sách
các bước hay các lệnh liên tục nhau để thực hiện một tác vụ nào đó mà hệ thống phải
thực hiện theo. Khác biệt với các hệ thống điện thoại truyền thống tất cả các công việc
cấu hình hệ thống đều là từ phía người sử dụng. Hệ thống chúng ta có hoàn chỉnh không
phụ thuộc rất nhiều vào việc chúng ta có hiểu rõ Dialplan hay không?. Dialplan được cấu
hình qua tập tin extension.conf, liên quan đến việc cấu hình Dialplan có những khái niệm
cần nắm :

Bộ môn MMT&VT | Khoa CNTT | ĐH KHTN TP HCM | Tháng 7/2013 Trang 1


Dial Plan cơ bản CTT602 – Hệ thống Viễn thông

Extentions (số nội bộ) : số nội bộ là con số mà thuê bao đó cần gọi, là thành phần mà
Dialplan thực hiện kích hoạt khi có cuộc gọi vào. Số nội bộ chính là hạt nhân để hệ thống
xác định cuộc gọi cần thực hiện.

Priorities (thứ tự thực hiện) : là thứ tự thực hiện các ứng dụng trong Dialplan

Applications (các ứng dụng) : đây là phần quan trọng trong Diaplan, gọi thực hiện các
ứng dụng cụ thể

Contexts ( ngữ cảnh) : là các tình huống xử lý cụ thể mà người dùng đặt ra cho Dialplan
xử lý Dialplan được phân chia thành nhiều ngữ cảnh khác nhau như [incoming],
[outgoing]… Trong mỗi ngữ cảnh, các dòng lệnh sẽ gọi thực hiện các ứng dụng trên 1 số
nội bộ cụ thể và theo thứ tựưu tiên được chỉ định trước. Lưu ý : Trước khi cấu hình hãy
lưu lại tập tin extention.conf gốc và thực hiện trên tập tin extention.conf rỗng.

2.2. CẤU  HÌNH  DIALPLAN    

a. Khai  báo  Context    


Ngữ cảnh (context) là thành phần không thể thiếu để tổ chức Dialplan và chúng ta không
được đặt tên ngữ cảnh có khoảng trắng. Một trong những điều quan trọng nhất của việc
sử dụng ngữ cảnh là bắt buộc phải bảo mật. Nếu sử dụng ngữ cảnh đúng, cho phép người
gọi này thực hiện khả năng đặc biệt nào đó (như là cuộc gọi đường dài) mà không cho
phép đối với những người gọi khác. Nếu không thiết kế dialplan một cách cẩn thận, có
thể cho phép những người khác sử dụng hệ thống một cách không mong muốn. Đó là
điều cần nhớ khi xây dựng hệ thống Asterisk . Sau đây là tổ chức các ngữ cảnh trong tập
tin cấu hình extention.conf

Bộ môn MMT&VT | Khoa CNTT | ĐH KHTN TP HCM | Tháng 7/2013 Trang 2


Dial Plan cơ bản CTT602 – Hệ thống Viễn thông

Như vậy ứng với mỗi trường hợp hệ thống sẽ có ngữ cảnh khác nhau, ngữ cảnh được đặt
trong dấu[] .

! Ngữ cảnh [general] Ngữ cảnh đầu tiên trong tập tin extention.conf là [general]. Có 3
thông số được thiết lập tại ngữ cảnh này:

• static=yes|no : hiện tại chỉ có giá trị yes là được sử dụng, nếu static=yes và
writeprotect=no thì chúng ta có thể lưu dialplan từ dòng lệnh của Asterisk
CLI>save dialplan. CLI là giao tiếp dòng lệnh của hệ thống Asterisk, tại đây
chúng ta có thể thực hiện các lệnh tương tác với Asterisk như xem trạng thái các
extention liệt kê các ứng dụng…, từ giao tiếp dòng lệnh của hệđiều hành linux
chuyển qua giao tiếp dòng lệnh của Asterisk được thực hiện bằng lệnh #asterisk –
r).

Bộ môn MMT&VT | Khoa CNTT | ĐH KHTN TP HCM | Tháng 7/2013 Trang 3


Dial Plan cơ bản CTT602 – Hệ thống Viễn thông

• writeprotect = yes|no : Thiết lập bằng yes để lưu dialplan.

• autofallthrough=yes|no : thiết lập giá trị yes thì sau khi hoàn tất việc xử lý cuộc
gọi Asterisk sẽ kết thúc cuộc gọi, còn thiết lập giá trị no thì sau khi hoàn tất xử lý
cuộc gọi thì hệ thống sẽ đợi extention khác quay số.

! Ngữ cảnh [global]

Ngữ cảnh [globals] là nơi khai báo các biến riêng tư định nghĩa để sử dụng trong các ngữ
cảnh xử lý extention ở những phần tiếp theo. Các biến không phân biệt chữ hoa và chữ
thường nên biến ${MYVAR} và ${mYvaR} là như nhau. Ví dụ :

Bộ môn MMT&VT | Khoa CNTT | ĐH KHTN TP HCM | Tháng 7/2013 Trang 4


Dial Plan cơ bản CTT602 – Hệ thống Viễn thông

! Các ngữ cảnh khác Đối với Asterisk khi nói đến ngữ cảnh thì thường quan tâm đến
trường hợp cụ thể nào đó, do đó trong hệ thống sẽ có rất nhiều ngữ cảnh khác nhau.

Ví dụ: khi gọi đến tổng đài Asterisk có một thông điệp thông báo như sau “Chào mừng
các Bạn gọi đến công ty chúng tôi hãy nhấn phím 1 để gặp phòng kinh doanh phím 2 gặp
phòng kỹ thuật…” khi người gọi chọn phím 1 thì hệ thống sẽ chuyển đến một ngữ cảnh là
[PhongKinhDoanh] khi người gọi nhấn phím 2 thì hệ thống sẽ định hướng cuộc gọi qua
ngữ cảnh [PhongKyThuat].

Ngoài ta khi cấu hình cho các kênh thoại thì ngữ cảnh ởđây là việc xử lý các cuộc gọi
tương ứng với kênh đó qua kế hoạch diaplan.

Bộ môn MMT&VT | Khoa CNTT | ĐH KHTN TP HCM | Tháng 7/2013 Trang 5


Dial Plan cơ bản CTT602 – Hệ thống Viễn thông

b. Biến  trong  Asterisk    


! Phân loại biến trong Dialplan

Asterisk sử dụng biến trong các đối số của application, cú pháp được sử dụng như sau:

${TenBien} TenBien chứa bất kỳ chuỗi số alphanumeric nhưng phải bắt đầu bằng một ký
tự số. Biến do người dùng đặt không phân biệt chữ hoa chữ thường ví dụ : ${TenBien} và
${TENBIEN} là như nhau, nhưng với các biến do Asterisk đặt phải gọi đúng tên biến vì
có phân biệt chữ hoa chữ thường. Ví dụ ${EXTEN} là biến do Asterisk đặt nên không thể
gọi ${exten}, nếu gọi như vậy là sai. Có 3 kiểu biến trong hệ thống Asterisk:

• Biến toàn cục (global variables) : được định nghĩa tại ngữ cảnh [globals] hoặc
được khai báo bằng lệnh SetGlobalVar Một khi được định nghĩa, biến có thể được
sử dụng bởi bất kỳ kênh nào tại bất kỳ thời điểm nào

Bộ môn MMT&VT | Khoa CNTT | ĐH KHTN TP HCM | Tháng 7/2013 Trang 6


Dial Plan cơ bản CTT602 – Hệ thống Viễn thông

• Biến kênh (channel variables) : được khai báo bằng lệnh Set, biến kênh chỉ có hiệu
lực bên trong kênh khai báo chúng. Một khi kết thúc cuộc gọi biến kênh cũng sẽ
không còn tồn tại nữa

• Biến môi trường (environment variables) : là biến mà Asterisk có thể truy cập biến
môi trường của hệđiều hành linux. Để truy cập biến môi trường chúng ta dùng cú
pháp : ${ENV(foo)}

Trong quá trình khai báo biến cần chú ý là: nếu khai báo biến toàn cục và biến kênh cùng
tên nhau thì giá trị của biến là biến kênh nhưng tại kênh khác nếu gọi tên biến toàn cục
thì giá trị biến toàn cục có hiệu lực vì biến kênh chỉ có hiệu lực tại kênh đó.

! Một số biến định nghĩa bởi Dialplan

Asterisk định nghĩa một số biến giúp ích trong việc thực hiện Dialplan, các biến này có
phân biệt chữ hoa chữ thường nên cần lưu ý khi gọi sử dụng, đa phần các biến do
Asterisk định nghĩa đều có ký tự chữ hoa.

${ANSWEREDTIME} : Lưu tổng số thời gian đàm thoại ${CHANNEL}: Kênh hiện tại
${CONTEXT}: Ngữ cảnh hiện tại ${PRIORITY} : Thứ tự hiện tại ${DIALSTATUS} :
Trạng thái quay số như bận, không trả lời…

Trên đây giới thiệu một số biến mà Asterisk cung cấp, còn rất nhiều biến nữa tùy vào nhu
cầu trong kế hoạch dialplan mà sử dụng cho phù hợp.

Bộ môn MMT&VT | Khoa CNTT | ĐH KHTN TP HCM | Tháng 7/2013 Trang 7


Dial Plan cơ bản CTT602 – Hệ thống Viễn thông

c. Lệnh  dùng  trong  Dialplan      

• Name (tên ký tự hoặc con số) của số nội bộ

• Priority (số thứ tự) : mỗi số nội bộ có thể bao gồm nhiều thứ tự thực hiện, mỗi thứ
tự gọi là “priority”
• Application (or command) : thực hiện một ứng dụng cụ thể nào đó cho cuộc gọi
• cuộc gọi exten => tương ứng với mỗi ứng dụng thực hiện. exten=> giống nhau cho
mỗi dòng thực hiện trong Dialplan.

Ví dụ:

7325010 là sốđiện thoại mà thuê bao quay, còn các số 1 và 2 là các priorites tức là thứ tự
thực hiện các lệnh. Khi thuê bao quay số 7325010 thì đổ chuông máy điện thoại tại Zap/1
trong vòng 20 giây. N ếu sau 20 giây không trả lời thì cuộc gọi sẽ được định hướng đến
hộp thư thoại u7325010 chữ u ởđây có nghĩa là “ 'u'navailable message”.

! Name - số nội bộ Dialplan là một tập gồm nhiều số nội bộ, khi một cuộc gọi tương
ứng với số nội bộ nào thì ứng dụng cho cuộc gọi đó sẽ được thực hiện. Số nội bộ có
thể đơn giản với một đích danh cụ thể như 8051, letoan hay là một chuỗi so mẫu được

Bộ môn MMT&VT | Khoa CNTT | ĐH KHTN TP HCM | Tháng 7/2013 Trang 8


Dial Plan cơ bản CTT602 – Hệ thống Viễn thông

thực hiện như _9xxx. Khai báo các số nội bộ tuỳ vào trường hợp sử dụng mà có phân
biệt. chữ hoa và chữ thường hay không. N ếu ta khai báo số nội bộ thế nào thì khi gọi
đến phải gọi đúng như thế nghĩa là có phân biệt chữ hoa và chữ thường, còn số nội bộ
sử dụng trong 1 ngữ cảnh thì không phân biệt chữ hoa hay thường.

Ví dụ: không phân biệt chữ hoa và chữ thường

Bộ môn MMT&VT | Khoa CNTT | ĐH KHTN TP HCM | Tháng 7/2013 Trang 9


Dial Plan cơ bản CTT602 – Hệ thống Viễn thông

Extention chính là số điện thoại nội bộ có 3 kiểu extention như sau: litteral, predifined và
pattern

• Litteral : là cách khai báo thông thường chứa các con số, ký tự, hoặc cả hai. Ví dụ
như : 8051, x-ten, 8051-SIP.

• Predefined : đây là các extention được định nghĩa trước để xử lý các trường hợp
có thể xảy ra trong kế hoạch dialplan như máy điện thoại không gắn với mạng,
không trả lời, quá thời gian timeout, hay chuyển đến điện thoại viên…

Ví dụ:

Bộ môn MMT&VT | Khoa CNTT | ĐH KHTN TP HCM | Tháng 7/2013 Trang 10


Dial Plan cơ bản CTT602 – Hệ thống Viễn thông

Trong đoạn dialplan trên thực hiện quay số máy nội bộ 100 trong thời gian 15 giây, nếu
quá thời gian thì thông báo hết thời gian timeout với extention t, còn nếu máy điện thoại
không trả lời hay không có trên mạng thì phát thông báo invalid qua extention i.

• Pattern (So mẫu) : trong thực tế số máy điện thoại nội bộ thường là một dãy nhiều
con số chẳng hạng từ 100-999, với một dãy số như thế để tối ưu trong khai báo
không còn cách nào khác hơn là dùng Pattern để giải quyết. Một số quy định tạo
mẫu trong dialplan

• “_” là ký tự bắt đầu của một Pattern.


• Z là con số bất kỳ từ 1-9
• X là con số bất kỳ từ 0-9
• N là con số bất kỳ từ 2-9
• [] so khớp bất kỳ số hoặc vùng số nào được chỉ định trong dấu []
• “.” Dấu chấm đại diện cho mọi con số ( _1234. số đầu tiên là 1234 còn lại là số bất
kỳ ví dụ 12345 hay 123456789 đều được )

Chú ý : không sử dụng “_.” vì trong Pattern này sẽ so khớp tất cả kể cả các extention định
nghĩa trước (Predefined) thay vào đó chúng ta sử dụng “_X.”

Ví dụ:
“_09XXXXXXXX” : Pattern các số điện thoại mạng di động Việt Nam
“_092XXXXXXX” : Pattern các sốđiện thoại mạng HT mobile. “_098XXXXXXX” :
Pattern các số điện thoại mạng VietTel mobile. “_059XXXXX” : Pattern các số điện
thoại tại Tỉnh Gia Lai “_11N ” : Pattern các sốđiện thoại đặc biệt như 113,114,115

Bộ môn MMT&VT | Khoa CNTT | ĐH KHTN TP HCM | Tháng 7/2013 Trang 11


Dial Plan cơ bản CTT602 – Hệ thống Viễn thông

! Priorities - thứ tự ưu tiên

Priorities là thứ tự thực hiện các ứng dụng trong dialplan, khi thứ tự “1” được thực hiện
thì kế tiếp là ứng dụng tại thứ tự số “2” được thực hiện. Asterisk không quan tâm thứ tự
sắp xếp câu lệnh thế nào mà chỉ cần biết đến priorities trên mỗi dòng lệnh.

Ví dụ:

Kể từ version 1.2 của Asterisk thay vì sử dụng gán một con số cụ thể cho thứ tự thực hiện
như trên thì ta có thể gán ký tự “n” cho mọi dòng “exten=>” điều này sẽ nói với Asterisk
là ứng dụng với thứ tự tiếp theo sẽ thực hiện. Thứ tự thực hiện từng dòng 1 từ trên xuống
dưới.

Ví dụ:

! Applications – hàm ứng dụng Đây là phần quan trọng trong Diaplan tức là ứng dụng
nào sẽ được thực hiện trên mỗi dòng, các ứng dụng như thực hiện quay số, trả lời
cuộc gọi hay đơn giản là nhấc máy, gác máy để biết thêm thông tin về các ứng dụng
cũng như các thông số kèm theo thì hãy dùng lệnh “show applications” trên giao tiếp
dòng lệnh của Asterisk.

Bộ môn MMT&VT | Khoa CNTT | ĐH KHTN TP HCM | Tháng 7/2013 Trang 12


Dial Plan cơ bản CTT602 – Hệ thống Viễn thông

Chúng ta hãy xem xét sơ lược một sốứng dụng thường gặp trong Dialplan (xem thêm ở
phần phụ lục : Một sốứng dụng của Dialplan)

• Background() : Ứng dụng này thực hiện phát một file âm thanh và chờ nhận con
số từ phím nhấn của máy điện thoại, sau khi nhận con số từ phím nhấn máy điện
thoại, Asterisk sẽ ngắt phát thông điệp và xử lý chuyển đến số thứ tự priority
tương ứng với con số nhận được

• Goto() : Là ứng dụng thực hiện nhảy từ context, extention, priority hiện hành đến
context, extention, priority được chỉ định trong ứng dụng goto().
• GotoIf () : giống như Goto() nhưng có xem xét điều kiện (xem phụ lục A)
• GotoIfTime(): giống như Goto() nhưng dựa vào giờ của hệ thống để quyết định có
rẽ nhánh hay không.
• Dial() : Ứng dụng thực hiện quay sốđiện thoại. Chẳng hạn khi chúng ta tiếp tục ví
dụở trên thì khi chuyển đến các phòng tương ứng, Asterisk sẽ quay số SIP/8051
cho phòng kỹ thuật, iax2/8000 cho phòng Hành Chánh và gọi đến zap/1 cho phòng
tiếp thị bán hàng.
• Answer() : là ứng dụng thực hiện trả lời cuộc gọi, một số tình huống dialplan
không cần ứng dụng này nhưng để đúng logic của xử lý cuộc gọi chúng ta nên sử
dụng .
• Playback() : thực hiện phát ra đoạn tin nhắn thoại với lời chào “helloworld” tên

Bộ môn MMT&VT | Khoa CNTT | ĐH KHTN TP HCM | Tháng 7/2013 Trang 13


Dial Plan cơ bản CTT602 – Hệ thống Viễn thông

tập tin hello-world được đặt tại thư mục /var/lib/asterisk/sounds/ đây là thư mục
mặc định để lấy tập tin thoại sử dụng, nhưng nếu chúng ta có một tập tin hello-
world đặt tại thư mục khác chúng ta cũng có thể chỉ rõ thư mục để ứng dụng
playback() thực hiện ví dụ như playback(thumuc/hello-world) .
• Hangup() : là ứng dụng thực hiện chức năng kết thúc cuộc gọi, một khi ứng dụng
này thực hiện thì xem như kết thúc cuộc gọi hiện hành, các lệnh dialplan sau lời
gọi ứng dụng sẽ không được thực hiện .
• Read() : tiếp nhận dữ liệu nhập vào từ thuê .
• Authenticate(): thực hiện xác minh con số thuê bao nhập vào, nếu đúng thì thứ
tự(priority) tiếp theo sẽ thực hiện còn ngược lại sẽ kết thúc .
• Record() : thu lại những tin nhắn thoại để phục vụ cho kế hoạch dialplan.

Bộ môn MMT&VT | Khoa CNTT | ĐH KHTN TP HCM | Tháng 7/2013 Trang 14

You might also like