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 "FreeSWITCH APIs". The functionality of FreeSWITCH can be extended with loadable modules, which tie a particular functionality or an external technology into the core.
FreeSWITCH has many different module types that surround the central core, like sensors and interfaces connect a robot brain to the external environment. The list includes the following:
Module type |
Purpose |
Endpoint |
Telephone protocols such as SIP and PSTN lines. |
Application |
Performs a task such as playing audio or sending data. |
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 such as phone numbers, time of day, spellings of 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), CURL, LDAP, RPC, and so on. |
The following diagram shows what the FreeSWITCH architecture looks like and how the modules orbit the core of FreeSWITCH:
By combining the functionalities of the various module interfaces, FreeSWITCH can be configured to connect IP phones, POTS lines, WebRTC, and IP-based telephone services. It can also translate audio formats and provides an Interactive Voice Response (IVR) system with custom menus. A FreeSWITCH server can also be controlled from another machine. Let's start by taking a closer look at a pair of important module types.