You are on page 1of 36

Tổng quan về Asterisk

TỔNG QUAN VỀ ASTERISK


I. Giới thiệu:
Asterisk là phần mềm nguồn mở, được viết bằng ngôn ngữ C, ra đời năm 1999 bởi Mark
Spencer, đầu tiên được thiết kế và triển khai trên GNU/Linux nền x86 (của Intel). Nhưng
hiện nay Asterisk có thể chạy trên các hệ điều hành khác như: Mac OS X, FreeBSD,
OpenBSD và Microsoft Windowns.
Asterisk được xem như là một tổng đài PBX (Private Branch eXchange) và được thêm
nhiều tính năng mới. Ngoài những tính năng của một tổng đài PBX thông thường, Asterisk
còn được tích hợp cả chuyển mạch TDM và chuyển mạch VoIP, có khả năng mở rộng đáp
ứng nhu cầu cho từng ứng dung như mở rộng giao tiếp với mạng PSTN (Public Switched
Telephone Network).
Với một máy tính rẻ tiền đã cài hệ điều hành (một trong các hệ điều hành nói trên, ở đây
ta thiên về hệ điều hành Microsoft Windowns) và có thêm phần mềm Asterisk đã cấu hình,
khi đó máy tính này sẽ có đầy đủ tính năng của một tổng đài điện thoại và có thể hơn thế.
Asterisk là một phần mềm nguồn mở, miễn phí, có độ tin cậy cao nên được xem là phần
mềm mang tính cách mạng.
Bởi những tiện ích: hệ thống và giá cước rẻ, dễ sử dụng, đầy đủ các tính năng của một
tổng đài và con hơn thế nên đã có nhiều hệ thống Asterisk được cài đặt thành công trên thế
giới. Hiện nay hệ thống Asterisk đang được phát triển mạnh, nhiều doanh nghiệp, công ty đã
và đang triển khai hệ thống tạo liên lạc bên trong và ra cả mạng ngoài thông qua mạng máy
tính, gọi điện thoại.

Hình 1: Sơ đồ giao tiếp tổng quát.


Tổng quan về Asterisk
Từ hình 1 ta thấy Asterisk không chỉ giao tiếp, kết nối giữa các điện thoại với nhau mà
còn có thể mở rộng kết nối đến các tổng đài khác, với IP Phone và nhiều dịch vụ như:
Softswitch, Media Gateway, Voicemail Services, Conference Server, Music on hold…
II. Kiến trúc hệ thống Asterisk:
Asterisk là thiết bị trung gian dùng để liên kết công nghệ điện thoại và Internet. Asterisk
được ứng dụng để kết nối điện thoại, đường dây điện thoại hoặc gói thoại đến một kết nối
dịch vụ khác. Asterisk có độ tin cậy cao và dễ dàng triển khai cho các hệ thống ( từ hệ thống
nhỏ đến các hệ thống lớn), Asterisk hỗ trợ ở mật độ cao và yêu cầu sự phức tạp.
Asterisk hỗ trợ cho nhiều loại điện thoại có công nghệ khác nhau. Các công nghệ điện
thoại: VoIP, SIP, H.323, IAX và BGCP (dùng cho điện thoại đi quốc tế). Asterisk có thể kết
nối với hầu hết loại điện thoại truyền thống mạng ISDN qua luồng T1 và E1. Các ứng dụng
cho điện thoại: chuyển mạch cuộc gọi, cuộc gọi hội nghị, voicemail, chuyển hướng cuộc
gọi, …
Một Asterisk server được kết nối tới một mạng vùng nội hạt sẽ điều khiển các điện thoại
trong mạng kết nối đến mạng khác, các điện thoại trong mạng có thể thực hiện cuộc gọi và
kết nối Internet thông qua Asterisk server.
Cổng FXS dùng để Asterisk server điều khiển các điện thoại tương tự trong nội hat. Cổng
FXO và kênh T được dùng để kết nối giữa Asterisk server với mạng PSTN. Thuê bao trong
mạng PSTN thực hiện cuộc gọi đến các thuê bao được quản lý bởi Asterisk server, các thuê
bao của Asterisk cũng có thể thực hiện cuộc gọi đến thuê bao trong mạng PSTN.

Hình 2: Kiến trúc của Asterisk


Tổng quan về Asterisk
Một số chức năng của Asterisk trong hệ thống chuyển mạch cuộc gọi:
Khi khởi động hệ thống Asterisk thì Dynamic Module Loader thực hiện nạp driver
của thiết bị, nạp các kênh giao tiếp, định dạng file, thu thập thông tin đầu cuối, codec và
các ứng dụng liên quan, đồng thời các hàm API cũng được liên kết nạp vào hệ thống.
Hệ thống Asterisk PBX Switching Core chuyển sang trạng thái sẵn sàng thực hiện chuyển
mạch cuộc gọi, các cuộc gọi được thực hiện tuỳ vào kế hoạch quay số (Dialplan).
Chức năng Application Launchar để rung chuông thuê bao, kết nối với hộp thư thoại
hoặc gọi ra đường trung kế…
Scheduler and I/O Manager đảm nhiệm các ứng dụng nâng cao như: lập thời biểu và quản
lý các cuộc gọi đến – đi ra ngoài. Đây là các chức năng được phát triển bởi cộng đồng phát
triển asterisk.
Codec Translator xác nhận các kênh nén dữ liệu ứng với các chuẩn khác nhau có thể kết
hợp liên lạc được với nhau.
Tất cả các cuộc gọi định hướng qua hệ thống Asterisk đều thông qua các giao tiếp như:
SIP, Zaptel or IAX. Mọi cuộc gọi vào và ra ngoài đều được thực hiện thông qua các
giao tiếp trên. Vì thế hệ thống Asterisk phải đảm trách nhiệm vụ liên kết các giao tiếp
khác nhau đó để xử lý cuộc gọi.
Chức năng của các giao tiếp chương trình ứng dụng (API: Application Program
Interface):
Codec translator API: các hàm đảm nhiệm thực thi và giải nén các chuẩn khác nhau như:
GMS, G723, Mu-Law…
Asterisk Channel API : Giao tiếp với các kênh liên lạc khác nhau, đây là đầu mối cho
việc kết nối các cuộc gọi tương thích với nhiều chuần khác nhau như SIP, ISDN, H323,
Zaptel…
Asterisk file format API : Asterisk tương thích với việc xử lý các loại file có định dạng
khác nhau như: Mp3, WAV, GSM, AU…
Asterisk Aplication API : Bao gồm tất cả các ứng dụng được thực thi trong hệ thống
Asterisk như: cuộc gọi hội nghị, VoiceMail, CallerID…
Ngoài ra, Asterisk còn có thư viện Asterisk Gateway Interface (AGI, tương tự như CGI) -
cơ chế kích hoạt ứng dụng bên ngoài, cho phép viết kịch bản phức tạp với một số ngôn ngữ
như PHP hay Perl.
III. Một số tính năng cơ bản:
III.1. Voicemail
Voicemail: hộp thư thoại với tính năng cho phép hệ thống nhận các thông điệp tin nhắn
thoại, mỗi máy điện thoại được khai báo trong hệ thống Asterisk cho phép khai báo thêm
chức năng hộp thư thoại. Khi số điện thoại bị gọi bận hay ngoài vùng phủ sóng thì hệ thống
asterisk định hướng trực tiếp cuộc gọi đến hộp thư thoại tương ứng đã khai báo trước.
Voicemail cung cấp cho người sử dụng nhiều tính năng như: xác nhận password khi
truy cập vào hộp thư thoại, gửi mail báo khi có thông điệp mới.
III.2. Call Forwarding
Call Forwarding: chuyển hướng cuộc gọi.
Tổng quan về Asterisk
Khi bạn không ở nhà, hoặc đi công tác nhứng bạn không muốn bỏ lỡ tất cả các cuộc gọi
đến thì tại sao lại không nghĩ đến việc chuyển cuộc gọi? Asterisk có tính năng chuyển hướng cuộc
gọi để giúp bạn việc đó.
Đây là tính năng thường được sử dụng trong hệ thống Asterisk. Chức năng cho phép
chuyển một cuộc gọi đến một hay nhiều số máy điện thoại được định trước.
Một số trường hợp cần chuyển cuộc gọi như : Chuyển cuộc gọi khi bận, chuyển
cuộc gọi khi không trả lời, chuyển cuộc gọi tức thời, chuyển cuộc gọi với thời gian định
trước.
III.3. Caller ID:
Caller ID: cuộc gọi có hiển thị số.
Với chức năng này thí số điện thoại của người gọi đến máy điện thoại của bạn sẽ được hiển
thị, nhằm giúp bạn có thể biết được ai đang gọi tới.
Ngoài ra Caller ID cũng cho phép chúng ta xác nhận số thuê bao gọi đến có nghĩa là
dựa vào caller ID chúng ta có tiếp nhận hay không tiếp nhận cuộc gọi từ phía hệ thống
Asterisk. Ngăn một số cuộc gọi ngoài ý muốn.
III.4. Interactive Voice Response
Interactive Voice Response (IVR) hay Automated Attendant (AA): đều được dùng để chỉ
chức năng tương tác thoại (tổng đài trả lời tự động).
Chức năng tương tác thoại có rất nhiều ứng dụng trong thực tế, khi gọi điện thoại đến
một cơ quan hay xí nghiệp thuê bao thường được nghe thông điệp như:“Xin chào mừng
bạn đã gọi đến công ty chúng XXX hãy nhấn phím 1 để gặp phòng kinh doanh, phím 2
gặp phòng kỹ thuật, phím 3 gặp phòng hỗ trợ khách hàng…” sau đó tuỳ vào sự tương tác
của thuê bao gọi đến, hệ thống Asteisk sẽ định hướng cuộc gọi theo mong muốn.
Dịch vụ xem điểm thi, tiền cước điện thoại của thuê bao, tỉ giá t i ề n t ệ hiện nay như
thế nào, hay kết quả sổ số, bản tin dự báo thời tiết… tất các những mong muốn trên đều
có thể thực hiện qua chức năng tương tác thoại.
III.5. Time and Date
Nhằm chỉ định các khoảng thời gian cụ thể cuộc gọi sẽ định hướng đến một số điện
thoại hay một chức năng cụ thể khác, ví dụ trong công ty giám đốc muốn chỉ cho phép
nhân viên sử dụng máy điện thoại trong giờ hành chánh còn ngoài giờ thì sẽ hạn chế hay
không cho phép gọi ra bên ngoài.
III.6. Call Parking
Chức năng Call Parking cũng thực hiện việc chuyển cuộc gọi nhưng có quản lý. Có một số
điện thoại trung gian và hai thuê bao có thể gặp nhau khi thuê bao được gọi nhấn vào số
điện thoại mà thuê bao chủ gọi đang chờ trên đó và từ đây có thể gặp nhau và đàm thoại.
III.7. Remote call pickupe

Với tính năng này sẽ cho phép chúng ta từ máy điện thoại này có thể nhận cuộc gọi từ
máy điện thoại khác đang rung chuông.
III.8. Privacy Manager
Tổng quan về Asterisk
Khi một người chủ doanh nghiệp triển khai Asterisk cho hệ thống điện thoại của công
ty mình nhưng lại không muốn nhân viên trong công ty gọi đi ra ngoài trò chuyện với bạn
bè, khi đó Asterisk cung cấp một tính năng tiện dụng là chỉ cho phép số điện thoại được
lập trình được phép gọi đến những số máy cố định nào đó thôi, còn những số không có
trong danh sách định sẵn sẽ không thực hiện cuộc gọi được.
III.9. Backlist
Backlist cũng giống như Privacy Manager nhưng có một sự khác biệt là những máy điện
thoại nằm trong danh sách sẽ không gọi được đến máy của mình (sử dụng trong tình trạng
hay bị quấy rối điện thoại).
Và còn rất nhiều tính năng nữa mà hệ thống asterisk có thể cung cấp cho người sử dụng,
trên đây chỉ là một số tính năng thường được sử dụng.
IV. Ngữ cảnh ứng dụng
Asterisk thực hiện rất nhiều ngữ cảnh ứng dụng khác nhau tuỳ vào nhu cầu sử dụng, dưới
dây s ẽ g i ớ i t h i ệ u m ộ t s ố ngữ cảnh ứng dụng thường được sử dụng trong thực tế và
đã được triển khai trên hệ thống asterisk.
IV.1. Tổng đài VoIP IP PBX

Hình 3: IP BPX
Đây là hệ thống chuyển mạch VoIP được xây dựng phục vụ các công ty có nhu cầu thực
hiện trên nền tảng mạng nội bộ đã triển khai. Thay vì lắp đặt một hệ thống PBX cho nhu
cầu liên lạc nội bộ thì nên lắp đặt hệ thống VoIP, vớ mô hình này chi phí phải trả sẽ được
giảm đáng kể. Hệ thống liên lạc với mạng PSTN qua giao tiếp TDM.
Tổng quan về Asterisk

IV.2. Kết nối IP PBX với PBX

Hình 4: Kết nối IP PBX với PBX


Một ngữ cảnh đặt ra ở đây là hiện tại Công ty đã trang bị hệ thống PBX bây giờ cần
trang bị thêm để đáp ứng nhu cầu liên lạc trong công ty sao cho với chi phí thấp nhất, giải
pháp để thực hiện đó là trang bị hệ thống Asterisk và kết nối với hệ thống PBX đang tồn
tại qua luồng E1. Ngoài ra để tăng khả năng liên lạc với mạng PSTN và VoIP khác, Công
Ty sẽ đăng ký kết nối dịch vụ với nhà cung cấp dịch vụ VoIP.
IV.3. Kết nối giữa các server Asterisk

Hình 5: Kết nối giữa các server asterisk


Phương pháp trên ứng dụng rất hiệu quả cho các công ty nằm rãi rác ở các vị trị địa lý
khác nhau nhằm giảm chi phí đường dài. Ví dụ Công ty Mẹ có trụ sở đặt tại nước Mỹ và có
các Chi nhánh đặt tại Việt Nam với hai địa điểm là Hà Nội và thành phố Hồ Chí Minh. Thông
Tổng quan về Asterisk
qua mạng WAN của Công Ty các cuộc gọi nội bộ giữa các vị trí khác nhau sẽ làm giảm chi
phí đáng kể.
IV.4. Các ứng dụng IVR, VoiceMail, Conference Call

Hình 6: Triển khai server IVR, VoiceMail, Conference Call


Ứng dụng thực hiện các server kết nối với hệ thống PSTN hay tổng đài PBX để triển
khai các ứng dụng như tương tác thoại IVR. Một ví dụ cho ứng dụng tương tác thoại đó là
cho biết kết quả sổ số, kiểm tra cước cuộc, dịch vụ giải trí – tra cứu thông tin thông qua
số 19001260. Ứng dụng VoiceMail thu nhận những tin nhắn thoại từ phía thuê bao giống
như chức năng hộp thư thoại của Bưu Điện triển khai.

Chức năng cuộc gọi hội nghị được thiết lập cho nhiều máy điện thoại cùng nói chuyện
với nhau.
IV.5. Chức năng phân phối cuộc gọi tự động ACD

Hình 7: Phân phối cuộc gọi với hàng đợi


Tổng quan về Asterisk
ACD (Automatic Call Distribution): Phân phối cuộc gọi tự động.

Chức năng được ứng dụng cho nhu cầu chăm sóc khách hàng hay nhận phản hổi từ phía
khách hàng.

Giả sử một Công ty hệ thống điện thoại có khả năng tiếp nhận cùng một lúc 10 cuộc gọi,
như thế nếu có thêm cuộc gọi thứ 11 gọi đến thì hệ thống giải quyết như thế nào? Bình
thường thì sẽ nghe tín hiệu bận nhưng với chức năng phân phối cuộc gọi sẽ đưa thuê bao
đó vào hàng đợi để chờ trả lời, trong khi chờ trả lời cuộc gọi thuê bao có thể nghe những
bài hát hay do asterisk cung cấp và khi nào một trong mười số điện thoại đang gọi trở về
trạng thái rỗi thì cuộc gọi đang chờ sẽ được trả lời. Giống như chức năng của dịch vụ:
dịch vụ hỗ trợ thông tin 1080, dịch vụ hẹn giờ 116 của Bưu Điện, dịch vụ hỗ trợ khách
hàng của các tổng đài điện thoại.
Asterisk với VoIP
ASTERISK VỚI VoIP
I. Giới thiệu về VoIP:
VoIP (Voice Over Internet Protocol) là một công nghệ cho phép truyền thoại sử dụng giao
thức mạng IP trên cơ sở hạ tầng sẵn có của mạng Internet. VoIP là một trong những công
nghệ viễn thông đang được quan tâm nhất không chỉ đối với nhà khai thác, nhà sản xuất mà
còn cả với người sử dụng dịch vụ.
VoIP vừa có thể thực hiện mọi loại cuộc gọi như trên mạng điện thoại thông thường vừa
có thể truyền dữ liệu trên mạng truyền số liệu. Do các ưu điểm về giá thành dịch vụ và sự
tích hợp nhiều loại hình dịch vụ nên VoIP hiện nay đã được triển khai rộng rãi. Dịch vụ điện
thoại VoIP bao gồm việc số hóa tín hiệu tiếng nói, thực hiện nén tín hiệu số, chia nhỏ các gói
nếu cần và truyền gói tin này qua mạng. Tại nơi nhận, các gói tin này được ráp lại theo đúng
trình tự bản tin, giải mã tương tự để phục hồi lại tiếng nói ban đầu.
Các cuộc gọi trong VoIP dựa trên cơ sở sử dụng kết hợp cả chuyển mạch kênh và chuyển
mạch gói. Trong mỗi loại chuyển mạch đều có ưu và nhược điểm. Trong khi chuyển mạch
kênh dành riêng một kênh có tốc độ truyền dẫn cố định (trong mạng PSTN, tốc độ này là
64Kbit/s) do đó cho độ trễ nhỏ và độ chính xác cao do không thể xảy ra tắc nghẽn. Trong
chuyển mạch gói, các bản tin được chia thành các gói nhỏ, sử dụng hệ thống lưu trữ và
chuyển tiếp các gói thông tin trong nút mạng. Đối với loại chuyển mạch gói này không tồn
tại khái niệm kênh riêng và băng thông hoàn toàn có thể thay đổi được. Tuy nhiên, kỹ thuật
này lại cho độ trễ lớn vì trong chuyển mạch này không quy định thời gian mỗi gói tới đích
do đó không đáp ứng được tính thời gian thực như trong thoại. Như vậy để truyền dẫn thoại
trong môi trường mạng chuyển mạch gói, VoIP phải kết hợp cả ưu điểm của hai loại chuyển
mạch trên.
Ưu điểm của VoIP:
+ Đối với điện thoại Internet có các cơ chế để phát hiện khoảng lặng (khoảng thời gian
không có tiếng nói) nên sẽ làm tăng hiệu suất mạng.
+ Điện thoại IP là bước đột phá về công nghệ và dịch vụ, mang lại khả năng gọi đường
dài và quốc tế với giá rẻ.
+ Điện thoại IP còn mang lại lợi ích tiềm tàng trong việc phát triển các dịch vụ viễn thông
tích hợp và mở rộng .
Khuyết điểm của VoIP:
+ Không thể thực hiện mọi cuộc gọi qua Internet nếu như người gọi không trực tuyến
trên mạng.
+ Không đảm bảo tính bảo mật.
II. Các thiết bị dùng trong VoIP:
II.1. VoIP phone: là thiết bị phần cứng kết nối với VoIP giống như máy điện thoại cố
định thông thường. Tuy nhiên để sử dụng cho VoIP cần phải cấu hình trước khi sử dụng.
Một số tính năng khi thực hiện mua thiết bị điện thoại VoIP:
Asterisk với VoIP
+ Low Bandwidth: hỗ trợ cho loại Codec nào, thường hiện nay người ta sử dụng G729.
+ Web Interface: phải có giao tiếp thiết lập cấu hình thân thiện dễ sử dụng.
+ Audio Interface: có speaker phone hay không.

II.2. Softphone: là một phần mềm được cài trên máy tính, thực hiện tất cả các chức năng
giống như thiết bị điện thoại VoIP. Khi sử dụng softphone, để giao tiếp máy tính phải có
card âm thanh, headphone và firewall không bị khóa.
Đối với hệ thống Asterisk, nên dùng softphone với công nghệ giao thức mới dành cho
Asterisk là IAX.

II.3. Card giao tiếp với PSTN:


Muốn cho phép các máy điện thoại nội bộ trong hệ thống Asterisk kết nối và thực hiện
cuộc gọi với mạng PSTN, chúng ta cần phải có thiết bị phần cứng tương thích. Thiết bị phần
cứng sử dụng cho hệ thống Asterisk do chính tác giả lập công ty Digium phân phối, xuất
phát từ ý tưởng phân phối phần mềm Asterisk và hệ thống ngùôn mở miễn phí.
Thiết bị phần cứng thường ký hiệu bắt đầu bằng cụm từ TDMxyB trong đó x là số lượng
port FXS, y là số lượng port FXO. Giá trị tối đa của cả x và y là 4.
Asterisk với VoIP

Hình Card TDM22B gồm 4 port 2 FXS và 2 FXO


II.4. ATA (Analog Telephone Adaptors):
ATA là thiết bị kết nối với điện thoại Analog thông thường đến mạng VoIP, một thiết bị
ATA gồm có hai loại port: RJ-11 để kết nối với máy analog thông thường và RJ-45 để kết
nối với mạng VoIP.
ATA là thiết bị FXS chuyển đổi tín hiệu Analog sang tín hiệu số sử dụng cho mạng VoIP
để tận dụng thiết bị Analog cho kết nối VoIP.
Thiết bị ATA sử dụng với giao thức IAX được Digium phân phối là thiết bị ATA được sử
dụng rộng rãi với Asterisk có tên gọi là IAXy.

III. Các giao thức VoIP của Asterisk: Việc sử dụng kết nối VoIP liên quan đến việc trao
đổi báo hiệu giữa các đầu cuối (có thể thông qua gateway). Có một vài giao thức thực hiện
chức năng này. Trong phần này ta sẽ đề cập đến một vài giao thức VoIP nói chung và
Asterisk nói riêng.
III.1 IAX ( Inter-Asterisk eXchange):
IAX là một giao thức mở, có nghĩa là mọi người đều có thể download và phát triển nó.
Phiên bản hiện tại của nó là IAX2, nhưng tất cả các hỗ trợ cho IAX1 không còn tồn tại
nữa. Vì vậy khi nói đến IAX có nghĩa là IAX2. Trong Asterisk, IAX được hỗ trợ bởi module
chan_iax2.
IAX được phát triển bởi Digium với mục đích giao tiếp với các server Asterisk khác, vì
thế nó được gọi là Inter-Asterisk eXchange. IAX là giao thức truyền tải (giống như SIP), sử
dụng port UDP 4569 cho cả kênh tín hiệu lẫn dòng dữ liệu RTP.
Asterisk với VoIP
IAX có khả năng kết hợp lại nhiều phiên kết nối thành một dòng dữ liệu duy nhất. Việc
kết hợp này làm tăng khả năng sử dụng băng thông. Thêm vào đó việc sử dụng một header
chung duy nhất làm giảm thời gian overhead cho mỗi kênh riêng lẽ. Giao thức này thích hợp
khi có nhiều kênh kết nối giữa hai đầu cuối.
Vì IAX được tối ưu hóa cho thoại, nên trên thực tế nó không ưu việc lắm khi truyền tín
hiệu video. Tuy nhiên, vì nó là một giao thức mở, nên các việc mở rộng dành cho các loại
dữ liệu khác ngoài thoại là điều hoàn toàn có thể.
Về khía cạnh bảo mật, IAX có khả năng nhận thực bằng 3 cách khác nhau như sau:
+ Plain text:e
+ Mã hóa MD5
+ Mã hóa trao đổi khóa RSA.
Điều này tất nhiên không mã hóa phần header giữa hai đầu cuối. Có nhiều giải pháp sử
dụng mạng riêng ảo (VPN) và các phần mềm mã hóa khác đã được sử dụng, đòi hỏi đầu
cuối phải thiết lập trước các phương pháp tunnel và hoạt động. Trong tương lai, IAX có thể
mã hóa dòng dữ liệu giữa hai đầu cuối sử dụng việc trao đổi khóa RSA hoặc trao đổi hóa
động tại thời điểm thiết lập cuộc gọi. Điều này rất hấp dẫn vì nó có tính bảo mật khá cao,
đặc biệt trong các lĩnh vực đòi hỏi tính bảo mật như ngân hàng.
IAX và NAT:
IAX2 được thiết kế để tương thích với các thiết bị sử dụng giao thức NAT. Việc sử dụng
duy nhất một port UDP cho cả tín hiệu báo hiệu và truyền dẫn dẫn đến tăng cườg tính năng
bảo mật của firewall. Điều này làm cho IAX là một trong các giao thức bảo mật tốt nhất cho
mạng.
III.2 SIP (Session Initiation Protocol):
Sự ra đời của SIP đã giúp phát triển mạnh VoIP. SIP có ưu điểm là nó là giao thức đơn
giản, có cấu trúc syntax khá giống với các giao thức như HTTP hay SMTP. SIP được hỗ trợ
bởi module trong Asterisk là chan_sip.so module.
SIP được phát triển bởi IETF vào tháng 2-1996. Ban đầu SIP chỉ có chức năng yêu cầu
thiết lập cuộc gọi. Vào tháng 3-1999, phiên bản thứ 11 có tên gọi là SIP RFC 2543 ra đời.
SIP được coi như là giao thức thông dụng của VoIP. Tất cả các user và doanh nghiệp đều
có xu hướng hỗ trợ SIP. SIP còn được trông chờ hỗ trợ cả những chức năng không có trong
VoIP như video, âm nhạc và các dịch vụ multimedia thời gian thực khác.
Về khía cạnh bảo mật, SIP sử dụng hệ thống challenge/response để nhận thực user. Khởi
đầu là câu lệnh INVITE được gởi đển proxy để đến các thiết bị đầu cuối mong muốn. Proxy
lúc này sẽ gởi đến một gói tin là 407 Proxy Authorization Request, chứa các ký tự được cài
đặt một các ngẫu nhiên thường được gọi là “nonce”. Con số này được xem như là password
để tạo ra mã MD5 được gởi ngược trở lại cho lệnh INVITE. Giả sử mã MD5 phù hợp với
mã mà proxy tạo ra, client được xác thực.
Asterisk với VoIP
DoS (Denial of Service) được xem như phương thức tấn công thông dụng nhất trên mạng
VoIP. Một phiên tấn công DoS sẽ diễn ra khi có một số lượng lớn các lời mời INVITE
không hợp lện đến proxy server để làm quá tải hệ thống. SIP có một vài phương thức để
giảm thiểu tác động của DoS nhưng không thể hoàn toàn phòng ngừa nó.
Một lược đồ hỗ trợ tính bảo mật được cài đặt thêm bởi SIP là mật mã phương thức truyền
tải (TLS- Transport Layer Security). Nó được sử dụng để thiết lập kết nối giữa người gọi và
domain. Yêu cầu được gởi một các bí mật đến đầu cuối, dựa trên các chính sách bảo mật của
mạng. Lưu ý rằng phương thức mật mã không nằm trong khả năng của SIP và phải được kết
hợp một cách độc lập.
SIP và NAT: Một trong những vấn đề lớn nhất khi triển khai SIP là truyền tải thông qua
lớp NAT. Bởi vì SIP mật mã thông tin địa chỉ trong cấu trúc khung của nó. NAT ở lớp mạng
sẽ không nhận đúng địa chỉ này và do đó dòng dữ liệu sẽ không được truyền tải đúng như
mong muốn. Như vậy, các firewall được tích hợp chức năng NAT sẽ loại bỏ các kết nối SIP
này.
III.3 H.323
Được tổ chức ITU thiết lập với mục đích là phục vụ các cuộc hội thoại đa điểm. H323
nhanh chóng trở thành nền tảng IP cho các thiết bị hội nghị truyền hình. Dù có nhiều tranh
cãi xung quanh việc sử dụng H323 hay là SIP và trên thực tế mạng VoIP, H323 có vài trò
thống trị thì trên hệ thống Asterisk, SIP vẫn là sự lựa chọn số 1.
Hai phiên bản của H323 được hỗ trợ trong Asterisk được hỗ trợ bởi 2 module
chan_h323.so và chan_oh323.so (được hỗ trợ cho các bổ sung mở).
H323 được phát triển bởi ITU từ tháng 5-1996, để hỗ trợ truyền thoại, video, dữ liệu
,fax… trong mạng IP trong khi vẫn duy trì kết nối với mạng PSTN truyền thống. Từ thời
điểm đó, H323 đã có một vài phiên bản với các tính năng bổ sung cho phép nó hoạt động
trong một mạng thuần VoIP và các mạng phân bố khác.
H323 được xem như một giao thức có nhiều ưu việc hơn SIP nhưng với các kỹ thuật
khác, đôi lúc sự phức tạp của nó lại là một vấn đề so với sự đơn giản của giao thức SIP.
Về khía cạnh bảo mật. H323 là một giao thức có tính bảo mật tương đối cao và không
cần nhiều bổ sung cho đặc tính bảo mật của mình. Vì H323 sử dụng RTP cho kết nối media,
nó không hỗ trợ việc mật mã. Việc sử dụng VPN hay các phương pháp tunnel khác giữa đầu
cuối là cách thức thông dụng nhất để đảm bảo tính bảo mật. Tất nhiên là nó cũng gây ra một
vài vấn đề. Khi VoIP được sử dụng cho các lĩnh vực đòi hỏi tính bảo mật cao như ngân
hàng, đòi hỏi giao thức VoIP phải hỗ trợ một phương pháp mật mã mạnh.
H323 và NAT: H323 cũng gặp những vấn đề tương tự như SIP khi triển khai với NAT.
Phương pháp đơn giản nhất là cho forward những port nhất định qua thiết bị tích hợp NAT
đối với các client nội bộ. Để tiếp nhận cuộc gọi, TCP port 1720 phải luôn được forward.
Thêm vào đó, port UDP cho các dữ liệu RTP và RTCP cũng phải được forward. Những
client cũ như MS Netmeeting cũng yêu cầu forward port TCP cho việc tunnel của giao thức
H245. Nếu có một số lượng các client đằng sau thiết bị có tích hợp NAT, chúng ta phải sử
dụng gatekeeper chạy proxy mode. Gatekeeper sẽ cần một Interface liên lạc với một mạng
IP subnet và mạng Internet. H323 client trên mạng riêng sẽ đăng ký đến gatekeeper, sau đó
Asterisk với VoIP
gatekeeper sẽ gọi cuộc gọi thay mặt cho client. Các client bên ngoài muốn gọi bên trong
cũng phải thực hiện thủ tục đăng ký đến proxy server.
Vào thời điểm hiện tại, Asterisk không thể đóng vai trò gatekeeper, chúng ta phải sử dụng
các ứng dụng độc lập như Open H323 Gatekeeper.
III.4 MGCP (Media Gateway Control Protocol):
Cũng được định nghĩa bởi IETF. Việc triển khai MGCP tuy được tiến hành khá nhanh
nhưng nó không có tính khả dụng bằng SIP và IAX. Tuy nhiên do đặc tính mã nguồn mở
của Asterisk nên nó vẫn có thể được sử dụng.
MGCP được thiết kế để đơn giản hóa thiết bị đầu cuối. Việc thực hiện xử lý đều được tiến
hành tại media gateway và call agent. Không giống như SIP, MGCP sử dụng cấu trúc tập
trung. Cuộc gọi MGCP không thể được tiến hành trực tiếp mà phải đi qua controller.
Asterisk hỗ trợ MGCP qua module chan_mgcp.so và đầu cuối được đinh nghĩa thông qua
file cấu hình mgcp.conf. Bởi vì Asterisk cung cấp các cuộc gọi cơ bản nên nó không thể giả
lập MGCP phone.
Nếu có một MGCP phone, chúng ta có thể sử dụng chúng với Asterisk. Tuy nhiên không
thể xem MGCP phone như một sản phẩm của hệ thống Asterisk vì nó đã có những chuẩn
riêng.
III.5 Các giao thức khác:
3.5.1 Skinny/SCCP (Skinny Client Control Protocol): là giao thức của Cisco cho các thiết
bị VoIP. Nó là giao thức mặc định cho các đầu cuối của Cisco Call Manager PBX. Skinny
được hỗ trợ bởi Asterisk, như nếu chúng ta kết nối Cisco phoen đến Asterisk, thông thường
chúng ta mặc định sử dụng giao thức SIP.
3.5.2 UNISTIM: là giao thức hỗ trợ của Nortel cho VoIP, cũng đã được bổ sung vào
Asterisk. Điều đáng nói ở đây là Asterisk là tổng đài PBX đầu tiên hỗ trợ đầu cuối IP cho cả
hai nhà sản xuất lớn nhất trên lĩnh vực VoIP là Nortel và Cisco.
File cấu hình
FILE CẤU HÌNH

I. Giới thiệu:
Sự linh động của Asterisk được điều khiển thông qua các file cấu hình được chứa trong
thư mục /etc/asterisk ngọai trừ file zaptel.conf cấu hình cho phần cứng TDM nằm tại thư
mục /etc. Định dạng của các file cấu hình trong Asterisk tương tự với dạng file .ini (trong
Window). File này định dạng theo mã ASCII được chia ra thành nhiều phần (sections). Các
nội dung sau dấu chấm phẩy là chú thích trong file cấu hình. Các dòng trắng, khoảng trắng
không có ý nghĩa trong file cấu hình. Các phép gán được sử dụng: “=” dùng để gán các
biến, “=>”để gán các đối tượng
;
; The first non-comment line in a config file
; must be a section title
;
[section1]
keyword = value ; Variable assignment
[section2]
keyword = value
object => value ; Object declaration
II. Các kiểu của file cấu hình:
Mặc dù các file cấu hình của Asterisk có định dạng giống nhau, nhưng chúng được phân
ra làm 3 kiểu cơ bản thường được sử dụng.
II.1 Simple Group:
Simple Group là dạng đơn giản nhất được sử dụng bởi các file cấu hình mà mỗi đối
tượng chỉ có ý nghĩa trên dòng đó. Ví dụ:
[mysection]
object1 => option1a,option2a,option3a
object2=> option1b,option2b,option3b
Tương ứng với object1 là các đối tượng option1a, option2a, option3a. Còn object2 được
gán cho các đối tượng option1b, option2b, option3a.
Cấu hình này thường được sử dụng trong các file: extensions.conf, meetme.conf,
voicemail.conf…
II.2 Inherited option object:
Kiểu cấu hình này thường được sử dụng bởi các file: zapata.conf, phone.conf, mgcp.conf
. Trong kiểu cấu hình này, các dòng phía dưới thừa kế các thông số của các dòng trên nó. Ví
dụ:
File cấu hình
[mysection]
option1 = foo
option2 = bar
object => 1
option1 = baz
object => 2
Hai dòng đầu tiên gán hai giá trị foo, bar cho option1, option2. Đối tượng “1” được tạo ra
bởi hai thông số là option1=foo và option2=bar. Khi option1 được thay đổi thành baz thì đối
tượng “2” được tạo thành từ hai thông số là option1=baz và option2=bar.
Như vậy thay đổi giá trị option1 sau khi đối tượng “1” đã được gán chỉ ảnh hưởng đến
đối tượng “2” mà không ảnh hưởng đến đối tượng “1”.
II.3 Complex entity object:
Kiểu cấu hình này sử dụng bởi các file: iax.conf, sip.conf, được tổ chức thành nhiều thực
thể (entity), ứng với mỗi entity có nhiều thông số được khai báo, mỗi entity là các section để
khai báo. Ví dụ:
[myentity1]
option1=value1
option2=value2
[myentity2]
option1=value3
option2=value4
Entity myentity1 có các giá trị value1, value2 cho các thông số option1, option2. Trong
khi đó entity myentity2 cũng có các thông số là option1, option2 nhưng với các giá trị là
value3, value4.
III. Channel interfaces:
Phần này giới thiệu các file cấu hình cho các Asterisk channel drivers.
Asterick có thể được cấu hình với nhiều mục đích khác nhau, nhưng mô hình thông
thường nhất là Client/Server. Mô hình này cho phép các client – hay còn gọi là UAC – user
agent client kết nối vào server là Asterisk – hay còn gọi là UAS – User Agent Server. Các
UAC là nơi sinh ra các session trong khi UAS thì xử lý thụ động các session nhận được dựa
trên tập hợp rule có sẳn. Phần IV sẽ đi rỏ hơn về các dạng ứng dụng này.
Ta có thể cấu hình Asterisk trong console mode, hoặc có một cách tiện lợi hơn là edit trực
tiếp các file cấu hình trong /etc/asterisk. Mổi ứng dụng riêng của Asterisk như voicemail,
zaptel, music-on-hold, meetme, conference, iax … đều có configuration riêng của mình, tuy
nhiên có 2 file cấu hình quan trọng nhất là sip.conf và extension.conf:
- Sip.conf : file cấu hình về các thông tin của các UAC như username, password, IP, type,
security, codec, là thành phần căn bản nhất lưu giử thông tin trong Asterisk.
File cấu hình
- Extension.conf: file cấu hình về các luật định tuyến cuộc gọi, luật quay số, các extension
trong ngoài và những tính năng đặc biệt khác. Extensions.conf là file quan trọng nhất trong
bất kỳ cấu hình Asterisk nào
Các file cấu hình khác:
- Voicemail.conf: file cấu hình cho hệ thống voice-mail của asterisk. Asterisk có thể dùng
lệnh Sendmail trên CentOS để gởi mail đến cho các địa chỉ được lưu trong file cấu hình này.
- Zaptel.conf: File này nằm ngoài /etc, là file chứa thông số index, driver dành cho Linux
khi kích hoạt các thiết bị Telephony cắm trực tiếp vào Asterisk thông qua cổng PCI
- Zapata.conf: Cũng thuộc module zaptel, nhưng là file kết nối các thiết bị Telephony đã
được khai báo vào hệ thống chính của Asterisk
- Iax(2).conf: Các thông số về IAX (inter-asterisk protocol) dùng khi kết nối 2 asterisk
box với nhau
- MeetMe.conf: Một chức năng tạo room conference căn bản.
Dialplan
DIALPLAN

Dialplan là trái tim thật sự của bất kì hệ thống Asterisk nào, nó định nghĩ Asterisk xử lý
các cuộc gọi đến và đi như thế nào. Một cách ngắn gọn, nó chứa danh sách các lệnh hoặc
các bước mà Asterisk sẽ theo. Không giống như hệ thông điện thoại truyền thống, dialplan
của Asterisk có thể tùy biến hoàn toàn. Để hiểu và cài đặt hệ thống Asterisk thành công,
điều thiết yếu nhất là phải hiểu được dialplan. Trong phần này, ta sẽ từng bước xây dựng
nên một dialplan đơn giản và dần dần phát triển nó.
I. Dialplan Syntax:
Dialplan của Asterisk chỉ được đặc tả trong file cấu hình “extensions.conf”. Dialplan
được tạo thành từ 4 phần chính: contex, extensions, priorities và application. Các thành
phần này làm việc với nhau để tạo nên một dialplan.
I.1 Contexts:
Dialplan được chia thành các phần gọi là context. Context tách biệt các nhóm thuê bao.
Nó giữ cho các thành phần khác nhau không tác động lẫn nhau, mỗi extension được định
nghĩa trong 1 context hoàn toàn tách biệt với bất kì extension nào trong context khác, trừ khi
việc tương tác giữa chúng được đặc biệt cho phép.
Lấy một ví dụ đơn giản để dễ hiểu, giả sử 2 công ty cùng chia sẽ một Asterisk Server. Khi
đặt menu voice của mỗi công ty trong context của chính công ty đó, khi đó sẽ có sự cách
biệt rõ ràng giữa chúng với nhau, khi cả hai cùng gọi extension 0 thì chuyện gọi này sẽ là
độc lập giữa 2 công ty, không có một sự liên hệ nào ở đây.
Context được chỉ định bằng cách đặt tên của context đó vào trong dấu ngoặc vuông. Tên
của context có thể là kí tự từ a  z, 0 9, - và _. Ví dụ: [outcommingcall]
Tất cả các chỉ dẫn đặt sau đó là các phần của context đó cho tới khi context tiếp theo
được định nghĩa. Trong phần đầu của dialplan đó, có 2 context đặc biệt là [general] và
[globals].
Một trong những công dụng quan trọng của context là thực thi bảo mật. Bằng cách sử
dụng context chính xác, có thể giúp cho caller A có thể truy cập vào các dịch vụ, đặc tính
mà các caller khác không có. Nếu hệ thống không được xây dựng một cách cẩn thận, nó có
thể bị gian lân, sử dụng lậu bởi người khác. Điều này là đặc biệt nghiêm trọng.
Hệ thống Asterisk chứa file SECURITY rất quan trọng, nó phát thảo các bước thực hiện
để giúp cho hệ thống chúng ta được an toàn. Từ chối các cảnh báo này có thể “giúp” cho
nhiều người có thể truy cập và gọi các cuộc gọi đường dài, mà chi phí là chúng ta phải chịu
I.2 Extension:
Chúng ta cần xác định, định nghĩa một hoặc nhiều extension. Một extension là một lệnh
mà Asterisk phải theo, nó được kích bởi một cuộc gọi đến hay là một phím được nhấn trên
kênh. Extension đặc tả việc xử lý cuộc gọi khi nó đi xuyên qua dialplan.
Cú pháp cho extension như sau:
exten => name,priority,application( )
Dialplan
Ví dụ:
exten => 123,1,Answer()
Theo sau là tên của extension. Trong hệ thống điện thoại, extension như là một số dùng
để gọi. Trong Asterisk, extension được tạo thành từ sự tổng hợp của các số và các kí tự.
Đây là đặc điểm giúp cho Asterisk hoạt động một cách mạnh mẽ và linh hoạt bởi hầu hết
các giao thức VoIP đều hỗ trợ việc sử dụng tên, địa chỉ email thay vì sử dụng số.
I.3. Priorities:
Mỗi extension có nhiều bậc khác nhau, gọi là Priorites (độ ưu tiên). Các độ ưu tiên này
được đánh số tuần tự. Mỗi độ ưu tiên đó thực thi một ứng dụng cụ thể.
Ví dụ:
exten => 123,1,Answer( )
exten => 123,2,Hangup( )
Trong ví dụ trên, đầu tiên user đó trả lời điện thoại (độ ưu tiên 1), và sau đó gác máy (độ
ưu tiên 2). Các độ ưu tiên này phải được đặt một cách tuần tự, không được ngắt quãng giữa
chừng vì khi thế, Asterisk sẽ bỏ qua các thao tác phía sau.
Unnumbered Priorities: Trong phiên bản Asterisk mới, có thể dùng ‘n’ thay cho số thứ tự
để chỉ độ ưu tiên kế tiếp. Cách làm này rất thuận tiện, người viết không cần phải nhớ số thứ
tự.
I.4. Applications:
Application (ứng dụng) gánh vác hầu như toàn bộ công việc của dialplan. Mỗi ứng dụng
thực hiện một hành động cụ thể trên kênh đang hoạt đông, như: nghe máy, gác máy, chơi
nhạc, chấp nhận dial tone….
Trong vài ứng dung, như answer(), hangup(), không cần các lệnh khác để thực hiện. Tuy
nhiên, trong vài ứng dụng lại cần them các thông tin bổ xung. Các phần thông tin thêm vào
đó được gọi là argument. Argument được đặt trong dấu ngoặc đơn, các argument phân biệt
với nhau bằng dấu phẩy.
II Xây dựng dialplan đơn giản:
Giả sử như có trước ít nhất một kênh Zap đã được tạo ra và cấu hình, và mọi cuộc gọi
đến được xét dựa trên context [incoming]. Ta có thể xây dựng một diaplan đơn giản như
sau:
[incoming]
exten => s,1,Answer( )
exten => s,2,Playback(hello-world)
exten => s,3,Hangup( )
Dialplan
Các application ở trên có thể hiểu một cách dễ dàng, riêng ứng dụng playback dùng để
phát đi một đoạn âm thanh đã được lưu sẵn thành file, trong trường hợp trên nó có ten là
“hello-world”.
III. Thêm tính logic cho Dialplan:
III.1 Ứng dụng background() và goto():
Ứng dụng Background() là chìa khóa để giúp cho hệ thống Asterisk có tính tương tác cao.
Cũng giống như playback(), nó mở một đoạn âm thanh đã thu sẵn, khác ở chổ là khi caller
nhấn phím (hay tổ hợp phím), nó sẽ ngắt âm thành và đưa đến extension tương ứng với
phím nhấn đó.
Một trong những công dụng thông dụng nhất của Background() là để tạo voice menu
(hay còn gọi là phone-tree). Nhiều công ty sử dụng phone-tree để chuyển caller cho
extension thích hợp, tiếp tân của họ không cần phải trả lời cho từng cuộc gọi riêng biệt.
Cú pháp của Background() cũng giống với Playback()
exten => 123,1,Background(hello-world)
Một ứng dụng khác tiện ích không kém đó là Goto(). Nó được sử dụng để gởi một
cuộc gọi vào một context, extension, và priority khác. Ứng dụng Goto() tạo ra sự dễ dàng để
di chuyển cuộc gọi giữa các phần khác nhau của dialplan. Cú pháp như sau:
exten => 123,1,Goto(context,extension,priority)
Với việc sử dụng, Background() và Goto(), ta có thể xây dựng một dialplan có chức năng
chuyển tiếp cuộc gọi đến extension và sử dụng như voice menu như sau
[incoming]
exten => s,1,Answer( )
exten => s,2,Background(enter-ext-
of-person)
exten => 1,1,Playback(digits/1)
exten => 1,2,Goto(incoming,s,1)
exten => 2,1,Playback(digits/2)
exten => 2,2,Goto(incoming,s,1)
III.2. Xử lý entry không thực và timeout:
Để xây dựng nên một dialplan thực tế, cần phải xét đến nhiều trường hợp thực tế như:
caller nhấn số không có trong danh sách, và không nhấn bất kì số nào trong thời gian quá
lâu. Như cách xử lý thông thường khác, ta đưa nó vào các extension i (invalid), và extension
t (timeout). Ta có thể cấu hình như sau:
Dialplan
[incoming]
exten => s,1,Answer( )
exten => s,2,Background(enter-ext-of-
person)
exten => 1,1,Playback(digits/1)
exten => 1,2,Goto(incoming,s,1)
exten => 2,1,Playback(digits/2)
exten => 2,2,Goto(incoming,s,1)
exten => i,1,Playback(pbx-invalid)
exten => i,2,Goto(incoming,s,1)
exten => t,1,Playback(vm-goodbye)
exten => t,2,Hangup( )
III.3 Sử dụng ứng dụng dial():
Một trong những đặc tính có giá trị của Asterisk là khả năng kết nối các caller khác nhau
lại với nhau. Đó là điều đặc biệt hữu dụng khi các caller sử dụng phương thức truyền thông
khác nhau. Asterisk có thể dùng để có thể kết nối và chuyển thể giữa các mạng riêng biệt
với nhau. Tất cả đều cần làm là sử dụng ứng dụng Dial().
Vì thể, cú pháp của Dial() có một chút phức tạp hơn so với các ứng dụng khác đã biết.
Dial() có 4 argument. Argument thứ nhất là: Đích của cuộc gọi(gồm công nghệ truyền dẫn,
Forward slash,tài nguyên từ xa ( tên channel hoặc số))
Ví dụ: để gọi vào một Zap Channel tên là Zap/1 (analog phone), ta cấu hình như sau:
exten => 123,1,Dial(Zap/1)
Khi extension này được thực thi, Asterisk sẽ rung chuông của điện thoại kết nối với kênh
Zap/1. Ta cũng có thể gọi nhiều channel khác nhau cùng một lúc, bằng cách kết nối các đích
lại với nhau sử dụng dấu “&”.Dial() sẽ nối cuộc gọi vào với kênh đích nào trả lời trước nhất.
exten => 123,1,Dial(Zap/1&Zap/2&Zap/3)
Argument thứ 2 của Dial() là timeout, tính bằng giây (s). Nếu một time out được sử dụng,
Dial sẽ nhắm đến việc gọi một số trong một thời lượng nào đó trước khi từ bỏ và chuyển
sang một priority khác trong extension có độ ưu tiên tiếp theo. Nếu timeout không được sử
dung, Dial() sẽ tiếp tục gọi cho đến khi có ai đó trả lời hay gác máy. Trường hợp đích gọi bị
bận thì cuộc gọi sẽ được chuyển qua extension đó với priority là n+101(nếu có) để xử lý tùy
chọn. Ứng dụng này dễ thấy ở các tổng đài trả lời 1080, dịch vụ khách hang…
Ví dụ:
exten => 123,1,Dial(Zap/1,10)

Cách xử lý máy bận có thể như sau:


Dialplan
exten =>
123,1,Dial(Zap/1,10)
exten => 123,3,Hangup( )
exten => 123,102,Playback(tt-
allbusy)
exten => 123,103,Hangup( )
Argument thứ 3 của Dial() là string tùy chọn. Nó chứa một hoặc một vài đặc điểm để
định ra hành vi của Dial(). Ví dụ: -r: người gọi sẽ được nghe âm chuông khi đích đã được
thông báo có cuộc gọi đến.
exten => 123,1,Dial(Zap/1,10,r)
exten => 123,2,Playback(vm-
nobodyavail)
exten => 123,3,Hangup( )
exten => 123,102,Playback(tt-allbusy)
exten => 123,103,Hangup( )
Một ví dụ cụ thể hơn như sau:
[incoming]
exten => s,1,Answer( )
exten => s,2,Background(enter-ext-of-
person)
exten => 101,1,Dial(Zap/1,10)
exten => 101,2,Playback(vm-
nobodyavail)
exten => 101,3,Hangup( )
exten => 101,102,Playback(tt-allbusy)
exten => 101,103,Hangup( )
exten => 102,1,Dial(SIP/Jane,10)
exten => 102,2,Playback(vm-
nobodyavail)
exten => 102,3,Hangup( )
exten => 102,102,Playback(tt-allbusy)
exten => 102,103,Hangup( )
exten => i,1,Playback(pbx-invalid)
exten => i,2,Goto(incoming,s,1)
exten => t,1,Playback(vm-goodbye)
exten => t,2,Hangup( )
Dialplan
Argument thứ 4 của Dial() là URL, nếu đầu nhận hỗ trợ chứ năng nhận một URL tại thời
điểm của cuộc gọi, một URL cụ thể sẽ được gởi ( được sử dụng trong IP phone và soft-
phone). Argument này hiếm khi được sử dụng
Nếu muốn tạo một cuộc gọi ra ngoài trên một kênh FXO Zap /4 , có thể làm như sau:
exten => 123,1,Dial(Zap/4/<destination>)
<Destination> có thể là số bị gọi (Trong kênh Zap) hoặc là địa chỉ email….trong các
kênh khác như SIP, IAX.
Ví dụ:
exten => 123,1,Dial(SIP/1234)
exten =>
124,1,Dial(IAX2/john@asteriskdocs.org)
Bất cứ argument nào đều có thể bỏ trống bằng đoạn trống giữ 2 dấu phẩy.
III.4 Thêm context cho cuộc gọi nội bộ:
Như đã nói, một trong những chức năng quan trọng của Asterisk là phân đặc quyền (gọi
nội bộ, nội hạt, đường dài. …) cho các nhóm người gọi khác nhau. Để làm điều này đối với
extension nội bộ, ta tạo thêm một context [internal].
[internal]
exten => 101,1,Dial(Zap/1,,r)
exten => 102,1,Dial(SIP/jane,,r)
Bằng cách này, người sử dụng kênh Zap/1 có thể sử dụng số 102 để gọi cho người đang ở
kênh SIP/jane và ngược lại. Mặc khác, ta cũng có thẻ thay thế các số 101, 102…bằng tên.
III.5 Sử dụng biến:
Biến có thể sử dụng trong Asterisk dialplan để giúp giảm bớt khối lượng đánh máy, các
logic thêm vào… Chúng ta có thể tạo một biến là Jonh và gán giá trị là Zap/1. Như thế, khi
viết, chúng ta có thể sử dụng Jonh thay vì Zap/1, mà nhớ từ John thì luôn dễ dàng hơn nhớ
Zap/1? Cú pháp gán như sau:
<Var_name>=<value>
Ví dụ:
JONH=Zap/1
Có 2 cách để tham chiếu đến biến. Để chỉ đến tến biến, cách đơn giản là sử dụng luôn tên
biến đó, hoặc có thể đặt giữa ${<var_name>}. Có sự khác nhau là khi sử dụng cách thứ 2,
Asterisk sẽ tự động thay thế biến bằng giá trị mà biến đó được gán.
Có 3 kiểu biến được sử dụng trong dialplan: biến global , biến channel, biến
environment.
Dialplan
a) Biến Global:
Biến Global được dùng trong mọi extension, mọi context như tên gọi của nó. Sử dụng
biến Global rất hiệu quả khi ta cần nó ở bất cứ đâu trong dialplan để tăng tính dễ quản lý, dể
đọc, dễ hiểu. Chỉ cần thay đổi 1 lần, ta có thể thay đổi toàn bộ dialplan.
Biến Global được khai báo trong context [global] trong phần đầu của file extensions.conf.
Hoặc sử dụng ứng dụng SetGlobal().
Ví dụ:

[globals]
JOHN=Zap/1

[internal]
exten =>
123,1,SetGlobalVar(JOHN=Zap/1)
b) Biến Channel:
Một biến Channel là một biến chỉ liên hện với một cuộc gọi cụ thể. Không giống như
biến Global, biến Channel được xác định chỉ trong thời gian cuộc gọi đang thực hiện và chỉ
có giá trị trong kênh tham gia cuộc gọi đó.Có nhiều biến được định nghĩa trước cho việc sử
dụng trong dialplan, có thể tìm thấy trong tập tin README.variables trong thư mục của
Asterisk.
Biến Channel được khai báo bằng cách sử dụng ứng dụng Set() tương tự như sau
exten => 123,1,Set(MAGICNUMBER=42)
c) Biến Environment:
Biến environment là cách để truy cập vào môi trường Unix từ Asterisk. Nó được tham
chiếu trong dạng ${ENV(var)} trong đó var là biến môi trường trong UNIX mà ta muốn sử
dụng.
III.6 Pattern Matching
Sẽ thật dài dòng để bổ xung mỗi extension trong dialplan. Đặc biệt là cho trường hợp gọi
hướng ra ngoài. Asterisk sử dụng pattern maching giúp một đoạn code có thể sử dụng lại
trên nhiều extension. Như vậy pattern matching cũng khá giống với cách dùng hàm, thủ tục
trong các chương trình lập trình khác.
a) Cú pháp
Khi sử dụng pattern matching, chúng ta sử dụng nhiều kí tự, kí hiệu để biểu diễn các số
mà muốn match. Mẫu luôn luôn bắt đầu bằng ‘_’. Sau dấu ‘_’ là các kí tự sau:
X: đại diện cho các số từ 09
Z: 19
N: 29
Dialplan
……
Để sử dụng pattern matching, chỉ cần đặt nó ở vị trí extension như thông thường.
exten =>
_NXX,1,Playback(auth-thankyou)
exten =>
_555XXXX,1,Playback(digits/1)
b) Sử dụng ${exten}:
Khi sử dụng pattern matching, làm sao biết các số nào được nhấn? Khi gọi một
extension, Asterisk tạo ra một biến channel ${channel} để cho biết digits nào được gọi.Và
có thể sử dụng hàm SayDigits() để biết thông tin về phím nào được nhấn.
exten => _XXX,1,SayDigits(${EXTEN})
Có thể cắt một phần chuỗi số, bằng cách sử dụng ${EXTEN:x} với x là số các số bị tách
ra. Ví dụ giá trị của EXTEN là 95551212, giá trị nhận về của ${EXTEN:2} là 551212. x
cũng có thể là số âm để chỉ đến các số được nhấn sau cùng.
III.7 Cho phép gọi ra ngoài:
Công việc đầu tiên là phải thêm biến vào trong context [globals] để xác định channel nào
được sử dụng cho cuộc gọi ra ngoài.
Ví dụ:
[globals]
JOHN=Zap/1
JANE=SIP/jane

OUTBOUNDTRUNK=Zap/4
Sau đó là thêm contexts cho dialplan cho việc gọi ra ngoài. Bước thứ nhất là cho local
call. Để phù hợp với chuyển mạch thoại truyền thống, phím đầu tiên nđược nhấn để gọi ra
ngoài là phím số 9.
[outbound-local]
exten =>
_9NXXXXXX,1,Dial(${OUTBOUNDTRUNK}/${EXTEN:1})
exten => _9NXXXXXX,2,Congestion( )
exten => _9NXXXXXX,102,Congestion( )

Chúng ta đã thêm OUTBOUNDTRUNK làm biến Global để điều khiển channel nào sử
dụng cho cuộc gọi ra ngoài, đã thêm context cho cuộc gọi ra ngoài nội bộ. Sau đó, với mức
độ ưu tiên 1 ta, loại bỏ số 9 đầu tiên, vào gọi số trên channel được chọn bơi
OUTBOUNDTRUNK. Nếu cuộc gọi thành công, caller sẽ được nối với kênh bên ngoài,
ngược lại, ứng dụng Congestion() được thực thi ( có thể phát tín hiệu bận…)
Cuộc gọi đến số khẩn cấp cần được cho phép
Dialplan
exten =>
113,1,Dial(${OUTBOUNDTRUNK}/911)
exten =>
115,1,Dial(${OUTBOUNDTRUNK}/911)
Công việc kế tiếp là thêm context cho cuộc gọi đường dài:
[outbound-long-distance]
exten =>
_90NXXNXXXXXX,1,Dial(${OUTBOUNDTRUNK}/${EXTEN:1})
exten => _90NXXNXXXXXX,2,Congestion( )
exten => _90NXXNXXXXXX,102,Congestion( )

III.8 Include
Asterisk cho phép sử dụng context bên trong một context khác dựa vào include. Đây là sự
cho phép truy nhập vào các phần khác nhau của dialplan. Cú pháp của include như sau:
include => context
Trong đó, context là tên của context mà ta muốn thêm vào context hiện tại. Khi đó, thứ tự
của context được thêm vào là không đổi.
Tổng hợp, tất cả các điều làm được ở trên, ta được như sau:
[globals]
JOHN=Zap/1
JANE=SIP/jane
OUTBOUNDTRUNK=Zap/4

[incoming]
exten => s,1,Answer( )
exten => s,2,Background(enter-ext-of-person)
exten => 101,1,Dial(${JOHN},10)
exten => 101,2,Playback(vm-nobodyavail)
exten => 101,3,Hangup( )
exten => 101,102,Playback(tt-allbusy)
exten => 101,103,Hangup( )
exten => 102,1,Dial(${JANE},10)
exten => 102,2,Playback(vm-nobodyavail)
exten => 102,3,Hangup( )
exten => 102,102,Playback(tt-allbusy)
Dialplan
exten => 102,103,Hangup( )
exten => i,1,Playback(pbx-invalid)
exten => i,2,Goto(incoming,s,1)
exten => t,1,Playback(vm-goodbye)
exten => t,2,Hangup( )

[internal]
include => outbound-local
include => outbound-long-distance

exten => 101,1,Dial(${JOHN},,r)


exten => 102,1,Dial(${JANE},,r)

[outbound-local]
exten => _9NXXXXXX,1,Dial(${OUTBOUNDTRUNK}/${EXTEN:1})
exten => _9NXXXXXX,2,Congestion( )
exten => _9NXXXXXX,102,Congestion( )

exten => 911,1,Dial(${OUTBOUNDTRUNK}/911)


exten => 9911,1,Dial(${OUTBOUNDTRUNK}/911)

[outbound-long-distance]
exten =>
_91NXXNXXXXXX,1,Dial(${OUTBOUNDTRUNK}/${EXTEN:1})
exten => _91NXXNXXXXXX,2,Congestion( )
exten => _91NXXNXXXXXX,102,Congestion( )
Lưu ý, vấn đề bảo mật phải luôn luôn được quan tâm đúng mức, vì thực hiện include
sẽ cho phép các chức năng có trong context được thêm vào thực hiện một cách đây đủ.
Ngoài ra, context [inbound] cũng không được dùng cho thực hiện cuộc gọi ra ngoài.
Dialplan and more
Dialplan and more

Chúng ta đã xây dựng được một Dialplan đơn giản như trên, tuy nhiên chỉ bấy nhiêu
chưa đủ sức cho Asterisk hấp dẫn tất cả những người làm viễn thông. Sức mạnh của nó nằm
ở sự hoàn toàn tùy biến, linh hoạt và đầy thông minh. Phần này sẽ từng bước tạo nên một
Dialplan như thế.
I. Vận dụng biểu thức và biến:
Vận dụng các biểu thức và biến làm cho Dialplan trở nên linh hoạt hơn bởi sự quyết định
trong Asterisk có thể dựa trên các ngưỡng tự tạo ra. Từ đây ta có thể làm được nhiều thứ mà
ta muốn hơn
I.1 Biểu thức:
Biểu thức là sự kết hợp của các biến, các toán tử và các hằng để tạo ra một kết quả nào
đó. Biểu thức có thể dùng để kiểm tra biến, thực hiện cá tính toán toán học, thay đổi
string….Trong Asterisk, biểu thức luôn bắt đầu bằng ‘$’, biểu thức sau đó được đặt giữa 2
dấu ngoặc vuông.
$[expression]
Ví dụ:
$[${COUNT} + 1]

$[${COUNT} /
2]
Khi Asterisk bắt gặp một biểu thức trong Dialplan, nó tính toán thay thế toàn bộ biểu thức
đó bằng giá trị kết quả mà nó nhận được (giống như sự thay thế giá trị biến đã nói ở trên)
Ví dụ:
exten => 321,1,Set(COUNT=3)
exten =>
321,2,Set(NEWCOUNT=$[${COUNT} + 1])
exten =>
321,3,SayNumber(${NEWCOUNT})
I.2 Toán tử:
Bất cứ một ngôn ngữ nào cũng cần có các toán tử để có thể liên kết các toán hạng (biến,
hằng,…) lại với nhau. Do Asterisk được viết trên C nên các toán tử trong nó cũng khá quen
thuộc và không cần giải thích nhiều. Do cú pháp của Asterisk khá đơn giản nên cần ít nhất
một khoảng trắng giữa các toán tử. Các toán tử trong Asterisk gồm:
a) Toán tử logic:
expr1 | expr2: toán tử or
expr1 & expr2: toán tử and
Dialplan and more
expr1 {=, >, >=, <, <=, !=} expr2: toán tử quan hệ, so sánh
b) Toán tử toán học:
‘+’, ‘-‘, ‘*’, ‘/’, ‘%’
Lưu ý là trong Asterisk chỉ tính toán trên các giá trị nguyên.
II. Hàm:
Hàm là một cách dùng không có gì mới, nhiều ứng dụng thực hiện các công việc khá
tương tự nhau. Sử dụng hàm giúp tiết kiệm thời gian và công sức rất nhiều. Hàm trong
Asterisk cho phép tính toán độ dài string, ngày và giờ, check MD5, …tất cả trong biểu thức.
Cú pháp của hàm như sau:
FUNCTION_NAME(argument)
Cũng giống như biến, để tham chiếu đến giá trị của hàm thì cần đặt tên của hàm đó trong
dấu ngoặc nhọn và với $ ở trước.
${FUNCTION_NAME(argument)}
Và hàm trong Asterisk cũng có thể đặt làm tham số trong hàm khác (nhớ đặt tên của hàm
trong dấu ngoặc kép, phía trước là dấu $ nhé bạn!)
III. Nhánh điều kiện:
Nhắm mục đích chính là đưa ra quyết định cho mỗi giá trị của biểu thức và hàm nói trên.
III.1 Ứng dụng GotoIf():
Ứng dụng GotoIf() tính toán giá trị của biểu thức, hàm và đưa caller tới một đích có địa
chỉ nào đó (chuyển sang extension?, priority?...) dựa trên giá trị nhận được là true hay false.
Cú pháp của GotoIf() như sau:
GotoIf(expression?destination1:destination2)
Cấu trúc lựa chọn này, có lẽ lấy ra từ C nên cũng không quá khó hiểu. Giá trị được cho là
false khi nó là một chuỗi trống hay là giá trị 0, ngược lại là giá trị được cho là true (quá
giống C). Đích đến của nó có thể là một trong các điểm sau:
+ Priority trong cùng một extension
+ Extension và priority trong cùng một context.
+ Context, extension, priority
+ Tên của priority trong cùng một extension.
Một trong 2 địa chỉ đích có thể được bỏ trống, nhưng không được bỏ trống cả 2. Khi địa
chỉ bỏ trống được lựa chọn, thì Asterisk sẽ chuyển sang extension có độ ưu tiên tiếp theo
trong chính extention đó.
Cách dùng này của Asterisk rất hữu dụng khi bạn muốn phân loại cuộc gọi đến dựa trên
số người gọi để xử lý khác nhau (phát một message nào đó chẳng hạn), ví như phân biệt
giữa cuộc gọi của bạn gái với người khác? Hay là với các bạn gái khác nhau???
Dialplan and more
III.2 Ứng dụng GotoIfTime():
Nếu như GotoIf() là ứng dụng quyết định dựa trên giá trị của biểu thức nhận được thì
GotoIfTime() lại đưa ra quyết định dựa trên ngày,giờ... của hệ thống (để chia ra giờ làm
việc, thời gian rảnh, ngày nghỉ … ). Cú pháp của nó như sau:
GotoIfTime(times,days_of_week,days_of_month,months?label)
Ví dụ:
exten => s,1,GotoIfTime(09:00-17:59,mon-fri,*,*?open,s,1)
exten => s,1,GotoIfTime(*,*,4,jul?open,s,1)
exten => s,2,GotoIfTime(09:00-17:59|mon-fri|*|*?open,s,1)
exten => s,3,GotoIfTime(09:00-11:59|sat|*|*?open,s,1)
exten => s,4,Goto(closed,s,1)
IV. Voicemail:
Asterisk là một hệ thống voicemail rất linh hoạt với các đặc điểm sau:
+ Không giới hạn số hộp voicemail, mỗi mailbox đều có folder để dễ dàng quản lý.
+ Áp dụng lời chào tùy biến, linh động khi bận hoặc các trạng thái khác.
+ Có khả năng kết hợp 1 điện thoại với nhiều hộp voicemail, nhiều điện thoại trong
một voicemail.
+ Email thông báo có voicemail (nếu enable)
+ Chuyển tiếp voicemail hay broadcast
+ Thư mục cá nhân trong 1 tập thể.
Cấu hình của voicemail được xác định trong file cấu hình là voicemail.conf. Context
voicemail cho phép bạn định nghĩa các tập mailbox khác nhau, tách biệt với nhau (cùng 1
server có thể chưa nhiều host cho voicemail của nhiều công ty, doanh nghiệp).
IV.1 Tạo mailbox:
[default]
mailbox => password,name[,email[,pager_email[,options]]]
Trong đó mailbox biểu thị bằng một số, nó thường tương ứng với số của extension mà nó
kết hợp, password là một số để truy cập vào voicemail, name là tên của chủ hộp mail, email
là địa chỉ email của chủ mailbox (Asterisk có thể dùng hộp mail này để gởi các thông báo
cho chủ mailbox, pager_email là địa chỉ emai, hay số cell phonel, số máy nhắn tin của chủ
mailbox dùng để gởi thông báo, options là trường chứa các tùy chọn cho mailbox:
timezone, các thiết lập chung….gồm: attach, serveremail, tz, saycid, review, operator,
callback, dialout, and exitcontext. Đưa các option này vào như sau: option=value pairs, phân
cách các option bằng ‘|’.
Ví dụ:
Dialplan and more
[default]
101 => 1234,Joe Public,
jpublic@somedomain.com,jpublic@pagergateway.net,
tz=central|attach=yes
101 =>1234,John Doe,john@asteriskdocs.org,jdoe@pagergateway.tld
102 =>4444,Jane Doe,jane@asteriskdocs.org,jane@pagergateway.tld
IV.2 Thêm voicemail vào Dialplan
Ứng dụng VoiceMail() chuyển caller vào trong mailbox, để ta có thể để lại lời nhắn. Số
mailbox có thể được tiếp đầu bằng kí tự b, hay u. Nếu b được sử dụng, caller sẽ nghe âm
thanh báo bận của chủ sở hữu mailbox, nếu u được sử dụng, caller sẽ nghe âm thanh báo
nếu không nhấc máy mailbox.
Ví dụ:
exten => 101,1,Dial(${JOHN},,r)
exten =>
101,102,VoiceMail(b101@default)
Một ví dụ khác
exten => 101,1,Dial(${JOHN},10,r)
exten =>
101,2,VoiceMail(u101@default)
exten =>
101,102,VoiceMail(b101@default)
IV.3 Truy cập vào Voicemail
User có thể truy cập vào voicemail để nghe tin nhắn, thay đổi các tùy chọn, ghi âm lời
chào bằng ứng dụng VoiceMailMain().
exten => 500,1,VoiceMailMain( )
IV.4 Dial-by-name
Khi không nhớ số của người bị gọi, caller có thể dùng dịch vụ này. Dịch vụ này được
thực hiện nhờ ứng dụng Directory(). Directory() có 3 thông số chính là: voicemail context
( để đọc tên), dialplan contex (để gọi số), và tùy chọn tên (ki tự f) hay họ.
Ví dụ:
exten => 8,1,Directory(default,incoming,f)
exten => 9,1,Directory(default,incoming)
Nếu caller nhấn phím 8, họ sẽ nhận được thư mục theo họ, 9 sẽ nhận theo tên
Dialplan and more
V. Macro:
Macro là cấu trúc rất hữu dụng được thiết kế để tránh sự lặp lại trong Dialplan, thay đổi
Dialplan. Macro giải quyết được vấn đề xảy ra khi có quá nhiều mailbox, các option gần
gần giống nhau, ta phải “copy and paste” rất nhiều, làm thủ công nên không tránh khỏi sai
sót trong đó. Thay vào đó, ta có thể định nghĩ một Macro chức các bước thực hiện (giống
nhau cho nhiều extension).
V.1 Định nghĩa một Macro:
Định nghĩ một macro cũng gần giống như định nghĩa một context khác ở chỗ là thêm từ
“macro-“ trước tên của macro đó (để phân biệt với extension).
[macro-name]
Ví dụ:
[macro-voicemail]
exten =>
s,1,Dial(${JOHN},10,r)
exten =>
s,2,VoiceMail(u101@default)
xxten =>
s,102,VoiceMail(b101@default)

V.2 Sử dụng Macro trong Dialplan:


Dùng ứng dụng Macro(), ứng dụng này sẽ gọi một macro cụ thể nào nó. Ví dụ như để gọi
một voicemail macro, có thể làm như sau:
exten => 101,1,Macro(voicemail)
Ứng sụng Macro cũng định nghĩa một số các biến để sử dụng như sau:
${MACRO_CONTEXT}
${MACRO_EXTEN}
${MACRO_PRIORITY}
${ARG n}
Ví dụ:
[macro-voicemail]
exten => s,1,Dial(${JOHN},10,r)
exten => s,2,VoiceMail(u${MACRO_EXTEN}@default)
exten =>
s,102,VoiceMail(b${MACRO_EXTEN}@default)
Dialplan and more
V.3 Sử dụng Argument:
Bằng cách sử dụng Argument để thay thế các thông số, ta có thể sử dụng nó tại bất cứ đâu
mà chỉ cần thay đổi argument tương ứng. Để thấy rõ ràng hơn, ta xét macro sau:
[macro-voicemail]
exten => s,1,Dial(${ARG1},10,r)
exten => s,2,VoiceMail(u${MACRO_EXTEN}@default)
exten => s,102,VoiceMail(b${MACRO_EXTEN}@default)
Khi đó, để sử dụng chúng, giúp đơn giản hóa quá trình coding, ta chỉ cần làm đơn giản
như sau cho tất cả các user
exten => 101,1,Macro(voicemail,${JOHN})
exten => 102,1,Macro(voicemail,${JANE})
exten => 103,1,Macro(voicemail,${JACK})
VI. Các thao tác khác:
Ngoài các tính năng trên, Asterisk còn cho phép lưu trữ thông tin trên Database(AstDB),
và thao tác trên đó như: lưu thông tin, truy vấn, sửa đổi, xóa…
Ví dụ:
exten => 456,1,Set(${DB(test/count)=1})
//lưu trữ
exten => 456,2,Set(COUNT=${DB(test/count)})
//truy vấn
exten => 457,1,DBdel(test/count)
//xóa.
Một số ứng dụng thông thường khác có thể kể đến như: Zapateller() <phát âm thanh
thông báo đặc biệt> , Call packing <kiềm giữ cuộc gọi ….>, Meetme() <chức năng hội
thoại>. Chi tiết của các ứng dụng này có thể tìm thấy trong ebook “Asterisk Handbook”
kèm theo.
Giới thiệu Trixbox
GIỚI THIỆU TRIXBOX

I. Giới thiệu
TRIXBOX được phát triển từ nhân của ứng dụng Asterisk, được tổng hợp từ một số
thành phần chính được phát triển bởi cộng đồng phát triển nguồn mở Asterisk dưới bản
quyền GPL. Trixbox bao gồm những thành phần chính cho việc cấu hình ứng dụng, thống
kê tình trạng hoạt động hệ thống, lưu trữ dự phòng, và nhân là hệ điều hành CentOS một
phiên bản khác của Redhat, tất cả kết hợp với nhau tạo thành một gói hoàn chỉnh. Khi cài
gói này vào máy tính thì có thể sử dụng như một tổng đài PBX.
Các thành phần chính trong gói TRIXBOX là
- Asterisk PBX: Thành phần chính của hệ thống Trixbox.
- CentOS: Một phiên bản Linux khác của Redhat hoàn toàn miển phí sử dụng. Là nhân
chính cho Trixbox.
- SugarCRM: Hệ thống quan hệ khách hàng CRM.
- A2Billing – Là thành phần dành cho việc xây dựng hệ thống điện thoại trả trước hay
còn gọi là điện thọai thẻ (Calling Card).
- Flash Operator Panel: Bảng điều khiển giám sát tình trạng hoạt động của các máy điện
thoại trong hệ thống.
- Web MeetMe Control: Quản lý triển khai hệ thống điện thoại hội nghị.
- FreePBX: Đây là công cụ với giao diện web dành cho việc cấu hình hệ thống Asterisk.
- Hệ thống Lưu trữ dự phòng và thống kê: Là thành phần của TRIXBOX, cung cấp các
công cụ cần thiết cho việc bảo trì bảo dưỡng hệ thống.
- Hệ thống Apache-Php-Mysql dành cho giải pháp Webserver của hệ thống.
II. Cấu hình địa chỉ IP cho card mạng:
Thiết lập địa chỉ IP bằng cách gõ lệnh:
#netconfig
Chọn OK để thiếp lập
Nếu trong mạng có hỗ trợ DHCP thì hãy chọn mục này còn nếu không hãy nhập địa chỉ
IP tĩnh.
• IP: 192.168.0.1
• Netmask: 255.255.255.0
• Gateway: 192.168.93.254
• Primary nameserver: 192.168.1.1
Chọn OK để chấp nhận các thiết lập trên.
Giới thiệu Trixbox
Sau khi hoàn tất hãy làm cho thiết lập có hiệu lực bằng cách reset lại máy tính hoặc dùng
lệnh sau:
#Service network stop
#Service network start
Đến đây xem như cài đặt hoàn tất bây giờ để cấu hình được Asterisk chúng ta vào một
máy khác và mở Internet Explorer hoặc một trình duyệt web bất kỳ, nhập vào
http://192.168.0.1 đã cấu hình ở trên, và tiến hành cấu hình hệ thống với tài khoản
username: maint và password: password
III. Các lệnh thường dùng:
+ trixbox-update.sh : lệnh này dùng dể update trixbox sau khi cài đặt.
+ mc : lệnh này dùng để mở các file hệ thống asterisk.
+ asterisk -r : lệnh này để vào asterisk1*CLI>, sau đó gõ : reload : 2 lệnh này thực hiện
sau khi config. để thoát ra gõ exit.
+ nmap -sS -O 127.0.0.1 : lệnh này dùng để coi các port đã mở
+ shutdown -r now : lệnh tắt máy
+ help-trixbox : lệnh yêu cầu giúp đỡ
+ genzaptelconf : cấu hình card zaptel tự động
+ vi : sửa nguồn. Ví dụ vi etc resolv.conf
+ :q : thoát không save
+ :wq! : thoát có save
Từ viết tắt
Từ viết tắt

ACD Automatic Call Distribution


AGI Asterisk Gateway Interface
API Application Program Interface
CGI
CRM
E1
GSM
GNU
H323
I/O Input/ Output
IAX Inter-Asterisk Exchange
ID
ISDN Intergrated service digital network
MGCP Media Gateway Control Protocol
PBX Public basis exchange
PHP Hypertext Preprocessor
PSTN Public Switched Telephone Network
SIP Session Initiation Protocol
T1
TDM
VOIP Voice over IP
WAN Wide Area Network
SCCP Skinny Client Control Protoco

You might also like