How to do routing using javascript

From Yate Documentation
Revision as of 17:19, 22 March 2013 by Dana (Talk | contribs)

Jump to: navigation, search

The Javascript module has support for programmatically routing a call step by step.

Using the example below you will learn how to:

  • route calls starting with specific blocks of numbers to the desired destinations
  • route calls to a specific gateway set in accfile module

Contents

Configure script in Javascript module

To configure a routing script you must list it in the javascript.conf file.

Parameter routing from [general] section must contain the name of the script.

[general]
routing=example.js

Configure a gateway

In order to route outside, a gateway is required. To set the gateway you must configure it in accfile.conf.

[gwout]
enabled=yes
protocol=sip
username=outcalls
password=mypass
;registrar=192.168.168.1:5060
registrar=IP:port

Routing Script

The place where you have to write your script is in directory share/scripts, where Yate sources 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);
}

How it works

When a call is coming, a new instance is created and associated with the inbound call leg.

The main code flow (that is, outside any function) is then executed after setting the call.route message parameters in the message variable.

The Javascript code can make decisions based on these parameters and can call methods of the Channel object to route the call to the desired destination.

As you can see in the example:

  • if called starts with "19", it is routed to sip/sip:called@192.168.168.1:5060
  • if called starts with "60", it is routed to h323/called@192.168.168.1:1720
  • if caller is "209", it is routed to iax/user_iax@192.168.168.1:4569/called@iaxcontext
  • if called starts with "00", it is routed through the gateway
  • if no match found in the above rules play an announcement from file hello.au it is played.

Caller and called parameters are caller number and called number.

See also

Personal tools
Namespaces

Variants
Actions
Preface
Configuration
Administrators
Developers