How to do routing using javascript

From Yate Documentation
(Difference between revisions)
Jump to: navigation, search
(Routing Script)
(Routing Script)
Line 21: Line 21:
 
=== Routing Script===
 
=== Routing Script===
  
Write example.js in /share/scripts where Yate sources are.
+
Write example.js in /share/scripts where Yate scripts are.
  
  // First display calling and called party numbers
+
  '''// First display calling and called party numbers'''
 
  Engine.output("Got call from '" + message.caller + "' to '" + message.called + "'");
 
  Engine.output("Got call from '" + message.caller + "' to '" + message.called + "'");
 
   
 
   
 
  if (message.called.substr(0,2)=="19") {
 
  if (message.called.substr(0,2)=="19") {
         // route calls starting with 19 to 192.168.168.1
+
         '''// route calls starting with 19 to 192.168.168.1'''
         // 5060 is the default SIP port. When using the default port you don't need to specify it
+
         '''// 5060 is the default SIP port. When using the default port you don't need to specify it'''
 
         Channel.callJust("sip/sip:" + message.called + "@192.168.168.1:5060");
 
         Channel.callJust("sip/sip:" + message.called + "@192.168.168.1:5060");
 
  } else if (message.called.substr(0,2)=="00" && message.called.length>10) {
 
  } else if (message.called.substr(0,2)=="00" && message.called.length>10) {
         //route calls using a function  
+
         '''//route calls using a function '''
 
         routeOutside();
 
         routeOutside();
 
  } else if (message.called.match("^60")) {
 
  } else if (message.called.match("^60")) {
         //route calls starting with 60 to 192.168.168.1
+
         '''//route calls starting with 60 to 192.168.168.1'''
 
         Channel.callJust("h323/"+message.called+"@192.168.168.1:1720");
 
         Channel.callJust("h323/"+message.called+"@192.168.168.1:1720");
 
  } else if (message.caller=="209") {
 
  } else if (message.caller=="209") {
         //route calls from caller: 209
+
         '''//route calls from caller: 209'''
 
         Channel.callJust("iax/user_iax@192.168.168.1:4569/"+message.called+"@iaxcontext");
 
         Channel.callJust("iax/user_iax@192.168.168.1:4569/"+message.called+"@iaxcontext");
 
  } else {
 
  } else {
         //route other calls that don't match the above rules  
+
         '''//route other calls that don't match the above rules'''
 
         Channel.callJust("wave/play//var/spool/sounds/hello.au");
 
         Channel.callJust("wave/play//var/spool/sounds/hello.au");
 
  }
 
  }
Line 46: Line 46:
 
  function routeOutside()
 
  function routeOutside()
 
  {
 
  {
         // rewrite caller number for all calls that will be routed to this account
+
         '''// rewrite caller number for all calls that will be routed to this account'''
 
         message.caller = "+40211231234";
 
         message.caller = "+40211231234";
         // rewrite called number: strip 00 and add +_in front of the number
+
         '''// rewrite called number: strip 00 and add +_in front of the number'''
 
         message.called = "+" + message.called.substr(2);
 
         message.called = "+" + message.called.substr(2);
         // send all calls starting with +40 to line "gwout" defined in accfile.conf
+
         '''// send all calls starting with +40 to line "gwout" defined in accfile.conf'''
 
         message.line = "gwout";
 
         message.line = "gwout";
 
         Channel.callJust("line/"+message.called);
 
         Channel.callJust("line/"+message.called);

Revision as of 17:16, 10 December 2012

Routing rules written in script using Yate's Javascript module.

Configure script in Javascript module

To configure a script for Javascript routing it must be listed in the javascript.conf file:

[general]
routing=example.js

Configure a gateway

The example.js for outside routing requires to configure accfile.conf:

[gwout]
enabled=yes
protocol=sip
username=outcalls
password=mypass
registrar=a.b.c.d

Routing Script

Write example.js in /share/scripts where Yate scripts are.

// First display calling and called party numbers
Engine.output("Got call from '" + message.caller + "' to '" + message.called + "'");

if (message.called.substr(0,2)=="19") {
        // route calls starting with 19 to 192.168.168.1
        // 5060 is the default SIP port. When using the default port you don't need to specify it
        Channel.callJust("sip/sip:" + message.called + "@192.168.168.1:5060");
} else if (message.called.substr(0,2)=="00" && message.called.length>10) {
        //route calls using a function 
        routeOutside();
} else if (message.called.match("^60")) {
        //route calls starting with 60 to 192.168.168.1
        Channel.callJust("h323/"+message.called+"@192.168.168.1:1720");
} else if (message.caller=="209") {
        //route calls from caller: 209
        Channel.callJust("iax/user_iax@192.168.168.1:4569/"+message.called+"@iaxcontext");
} else {
        //route other calls that don't match the above rules 
        Channel.callJust("wave/play//var/spool/sounds/hello.au");
}

function routeOutside()
{
        // rewrite caller number for all calls that will be routed to this account
        message.caller = "+40211231234";
        // rewrite called number: strip 00 and add +_in front of the number
        message.called = "+" + message.called.substr(2);
        // send all calls starting with +40 to line "gwout" defined in accfile.conf
        message.line = "gwout";
        Channel.callJust("line/"+message.called);
}


See also

Personal tools
Namespaces

Variants
Actions
Preface
Configuration
Administrators
Developers