Yate as a PBX

From Yate Documentation
Jump to: navigation, search

Yate can be used as a PBX. Depending on the functionality you want you can use a combination of Yate modules and external scripts.

Because putting it all together can be a hassle and can take quite a lot of time, Null Team launched FreeSentral, a full IP PBX based on Yate that is easy to set up and use.

By default Yate's PBX functionality is disabled because it reduces the number of calls Yate can handle for other types of setups. That is because in order to offer PBX features Yate needs a lot more control over the call leg than it's usually needed for other types of setups. This allows us to have control over the telephony channel without having a performance issue.


Yate modules and scripts for PBX functionality

  • pbxassist - Configurable PBX with hold, transfer and conference capabilities
  • moh - Music on hold
  • conference - Conference module
  • park - Call parking
  • pickup - Call pickup
  • pbx - support modules for other modules
  • queues, queue_in.php, queue_out.php - Queues and call distribution to operators
  • voicemail.php, leavemail.php - Voicemail support

Basic PBX functionality in Yate

The basic PBX functionality in Yate is implemented in pbxassist module. This module offers support for putting a call on hold, starting and managing a confereces and performing attended and unattended call transfer.

Note: This module is not loaded by default

Additional PBX functionality

Call parking and pickup

Yate offers modules that implement call parking and picking up but the logic for this is custom. The used keys and how you define the parking orbits logic is up to you.
The easiest way to get this working is to extend the pbxassist configuration file to catch more pressed digits. You can define custom sections for call park and pickup.

When user presses this digits a chan.operation message will be emited with a custom "operation" parameter. This message can be handled by a javascript/external script.


In share/scripts directory from yate's sources you can find voicemail.php and leavemail.php.

  • leavemail.php - is used to record a voicemail message for a user. If user doesn't answer call for a specific period of time or is offline you have to route a call to it.
  • voicemail.php - users use this to listen and manage their voicemail messages. You associate a number with this service. When call to this number is name you have to route call to it.

See IVR Setup to get an idea on how to set this up.


The Auto Attendant is a service that greets the user and allows him to reach different branches of a company.
In Yate this is usually an IVR script.
See Writing an IVR for instructions on how to build your own.

Call forwarding

Call forwarding is completely a routing feature. To set this up you have to implement the forwarding rules. Basic rules (for few users) could be added in regexroute but most of the time this won't be enough. The rules are usually stored in a database so routing would have to be implemented in register module or custom javascript/external script.
Depending on how complex this rules are you will probably need to use the callfork module to define them.

Call hunting

This is also a routing feature for which you will need callfork. Using callfork you can setup sequential/circular/and a lot of other dialling patterns.


You can use the queues module that implements queuing of incoming calls and distribution of these calls to operators using database queries.

LCR/multiple dial plans

This should be implemented in the routing logic. Distributing the calls between the various providers is up to you.

Custom features

If you want to add additional features to your PBX you will probably need to define them in the routing logic or a combination between extending pbxassist configuration file and the routing logic.

See also

Personal tools