Routing

From Yate Documentation
(Difference between revisions)
Jump to: navigation, search
 
(73 intermediate revisions by 2 users not shown)
Line 1: Line 1:
How to do the routing in Yate? You have to know that it is done by using messages and it can be done from one or more modules. If more than one module it is used then the priority that is set in each configuration file associated to the module will be used for the order of the execution in Yate. What is useful to know is that in each module the parameters can be set without handeling the message.
 
  
And now let's see which module are in charge with routing and some how to examples:
+
Yate has multiple routing modules.  A routing module is a module that handles (sees) the [[call.route]] message.
  
 +
You can set all routing in a single module or use a combination of modules. If more than one module is used, then the priority that is set in each configuration file determines the order of the modules processing the message. A numerically lower priority means a higher priority of the route. A module can add/modify parameters without handling the message.
  
{|
+
This is the list of the routing modules and a [[How To's]] for each of them:
!Routing modules in Yate!How to do routing in Yate
+
 
 +
{|class="yate-table"
 +
|class="yate-header-left"|'''Routing modules in Yate'''
 +
|class="yate-header-right"|'''How to do routing in Yate'''
 
|-
 
|-
|[[Regular expressions]] module|| How to register users from regfile
+
|class="yate-content-left"|
|[[Javascript routing]] module || How to do routing using javascript
+
* [[Regfile|Regfile module]]
|[[register|Register module || How to register users from register
+
Module used for autentication, registration, and routing of users from a file.
|[[ENUM_Routing|ENUM]] based routing ||
+
* [[Regular expressions|Regular expressions module]]
|[[Call_Forker|Call forker]] || [[Round_Robin_Routing|How to do round-robin routing]]
+
Module used for routing incoming and outgoing call legs.
|[[Clustering]] support||
+
* [[Javascript module|Javascript routing module]]
|}
+
Javascript module is a module support for programmatically routing a call.
 
+
* [[register|Register module]]
== Routing modules in Yate ==
+
Module used to write CDR(Call Detail Record) data in the database.
 
+
* [[Call_Forker|Call forker module]]
* [[Regular expressions]] module
+
Module used to route a call to multiple alternative targets.
* [[Javascript routing]] module
+
* [[ENUM_Routing|ENUM route module]]
* [[register|Database]] routing, can also register users
+
Performs routing using the ENUM protocols that maps phone numbers to VoIP (or even other PSTN) resources.
* [[ENUM_Routing|ENUM]] based routing
+
* [[Clustering|Cluster route module]]
* [[Call_Forker|Call forker]] (not quite routing but very similar)
+
This module allows building clusters of servers for a single domain.
* [[Clustering]] support, extends routing to multiple nodes in a cluster
+
* [[Late routing Module]]
 
+
This module can be used whenever you need to route the calls to one or several numbers or aliases whose addresses are unknown in advance.
The priority of each of these modules can be adjusted to implement fallbacks to other methods.
+
* [[Call Counters|Call Counters Module]]
 
+
This module keeps a count of active calls per user specified context and adds one or all counters to be used in routing decisions.
=== Round-robin routing ===
+
 
+
Combining the [[Call_Forker|callfork]] module with the ''rotate'' function from [[Regular expressions|regexroute]] it is possible to implement round-robin routing, with or without fallback.
+
 
+
Let's suppose we route all numbers starting with 031 through two main SIP providers and we have one H.323 provider as fallback.
+
 
+
We set in regexroute.conf an entry like this:
+
 
+
{|width="85%" class="wikitable"
+
|  ^031.*$=fork $(rotate,$idx031,| sip/sip:\0@provider1.net,| sip/sip:\0@provider2.net) | h323/1010\0@provider3.net;maxcall=20000
+
|}
+
 
+
We defined a list of two SIP call targets inside a rotate function. We also use a global (persistent between calls) variable conveniently named $idx031 so we remember it only rotates calls to the 031 prefix. Any other global variable name could be used.
+
 
+
The H.323 fallback route is placed outside the rotate function so it's always called last. The ''maxcall'' parameter of the message applies to all outgoing calls. There is currently no way of setting separate parameters for each individual call.
+
 
+
The first call comes in - let's suppose for 0310123. The initial value of variable $idx031 is undefined so zero will be assumed.
+
The following targets will be tried in sequence, each for 20 seconds (set by the maxcall parameter):
+
 
+
SIP: sip:0310123@provider1.net
+
SIP: sip:0310123@provider2.net
+
H.323: 10100310123@provider3.net
+
 
+
The first that answers will continue the call. If any of them fails the call will attempt the next target.
+
A side effect of the ''rotate'' function is to update the value of the global $idx031 variable. Since we defined only two rotation targets the value will cycle between the values 0 and 1.
+
 
+
Now a call comes in for 0319876. Since the previous call has changed $idx031 to 1 the attempted targets will be:
+
 
+
SIP: sip:0319876@provider2.net
+
SIP: sip:0319876@provider1.net
+
H.323: 10100319876@provider3.net
+
 
+
Finally, if instead of ''rotate'' we use the ''index'' function we will get round-robin routing without fallback between the two SIP providers, only with H.323 fallback route. Suppose we route:
+
  
{|width="85%" class="wikitable"
+
| class="yate-content-right"|
| ^031.*$=fork $(index,$idx031,| sip/sip:\0@provider1.net,| sip/sip:\0@provider2.net) | h323/1010\0@provider3.net;maxcall=20000
+
* [[How to register users from regfile]]
 +
Example of register users in Regfile module.
 +
* [[Redirecting Calls to another User in the Regex Module]]
 +
Example of redirecting calls to another user.
 +
* [[How to do routing using javascript]]
 +
Examples of how to route calls from javascript module.
 +
* [[How to register users from register]]
 +
Example of how to register users from a database.
 +
* [[Round_Robin_Routing|How to do round-robin routing]]
 +
Round robin routing examples.
 +
* [[Configuring regexp and callto parameters in cluster route module]]
 +
Example of configuring parameters in cluster route module.
 +
* [[Example of forking a call using lateroute|Forking a call using lateroute]]
 +
Examples for routing calls using lateroute.
 +
* [[How to use callcounters module to count incoming calls]]
 +
Example of count incoming calls.
 +
* [[How to route and bill from a database]]
 +
Example on how to route and bill from a database.
 
|}
 
|}
  
The same incoming calls will generate outgoing calls to:
 
  
SIP: sip:0310123@provider1.net
+
'''See also'''
H.323: 10100310123@provider3.net
+
  
and respectively:
+
* [[Modules| All Yate modules]]
 +
* [[Telephony]]
  
SIP: sip:0319876@provider2.net
+
[[Category:Routing]]
H.323: 10100319876@provider3.net
+

Latest revision as of 12:01, 10 March 2016

Yate has multiple routing modules. A routing module is a module that handles (sees) the call.route message.

You can set all routing in a single module or use a combination of modules. If more than one module is used, then the priority that is set in each configuration file determines the order of the modules processing the message. A numerically lower priority means a higher priority of the route. A module can add/modify parameters without handling the message.

This is the list of the routing modules and a How To's for each of them:

Routing modules in Yate How to do routing in Yate

Module used for autentication, registration, and routing of users from a file.

Module used for routing incoming and outgoing call legs.

Javascript module is a module support for programmatically routing a call.

Module used to write CDR(Call Detail Record) data in the database.

Module used to route a call to multiple alternative targets.

Performs routing using the ENUM protocols that maps phone numbers to VoIP (or even other PSTN) resources.

This module allows building clusters of servers for a single domain.

This module can be used whenever you need to route the calls to one or several numbers or aliases whose addresses are unknown in advance.

This module keeps a count of active calls per user specified context and adds one or all counters to be used in routing decisions.

Example of register users in Regfile module.

Example of redirecting calls to another user.

Examples of how to route calls from javascript module.

Example of how to register users from a database.

Round robin routing examples.

Example of configuring parameters in cluster route module.

Examples for routing calls using lateroute.

Example of count incoming calls.

Example on how to route and bill from a database.


See also

Personal tools
Namespaces

Variants
Actions
Preface
Configuration
Administrators
Developers