Book Image

FreeSWITCH 1.2 - Second Edition

Book Image

FreeSWITCH 1.2 - Second Edition

Overview of this book

FreeSWITCH is an open source telephony platform designed to facilitate the creation of voice and chat-driven products, scaling from a soft-phone to a PBX and even up to an enterprise-class soft-switch. It is always exciting to design and build your own telephony system to suit your needs, but the task is time-consuming and involves a lot of technical skill."FreeSWITCH 1.2" comes to your rescue to help you set up a telephony system quickly and securely using FreeSWITCH. It is rich with practical examples and will give you all of the information and skills needed to implement your own PBX system.You will start with a detailed description of the FreeSWITCH system architecture. Thereafter you will receive step-by-step instructions on how to set up basic and advanced features for your telephony platform.The book begins by introducing the architecture and workings of FreeSWITCH before detailing how to plan a telephone system and then moves on to the installation, configuration, and management of a feature-packed PBX. You will learn about maintaining a user directory, XML dial plan, and advanced dial plan concepts, call routing, and the extremely powerful Event Socket. You will finally learn about the online community and history of FreeSWITCH."FreeSWITCH 1.2" is an indispensable tool for novice and expert alike.
Table of Contents (24 chapters)
FreeSWITCH 1.2
Credits
About the Authors
About the Reviewers
www.PacktPub.com
Preface
Index

The FreeSWITCH design – modular, scalable, and stable


The design goal of FreeSWITCH is to provide a modular, scalable system around a stable switching core, and to provide a robust interface for developers to add to and control the system. Various elements in FreeSWITCH are independent of each other and do not have much knowledge about how the other parts are working, other than what is provided in what are called exposed functions. The functionality of FreeSWITCH can also be extended with loadable modules, which tie a particular external technology into the core.

FreeSWITCH has many different module types that revolve around the central core, much like satellites orbiting a planet. The list includes:

Module type:

Purpose:

Endpoint

Telephone protocols like SIP/H.323 and POTS lines

Application

Performs a task such as playing audio or setting data

Application Programming Interface (API)

Exports a function that takes text input and returns text output, which could be used across modules or from an external connection

Automated Speech Recognition (ASR)

Interfaces with speech recognition systems

Chat

Bridges and exchanges various chat protocols

Codec

Translates between audio formats

Dialplan

Parses the call details and decides where to route the call

Directory

Connects directory information services, such as LDAP, to a common core lookup API

Event handlers

Allows external programs to control FreeSWITCH

File

Provides an interface to extract and play sound from various audio file formats

Formats

Plays audio files in various formats

Languages

Programming language interfaces used for call control

Loggers

Controls logging to the console, system log, or log files

Say

Strings together audio files in various languages to provide feedback to say things like phone numbers, time of day, spell words, and so on

Text-To-Speech (TTS)

Interfaces with text-to-speech engines

Timers

POSIX or Linux kernel timing in applications

XML Interfaces

Uses XML for Call Detail Records (CDRs), RADIUS, CURL, LDAP, RPC, and/or SCGI

The following image shows what the FreeSWITCH architecture looks like and how the modules orbit the core of FreeSWITCH:

By combining the functionality of the various module interfaces, FreeSWITCH can be configured to connect IP phones, POTS lines, and IP-based telephone services. It can also translate audio formats and interfaces with a custom menu system, which you can create by yourself. You can even control a running FreeSWITCH server from another machine. Let's start by taking a closer look at a pair of important module types.