Routing script tutorial:route remap Tutorial
Contents |
route_remap tutorial
'route_remap' is a method implemented in the base_routing and is use to modify call parameters per route (allowing to change call attributes in a different manner per route). This tutorial will explain how to use the parameter for the 'route_remap' method.
route_remap examples
Things to know about these examples:
- A new field called 'priority' needs to be add to the routes.
- A new field called 'asr_threshold' needs to be add to the routes.
- A new field called 'usage_threshold' needs to be add to the routes.
route_remap setup
Time to take a look how to match route to a call. List of routes use for the example:
Calling Called NAP Remapped NAP Priority 5550000 1110000 isdn sip 4 5550000 2220000 sip isdn 3 5550000 3330000 sip_p2 isdn_1 2
List of naps:
Name Asr threshold Usage threshold isdn 40 90 sip 52 92
Input used in the test script window:
@call_params = {:calling => '5550000', :called => '5550002', :nap => 'isdn'}
@nap_list = [
{:name => 'sip', },
{:name => 'isdn' },
{:name => 'sip_p3' }
]
route_remap parameter
The following example is a isdn to sip gateway. This time we will remap the called and the calling number.
require 'base_routing'
class RemapTutorial < BaseRouting
route_match :call_field_name => :nap
route_remap :call_field_name => :called, :route_field_name => :called
route_remap :method => :remapped_tutorial
route_remap :proc => Proc.new { |route, caf_call, nap_list, call_params|
puts "Proc is called"
#remapping calling
remap_calling = call_params[:calling]
puts "remapped : #{remap_calling}"
if( remap_calling == "5550000" )
remap_calling = "9871111"
elsif ( remap_calling == "7772222")
remap_calling = "6541111"
end
puts "remap_calling : #{remap_calling}"
call_params[:calling] = remap_calling
call_params
}
def remapped_tutorial(route, caf_call, nap_list, call_params)
puts "Method is called"
remap_calling = call_params[:calling]
puts "remapped : #{remap_calling}"
if( remap_calling == "5550000" )
remap_calling = "7772222"
elsif( remap_calling == "9871111" )
remap_calling = "9992222"
end
puts "remap_calling : #{remap_calling}"
call_params[:calling] = remap_calling
call_params
end
end
@@routing = RemapTutorial.new
def init_routes( routes )
@@routing.init routes
end
def route( call, nap_list )
@@routing.route call, nap_list
end
route_remap script output
The called number is remapped by the the :call_field_name / :route_field_name. Like 'route_match', if :call_field_name is used alone the parameter (in this case :called), will be remapped by the same parameter of :route_field_name. The following 2 lines will have the exact same behavior (they both remapped the called number of the call with the called number of the route):
route_remap :call_field_name => :called route_remap :call_field_name => :called, :route_field_name => :called
As for the :method and :proc parameters, they both remap the calling number but to different values.
The remapping result needs to be inserted in call_params hash and return in your method or proc. All remap function return remapped parameter in the call_params. They are executed in the order they are declared.
Here is the output of the example:
Call Params: Reason: ok Called: 2220000 Calling: 6541111 Nap: sip Matched route: Remapped calling: Called: 2220000 Calling: 5550000 Remapped called: Priority: 3 Remapped nap: isdn Nap: sip Output: OUT: Method is called OUT: OUT: call : 5550000 OUT: OUT: remap_calling : 7772222 OUT: OUT: Proc is called OUT: OUT: remapped : 7772222 OUT: OUT: remap_calling : 6541111 OUT: OUT: Nap attribute must be remapped OUT:
Back to Routing Script Tutorial.