Phần chung [general]

Một phần của tài liệu NGHIÊN CỨU HOẠT ĐỘNG VÀ TRIỂN KHAI MẠNG IP PBX ASTERISK (Trang 50)

SIP tập tin được đọc từ trên xuống dưới. Phần đầu chứa các thông số toàn cục [general]. Các tùy chọn chính gồm:

allow/disallow : định nghĩa codecs nào có thể được sử dụng.

bindaddr : Địa chỉ mà Asterisk SIP dùng để lắng nghe (listener). Nếu ta thiết lập nó thành 0.0.0.0 (mặc định) nó sẽ lắng nghe ở tất cả các giao tiếp.

context : Thiết lập ngữ cảnh mặc định cho tất cả các client ngoại trừ các client đã được thay đổi.

bindport : port SIP UDP dùng để lắng nghe.

maxexpirey : Thời gian tối đa cho việc đăng ký (tính bằng giây). • defaultexpirey : Thời gian mặc định cho việc đăng ký (tính bằng giây). • register : đăng ký Asterisk tới một host khác..

Ví dụ: [general] bindport = 5060 bindaddr = 10.1.30.45 context = default disallow = all allow = ulaw allow = alaw maxexpirey = 120 defaultexpirey = 80 3.4.2 Phần Client

Sau khi hoàn thành các phần chung [general], tiếp theo sẽ thiết lập các SIP client. • [name] : Khi một thiết bị SIP kết nối đến Asterisk, nó sử dụng phần username của SIP URI để tìm ra peer/user.

type : Cấu hình lớp kết nối. Các tuỳ chọn là peer, user và friend. • peer : Asterisk gởi các cuộc gọi đến peer.

user : Asterisk nhận các cuộc gọi từ một user. • friend : Cả hai cùng thời điểm.

host : địa chỉ IP hay tên của host. Tuỳ chọn thông thường là “dynamic”, được sử dụng khi host đăng ký đến Asterisk.

secret : Mật khẩu để xác thực peer và user. Ví dụ: [cisco] type=friend secret=mysecret host=10.1.30.50 context=trusted [xlite] type=friend secret=xlite host=dynamic defaultip=10.1.30.17

3.5 Tim hiều sơ đồ quay số

Sơ đồ quay số là trái tim của Asterisk, nó định nghĩa cách mà Asterisk điều khiển, định tuyến mỗi cuộc gọi và bất kỳ cuộc gọi đến PBX. Nó chứa các số, danh sách lệnh cho Asterisk tuân theo. Các lệnh được gắn vào các số nhận được từ kênh hay ứng dụng. Để cấu hình Asterisk thành công, việc hiểu sơ đồ quay số là rất quan trọng.

Hầu hết sơ đồ quay số đều được chứa trong tập tin extensions.conf tại thư mục

/etc/asterisk. Tập tin này sử dụng ngữ pháp nhóm đơn và có 4 thành phần chính sau: • Số nội bộ (Extensions).

• Số ưu tiên (Priorities). • Ứng dụng (Applications). • Ngữ cảnh (Contexts).

3.5.1 Số nội bộ (Extensions)

Sơ đồ quay số là một tập hợp các số được định nghĩa trước. Một số là một chuỗi sẽ trigger một sự kiện khi một cuộc gọi được thực hiện. Các số có thể hoặc bằng chữ hoặc bằng mẫu số (pattern).

3.5.1.a Một số mẫu số (pattern)

• _ : chỉ việc bắt đầu 1 pattern.

• X : đại diện cho bất kỳ số nào từ 0 đến 9. • N : đại diện cho bất kỳ số nào từ 2 đến 9. • Z : đại diện cho bất kỳ số nào trừ số 0.

• [dãy bất kỳ] : khớp với chỉ một trong các ký tự nằm trong dấu ngoặc vuông “[]”. Ví dụ: [02-68*#] sẽ khớp với các ký tự 0, từ 2 đến 6, 8, * hoặc #.

• . : là một wildcard, khớp với bất kỳ ký tự nào nằm phía sau dấu chấm “.”.

• | : để chỉ việc sử dụng phím số phía trước | để gọi ra ngoài (thường là số 0 hay số 9). Số này được loại bỏ không đưa ra ngoài.

Một số ví dụ của mẫu số (pattern):

9|NXXXXXXXX : bấm số 9 để ra ngoài, dãy số gọi ra ngoài gồm 9 phím số bắt đầu từ số 2 đến 9 và 8 số còn lại là bất kỳ. Vậy tổng cộng người sử dụng gọi 10 số nhưng số 9 đầu bị loại bỏ và chỉ gởi 9 số sau ra ngoài trung kế.

_4XXX : chỉ những số gọi nội bộ có 4 số bắt đầu từ số 4.

_90[2-8]. : dùng cho trường hợp số gọi ra ngoài (bấm số 9 ra ngoài) số sau là dãy số đường dài. Dùng trong các ngữ cảnh cấp quyền gọi đường dài.

_909XXXXXXXX : dùng cho trường hợp số gọi ra ngoài (bấm số 9 ra ngoài) số sau là dãy số di động. Dùng trong các ngữ cảnh cấp quyền gọi di động.

_91900. : dùng cho trường hợp số gọi ra ngoài (bấm số 9 ra ngoài) số sau là dãy số dịch vụ 1900. Dùng trong các ngữ cảnh cấp quyền gọi dịch vụ 1900. (adsbygoogle = window.adsbygoogle || []).push({});

Như ta thấy bên trên, việc hiểu và sử dụng các mẫu số (pattern) này mang lại tính linh hoạt và sơ đồ quay số rất mạnh cho cấu hình định tuyến Asterisk.

3.5.1.b Các ví dụ về số nội bộ (extensions)

+ Ví dụ 1:

exten=>8580,1,dial(SIP/8580,20) exten=>8580,2,hangup()

Lệnh “exten” mô tả bước tiếp theo của cuộc gọi đến số 8580 là một tập hợp của các số nhận được (số được gọi). Số “1” và “2” là độ ưu tiên định nghĩa thứ tự xử lý. Quay số “8580” sẽ gọi SIP IP Phone đã được đăng ký như “8580”. Nếu cuộc gọi không có nguời trả lời sau 20 giây nó sẽ giải toả cuộc gọi.

+ Cú pháp Extension

exten=> number (name), {priority|label{+|-}offset}[(alias)],application

Lệnh extension “exten=” theo sau bởi một số nội bộ hoặc tên, một dấu phẩy, một số ưu tiên, một dấu phẩy nữa và cuối cùng là ứng dụng. số nội bộ gắn với địa chỉ của cuộc gọi (số điện thoại). Số ưu tiên được sử dụng để chỉ thứ tự các bước thực thi tương ứng với số ưu tiên. Ứng dụng là hành động (quay số, gọi lại, gác máy …). Mỗi một hành động là một ứng dụng khác nhau.

+ Ví dụ 2:

exten=>_90[2-8].,1,dial(ZAP/g1/${EXTEN:1},20,tT) exten=>_90[2-8].,n,hangup()

Trên là một ví dụ điển hình cho việc gọi đường dài của một số nội bộ:

- _90[2-8]. : chỉ ra bắt đầu một pattern, gọi ra ngoài dùng số 9 đầu và gọi đi liên tỉnh (bắt dầu số 0 và sau là số 2 đến số 8 để gọi mã liên tỉnh). Dấu chấm “.” chỉ bất kỳ dãy số nào phía sau đều chấp nhận.

- ZAP/g1 : chỉ đường ra là một trong các đường trung kế rỗi gắn vào card FXO. Nếu ZAP/1 tức là đường số 1, Zap/2 tức là đường số 2 và ZAP/g1 là bất kỳ đường nào rỗi trong dãy trung kế.

- ${EXTEN:1) : đây là biến lấy số nhập vào là phần sau của dãy số đã nhập, trừ đi 1 số đầu, tức số 9 sẽ bị bỏ qua.

3.5.2 Số ưu tiên (Priorities)

Số ưu tiên đánh số các bước thực hiện trong mỗi số được quay. Mỗi số ưu tiên gọi một ứng dụng xác định. Thông thường số này bắt đầu từ số “1” và tăng từng bước 1 bậc trong phần định nghĩa số nội bộ. Hiện tại các phiên bản Asterisk mới hỗ trợ việc sử dụng thuật ngữ “n” đại diện cho số ưu tiên tiếp theo thay vì phải gán số tiếp theo.

3.5.3 Ứng dụng (Applications)

Các ứng dụng đóng một vai trò quan trọng trong Asterisk. Chúng điểu khiển các kênh thoại, âm hiệu, chấp nhận các con số được gọi từ PBX và giải toả cuộc gọi. Các ứng dụng có thể được gọi với các tuỳ chọn để chỉ cách hành xử. Ta có thể sử dụng lệnh “show applications” trong giao diện lệnh của Asterisk để chỉ ra các ứng dụng có sẵn.

3.5.4 Ngữ cảnh (Contexts)

Ngữ cảnh đóng một vai trò quan trọng trong việc cấu hình sơ đồ quay số của Asterisk và bảo mật. Ngữ cảnh định nghĩa một vùng (scope) cho phép phân chia sơ đồ quay số thành nhiều phần khác nhau. Việc hiểu ngữ cảnh được gắn kết với các kênh là rất quan trọng. Khi tổng đài Asterisk nhận một cuộc gọi, cuộc gọi được xử lý trong phần ngữ cảnh gọi đến (incoming). Ngữ cảnh (context) gọi đến luôn luôn được định nghĩa bởi tập tin cấu hình kênh (iax.conf, sip.conf, zap.conf…).

Giả sử rằng chúng ta có 2 lớp người sử dụng “managers” và “guests”. Giả sử rằng chúng ta muốn có 2 thông điệp cho “guests” và “managers” khi họ quay số “9000”. Ta có thể làm được việc này bằng các định nghĩa ngữ cảnh gọi đến trong tập tin cấu hình kênh (sip.conf, iax.conf, zap.conf).

Trong ví dụ bên dưới, khi nhanvienA quay số 9000, nhanvienA nhận được thông điệp “youareaguest”. Khi nhanvienB quay cùng số này nhanvienB nhận được thông điệp khác “youaremanager”. sip.conf [nhanvienB] context=managers host=dynamic [nhanvienA] context=guests host=dynamic extensions.conf [nhanvienB] exten=>9000,1,Playback(youareamanager) [nhanvienA] exten=>9000,1,Playback(youareaguest)

Khi hiểu khái niệm này ta có thể tạo ra nhiều chức năng khác nhau trong Asterisk. Các ngữ cảnh khác nhau có thể được sử dụng để phục vụ cho nhiều công ty khác nhau và nhiều lớp người dùng khác nhau trong cùng cấu hình Asterisk. Ngữ cảnh có thể được xác định là ai có thể gọi được cuộc gọi đường dài và ai không được.

Ngữ cảnh nhận một tên bên trong dấu “[]”. Tất cả các lệnh định nghĩa sau đó là một phần của ngữ cảnh. Để bắt đầu một ngữ cảnh, đơn giản là chèn vào phần ngữ cảnh mới. Một ngữ cảnh kết thúc khi một ngữ cảnh khác bắt đầu.

Có 2 ngữ cảnh quan trọng trong tập cấu hình extensions.conf. Ngữ cảnh [globals] được sử dụng để định nghĩa các biến trong khi ngữ cảnh [general] được sử dụng để định nghĩa các tuỳ chọn chung.

3.6 Tìm hiểu cách tạo một sơ đồ quay số

Bây giờ chúng ta bắt đầu với việc tạo ra sơ đồ quay số đầu tiên. Chúng ta sẽ sử dụng các ví dụ để mô tả sơ đồ quay số. Hãy đi từng bước:

3.6.1 Ví dụ cơ bản

Trong ví dụ này, Asterisk sẽ nhận một cuộc gọi, phát ra một âm thanh và giải toả cuộc gọi.

Điều chỉnh tập tin extensions.conf bao gồm: (adsbygoogle = window.adsbygoogle || []).push({});

[incoming]

exten=>s,1,answer()

exten=>s,2,playback(goodbye) exten=>s,3,hangup()

Ưu tiên 1 gọi ứng dụng answer() để trả lời. Asterisk điều khiển đường dây và thiết lập các cuộc gọi. Sau khi trả lời nó sẽ qua ưu tiên tiếp theo.

Ưu tiên 2 gọi ứng dụng playback() để phát ra một âm thanh từ tập tin goodbye.gsm.

Cuối cùng ưu tiên 3 gọi ứng dụng hangup() kết thúc cuộc gọi. Mô tả ví dụ:

Một cuộc gọi được nhận bởi một giao tiếp FXO được gởi đến ngữ cảnh incoming, được định nghĩa trong tập tin cấu hình kênh (zapata.conf). Khi một cuộc gọi đến nó được xử lý trong số “s” của ngữ cảnh incoming. Chúng ta có 3 tuỳ chọn mỗi tuỳ chọn gọi một ứng dụng.

Số đặc biệt “s” được sử dụng để bắt đầu xử lý cuộc gọi đến khi số được gọi đến tổng đài không xác định (ví dụ cuộc gọi đến bởi 1 đường line analog).

Nếu chúng ta trả lời một cuộc gọi, tốt hơn là chúng ta biết ứng dụng nào sẽ thực hiện. Ứng dụng answer() được sử dụng để trả lời một kênh trong trạng thái rung chuông. Một vài ứng dụng yêu cầu ứng dụng answer() trước khi xử lý cuộc gọi.

Ứng dụng playback() được sử dụng để phát ra một bản tin từ một tập tin âm thanh được thu trước. Khi ứng dụng playback() được thực thi, bất kỳ phím bấm vào đưa vào đều được bỏ qua. Cú pháp lệnh playback(filename). Nó sẽ phát tập tin với đuôi .gsm từ thư mực âm thanh mặc định.

Ứng dụng hangup() làm nhiệm vụ giống như tên gọi của nó. Nó giải toả kênh đang kích hoạt.

3.6.2 Một ví dụ khác

Chúng ta hãy phát triển ví dụ đầu của chúng ta bằng các đưa ra thêm 2 ứng dụng nữa: background()goto(). Điều chính yếu cho các hệ thống tương tác trên Asterisk là ứng dụng background(). Nó cho phép ta phát một tập tin âm thanh trong khi vẫn đang chờ để nhận các phím số đưa vào. Khi điều này xuất hiện, âm thanh đang phát sẽ ngưng lại và thực thi tiếp theo sẽ tuỳ thuộc vào các số được bấm.

Cú pháp câu lệnh ứng dụng background()

Một ứng dụng hữu ích khác là goto(). Như tên của nó, nó nhảy từ ngữ cảnh hiện tại qua một số nội bộ, một số ưu tiên đến một nội dung xác định, số nội bộ và một số ưu tiên khác.

Cú pháp ứng dụng goto():

exten=>extension, priority,goto(context,extension, priority)

Cú pháp hợp lệ của goto():

Goto(context,extension,priority) Goto(extension,priority)

Goto(priority)

Đây là một ví dụ của một công ty nhỏ với 3 phòng ban: kỹ thuật hỗ trợ, kinh doanh và huấn luyện. Chúng ta hãy tạo ra một hệ thống tương tác cho phép các người dùng có thể chọn phòng ban được gọi. Đầu tiên, chúng ta sẽ phát một đoạn chào hỏi giới thiệu giống như “bấm phím 1 để hỗ trợ kỹ thuật, phím 2 để huấn luyện, và phím 3 để gặp phòng kinh doanh”. Trong ví dụ này chúng ta không xử lý những trường hợp gõ số sai. Sau khi ta chọn một phòng ban, hệ thống sẽ phát một bản tin giống như “Bạn đang kết nối đến phòng ban…” và chuyển việc xử lý đến một ngữ cảnh tương ứng.

[incoming] exten=>s,1,Answer() exten=>s,2,Background(greeting) exten=>s,3,hangup() exten=>1,1,playback(support) exten=>1,2,goto(support,s,1) exten=>2,1,playback(training) exten=>2,2,goto(training,s,1) exten=>3,1,playback(sales) exten=>3,2,goto(sales,s,1)

Diễn giải từng bước:

Khi một người nào đó thực hiện cuộc gọi điện thoại đến hệ thống Asterisk thông qua card giao tiếp FXO (đã được cấu hình [incoming] trong zapata.conf), số “s” trong [incoming] đã được trigger. Số “s” trả lời cuộc gọi sử dụng ứng ụng background và phát một thông điệp chào, chờ nhận số. Nếu người sử dụng bấm số “1” thì hệ thống sẽ chuyển sang số “1” và phát một bản tin tương ứng “Bạn được chuyển đến phòng hỗ trợ kỹ thuật”. Tiếp theo, số “2” gởi đến [support] để xử lý tiếp…

3.6.3 Các kênh cầu nối sử dụng ứng dụng dial()

Ta có thể nâng cấp ví dụ của mình bằng cách thêm vào lệnh dial(). Thay vì gởi đến xử lý một ngữ cảnh khác, chúng ta sẽ chuyển cuộc gọi đến một số nội bộ một cách trực tiếp dùng ứng dụng dial().

[incoming]

exten=>s,1,Answer()

exten=>s,3,hangup() exten=>1,1,playback(support) exten=>1,2,Dial(SIP/8000) exten=>2,1,playback(training) exten=>2,2,Dial(ZAP/1) exten=>3,1,playback(sales) exten=>3,2,Dial(IAX2/8002)

So sánh với ví dụ đầu tiên, chúng ta vừa tạo ra một đường tắt. Thay vì gởi cuộc gọi đến một ngữ cảnh khác, chúng ta bây giờ chuyển cuộc gọi đến kênh cuối cùng. Cho “support”, chúng ta sẽ trực tiếp gọi đến SIP phone với số 8000. Cho “training” chúng ta sẽ chuyển cuộc gọi trực tiếp đến TDM (analog hoặc digital) đến kênh số “1” . Cuối cùng cho “sales” chúng ta sẽ gởi cuộc gọi đến IAX2 phone với số “8002”. (adsbygoogle = window.adsbygoogle || []).push({});

3.7 Tìm hiểu cách tạo một hệ thống IVR

Trước khi thực hiện một hệ thống IVR ta đi tìm hiểu các ứng dụng cơ bản để tạo ra hệ thống IVR, sau đó ta đi tìm hiểu các bước xây dựng một hệ thống IVR.

3.7.1 Ứng dụng background()

Phát một tập tin âm thanh trong khi vẫn chờ để nhận các số vào. Cú pháp:

background(filename1[filename2…][options[langoverride][context]])

Ứng dụng này sẽ phát một danh sách tập tin được đưa vào trong khi vẫn chờ để nhận một số được gởi đến bởi một kênh gọi đến. Để tiếp tục chờ nhận các số sau khi ứng dụng này đã kết thúc việc phát các tập tin âm thanh thì ứng dụng WaitExten được sử dụng. tuỳ chọn “langoverride” chỉ ngôn ngữ được sử dụng để nhận các tập tin âm thanh phát ra (tức các tập tin âm thanh được tạo ra thành các bộ theo từng ngôn ngữ). Nếu một ngữ cảnh (context) được sử dụng thì nó là một ngữ cảnh của sơ đồ quay số mà ứng dụng này sẽ sử dụng khi hoàn tất một số đã được gởi đến. Nếu một trong các tập tin trong danh sách các tập tin được phát ra không tồn tại thì tiến trình phát sẽ bị hủy bỏ.

3.7.2 Ứng dụng record()

Ứng dụng này dùng để thu âm từ một kênh và tạo ra một tập tin định sẵn, nếu tập tin này đã tồn tại thì nó sẽ ghi đè lên.

Cú pháp:

record(filename.format silence[maxduration][option])

• “format” : là kiểu định dạng của tập tin có thể lưu được (như: wav, gsm…). • “silence” : là số giây im lặng cho phép trước khi bắt đầu thu âm.

• “maxduration” : là số giây ghi âm tối đa nếu không có thông số này hoặc thông số này bằng 0 thì không có giới hạn về thời gian ghi âm.

• “options” : tuỳ chọn gồm bất kỳ các ký tự sau:

o 'a' : thêm vào một tập tin âm thanh đã tồn tại thay vì ghi đè.

o 's' : vẫn giữ việc ghi âm cho dù đường dây không trả lời.

o 't' : dùng để thay việc kết thúc ghi âm dùng dấu sao “*” thay vì dấu thăng “#”. o 'x' : bỏ qua phím báo hiệu kết thúc ghi âm và giữ đến khi nào gắc máy.

Nếu tên tập tin có chứa “%d” nó sẽ thay thế cho một số tăng dần mỗi khi một tập tin đươc ghi âm.

Dùng lệnh # show file formats để xem các kiểu định dạng mà hệ thống hỗ trợ.

Người sử dụng bấm phím # để kết thúc việc ghi âm, nếu người sử dụng gác máy giữa chừng thì quá trình ghi âm sẽ bị huỷ bỏ và không lưu lại tập tin ghi âm này.

3.7.3 Ứng dụng playback()

Phát một tập tin âm thanh (không cần đưa vào phần đuôi) Cú pháp:

playback([filename1[& filename2…][option])

3.7.4 Ứng dụng read()

Ứng dụng này dùng để xác định trước số con số hay một khoảng thời gian quy định trước (biến số) khi người dùng nhập vào hệ thống.

Một phần của tài liệu NGHIÊN CỨU HOẠT ĐỘNG VÀ TRIỂN KHAI MẠNG IP PBX ASTERISK (Trang 50)