Asterisk

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Asterisk as PDF for free.

More details

  • Words: 11,416
  • Pages: 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-extof-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-ofperson) 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(ttallbusy) 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(vmnobodyavail) 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-ofperson) exten => 101,1,Dial(Zap/1,10) exten => 101,2,Playback(vmnobodyavail) 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(vmnobodyavail) 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à softphone). 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>) 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/[email protected]) 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: = 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 ${}. 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, [email protected],[email protected], tz=central|attach=yes 101 =>1234,John Doe,[email protected],[email protected] 102 =>4444,Jane Doe,[email protected],[email protected] 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() , Call packing , Meetme() . 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

Related Documents

Asterisk
June 2020 36
Asterisk
November 2019 72
Tutorial-asterisk
November 2019 53
Asterisk-el_manual.pdf
June 2020 24
Asterisk Now
May 2020 22
Asterisk Deusto
April 2020 18