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 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. |
Dialplan |
Parse the call details and decide where to route the call. |
Codec |
Translate between audio formats. |
Application |
Perform a task such as play audio or set data. |
Application Programming Interface (API) |
Export a function that takes text input and returns text output, which could be used across modules or from an external connection. |
File |
Provide an interface to extract and play sound from various audio file formats. |
Text-To-Speech (TTS) |
Interface with text-to-speech engines. |
Automated Speech Recognition ASR |
Interface with speech recognition systems. |
Directory |
Connect directory information services, such as LDAP, to a common core lookup API. |
Chat |
Bridge and exchange various chat protocols. |
Say |
String together audio files in various languages to provide feedback to say things like phone numbers, time of day, spell words, and so on. |
By combining the functionality of the various module interfaces, FreeSWITCH can be configured to connect IP phones, POTS lines, and IP-based telephone service. 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 one of the more widely used modules, namely, the Endpoint module.