Routing script tutorial:route remap Tutorial

From TBwiki
(Difference between revisions)
Jump to: navigation, search
(route_remap tutorial)
 
(One intermediate revision by one user not shown)
Line 1: Line 1:
 
== route_remap tutorial ==
 
== route_remap tutorial ==
  
'route_remap' is a method implemented in the base_routing and is use to modify call parameters. This tutorial will explain how to use the parameter for the 'route_remap' method.  
+
'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 ===
 
=== route_remap examples ===
Line 44: Line 44:
 
     route_remap :call_field_name => :called, :route_field_name => :called
 
     route_remap :call_field_name => :called, :route_field_name => :called
 
     route_remap :method => :remapped_tutorial
 
     route_remap :method => :remapped_tutorial
     route_remap :proc => Proc.new { |route, call, nap_list, remapped_fields|
+
     route_remap :proc => Proc.new { |route, caf_call, nap_list, call_params|
 
    
 
    
 
       puts "Proc is called"   
 
       puts "Proc is called"   
 
       #remapping calling
 
       #remapping calling
       if remapped_fields[:calling].nil?
+
       remap_calling = call_params[:calling]
        remap_calling = call.get(:calling)
+
      puts "remapped : #{remap_calling}"
        puts "call : #{remap_calling}"
+
      else
+
        remap_calling = remapped_fields[:calling]
+
        puts "remapped : #{remap_calling}"
+
      end
+
 
        
 
        
 
       if( remap_calling == "5550000" )
 
       if( remap_calling == "5550000" )
Line 63: Line 58:
 
    
 
    
 
       puts "remap_calling : #{remap_calling}"
 
       puts "remap_calling : #{remap_calling}"
       remapped_fields[:calling] = remap_calling
+
       call_params[:calling] = remap_calling
 
        
 
        
       remapped_fields
+
       call_params
 
     }
 
     }
 
    
 
    
     def remapped_tutorial(route, call, nap_list, remapped_fields)
+
     def remapped_tutorial(route, caf_call, nap_list, call_params)
 
    
 
    
 
       puts "Method is called"   
 
       puts "Method is called"   
       if remapped_fields[:calling].nil?
+
       remap_calling = call_params[:calling]
        remap_calling = call.get(:calling)
+
      puts "remapped : #{remap_calling}"
        puts "call : #{remap_calling}"
+
      else
+
        remap_calling = remapped_fields[:calling]
+
        puts "remapped : #{remap_calling}"
+
      end
+
 
        
 
        
 
       if( remap_calling == "5550000" )
 
       if( remap_calling == "5550000" )
Line 86: Line 76:
 
        
 
        
 
       puts "remap_calling : #{remap_calling}"
 
       puts "remap_calling : #{remap_calling}"
       remapped_fields[:calling] = remap_calling
+
       call_params[:calling] = remap_calling
 
        
 
        
       remapped_fields
+
       call_params
 
      
 
      
 
     end
 
     end
Line 114: Line 104:
 
As for the :method and :proc parameters, they both remap the calling number but to different values.  
 
As for the :method and :proc parameters, they both remap the calling number but to different values.  
  
It is important when remapping to always verify the remapped_fields parameter. If some parameters were remapped previously, the changes will be supply in the remapped_fields (4th parameter of your method or proc). The remapping result needs to put in that hash and return in your method or proc. It is possible though that you may want to overwrite the change done previously, in that case use directly the call parameter but of course you will need to order your 'route_remap' accordingly. They are executed in the order they are declared.
+
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.
 
+
The actual changes on the call will only be "merged" after all the remapping are done.
+
  
 
Here is the output of the example:
 
Here is the output of the example:

Latest revision as of 10:04, 3 June 2014

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.

Personal tools