User:Diana cionoiu/YATE Yet another telephony engine

YATE (Yet Another Telephony Engine)

Yate is a telephony engine, a softswitch with PBX capabilities, originally created in 2004 by Paul Chitescu of NullTeam. It is released under a GNU General Public License with an exception for linking with OpenH323 and PWlib (licensed under MPL).

Started as a free/open source softswitch for connecting PSTN with VoIP, support for other telephony technologies like conference, PBX, IVR has been added later on. During the years Yate has evolved into a Unified Communications server providing advanced integration with instant messaging, video and fax.

Softswitch
Historically the basic function of Yate is the softswitch, connecting together call legs either to external devices or internal server resources. The logic for routing calls uses messages and can be implemented in configuration files, database queries or external programs.

Call signalling is possible using PSTN protocols like ISDN or SS7, either directly attached over a TDM interface card (T1, E1, BRI), analog interface or by a remote Signaling gateway. A variety of VoIP protocols can be used without the need of special hardware: SIP, H.323, IAX2 or Jingle.

The voice path can pass through the server or can be routed directly between RTP capable endpoints. It is also possible to control remote Media gateways using the MGCP protocol.

To further increase call density and service availability it's possible to create clusters of servers. Each server reports its availability status to a Linux-HA monitor that can divert calls away from failed nodes.

Data about the calls made is collected in Call Detail Records (CDR) that can be written to files, databases or used in computing billing information. Third party RADIUS based billing platforms are supported.

PBX
Besides basic routing Yate allows manipulation of the existing calls in order to divert, hold, transfer, park, retrieve or conference join them. All these call features can be hosted on a central server avoiding the need of a dedicated PBX at each premise.

The PBX functions are implemented using the message mechanism. Each consists of a trigger defining when the function is to be executed and an operation that actually performs it. Both triggers and operations can be added, configured, extended or reimplemented in custom modules to implement new features or emulate a specific behaviour. Some of the functions can be triggered by the signalling protocol.

Automatic Call Distribution (ACD, call queues) and Three-way calls use other modules for their operation. Some of the traditional PBX features like Auto Attendant or Voice Mail are also implemented separately using the IVR functionality.

IVR engine
The basic concept behind Yate is a message passing system, providing access for external modules to the telephony layer without a restricting API. Any new functionality - internal or module provided - can be accessed by an aware external module. Loading the conference module makes it immediately available for IVR usage.

The IVR engine can be driven by an external module written in any programming language. In the main branch there are supplied libraries for a few common scripting languages: PHP, Python ,Perl, Pike. Besides responding to key presses an IVR can interact with call control or external events.

The normal Auto Attendant and Voice Mail applications are programmed as IVRs in PHP so they can be easily modified.

Integration with other applications like Web
In addition to the IVR functionality the message passing system can be used for integration with other applications like Web. Some examples are Click to call, Internet fax, Audio conferencing. The direct access to the telephony internals from external modules simplifies development of such applications. In practice a combination between database access and external modules is used for building Web based applications. Several projects based on this concept have been created by the Null Team or third parties, like: FreeSentral, LuxVoice , CrossBow Exchange.

Configuration and usage
Yate can be configured easily by editing .INI style text files for each module. Modules can be loaded selectively by adjusting the main configuration file.

On UNIX and derivative operating systems Yate runs as a daemon process with a supervisor that makes sure it gets restarted if it crashes or locks up. On Windows it runs as a service under the control of the Service Control Manager which takes care of starting or restarting it.

Usage scenarios include: Yate can be configured to operate in many other ways. A basic IP-PBX Web interface named FreeSentral is offered by the Yate authors and several others are available from third parties, either free or paid.
 * VoIP to PSTN gateway either for Softphones or Analog telephony adapters
 * H.323 Gatekeeper and / or SIP registrar.
 * Call Center server with queues and ACD.
 * PBX, Hosted PBX, IP-PBX.