<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://docs.telcobridges.com/mediawiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://docs.telcobridges.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Abrassard</id>
		<title>TBwiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://docs.telcobridges.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Abrassard"/>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Special:Contributions/Abrassard"/>
		<updated>2026-04-15T17:45:37Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.18.1</generator>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Lawful_Interception</id>
		<title>Lawful Interception</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Lawful_Interception"/>
				<updated>2019-06-20T10:51:02Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lawful intercept is a feature provided by service providers to law enforcement agencies (FBI, Interpol, RCMP, etc.) that allows law enforcement agencies to intercept calls by receiving a copy of the audio of both parties and call information records.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
[[Image:Lawful-intercept-details.png|thumb|360px|Schematic showing interception of a call already routed with a Tmedia]]&lt;br /&gt;
&lt;br /&gt;
* Lawful Interception (process of intercepting a conversation)&lt;br /&gt;
* Interception target (someone under investigation by a law enforcement agency, and for whom the agency wants to intercept the calls)&lt;br /&gt;
* Law enforcement agency ( an agency that has, by law, the power to request the interception of calls to or from targets)&lt;br /&gt;
* A law enforcement agency sends to the service provider a list of targets to intercept (phone numbers)&lt;br /&gt;
* Service provider configures its equipment to intercept the target phone numbers&lt;br /&gt;
* When service provider equipment detects a call that involves a target to intercept, it&lt;br /&gt;
** Forwards a copy of call audio (both directions) to the agency through forked calls (Content of Communication link (CC link) - a call toward the agency, carrying intercepted audio)&lt;br /&gt;
** Sends information records ([[IRI]] records) to the agency&lt;br /&gt;
* The Telcobridges Lawful Interception implementation is based on specification ETSI ES 201 671 v2.1.1 (2001-09), and not CALEA, PCES, and ANSI T1.678&lt;br /&gt;
&lt;br /&gt;
==Lawful Interception Requirements==&lt;br /&gt;
&lt;br /&gt;
* Detecting target&lt;br /&gt;
** Law enforcement agency provides a list of targets (Type of intercepted targets can be from: PSTN, ISDN, GSM (CS), TETRA, GPRS (PD), UMTS (CS))&lt;br /&gt;
*** LIID (Lawful Intercept Identifier, unique identifier assigned to a target by an agency) for the target&lt;br /&gt;
*** Phone number of the target&lt;br /&gt;
*** Start and end dates and times for the interception&lt;br /&gt;
** Service provider updates targets in its equipment and equipment detects a matching calling or called number, and activates the interception &lt;br /&gt;
* Intercepting targets&lt;br /&gt;
** In a call, each call leg can be an interception target&lt;br /&gt;
** When a leg is an interception target, it's intercepted:&lt;br /&gt;
*** Audio &amp;lt;&amp;lt;from&amp;gt;&amp;gt; this leg is forked to a new outgoing call&lt;br /&gt;
*** Audio &amp;lt;&amp;lt;to&amp;gt;&amp;gt; this leg is forked to a new outgoing call&lt;br /&gt;
*** [[IRI]] records are generated for this interception&lt;br /&gt;
* Intercepting multiple targets&lt;br /&gt;
** Both legs may be independently and simultaneously intercepted&lt;br /&gt;
*** 2 pairs of forked audio outgoing calls&lt;br /&gt;
*** 2 sets of [[IRI]] records&lt;br /&gt;
&lt;br /&gt;
==Intercepting Audio==&lt;br /&gt;
&lt;br /&gt;
* For each direction (audio &amp;lt;&amp;lt;from&amp;gt;&amp;gt; and &amp;lt;&amp;lt;to&amp;gt;&amp;gt; the target):&lt;br /&gt;
** A new outgoing call leg is made, toward the agency&lt;br /&gt;
** Audio is &amp;lt;&amp;lt;forked&amp;gt;&amp;gt; (half-duplex joined)&lt;br /&gt;
* These outgoing call legs are made toward:&lt;br /&gt;
** An outgoing NAP explicitly assigned to the agency&lt;br /&gt;
** optionally, using specified calling/called numbers&lt;br /&gt;
* Forking does NOT require DSPs&lt;br /&gt;
* Audio forking is done as soon as possible&lt;br /&gt;
** Immediately for the audio &amp;lt;&amp;lt;from&amp;gt;&amp;gt; the target (this may include even the ring back tone, or may include audio from an incoming call during ringing)&lt;br /&gt;
** Upon joining with another active leg for the audio &amp;lt;&amp;lt;to&amp;gt;&amp;gt; the target&lt;br /&gt;
&lt;br /&gt;
==IRI records==&lt;br /&gt;
&lt;br /&gt;
The call data (known as Intercept Related Information or [[IRI]] in Europe and Call Data or CD in the US) consists of information about the targeted communications, including destination of a voice call (e.g., called party’s telephone number), source of a call (caller’s phone number), time of the call, duration, and more. &lt;br /&gt;
Intercept Related Information record (IRI record) is a CDR-style record that contains IRI information on an intercepted call&lt;br /&gt;
&lt;br /&gt;
===Types of IRI records===&lt;br /&gt;
&lt;br /&gt;
# IRI-BEGIN:  Indicates that the interception is starting at first event of the communication attempt, opening the IRI transaction&lt;br /&gt;
# IRI-CONTINUE: Indicates call state change at any time during the communication attempt within the IRI transaction&lt;br /&gt;
# IRI-END:  Indicates the end of the interception at the end of the communication attempt, closing the IRI transaction&lt;br /&gt;
# IRI-REPORT: General use for any non-communication related events&lt;br /&gt;
&lt;br /&gt;
For information related to an existing communication case, the record types 1 to 3 shall be used. They form an IRI&lt;br /&gt;
transaction for each communication case or communication attempt, which corresponds directly with the communication&lt;br /&gt;
phase (set-up, active or release).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For some packet-oriented data services such as GPRS, the first event of a communication attempt is the Packet Data Protocol (PDP)&lt;br /&gt;
context activation or a similar event and an IRI-BEGIN record is issued. The end of the communication attempt&lt;br /&gt;
shall be the PDP context deactivation or a similar event and an IRI-END record shall be issued. While a PDP context is&lt;br /&gt;
active, IRI-CONTINUE records are used for CC relevant IRI data records, IRI-REPORT records otherwise.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Record type 4 is used for non-communication related subscriber action, like Subscriber Controlled Input (SCI) for&lt;br /&gt;
service activation. For simple cases, it can also be used for reporting unsuccessful communication attempts.&amp;lt;br&amp;gt;&lt;br /&gt;
The record type is an explicit part of the record. The 4 record types are defined independently of target communication&lt;br /&gt;
events. The actual indication of one or several communication events, which caused the generation of an IRI record, is&lt;br /&gt;
part of further parameters in the record's information content. Consequently, the record types of the IRI&lt;br /&gt;
transactions are not related to specific messages of the signalling protocols of a communication case, and are therefore&lt;br /&gt;
independent of future enhancements of the intercepted services and of network specific features. Any transport level&lt;br /&gt;
information (i.e. higher-level services) on the target communication-state or other target communication related&lt;br /&gt;
information is contained in the information content of the IRI records.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For some packet oriented data services such as GPRS, if Lawful Interception (LI) is being activated during an already established PDP&lt;br /&gt;
context or similar, an IRI-BEGIN record will mark the start of the interception. If LI is being deactivated during an&lt;br /&gt;
established PDP context or similar, no IRI-END record will be transmitted. The end of interception can be&lt;br /&gt;
communicated to the LEA a Handover Interface Port 1 (HI1)(for Administrative Information); whereas Handover Interface Port 2 (HI2) transports IRI information and Handover Interface Port 3 (HI3) transports Content of Communication information).&lt;br /&gt;
&lt;br /&gt;
===Typical information found in an IRI record===&lt;br /&gt;
&lt;br /&gt;
* Record type (Start, Continue, End, Report)&lt;br /&gt;
* LIID&lt;br /&gt;
* CIN (communication identity number)&lt;br /&gt;
* Operator identifier&lt;br /&gt;
* Direction (target is originating, or terminating)&lt;br /&gt;
* Call state (idle, setup, connected)&lt;br /&gt;
* Duration of ring and conversation states&lt;br /&gt;
* Calling / called party numbers&lt;br /&gt;
* Release reason&lt;br /&gt;
* CC link state (setup, active, released, lack of resources)&lt;br /&gt;
* CC link release reason&lt;br /&gt;
&lt;br /&gt;
==IRI records generating==&lt;br /&gt;
&lt;br /&gt;
* IRI records are generated at various states of the interception&lt;br /&gt;
* They provide information on the interception, and call state&lt;br /&gt;
* In a call, each call leg can be an interception target&lt;br /&gt;
* When a leg is an interception target, it's intercepted:&lt;br /&gt;
** Audio «from» this leg is forked to a new outgoing call toward the agency&lt;br /&gt;
** Audio «to» this leg is forked to a new outgoing call toward the agency&lt;br /&gt;
** IRI records are generated for this interception&lt;br /&gt;
* Both legs may be independently and simultaneously intercepted&lt;br /&gt;
** 2 pairs of forked audio outgoing calls&lt;br /&gt;
** 2 sets of IRI records&lt;br /&gt;
&lt;br /&gt;
==IRI records encoding==&lt;br /&gt;
&lt;br /&gt;
* IRI records are encoded in ASN.1 (a binary encoding standard that is used by IRI records) format and using the basic encoding rules (BER).&lt;br /&gt;
* ASN.1 IDs and objects hierarchy for encoding IRI records is provided by ETSI specifications&lt;br /&gt;
&lt;br /&gt;
==IRI records values and files specification==&lt;br /&gt;
&lt;br /&gt;
* IRI records values can be&lt;br /&gt;
** Mandatory in each record&lt;br /&gt;
** In one record only for the whole call&lt;br /&gt;
** optional (in some records only, or none at all)&lt;br /&gt;
* IRI record files can&lt;br /&gt;
** Contain only one IRI record (one file per record)&lt;br /&gt;
** Contain multiple IRI records (grouped)&lt;br /&gt;
&lt;br /&gt;
==IRI records uploading to the agency==&lt;br /&gt;
&lt;br /&gt;
* As files, using the FTP protocol&lt;br /&gt;
* Telcobridges also supports SFTP as file transfer method&lt;br /&gt;
&lt;br /&gt;
==Configuring Lawful Interception==&lt;br /&gt;
&lt;br /&gt;
* Configure Lawful Agencies&lt;br /&gt;
** Summary of information required&lt;br /&gt;
*** NAP to use for CC links&lt;br /&gt;
*** FTP (or SFTP) server info (IP, port, user, password, folder)&lt;br /&gt;
*** IRI upload mode (per record, grouped)&lt;br /&gt;
** Multiple agencies can be configured&lt;br /&gt;
** Note: SFTP requires password-less login to be configured (through exchange of keys between servers)&lt;br /&gt;
* Provide the list of intercepted targets&lt;br /&gt;
** The list of intercepted targets is provided as a CSV file&lt;br /&gt;
*** Uploaded in the &amp;lt;&amp;lt;File DB&amp;gt;&amp;gt; section of the Web Portal&lt;br /&gt;
*** Required columns:&lt;br /&gt;
**** liid&lt;br /&gt;
**** number&lt;br /&gt;
*** Optional columns&lt;br /&gt;
**** start&lt;br /&gt;
**** end&lt;br /&gt;
** Example&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
liid,number,start,end&lt;br /&gt;
John Smith,555-0001,2012-10-24T00:00:00-05:00,2012-10-24T23:59:59-05:00&lt;br /&gt;
Joe Dalton,333-3007,2012-01-01T00:00:00-05:00,2012-12-31T23:59:59-05:00&lt;br /&gt;
Ben Laden,022-44-66-33-11&lt;br /&gt;
Ben Yi,450-621-1990&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*[[Toolpack:Enable Lawful Interception in Routing Script B|Enable Lawful Interception in a Routing Scripts]] ([[Toolpack:Enable Lawful Interception in Routing Script A|For Toolpack 2.7]])&lt;br /&gt;
** The &amp;lt;&amp;lt;lawful interception&amp;gt;&amp;gt; routing script filter is provided with toolpack&lt;br /&gt;
** Users only need to &amp;lt;&amp;lt;include&amp;gt;&amp;gt; it in their current routing script&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require 'lawful_intercept'&lt;br /&gt;
(...)&lt;br /&gt;
   include LawfulIntercept&lt;br /&gt;
(...)&lt;br /&gt;
   after_filter :method =&amp;gt; :enable_lawful_intercept&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* For more information on Routing Scripts, please see [[Routing script tutorial:Mini Development Guide|mini development guide]]&lt;br /&gt;
&lt;br /&gt;
==Lawful Interception Statistics==&lt;br /&gt;
&lt;br /&gt;
* Live statistics and statistics history&lt;br /&gt;
** The Web Portal provides Lawful Interception statistics&lt;br /&gt;
*** Global&lt;br /&gt;
*** Per agency&lt;br /&gt;
** Available statistics are&lt;br /&gt;
*** Total / current intercepted calls&lt;br /&gt;
*** Total IRI records generated&lt;br /&gt;
*** Total IRI records dropped&lt;br /&gt;
*** Total failed interceptions&lt;br /&gt;
*** IRI records upload queue length and state&lt;br /&gt;
*** ... and a few more&lt;br /&gt;
&lt;br /&gt;
==IRI records decoding==&lt;br /&gt;
As IRI record is encoded in ASN.1 format, some online ASN.1 decoders are also available to check the IRI record. Upload a message/PDU/record file, and the decoded data can be downloaded as a text file in the ASN.1 Value Notation format.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Lawful_interception Wikipedia lawful intercept article]&lt;br /&gt;
* [https://www.etsi.org/deliver/etsi_es/201600_201699/201671/03.02.01_60/es_201671v030201p.pdf ETSI ES 201 671 V3.2.1 (2018-05)]&lt;br /&gt;
* [http://asn1-playground.oss.com/ ASN.1 Playground - learn, play, test]&lt;br /&gt;
* [https://www.marben-products.com/asn.1/services/decoder-asn1-security.html Free Online Security ASN.1 Messages Decoder]&lt;br /&gt;
* [https://holtstrom.com/michael/tools/asn1decoder.php ASN.1 decoder]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Tmedia_Routing</id>
		<title>Tmedia Routing</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Tmedia_Routing"/>
				<updated>2019-05-30T19:29:17Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* After remap (after_remap) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Static routing table  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Gateway_Static_Routes.png|Static Routes]]&lt;br /&gt;
&lt;br /&gt;
=== Basic route matching ===&lt;br /&gt;
The static routing table uses parameters from the incoming call to locate a route and then make a routing decision. These parameters are called incoming call attributes. Three parameters are verified:&amp;lt;br&amp;gt; &lt;br /&gt;
A route will match an incoming call if all the route matching parameters are met.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Multiple routes may be a match for a call.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following criteria are available for basic route matching:&lt;br /&gt;
*Called number &lt;br /&gt;
*Calling number &lt;br /&gt;
*Incoming Network Access Point (NAP)&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number matching ====&lt;br /&gt;
Calling / called number matching works as follows:&lt;br /&gt;
*'''Field can be empty: '''this means any number will match &lt;br /&gt;
*'''Field can be a specific number: '''this means the exact number must match &lt;br /&gt;
*'''Field can be a regular expression match:'''&lt;br /&gt;
*'''Field can be a sip user and sip host:''' such as user@sip_host:sip_port&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Number Routing filter example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^1?450[0-9]{7}$/&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match an optional 1, followed by 450, then 7 digits&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; SIP user/host routing example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. 5551212@abc.com&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match exactly 5551212 for sip host abc.com only &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NAP matching ====&lt;br /&gt;
The Network Access Point can be SS7, ISDN, CAS or SIP.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic (per-route) call attributes remapping ===&lt;br /&gt;
Once the route(s) have been chosen, some call parameters can be modified using the parameters of the route: &lt;br /&gt;
==== Outgoing call parameters remapping ====&lt;br /&gt;
*'''Remapped Called Number:''' New called number used on the outgoing calls &lt;br /&gt;
*'''Remapped Calling Number: '''New calling number used on the outgoing calls &lt;br /&gt;
*'''Remapped NAP:''' determines on which Network Access Point (NAP)&amp;amp;nbsp;the outgoing calls are sent. &lt;br /&gt;
*'''Outgoing call remapped Profile: '''Select the profile to use with the outgoing call when this route is used, otherwise NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Source call leg parameters remapping ====&lt;br /&gt;
Some parameters of the source call leg can also be modified:&lt;br /&gt;
*'''Source call remapped Profile: '''Select the profile to use with the source call leg when this route is used, otherwise the NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number remapping options ====&lt;br /&gt;
Calling / called number remapping works as follows:&lt;br /&gt;
*'''Field can be empty:''' In this case, the called/calling numbers from the incoming call are used for the outgoing call. &lt;br /&gt;
*'''Field can be a specific number:''' This number will be used as called (or calling) number for the outgoing call.&lt;br /&gt;
*'''Field can be a regular expression:''' Allows building the outgoing call's calling/called number through matching/replacement of incoming calling/called number. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; For example, post routing translation (remap)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^450([0-9]*)$/\514\2&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This regular expression replaces 450 with 514&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For a complete example, refer to: [[Toolpack: How to Use RegEx in Remapped Called and Calling Number Mask|How To Use Regular Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Multiple routes matching ===&lt;br /&gt;
The remapping parameters above (both for incoming and outgoing calls) are independent for each route.&amp;lt;br&amp;gt;&lt;br /&gt;
This allows different routes to use different NAPs, and remap the calling/called numbers differently.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ordering the routes ====&lt;br /&gt;
When multiple routes match the incoming call, the default routing script (simple_routing) will order by priority and weight.&amp;lt;br&amp;gt;&lt;br /&gt;
* Note: older routing scripts did not have priority routing enabled by default, you may need to manually update your routing scripts to enable priority routing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each route has a &amp;quot;priority&amp;quot; attribute, and a &amp;quot;weight&amp;quot; attribute. All matching routes for a given call will be ordered by priority.&amp;lt;br&amp;gt;&lt;br /&gt;
Load-sharing (based on each route's &amp;quot;weight&amp;quot;) will be applied if multiple matching routes have the same priority.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's also possible to prioritize matching routes using others algorithms, by customizing routing scripts.&lt;br /&gt;
A few examples:&lt;br /&gt;
* Round robin&lt;br /&gt;
* Least cost&lt;br /&gt;
* Per period of the day&lt;br /&gt;
&lt;br /&gt;
==== Route retry ====&lt;br /&gt;
If multiple routes match for a call, call retry may be done on subsequent routes upon failure making outgoing call on a route. For more information about route retry, refer to the following page: [[Route_retry|Route Retry]].&lt;br /&gt;
&lt;br /&gt;
=== Routes limitation ===&lt;br /&gt;
&amp;lt;u&amp;gt;Up to 2000 routes&amp;lt;/u&amp;gt; can be entered in the static routing table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: When the number of routes becomes large, this may be a sign that more advanced routing should be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 For information about label route handling, refer to [[Tmedia_Routing#Label_routing|Label Routing]] or contact [[Support:Contacting_TelcoBridges_technical_support|TelcoBridges Support]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting / importing routes ===&lt;br /&gt;
You can import or export the static routing table using the web portal. Go to: &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Export Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Import Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; This is the default configuration of the Media Gateway&lt;br /&gt;
&lt;br /&gt;
== Standard Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Standard scripts are used to modify the behavior of the static routing.&amp;amp;nbsp; It allows for the prioritization of routes, load sharing amongst multiple endpoints, or the modification of some call parameters. It can be enabled on any system in just a few steps. The following is a list of Scripts supported today:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''Simple routing (simple_routing.rb):''' Script used for the static routing table, and supports priority and weight routing per route or NAP.&lt;br /&gt;
*'''Priority routing (priority_and_weight_load_balancer.rb):''' This script routes calls according to a priority setting of matching routes. Each route has its own priority setting (if not, taken from the outgoing call's NAP priority). The [:priority] field column needs to be added in the routes and NAPs page. A smaller [:priority] value has more priority. If more than 1 route matches, the route with the lowest NAP priority will be selected first. Routes with the same priority will be randomly ordered using the &amp;quot;weight&amp;quot; column so load is distributed among routes with same priority. &lt;br /&gt;
*'''ASR routing (asr_routing.rb):''' This script routes calls according to the ASR values of the destination naps. This kind of routing will try to improve overall system ASR by always using the best NAPs. It will also improve client perception by cleanly dropping calls that would almost certainly fail anyway. &lt;br /&gt;
*'''Nature of Address and Numbering plan indicator remapping (noa_npi_remap.rb): '''Enables the modification of the NOA and NPI values on outgoing calls. &lt;br /&gt;
*'''Least Cost Routing (least_cost_routing.rb):''' This script routes calls according to the cost values (which may depend on the time) of the routes. This is useful for cases when a route's popularity (cost) depends on the time of the day. This is done by adding different columns to the static routing tables (for example [:cost_0_6]) and filling them up with values for each route.&lt;br /&gt;
&lt;br /&gt;
Learn how to setup Standard Scripts in your gateway by following these steps: [[How to Setup Standard Scripts|How to Setup Standard Scripts]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other standard routing scripts implement Filters and are covered in the next section.&lt;br /&gt;
&lt;br /&gt;
== Filters  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Adds functionality to standard scripts. Filters can be added to any standard script in a few steps. For example, you may want to remove the '1' prefix for uniformed routing, select the SIP Request URI to route the call instead of the called number, and more. &lt;br /&gt;
&lt;br /&gt;
=== Types of filters ===&lt;br /&gt;
The following type of filters can be attached to a routing script, and they are applied in the following order&lt;br /&gt;
# before_filter  -&amp;gt; Analyze/modify the call attributes before other filters are applied&lt;br /&gt;
# route_match    -&amp;gt; Eliminates routes based on some matching criteria&lt;br /&gt;
# order_route    -&amp;gt; Change the order of matching routes&lt;br /&gt;
# after_filter   -&amp;gt; Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created&lt;br /&gt;
# route_remap    -&amp;gt; Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes&lt;br /&gt;
# after_remap    -&amp;gt; Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
==== Before filter (before_filter) ====&lt;br /&gt;
* Adds pre-processing on incoming parameters before other filters are applied&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attributes before other filters process the call&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  before_filter :method =&amp;gt; :my_custom_before_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :call]      Hash of call attributes of the incoming call to route.&lt;br /&gt;
    #                        Can be modified. Will affect subsequent filters, and routing output.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route match (route_match) ====&lt;br /&gt;
Eliminates routes based on some matching criteria.&lt;br /&gt;
&lt;br /&gt;
* Generally simply matching a call attribute with a route attribute.&lt;br /&gt;
* Any route with attribute not matching the corresponding call attribute is eliminated. &lt;br /&gt;
* A route with empty attribute is considered matching any call&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Match the call attribute :called with the route attribute with same name:&lt;br /&gt;
  route_match :call_field_name =&amp;gt; :called&lt;br /&gt;
* Match the call attribute :private_address with the route attribute :calling &lt;br /&gt;
  route_match :call_field_name =&amp;gt; :private_address , call_field_name =&amp;gt; :calling&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_match :method =&amp;gt; :my_custom_matching, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_matching( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  # Must return true if route matches, false otherwise&lt;br /&gt;
  def my_custom_matching( route, call, naps )&lt;br /&gt;
    # route contains the route to match.&lt;br /&gt;
    # call contains the incoming call attributes to match with the route.&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Order route (order_route) ====&lt;br /&gt;
Change the order of matching routes based on a given route attribute.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  order_route :route_field_name =&amp;gt; :priority&lt;br /&gt;
&lt;br /&gt;
==== After filter (after_filter) ====&lt;br /&gt;
* Filter that is applied after matching routes have been selected and ordered.&lt;br /&gt;
* Can modify the incoming call attributes before the outgoing calls are created.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_filter :method =&amp;gt; :my_custom_after_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_filter( params )&lt;br /&gt;
    # See my_custom_before_filter above for details about params&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route remap (route_remap) ====&lt;br /&gt;
* Called once per matching route.&lt;br /&gt;
* Perform per-route remapping of some call attributes, based on per-route attributes.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Remap the call attribute :called with the route attribute :remapped_called&lt;br /&gt;
  route_remap :call_field_name =&amp;gt; :called, :route_field_name =&amp;gt; :remapped_called&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_remap :method =&amp;gt; :my_custom_remap, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_remap( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per matching route for a given incoming call&lt;br /&gt;
  def my_custom_remap( route, caf_call, naps, call )&lt;br /&gt;
    # route contains the route to apply remapping for&lt;br /&gt;
    # caf_call should be ignored (legacy)&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    # call contains the outgoing call attributes that can be remapped.&lt;br /&gt;
&lt;br /&gt;
    return call&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== After remap (after_remap) ====&lt;br /&gt;
* Last filters to be applied.&lt;br /&gt;
* Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes.&lt;br /&gt;
* Can modify the outgoing calls.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_remap_filter :method =&amp;gt; :my_custom_after_remap_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_remap_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_remap_filter( params )&lt;br /&gt;
    #  - params[ :call]      Hash of call attributes of the incoming call.&lt;br /&gt;
    #                        Useless to modify, because has been copied to params[ :out_calls ] for each matching route&lt;br /&gt;
    #  - params[ :out_calls ] Array of all outgoing call to be created (corresponding to each matching route).&lt;br /&gt;
    #                        Can be modified to customize each outgoing call attempt.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
=== Filter Scripts examples:  ===&lt;br /&gt;
&lt;br /&gt;
*'''priority_and_weight_load_balancer.rb:''' After filter that will reorder routes by priority and weight (load sharing per weight for routes with the same priority)&lt;br /&gt;
*'''forward_sip_domain.rb:''' Route remap filter that will, per route, control forwarding of sip domain of various SIP headers (forward domains, else replace by local IP / proxy IP)&lt;br /&gt;
*'''sip_header_params.rb:''' After remap filter that will add specified parameters to specified SIP headers&lt;br /&gt;
*'''Black and White listing (black_white_listing.rb):''' With this script, any called or calling number prefix can be blacklisted or whitelisted. This script can be assigned globally, or per NAP. It reads a .csv file which has the called and calling number list. See [[Adding White or Black listing to Routing Script]]&lt;br /&gt;
*'''lawful_intercept.rb:''' Script that will identify some calls to perform lawful interception on (by calling/called number matching from a .csv file)&lt;br /&gt;
&lt;br /&gt;
Learn how to add a Filter to normal scripts: [[How to Setup Filters|How to setup Filters]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Label routing&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts&lt;br /&gt;
Gateway -&amp;amp;gt; FileDb&lt;br /&gt;
Gateway -&amp;amp;gt; Routesets &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Label routing was created because in some cases, regular expressions cannot be used on the called number to define a route. &lt;br /&gt;
&lt;br /&gt;
Problem: Having thousands of destination numbers (N), and possibly one route per number per Network Provider (M), resulting in N*M routes&amp;lt;br&amp;gt;Solution: Create labels for each groups of numbers (L) and let the system determine the route, resulting in L*M routes, where L &amp;amp;lt; N &lt;br /&gt;
&lt;br /&gt;
A Label is a virtual group of destination numbers. This virtual group has a list of numbers assigned to it in a CSV file.&amp;lt;br&amp;gt;This process does the routing in 2 stages:&amp;lt;br&amp;gt;1st stage - Find a Label: Find longest prefix match entry for the called number. This leads to only one destination Label. This is the Digitmap file.&amp;lt;br&amp;gt;2nd stage - Find the NAPs serving a Label: All routes tied to this Label are eligible for routing the call. This is the routeset definition file. &lt;br /&gt;
&lt;br /&gt;
What are the advantages compared to static routing?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Can have thousands of numbers &lt;br /&gt;
*It uses a non linear search algorithms; therefore, there is no overhead to having a large amount of numbers. Label routing was tested with 5 million entries.&lt;br /&gt;
*Variables can be added to the routeset definition file to use other filter scripts and have even more flexibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Example usage:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*NPA-NXX routing &lt;br /&gt;
*Blacklisting &lt;br /&gt;
*Tandem switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
See here for complete details: [[Routeset Routing|Label routing]] and [[Adding_Label_Routing_to_any_Routing_Script|Adding Label Routing to any Routing Script]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Custom Routing Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Customers can create their own routing scripts using a Scriptable Routing Engine based on Ruby. These scripts can be imported and exported from the Web portal.&amp;lt;br&amp;gt;These scripts can run complex routing algorithms and post routing translation, as well as other advanced functions. It is also possible to modify standard Scripts, or filters, to satisfy more complex scenarios&amp;lt;br&amp;gt;The functions have control over many call parameters such as:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Calling &lt;br /&gt;
*Called &lt;br /&gt;
*Nature of Address &lt;br /&gt;
*Calling Presentation &lt;br /&gt;
*Calling Screening &lt;br /&gt;
*Redirecting Number &lt;br /&gt;
*Original Called Number, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The complete list is in the [[Routing script tutorial:Mini Development Guide|Routing Script Tutorial]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Custom routing script are kept on software upgrades. Versionning of routing scripts needs to be handled by the operator of the unit. The new scripts (with the same names, but a new version) can be manually replaced directly in the routing script page.&amp;lt;br&amp;gt;It is possible to test routing scripts directly from the web portal before activating them in a live system.&amp;lt;br&amp;gt;For complete details, refer to [[Scriptable Routing Engine|Scriptable Routing Engine]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Playing prompts&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request for prompts playback at various states of the call. See  [[Routing_script_tutorial:Mini_Development_Guide#Playing_prompts_announcements_or_tones|Playing prompts announcements or tones]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Recording calls&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request the recording of incoming and/or outgoing call legs to audio files. See  [[Routing_script_tutorial:Mini_Development_Guide#Recording_call_legs|Recording Calls]].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Route retry&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
The routing engine returns all matching routes to the system. The TMG-CONTROL then generates an outgoing call using the first route in the list. If the call fails, the TMG-CONTROL may or may not generate another call, according to the error code received. &lt;br /&gt;
&lt;br /&gt;
The route retry will proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Service unavailable &lt;br /&gt;
*Circuit not available &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
The route retry will not proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*User busy &lt;br /&gt;
*Unallocated number &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You can modify the route-retry sequence (continue or discontinue) to handle unsuccessful routes. For more information, refer to the NAP profile. For more details see the route retry page.&amp;lt;br&amp;gt;These parameters can be modified here:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Profiles -&amp;amp;gt; default [Edit] -&amp;amp;gt; Edit Reason Cause mapping &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Route retry is enabled by default. Timers and conditions on route retry can be adjusted from the configuration:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Configurations -&amp;amp;gt; Advanced &amp;lt;/pre&amp;gt; &lt;br /&gt;
NOTE: The route-retry feature is available for other types of routing as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For more details, see the [[Route retry|Route Retry]] page&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;br /&gt;
&lt;br /&gt;
== Related actions ==&lt;br /&gt;
'''Refer to the appropriate Toolpack release:'''&lt;br /&gt;
&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_D|Call Routes Settings v3.0]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_C|Call Routes Settings v2.10]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_B|Call Routes Settings v2.9]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_A|Call Routes Settings v2.8]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;other versions&amp;quot; data-expandtext=&amp;quot;Click here for other versions&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.7#Routes|Web Portal v2.7: Routes Configuration]]&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.6#Routes|Web Portal v2.6: Routes Configuration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Tmedia_Routing</id>
		<title>Tmedia Routing</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Tmedia_Routing"/>
				<updated>2019-05-30T19:28:18Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* After filter (after_filter) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Static routing table  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Gateway_Static_Routes.png|Static Routes]]&lt;br /&gt;
&lt;br /&gt;
=== Basic route matching ===&lt;br /&gt;
The static routing table uses parameters from the incoming call to locate a route and then make a routing decision. These parameters are called incoming call attributes. Three parameters are verified:&amp;lt;br&amp;gt; &lt;br /&gt;
A route will match an incoming call if all the route matching parameters are met.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Multiple routes may be a match for a call.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following criteria are available for basic route matching:&lt;br /&gt;
*Called number &lt;br /&gt;
*Calling number &lt;br /&gt;
*Incoming Network Access Point (NAP)&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number matching ====&lt;br /&gt;
Calling / called number matching works as follows:&lt;br /&gt;
*'''Field can be empty: '''this means any number will match &lt;br /&gt;
*'''Field can be a specific number: '''this means the exact number must match &lt;br /&gt;
*'''Field can be a regular expression match:'''&lt;br /&gt;
*'''Field can be a sip user and sip host:''' such as user@sip_host:sip_port&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Number Routing filter example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^1?450[0-9]{7}$/&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match an optional 1, followed by 450, then 7 digits&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; SIP user/host routing example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. 5551212@abc.com&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match exactly 5551212 for sip host abc.com only &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NAP matching ====&lt;br /&gt;
The Network Access Point can be SS7, ISDN, CAS or SIP.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic (per-route) call attributes remapping ===&lt;br /&gt;
Once the route(s) have been chosen, some call parameters can be modified using the parameters of the route: &lt;br /&gt;
==== Outgoing call parameters remapping ====&lt;br /&gt;
*'''Remapped Called Number:''' New called number used on the outgoing calls &lt;br /&gt;
*'''Remapped Calling Number: '''New calling number used on the outgoing calls &lt;br /&gt;
*'''Remapped NAP:''' determines on which Network Access Point (NAP)&amp;amp;nbsp;the outgoing calls are sent. &lt;br /&gt;
*'''Outgoing call remapped Profile: '''Select the profile to use with the outgoing call when this route is used, otherwise NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Source call leg parameters remapping ====&lt;br /&gt;
Some parameters of the source call leg can also be modified:&lt;br /&gt;
*'''Source call remapped Profile: '''Select the profile to use with the source call leg when this route is used, otherwise the NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number remapping options ====&lt;br /&gt;
Calling / called number remapping works as follows:&lt;br /&gt;
*'''Field can be empty:''' In this case, the called/calling numbers from the incoming call are used for the outgoing call. &lt;br /&gt;
*'''Field can be a specific number:''' This number will be used as called (or calling) number for the outgoing call.&lt;br /&gt;
*'''Field can be a regular expression:''' Allows building the outgoing call's calling/called number through matching/replacement of incoming calling/called number. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; For example, post routing translation (remap)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^450([0-9]*)$/\514\2&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This regular expression replaces 450 with 514&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For a complete example, refer to: [[Toolpack: How to Use RegEx in Remapped Called and Calling Number Mask|How To Use Regular Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Multiple routes matching ===&lt;br /&gt;
The remapping parameters above (both for incoming and outgoing calls) are independent for each route.&amp;lt;br&amp;gt;&lt;br /&gt;
This allows different routes to use different NAPs, and remap the calling/called numbers differently.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ordering the routes ====&lt;br /&gt;
When multiple routes match the incoming call, the default routing script (simple_routing) will order by priority and weight.&amp;lt;br&amp;gt;&lt;br /&gt;
* Note: older routing scripts did not have priority routing enabled by default, you may need to manually update your routing scripts to enable priority routing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each route has a &amp;quot;priority&amp;quot; attribute, and a &amp;quot;weight&amp;quot; attribute. All matching routes for a given call will be ordered by priority.&amp;lt;br&amp;gt;&lt;br /&gt;
Load-sharing (based on each route's &amp;quot;weight&amp;quot;) will be applied if multiple matching routes have the same priority.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's also possible to prioritize matching routes using others algorithms, by customizing routing scripts.&lt;br /&gt;
A few examples:&lt;br /&gt;
* Round robin&lt;br /&gt;
* Least cost&lt;br /&gt;
* Per period of the day&lt;br /&gt;
&lt;br /&gt;
==== Route retry ====&lt;br /&gt;
If multiple routes match for a call, call retry may be done on subsequent routes upon failure making outgoing call on a route. For more information about route retry, refer to the following page: [[Route_retry|Route Retry]].&lt;br /&gt;
&lt;br /&gt;
=== Routes limitation ===&lt;br /&gt;
&amp;lt;u&amp;gt;Up to 2000 routes&amp;lt;/u&amp;gt; can be entered in the static routing table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: When the number of routes becomes large, this may be a sign that more advanced routing should be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 For information about label route handling, refer to [[Tmedia_Routing#Label_routing|Label Routing]] or contact [[Support:Contacting_TelcoBridges_technical_support|TelcoBridges Support]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting / importing routes ===&lt;br /&gt;
You can import or export the static routing table using the web portal. Go to: &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Export Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Import Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; This is the default configuration of the Media Gateway&lt;br /&gt;
&lt;br /&gt;
== Standard Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Standard scripts are used to modify the behavior of the static routing.&amp;amp;nbsp; It allows for the prioritization of routes, load sharing amongst multiple endpoints, or the modification of some call parameters. It can be enabled on any system in just a few steps. The following is a list of Scripts supported today:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''Simple routing (simple_routing.rb):''' Script used for the static routing table, and supports priority and weight routing per route or NAP.&lt;br /&gt;
*'''Priority routing (priority_and_weight_load_balancer.rb):''' This script routes calls according to a priority setting of matching routes. Each route has its own priority setting (if not, taken from the outgoing call's NAP priority). The [:priority] field column needs to be added in the routes and NAPs page. A smaller [:priority] value has more priority. If more than 1 route matches, the route with the lowest NAP priority will be selected first. Routes with the same priority will be randomly ordered using the &amp;quot;weight&amp;quot; column so load is distributed among routes with same priority. &lt;br /&gt;
*'''ASR routing (asr_routing.rb):''' This script routes calls according to the ASR values of the destination naps. This kind of routing will try to improve overall system ASR by always using the best NAPs. It will also improve client perception by cleanly dropping calls that would almost certainly fail anyway. &lt;br /&gt;
*'''Nature of Address and Numbering plan indicator remapping (noa_npi_remap.rb): '''Enables the modification of the NOA and NPI values on outgoing calls. &lt;br /&gt;
*'''Least Cost Routing (least_cost_routing.rb):''' This script routes calls according to the cost values (which may depend on the time) of the routes. This is useful for cases when a route's popularity (cost) depends on the time of the day. This is done by adding different columns to the static routing tables (for example [:cost_0_6]) and filling them up with values for each route.&lt;br /&gt;
&lt;br /&gt;
Learn how to setup Standard Scripts in your gateway by following these steps: [[How to Setup Standard Scripts|How to Setup Standard Scripts]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other standard routing scripts implement Filters and are covered in the next section.&lt;br /&gt;
&lt;br /&gt;
== Filters  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Adds functionality to standard scripts. Filters can be added to any standard script in a few steps. For example, you may want to remove the '1' prefix for uniformed routing, select the SIP Request URI to route the call instead of the called number, and more. &lt;br /&gt;
&lt;br /&gt;
=== Types of filters ===&lt;br /&gt;
The following type of filters can be attached to a routing script, and they are applied in the following order&lt;br /&gt;
# before_filter  -&amp;gt; Analyze/modify the call attributes before other filters are applied&lt;br /&gt;
# route_match    -&amp;gt; Eliminates routes based on some matching criteria&lt;br /&gt;
# order_route    -&amp;gt; Change the order of matching routes&lt;br /&gt;
# after_filter   -&amp;gt; Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created&lt;br /&gt;
# route_remap    -&amp;gt; Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes&lt;br /&gt;
# after_remap    -&amp;gt; Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
==== Before filter (before_filter) ====&lt;br /&gt;
* Adds pre-processing on incoming parameters before other filters are applied&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attributes before other filters process the call&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  before_filter :method =&amp;gt; :my_custom_before_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :call]      Hash of call attributes of the incoming call to route.&lt;br /&gt;
    #                        Can be modified. Will affect subsequent filters, and routing output.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route match (route_match) ====&lt;br /&gt;
Eliminates routes based on some matching criteria.&lt;br /&gt;
&lt;br /&gt;
* Generally simply matching a call attribute with a route attribute.&lt;br /&gt;
* Any route with attribute not matching the corresponding call attribute is eliminated. &lt;br /&gt;
* A route with empty attribute is considered matching any call&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Match the call attribute :called with the route attribute with same name:&lt;br /&gt;
  route_match :call_field_name =&amp;gt; :called&lt;br /&gt;
* Match the call attribute :private_address with the route attribute :calling &lt;br /&gt;
  route_match :call_field_name =&amp;gt; :private_address , call_field_name =&amp;gt; :calling&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_match :method =&amp;gt; :my_custom_matching, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_matching( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  # Must return true if route matches, false otherwise&lt;br /&gt;
  def my_custom_matching( route, call, naps )&lt;br /&gt;
    # route contains the route to match.&lt;br /&gt;
    # call contains the incoming call attributes to match with the route.&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Order route (order_route) ====&lt;br /&gt;
Change the order of matching routes based on a given route attribute.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  order_route :route_field_name =&amp;gt; :priority&lt;br /&gt;
&lt;br /&gt;
==== After filter (after_filter) ====&lt;br /&gt;
* Filter that is applied after matching routes have been selected and ordered.&lt;br /&gt;
* Can modify the incoming call attributes before the outgoing calls are created.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_filter :method =&amp;gt; :my_custom_after_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_filter( params )&lt;br /&gt;
    # See my_custom_before_filter above for details about params&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route remap (route_remap) ====&lt;br /&gt;
* Called once per matching route.&lt;br /&gt;
* Perform per-route remapping of some call attributes, based on per-route attributes.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Remap the call attribute :called with the route attribute :remapped_called&lt;br /&gt;
  route_remap :call_field_name =&amp;gt; :called, :route_field_name =&amp;gt; :remapped_called&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_remap :method =&amp;gt; :my_custom_remap, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_remap( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per matching route for a given incoming call&lt;br /&gt;
  def my_custom_remap( route, caf_call, naps, call )&lt;br /&gt;
    # route contains the route to apply remapping for&lt;br /&gt;
    # caf_call should be ignored (legacy)&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    # call contains the outgoing call attributes that can be remapped.&lt;br /&gt;
&lt;br /&gt;
    return call&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== After remap (after_remap) ====&lt;br /&gt;
* Last filters to be applied.&lt;br /&gt;
* Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes.&lt;br /&gt;
* Can modify the outgoing calls.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_remap_filter :method =&amp;gt; :my_custom_after_remap_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_remap_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_remap_filter( params )&lt;br /&gt;
    #  - params[ :out_calls] Array of all outgoing call to be created (corresponding to each matching route).&lt;br /&gt;
    #                        Can be modified to customize each outgoing call attempt.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
=== Filter Scripts examples:  ===&lt;br /&gt;
&lt;br /&gt;
*'''priority_and_weight_load_balancer.rb:''' After filter that will reorder routes by priority and weight (load sharing per weight for routes with the same priority)&lt;br /&gt;
*'''forward_sip_domain.rb:''' Route remap filter that will, per route, control forwarding of sip domain of various SIP headers (forward domains, else replace by local IP / proxy IP)&lt;br /&gt;
*'''sip_header_params.rb:''' After remap filter that will add specified parameters to specified SIP headers&lt;br /&gt;
*'''Black and White listing (black_white_listing.rb):''' With this script, any called or calling number prefix can be blacklisted or whitelisted. This script can be assigned globally, or per NAP. It reads a .csv file which has the called and calling number list. See [[Adding White or Black listing to Routing Script]]&lt;br /&gt;
*'''lawful_intercept.rb:''' Script that will identify some calls to perform lawful interception on (by calling/called number matching from a .csv file)&lt;br /&gt;
&lt;br /&gt;
Learn how to add a Filter to normal scripts: [[How to Setup Filters|How to setup Filters]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Label routing&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts&lt;br /&gt;
Gateway -&amp;amp;gt; FileDb&lt;br /&gt;
Gateway -&amp;amp;gt; Routesets &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Label routing was created because in some cases, regular expressions cannot be used on the called number to define a route. &lt;br /&gt;
&lt;br /&gt;
Problem: Having thousands of destination numbers (N), and possibly one route per number per Network Provider (M), resulting in N*M routes&amp;lt;br&amp;gt;Solution: Create labels for each groups of numbers (L) and let the system determine the route, resulting in L*M routes, where L &amp;amp;lt; N &lt;br /&gt;
&lt;br /&gt;
A Label is a virtual group of destination numbers. This virtual group has a list of numbers assigned to it in a CSV file.&amp;lt;br&amp;gt;This process does the routing in 2 stages:&amp;lt;br&amp;gt;1st stage - Find a Label: Find longest prefix match entry for the called number. This leads to only one destination Label. This is the Digitmap file.&amp;lt;br&amp;gt;2nd stage - Find the NAPs serving a Label: All routes tied to this Label are eligible for routing the call. This is the routeset definition file. &lt;br /&gt;
&lt;br /&gt;
What are the advantages compared to static routing?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Can have thousands of numbers &lt;br /&gt;
*It uses a non linear search algorithms; therefore, there is no overhead to having a large amount of numbers. Label routing was tested with 5 million entries.&lt;br /&gt;
*Variables can be added to the routeset definition file to use other filter scripts and have even more flexibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Example usage:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*NPA-NXX routing &lt;br /&gt;
*Blacklisting &lt;br /&gt;
*Tandem switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
See here for complete details: [[Routeset Routing|Label routing]] and [[Adding_Label_Routing_to_any_Routing_Script|Adding Label Routing to any Routing Script]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Custom Routing Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Customers can create their own routing scripts using a Scriptable Routing Engine based on Ruby. These scripts can be imported and exported from the Web portal.&amp;lt;br&amp;gt;These scripts can run complex routing algorithms and post routing translation, as well as other advanced functions. It is also possible to modify standard Scripts, or filters, to satisfy more complex scenarios&amp;lt;br&amp;gt;The functions have control over many call parameters such as:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Calling &lt;br /&gt;
*Called &lt;br /&gt;
*Nature of Address &lt;br /&gt;
*Calling Presentation &lt;br /&gt;
*Calling Screening &lt;br /&gt;
*Redirecting Number &lt;br /&gt;
*Original Called Number, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The complete list is in the [[Routing script tutorial:Mini Development Guide|Routing Script Tutorial]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Custom routing script are kept on software upgrades. Versionning of routing scripts needs to be handled by the operator of the unit. The new scripts (with the same names, but a new version) can be manually replaced directly in the routing script page.&amp;lt;br&amp;gt;It is possible to test routing scripts directly from the web portal before activating them in a live system.&amp;lt;br&amp;gt;For complete details, refer to [[Scriptable Routing Engine|Scriptable Routing Engine]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Playing prompts&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request for prompts playback at various states of the call. See  [[Routing_script_tutorial:Mini_Development_Guide#Playing_prompts_announcements_or_tones|Playing prompts announcements or tones]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Recording calls&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request the recording of incoming and/or outgoing call legs to audio files. See  [[Routing_script_tutorial:Mini_Development_Guide#Recording_call_legs|Recording Calls]].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Route retry&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
The routing engine returns all matching routes to the system. The TMG-CONTROL then generates an outgoing call using the first route in the list. If the call fails, the TMG-CONTROL may or may not generate another call, according to the error code received. &lt;br /&gt;
&lt;br /&gt;
The route retry will proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Service unavailable &lt;br /&gt;
*Circuit not available &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
The route retry will not proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*User busy &lt;br /&gt;
*Unallocated number &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You can modify the route-retry sequence (continue or discontinue) to handle unsuccessful routes. For more information, refer to the NAP profile. For more details see the route retry page.&amp;lt;br&amp;gt;These parameters can be modified here:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Profiles -&amp;amp;gt; default [Edit] -&amp;amp;gt; Edit Reason Cause mapping &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Route retry is enabled by default. Timers and conditions on route retry can be adjusted from the configuration:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Configurations -&amp;amp;gt; Advanced &amp;lt;/pre&amp;gt; &lt;br /&gt;
NOTE: The route-retry feature is available for other types of routing as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For more details, see the [[Route retry|Route Retry]] page&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;br /&gt;
&lt;br /&gt;
== Related actions ==&lt;br /&gt;
'''Refer to the appropriate Toolpack release:'''&lt;br /&gt;
&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_D|Call Routes Settings v3.0]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_C|Call Routes Settings v2.10]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_B|Call Routes Settings v2.9]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_A|Call Routes Settings v2.8]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;other versions&amp;quot; data-expandtext=&amp;quot;Click here for other versions&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.7#Routes|Web Portal v2.7: Routes Configuration]]&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.6#Routes|Web Portal v2.6: Routes Configuration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Routing_script_tutorial:Mini_Development_Guide</id>
		<title>Routing script tutorial:Mini Development Guide</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Routing_script_tutorial:Mini_Development_Guide"/>
				<updated>2019-05-15T13:00:58Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* Script parameters protocol mapping */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Call object  ==&lt;br /&gt;
&lt;br /&gt;
=== Get  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to get the call parameters. The possible parameters are described in the section &amp;quot;Call parameters&amp;quot; &lt;br /&gt;
&lt;br /&gt;
  called_number = caf_call.get&amp;amp;nbsp;:called&lt;br /&gt;
&lt;br /&gt;
=== List_params  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to retrieve the list of supported call parameters. For example to extract all the possible call parameters from the the call object and put it in hash. &lt;br /&gt;
&lt;br /&gt;
  caf_call.list_params.each {|param| call[param] = caf_call.get param }&lt;br /&gt;
&lt;br /&gt;
=== Accept  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to accept a call.  It actually creates one outgoing route that the gateway application will use to bridge the incoming call leg.  If more than one outgoing route is &amp;quot;accepted&amp;quot;, the gateway will try them one by one in the same order that they were accepted.   If an outgoing call leg fails (according to 'route retry' parameters), the next route in line will be used.  &lt;br /&gt;
&lt;br /&gt;
This method takes 2 arguments, the call parameters (hash) and the route parameters (hash).  Note that calling this method does NOT stop the flow of the script.&lt;br /&gt;
&lt;br /&gt;
Apply route remapping rules &lt;br /&gt;
&lt;br /&gt;
  caf_call.accept out_call, route&lt;br /&gt;
&lt;br /&gt;
=== Refuse  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to set the reason code for the incoming call leg refusal.  However, this function does NOT stop the flow of the script. &lt;br /&gt;
&lt;br /&gt;
  caf_call.refuse&amp;amp;nbsp;:reason =&amp;amp;gt;&amp;amp;nbsp;:temporary_failure&lt;br /&gt;
&lt;br /&gt;
To immediately refuse the incoming call leg and stop processing the script, the script must raise an exception.  Exiting the script by raising the exception overwrites any reason cause previously stored using refuse().&lt;br /&gt;
&lt;br /&gt;
  raise RoutingException, :no_route&lt;br /&gt;
&lt;br /&gt;
The supported refusal cause values for both refuse() and raise() are described in the section &amp;quot;[[Routing_script_tutorial:Mini_Development_Guide#Reason_values|Reason values]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Script parameters protocol mapping  ===&lt;br /&gt;
&lt;br /&gt;
The following call parameters are available in the call object. For example:&lt;br /&gt;
&lt;br /&gt;
  called_number = call[:called]&lt;br /&gt;
&lt;br /&gt;
For information on how to use and remap call parameters, see [[Toolpack:_How_to_Use_RegEx_in_Remapped_Called_and_Calling_Number_Mask | How to use regex in Remapped Called and Calling Number Mask]]&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 921px; height: 805px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Script parameter name''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''ISDN&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''R2 CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SS7&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SIP&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Comment&amp;lt;br&amp;gt;'''&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Toolpack version&amp;lt;br&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| leg_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Leg ID&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| session_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Session ID&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_session_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Original Session ID (before call transfer or redirections)&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| ANI (Group B)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - address signals (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used (when present) instead.&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - host (domain or IP) &amp;lt;br&amp;gt; &lt;br /&gt;
|  For example : The 'telcobridges.com' in From: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - port &amp;lt;br&amp;gt; &lt;br /&gt;
|  For example : The '6060' in From: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_noa&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - nature of address indicator (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used (when present) instead&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - numbering plan indicator (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used&amp;amp;nbsp;(when present) instead&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_display &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Display' IE - Display information&amp;lt;br&amp;gt; &lt;br /&gt;
Q931: 'Facility CNAM' IE when presentation is allowed for DMS/NI2 variants&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763 &lt;br /&gt;
ITU97: 'Display information' IE - display information &lt;br /&gt;
ANSI95: 'Generic name' IE - display information &lt;br /&gt;
| SIP:From - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_display_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Display' IE - Display information (present and/or first byte)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Display information' IE - present or not&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Presentation indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - display-name (displays 'anonymous' or not) &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - privacy&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_screening&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Screening indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Remote-party-id - screen&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_category&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Call party category (Group A)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party's category' IE - calling party's category&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - cpc &lt;br /&gt;
&lt;br /&gt;
SIP:P-asserted-identity - cpc&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber &lt;br /&gt;
(Generic Number / NDS)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Number digits &amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - Number digits&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| Requires option 'support 2 calling number IE' in the profile.  This variable has priority over 'private_address' in the outgoing direction.&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_noa&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_presentation&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Presentation indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_screening &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Screening indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_display&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Facility CNAM' IE when presentation is restricted for DMS/NI2 variants&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_display_type &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Indicate presence or not of the private calling information&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The 'fluffy' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - host (domain or IP)&lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - host (domain or IP) &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The 'telcobridges.com' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - port&lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - port&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The '6060' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| DNIS (Group A)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - user-info and host&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - host &amp;lt;br&amp;gt; &lt;br /&gt;
| For example : The 'telcobridges.com' in To: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - port number &amp;lt;br&amp;gt; &lt;br /&gt;
| For example : The '6060' in To: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number_npi&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default redirecting number and original called number forwarding behavior from incoming to outgoing leg &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number'&amp;amp;nbsp;1st IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Presentation indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion&amp;amp;nbsp;(2nd header) - diversion-privacy&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirecting indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_reason &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Reason for redirection&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirecting reason&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - diversion-reason&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_counter &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirection counter&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - diversion-counter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number &lt;br /&gt;
(OCN) &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion&amp;amp;nbsp; (1st header) - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Presentation indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-privacy&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_reason &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Reason for redirection&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - original redirection reason&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-reason&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_counter &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-counter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_npdi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - with qualifier=Ported number is present&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:RequestURI - npdi=yes is present&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - address signals with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:RequestURI - to user part when rn is present&amp;lt;br&amp;gt; &lt;br /&gt;
| rn is stored in the called number&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - nature of address indicator with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - numbering plan indicator with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| oli&lt;br /&gt;
(Originating line information) &amp;lt;br&amp;gt; &lt;br /&gt;
| 5ESS Codeset 6 OLI - Value&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Originating line information' IE - OLI&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - oli &lt;br /&gt;
&lt;br /&gt;
SIP:P-asserted-identity - oli&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| request_uri &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Complete Request URI string&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| request_uri_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default URI&amp;amp;nbsp;forwarding behavior from incoming to outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_header&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Any header&amp;lt;br&amp;gt; &lt;br /&gt;
| Requires option 'Forward custom headers' in Profiles-&amp;gt;SIP &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7.63&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| nap&lt;br /&gt;
(Network Access Point) &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg NAP name (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| type_of_network_identification&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Type of network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Type of network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| network_identification&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| SIP: Request-Line - cic&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| network_identification_plan&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Network identification plan &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Network identification plan &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default location number forwarding behavior from incoming to outgoing leg &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_presentation&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_screening &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| A script needs to set this to true if it wants to overwrite MLPP information in the outgoing leg.  Otherwise, profile relay 'outgoing mode' applies automatically.&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_look_for_busy &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - look ahead for busy&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_precedence_level &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - precedence level&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Resource-Priority - q735&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_network_identity &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - network identity&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_service_domain&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - MLPP service domain&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_isub &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party subaddress' IE - subaddress information&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - isub parameter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_isub_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party subaddress' IE - type of subaddress&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - isub-encoding parameter&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_isub &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party subaddress' IE - subaddress information&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - isub&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_isub_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Callinf party subaddress' IE - type of subaddress&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - isub-encoding&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_fci_default &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Default forward call indicator (FCI) value.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will overwrite FCI bits A, D, F, I and M with appropriate values according to call conditions&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_fci_force_mask &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Mask to select bits from ss7_fci_default that must be forced.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Bits from ss7_fci_default which corresponding bit in ss7_fci_force_mask is set will be forced, and no more controlled by Toolpack&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_bci_default &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Default backward call indicator (BCI) value.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will overwrite BCI bits AB, I, K, M and N with appropriate values according to call conditions&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_bci_force_mask &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Mask to select bits from ss7_bci_default that must be forced.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Bits from ss7_bci_default which corresponding bit in ss7_bci_force_mask is set will be forced, and no more controlled by Toolpack&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ls_name_forward_enabled&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| Enable line service and timeslot selection to create the outgoing leg. tdm_ls_name and tdm_timeslot_nb must be defined along with tdm_ls_name_forward_enabled&amp;lt;br&amp;gt;&lt;br /&gt;
| 3.0&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ls_name&lt;br /&gt;
(Line Service or T1/E1 trunk) &amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| if tdm_ls_name_forward_enabled is set, try to use this line service name to create outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_timeslot_nb&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| if tdm_ls_name_forward_enabled is set, try to use this timeslot number to create outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_local_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SDP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_local_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SDP IP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_remote_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SDP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_remote_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SDP IP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_cot_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Requests SS7 in-call continuity test for this outgoing SS7 call&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will request a continuity test on the timeslot before making the outgoing call. If COT fails, the call will be dropped (then another route may be attempted)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reverse_charging_indication&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg Reverse charging indication IE present&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| If set in routing script, will add Reverse charging indication IE in outgoing leg (also use reverse_charging_indication_forward_enabled)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.12&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reverse_charging_indication_forward_enabled&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Enable forwarding of reverse charging indication from incoming to outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.12&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_call_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg SIP Call-Id&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.9.112 / 3.0.131&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_local_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SIP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_local_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SIP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_remote_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SIP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_remote_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SIP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noa values  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown_number (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number (0x4)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number (0x3)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;subscriber_number (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_specific (0x5)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_routing_national_format (0x7)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_routing_international_format (0x8)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;abbreviated_number (0x6)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;subscriber_number_operator_requested (0x71)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number_operator_requested (0x72)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number_operator_requested (0x73)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_number_present_operator_requested (0x74)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_number_present_cut_through_call_to_carrier (0x75)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;test_line_test_code (0x77)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_subscriber_number (0x71)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_national_number (0x73)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_international_number (0x74)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_950_numbe (0x76)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;special_number (0x73)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number_with_transit_network_selection (0x74)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number_with_transit_network_selection (0x75)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Those values will be remapped to the protocol specific NOA value. To provide protocol specific value: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:called_noa] = 0x70&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:called_noa] = 112&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Npi values  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown_number&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;isdn&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;telephony&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;data&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;telex&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Display Type values  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; =&amp;amp;gt; Type is unspecified. &lt;br /&gt;
*&amp;lt;tt&amp;gt;calling_party_name&amp;lt;/tt&amp;gt; =&amp;amp;gt; Type is 0xB1.&lt;br /&gt;
&lt;br /&gt;
Those values will be remapped to the protocol specific Display Information Type value. To provide protocol specific value: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display_type] = 0xB1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display_type] = 177&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Display value  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display] = &amp;quot;Roger Fluffy&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Presentation values for Calling number, Calling Subscriber (Generic Number), Redirecting Number, Original Called Number (OCN) and Location Number ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;not_available (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;allowed (0x0)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;restricted (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;addr_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;name_restricted&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Party Category  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
In case it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mapping from routing script to SS7/CAS R2/SIP&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Routing Script string &amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SS7 raw value &amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''R2 CAS scripts'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Default Rx CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''default Tx CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SIP &amp;quot;cpc=&amp;quot;  &amp;lt;br&amp;gt;''' &lt;br /&gt;
|-&lt;br /&gt;
| subscriber&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xa&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_SUBSCRIBER &amp;lt;br&amp;gt; &lt;br /&gt;
| 1 and 7&amp;lt;br&amp;gt; &lt;br /&gt;
| 7&amp;lt;br&amp;gt; &lt;br /&gt;
| ordinary&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| subscriber_with_priority&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xb&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_SUBSCRIBER_WITH_PRIORITY &amp;lt;br&amp;gt; &lt;br /&gt;
| 2 and 9 &amp;lt;br&amp;gt; &lt;br /&gt;
| 2 &amp;lt;br&amp;gt; &lt;br /&gt;
| priority&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_french&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x1&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_FRENCH &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_english&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x2&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_ENGLISH (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_german&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x3&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_GERMAN (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_russian&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x4&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_RUSSIAN (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_spanish &amp;lt;br&amp;gt; &lt;br /&gt;
| 0x5&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_SPANISH (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| data&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xc&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_DATA &amp;lt;br&amp;gt; &lt;br /&gt;
| 6 and 8&amp;lt;br&amp;gt; &lt;br /&gt;
| 6 &amp;lt;br&amp;gt; &lt;br /&gt;
| datacall&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| test&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xd&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_TEST &amp;lt;br&amp;gt; &lt;br /&gt;
| 3 &amp;lt;br&amp;gt; &lt;br /&gt;
| 3 &amp;lt;br&amp;gt; &lt;br /&gt;
| test&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| payphone &amp;lt;br&amp;gt; &lt;br /&gt;
| 0xf&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_PAYPHONE &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| 7 &amp;lt;br&amp;gt; &lt;br /&gt;
| payphone&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| unknown &amp;lt;br&amp;gt; &lt;br /&gt;
| 0x0 &amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_UNKNOWN&amp;lt;br&amp;gt; &lt;br /&gt;
| 4, 11 to 15&amp;lt;br&amp;gt; &lt;br /&gt;
| 7 &amp;lt;br&amp;gt; &lt;br /&gt;
| unknown&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| unspecified &amp;lt;br&amp;gt; &lt;br /&gt;
| 0xa &amp;lt;br&amp;gt; &lt;br /&gt;
| invalid &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| invalid &amp;lt;br&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
[[CAS_R2_scripting#Category_meanings|Link to calling party categories used in CAS R2 scripts]]&lt;br /&gt;
&lt;br /&gt;
=== Screening values for Calling number, Calling Subscriber (Generic Number), and Location Number  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no (0x0)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;pass (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;fail (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_provided (0x3)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redirecting indicator values  ===&lt;br /&gt;
&lt;br /&gt;
SS7: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;no_redirection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted_all_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted_all_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted_restricted&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;spare&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redirecting number, Original Called Number and Diversion Reason ===&lt;br /&gt;
&lt;br /&gt;
ISDN: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;busy&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_reply&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;dte_out_of_order&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;forwarding_by_called_dte&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;unconditional&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SS7: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;busy      (SIP: user-busy)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_reply  (SIP: no-answer)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;unconditional&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection_immediate&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;mobile_not_reachable&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OLI (originating line information) values  ===&lt;br /&gt;
&lt;br /&gt;
The OLI parameter is a string that represents an integer value from 0 to 255. &lt;br /&gt;
&lt;br /&gt;
=== Information Transfer Capability values  ===&lt;br /&gt;
&lt;br /&gt;
information_transfer_capability: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;digital&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;restricted_digital&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;digital_with_tones&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;speech&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;3_1_khz_audio&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;video&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== redirecting_number_forward_enabled values  ===&lt;br /&gt;
&lt;br /&gt;
Controls forwarding or discarding of redirecting number (SIP: diversion header) to the outgoing call leg. &lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true. &lt;br /&gt;
*0/false: Redirecting number (and original called number) is not forwarded to outgoing call leg&lt;br /&gt;
*1/true: Redirecting number (and original called number) is forwarded to outgoing call leg&lt;br /&gt;
&lt;br /&gt;
The value for this parameter at the input of the routing script depends on the &amp;quot;Forward redirecting number&amp;quot; parameter in the &amp;quot;Advanced&amp;quot; section of the Gateway configuration page of the Web Portal. The script may change this value to override the Gateway configuration.&lt;br /&gt;
&lt;br /&gt;
Note: To &amp;quot;insert&amp;quot; a new redirecting number value on the outgoing leg, redirecting_number_forward_enabled must also be set to true.&lt;br /&gt;
&lt;br /&gt;
=== request_uri  ===&lt;br /&gt;
&lt;br /&gt;
Enables access to the Request-Line URI.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For example, if the Request-Line is: &lt;br /&gt;
&amp;lt;pre&amp;gt;Request-Line: INVITE sip:4175162082@172.22.45.13:5060;user=phone;transport=udp SIP/2.0&amp;lt;/pre&amp;gt; &lt;br /&gt;
Then the retrieved request_uri will be &amp;quot;sip:4175162082@172.22.45.13:5060;user=phone;transport=udp SIP/2.0&amp;quot;. &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
In the routing scripts, to retrieve only the called number, this script can be used:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;    if call_params[:request_uri] &amp;amp;amp;&amp;amp;amp; call_params[:request_uri] =~ /sip:(.*)@.*/&lt;br /&gt;
       call_params[:called] = $1&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
==== request_uri_forward_enabled ====&lt;br /&gt;
&lt;br /&gt;
This call parameter controls forwarding or discarding of request uri to outgoing call leg.The request uri is the information in the &amp;quot;Request-Line:&amp;quot; of the SIP INVITE message.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true. &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 0/false: Request uri is not forwarded to outgoing call leg &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 1/true: Request uri is forwarded to outgoing call leg &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The default value for this parameters is false. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== sip_scheme  ====&lt;br /&gt;
(Available in Toolpack 3.1+)&lt;br /&gt;
This call parameters indicates the scheme (generally &amp;quot;sip&amp;quot; or &amp;quot;sips&amp;quot;) of the incoming call.&lt;br /&gt;
&lt;br /&gt;
This also allows to control the scheme used for the outgoing call (regardless if request_uri_forward_enabled is used or not)&lt;br /&gt;
&lt;br /&gt;
Note: sips scheme must only be used on TLS NAPs (will cause call routing failure if NAP has only UDP or TCP transport types).&lt;br /&gt;
&lt;br /&gt;
=== sip_header values  ===&lt;br /&gt;
Contains custom sip headers from the inbound call leg. Any custom sip header can be added to an outgoing call leg:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
The  SIP header is in string format.&lt;br /&gt;
&lt;br /&gt;
'''string format:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;call[ :sip_header ] = &amp;quot;P-my-custom-header:value1 \nP-my-custom-header2:value2 \nP-my-custom-header3:value3&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Note: \n above are actual newline characters, not '\' followed by 'n')&lt;br /&gt;
&lt;br /&gt;
* PCAP sample: [[File:TB_Custom_SIP_Headers.pcap]]&lt;br /&gt;
&lt;br /&gt;
List of sip headers that will not appear in call[:sip_header] since they are already processed by the SIP stack:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Accept               Error-Info             Remote-Party-ID      &lt;br /&gt;
Accept-Contact       Event                  Replaces                        &lt;br /&gt;
Accept-Encoding      Expires                Reply-To               &lt;br /&gt;
Accept-Language      From                   Request-Disposition    &lt;br /&gt;
Alert-Info           In-Reply-To            Subject          &lt;br /&gt;
Allow                Max-Forwards           Subscription-State  &lt;br /&gt;
Allow-Events         MIME-version           Supported           &lt;br /&gt;
Also                 Min-Expires            Timestamp           &lt;br /&gt;
Anonymity            Min-SE                 To             &lt;br /&gt;
Authorization        Organization           Unsupported  &lt;br /&gt;
Authentication-Info  Path                   User-Agent  &lt;br /&gt;
Call-ID              Priority               Via  &lt;br /&gt;
Call-Info            Privacy                Warning  &lt;br /&gt;
Contact              Proxy-Authenticate     WWW-Authenticate  &lt;br /&gt;
Content-Disposition  Proxy-Authorization    Require  &lt;br /&gt;
Content-Encoding     Proxy-Require          Response-Key  &lt;br /&gt;
Content-Language     P-Media-Authorization  Retry-After  &lt;br /&gt;
Content-Length       P-Preferred-Identity   RPID-Privacy  &lt;br /&gt;
Content-Type         P-Asserted-Identity    Route  &lt;br /&gt;
CSeq                 RAck                   RSeq  &lt;br /&gt;
RAck                 Reason                 Security-Client  &lt;br /&gt;
Reason               Record-Route           Security-Server  &lt;br /&gt;
Date                 Refer-To               Security-Verify&lt;br /&gt;
Diversion            Referred-By            Server&lt;br /&gt;
Encryption           Reject-Contact         Service-Route             &lt;br /&gt;
                                            Session-Expires&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sip header parameters  ===&lt;br /&gt;
The routing script can read (and modify) some SIP header parameters (user parameters, URI parameters or header parameters) from some SIP headers (To, From, P-Asserted-Identity, Remote-Party-ID, Contact).&lt;br /&gt;
&lt;br /&gt;
==== Available parameters ====&lt;br /&gt;
* '''call[ :calling_parameters ]''' (SIP &amp;quot;From&amp;quot; header)&lt;br /&gt;
* '''call[ :called_parameters ]''' (SIP &amp;quot;To&amp;quot; header)&lt;br /&gt;
* '''call[ :private_address_parameters ]''' (SIP &amp;quot;P-Asserted-Identity&amp;quot; or &amp;quot;Remote-Party-ID&amp;quot; header)&lt;br /&gt;
* '''call[ :contact_parameters ]''' (SIP &amp;quot;Contact&amp;quot; header)&lt;br /&gt;
&lt;br /&gt;
These parameters (if present) contain a hash with 3 keys: user_param, uri_param and header_param.&lt;br /&gt;
Each of this key points to a string that contains all the parameters found in the corresponding SIP header.&lt;br /&gt;
* '''User parameters''' (parameters between the user name/number and the host). Example  &amp;lt;sip:alice;'''param=value'''@somewhere.com&amp;gt;&lt;br /&gt;
* '''URI parameters''' (parameters at the end of the URI). Example  &amp;lt;sip:alice@somewhere.com;'''param=value'''&amp;gt;&lt;br /&gt;
* '''Header parameters''' (outside the URI). Example  &amp;lt;sip:alice@somewhere.com&amp;gt;;'''param=value'''&lt;br /&gt;
Example to print all parameters of SIP &amp;quot;To&amp;quot; header:&lt;br /&gt;
  call[ :called_parameters ].inspect -&amp;gt; '{ :user_param =&amp;gt; &amp;quot;name1=value1;name2=value2&amp;quot;, :uri_param =&amp;gt; &amp;quot;name=value&amp;quot;, :header_param =&amp;gt; &amp;quot;name=value;example_param_without_value&amp;quot; }'&lt;br /&gt;
Example to modify (replace) the URI parameters of SIP &amp;quot;To&amp;quot; header:&lt;br /&gt;
  call[ :called_parameters ][ :uri_param ] = &amp;quot;user=phone&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Exceptions ====&lt;br /&gt;
'''Note:''' Some parameters are reported as their own call attribute (oli, isub, cpc, transport) so they have the same representation for all protocols (SS7, IDSN, SIP). They won't appear present in the generic SIP header parameters structures above.&lt;br /&gt;
&lt;br /&gt;
==== Forwarding from inbound to outbound call ====&lt;br /&gt;
&lt;br /&gt;
==== Legacy behavior ====&lt;br /&gt;
(For base_routing version 1.32 or older)&lt;br /&gt;
By default, the parameters are not forwarded in a SIP to SIP call flow. The parameters '''will be forwarded''' when:&lt;br /&gt;
* accessed (read) from either the inbound or outbound call parameters&lt;br /&gt;
* written in either the inbound or outbound call parameters&lt;br /&gt;
&lt;br /&gt;
==== Current behavior ====&lt;br /&gt;
(For Toolpack 3.0.118+, with base_routing version 1.33+)&lt;br /&gt;
SIP headers host and parameters are forwarded by default.&lt;br /&gt;
&lt;br /&gt;
A route attribute &amp;quot;forward_sip_domain&amp;quot; (along with filter script &amp;quot;forward_sip_domain.rb&amp;quot;) will control, per route, if SIP headers host+parameters must be forwarded.&lt;br /&gt;
&lt;br /&gt;
==== Example usage ====&lt;br /&gt;
Example to print the user parameters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  if call[:calling_parameters]&lt;br /&gt;
    puts &amp;quot;user parameters = #{call[:calling_parameters][:user_param].inspect}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example SIP &amp;quot;From&amp;quot; header:&lt;br /&gt;
  From:&amp;lt;sip:123456782;test1=val1;test2=val2@something.com;test3=val3;test4=val4&amp;gt;;test5=val5;test6=val6&lt;br /&gt;
And the resulting content in the routing script:&lt;br /&gt;
  call[:calling_parameters].inspect -&amp;gt; {:user_param=&amp;gt;&amp;quot;test1=val1;test2=val2&amp;quot;, :uri_param=&amp;gt;&amp;quot;test3=val3;test4=val4&amp;quot;, :header_param=&amp;gt;&amp;quot;test5=val5;test6=val6&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
Example to overwrite inbound leg calling parameters with new parameters for the outbound leg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call [:calling_parameters] = { &lt;br /&gt;
  :user_param =&amp;gt; &amp;quot;user_param7=7;user_param8=8&amp;quot;,&lt;br /&gt;
  :uri_param =&amp;gt; &amp;quot;uri_param9=value9&amp;quot;,&lt;br /&gt;
  :header_param =&amp;gt; &amp;quot;header_paramA=A&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to add user=phone and keep all other uri parameters.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  call[:calling_parameters] ||= {} # Create a hash if not already present&lt;br /&gt;
  call[:calling_parameters][:uri_param] ||= &amp;quot;&amp;quot; # Create a string if not already present&lt;br /&gt;
  call[:calling_parameters][:uri_param] += &amp;quot;;&amp;quot; if call[:calling_parameters][:uri_param] != &amp;quot;&amp;quot;&lt;br /&gt;
  call[:calling_parameters][:uri_param] += &amp;quot;user=phone&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MLPP Precedence values  ===&lt;br /&gt;
&lt;br /&gt;
mlpp_look_for_busy: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;allowed&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;path_reserved&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;not_allowed&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_precedence_level: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;flash_override&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;flash&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;immediate&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;priority&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;routine&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_network_identity:&lt;br /&gt;
&lt;br /&gt;
3 digits value from 0 to 999&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_service_domain:&lt;br /&gt;
&lt;br /&gt;
24 bits value from 0 to 16777215&lt;br /&gt;
&lt;br /&gt;
=== ISUB subaddress information values  ===&lt;br /&gt;
&lt;br /&gt;
called_isub_type: &lt;br /&gt;
calling_isub_type: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap_ia5&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap_bcd&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;user&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
called_isub: &lt;br /&gt;
calling_isub: &lt;br /&gt;
&lt;br /&gt;
Digits for the subaddress information.&lt;br /&gt;
&lt;br /&gt;
=== Network Identification Plan  ===&lt;br /&gt;
&lt;br /&gt;
network_identification_plan: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;Unknown&amp;lt;/tt&amp;gt; (value 0)&lt;br /&gt;
*&amp;lt;tt&amp;gt;cic&amp;lt;/tt&amp;gt; (3 digits carrier identification code plus circuit code, value 1, SS7 or ISDN)&lt;br /&gt;
*&amp;lt;tt&amp;gt;user&amp;lt;/tt&amp;gt; (User, value 2, ISDN only)&lt;br /&gt;
*&amp;lt;tt&amp;gt;cic4&amp;lt;/tt&amp;gt; (4 digits carrier identification code plus circuit code, value 2, SS7 only) &lt;br /&gt;
*&amp;lt;tt&amp;gt;dnic&amp;lt;/tt&amp;gt; (public Data Network ID, value 3, SS7 only) &lt;br /&gt;
*&amp;lt;tt&amp;gt;mnic&amp;lt;/tt&amp;gt; (public land mobile network, value 6, SS7 only)&lt;br /&gt;
&lt;br /&gt;
=== Registered Users Information ===&lt;br /&gt;
Routing script can access information about registered users (when either the calling or called user is a known registered user).&lt;br /&gt;
When these fields are empty, it means that the calling/called (SIP from/to) does not correspond to a known registered user (routing script may still decide to route the call based on static routes).&lt;br /&gt;
&lt;br /&gt;
Information for the called user:&lt;br /&gt;
  params[:registered_user]&lt;br /&gt;
Information for the calling user:&lt;br /&gt;
  params[:calling_registered_user]&lt;br /&gt;
&lt;br /&gt;
These parameters are a hash of key/values that provide information about the contact.&lt;br /&gt;
  {&lt;br /&gt;
    :contact_list=&amp;gt;&lt;br /&gt;
    [&lt;br /&gt;
      {&lt;br /&gt;
        :contact=&amp;gt;&amp;quot;&amp;lt;sip:user_name_or_number@hostname:7070;transport=UDP&amp;gt;&amp;quot;,    -&amp;gt; Full contact&lt;br /&gt;
        :expires=&amp;gt;&amp;quot;60&amp;quot;,                   -&amp;gt; Contact expiry time (seconds)&lt;br /&gt;
        :host=&amp;gt;&amp;quot;hostname&amp;quot;,                -&amp;gt; host name from the contact header&lt;br /&gt;
        :name=&amp;gt;&amp;quot;user_name_or_number&amp;quot;,     -&amp;gt; user name from the contact header&lt;br /&gt;
        :nap_in=&amp;gt;&amp;quot;NAP_NAME&amp;quot;,              -&amp;gt; NAP that the contact has registered from&lt;br /&gt;
        :port=&amp;gt;&amp;quot;7070&amp;quot;,                    -&amp;gt; Port from the contact header&lt;br /&gt;
        :transport=&amp;gt;&amp;quot;UDP&amp;quot;                 -&amp;gt; Transport type from the contact header&lt;br /&gt;
        :q_value=&amp;gt;&amp;quot;0.00&amp;quot;,                 -&amp;gt; Q-value for the contact (for contact ordering)&lt;br /&gt;
        :src_host=&amp;gt;&amp;quot;10.0.0.10&amp;quot;,           -&amp;gt; Actual source IP address that the contact has registered from&lt;br /&gt;
        :src_port=&amp;gt;&amp;quot;7070&amp;quot;,                -&amp;gt; Actual source port that the contact has registered from&lt;br /&gt;
        :src_transport=&amp;gt;&amp;quot;UDP&amp;quot;,            -&amp;gt; Actual protocol that the contact has been registering with&lt;br /&gt;
       }&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
== Route parameters  ==&lt;br /&gt;
&lt;br /&gt;
All route may have these parameters: &lt;br /&gt;
&lt;br /&gt;
*calling &lt;br /&gt;
*called &lt;br /&gt;
*nap &lt;br /&gt;
*remapped_calling &lt;br /&gt;
*remapped_called &lt;br /&gt;
*remapped_nap &lt;br /&gt;
*remapped_destination_leg_profile (called remapped_profile prior to Toolpack 2.9)&lt;br /&gt;
*remapped_source_leg_profile (called remapped_incoming_profile prior to Toolpack 2.9)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  route[:remapped_nap]&lt;br /&gt;
&lt;br /&gt;
Additionally it is possible to add dynamic route attributes in the web portal. These can be referenced by their name.&lt;br /&gt;
For example:&lt;br /&gt;
*priority&lt;br /&gt;
*weight&lt;br /&gt;
&lt;br /&gt;
== Routing calls toward registered users ==&lt;br /&gt;
Static routes normally chose an outbound NAP to forward the call to.&lt;br /&gt;
&lt;br /&gt;
But it's also possible to create routes which outbound NAP is dynamically chosen by matching a registered user (when using [[Sip_registration_forwarding|SIP registration forwarding]]).&lt;br /&gt;
&lt;br /&gt;
More information can be found [[Sip_registration_forwarding#SIP_Calls_routing|here]] about the way to control the [[Sip_registration_forwarding#SIP_Calls_routing|priority of &amp;quot;dynamic&amp;quot; vs &amp;quot;static&amp;quot; routes]].&lt;br /&gt;
&lt;br /&gt;
More information can be found [[#Registered_Users_Information|here]] about using routing scripts to access registered users information during call routing.&lt;br /&gt;
&lt;br /&gt;
== Playing prompts announcements or tones  ==&lt;br /&gt;
&lt;br /&gt;
New feature in release 2.6, all bridges may have these parameters. These can be used to play IVR prompts (audio files) in different states of the call flow.&lt;br /&gt;
&lt;br /&gt;
*'''announcement_tone''' (played before outgoing call is routed)&lt;br /&gt;
*'''ring_tone''' (played after when waiting for outgoing call to answer)&lt;br /&gt;
*'''busy_tone''' (played if outgoing call failed)&lt;br /&gt;
*'''disconnect_tone''' (played after the call has reached it's maximum duration)&lt;br /&gt;
&lt;br /&gt;
Example to play an announcement to incoming call (before routing outgoing call, regardless if a matching route is found or not):&lt;br /&gt;
  bridge[:announcement_tone ] = &amp;quot;my_announcement.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play a ring-tone while the outgoing call is ringing:&lt;br /&gt;
  bridge[:ring_tone] = &amp;quot;my_ring_tone.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play an audio file when outgoing call fails (no route, or outgoing call is refused):&lt;br /&gt;
  bridge[:busy_tone] = &amp;quot;my_busy_tone.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play an audio file when call has reached the maximum allowed duration:&lt;br /&gt;
  bridge[:disconnect_tone] = &amp;quot;your_account_balance_is_empty.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Announcement file path format and options ===&lt;br /&gt;
&lt;br /&gt;
All file plabyacks (:announcement_tone,&amp;amp;nbsp;:busy_tone,&amp;amp;nbsp;:ring_tone,&amp;amp;nbsp;:disconnect_tone) inside bridge parameters use this format. &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;file1.wav:repeat:start_off:end_off,file2.wav:repeat:start_off:end_off,file3.wav:repeat:start_off:end_off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Optional parameters:&lt;br /&gt;
* repeat: number of times to play the file (0 and 1 have the same result)&lt;br /&gt;
* start_off: Start offset in milliseconds&lt;br /&gt;
* end_off: End offset in milliseconds&lt;br /&gt;
&lt;br /&gt;
Http and other path formats are described here: [[Customer_application_framework:play_audio_files#Play_path_format|Path format]]&lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
The following example will play file1.wav once, and then play file2.wav in loop: &lt;br /&gt;
  &amp;quot;file1.wav,file2.wav:-1&amp;quot; &lt;br /&gt;
&lt;br /&gt;
==== Example 2 ====&lt;br /&gt;
The following example will play file1.wav from start offset of 1 second to end offset of 3 seconds, then twice file2.wav from second 5 to second 10.&lt;br /&gt;
  &amp;quot;file1.wav:0:1000:3000,file2.wav:2:5000:10000&amp;quot; &lt;br /&gt;
&lt;br /&gt;
==== Example 3 ====&lt;br /&gt;
The following example will play file1.wav once, ending at offset of 30 seconds.&lt;br /&gt;
  &amp;quot;file1.wav:0:0:30000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== announcement_tone  ===&lt;br /&gt;
&lt;br /&gt;
  params[:bridge][:announcement_tone] = &amp;quot;announcement.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call before any outgoing call is placed. The outgoing call occurs when the file finished playing.&lt;br /&gt;
&lt;br /&gt;
==== announcement_tone options ====&lt;br /&gt;
===== announcement_tone_answer =====&lt;br /&gt;
  params[:bridge][:announcement_tone_answer] = &amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Forces an answer of the call before playing the announcement. Default if argument not provided is &amp;quot;no&amp;quot;, in which case call is only alerted with in-band media.&lt;br /&gt;
&lt;br /&gt;
===== announcement_code_detect =====&lt;br /&gt;
This option allows that the tone detection is enabled during the announcement play.&lt;br /&gt;
&lt;br /&gt;
Collected digits can be inserted into the CDR logs (radius attribute &amp;quot;Telcob-CollectedDigits&amp;quot;, or text CDR variable @{CollectedDigits}).&lt;br /&gt;
&lt;br /&gt;
Collected digits can also be sent back to routing script, which is called again with the same call attributes, except that the called number is replaced by the collected digits.&lt;br /&gt;
&lt;br /&gt;
Code detect has multiple options, as shown in the following code:&lt;br /&gt;
  code_detect = {&lt;br /&gt;
    :type                   =&amp;gt; :DTMF,   # :DTMF or :MFR1 tone detection.&lt;br /&gt;
                                        # Default is MFR1.&lt;br /&gt;
    :prefix                 =&amp;gt; &amp;quot;&amp;quot;,      # Prefix (digits) that is removed from collected digits.&lt;br /&gt;
                                        # Default is empty.&lt;br /&gt;
    :suffix                 =&amp;gt; &amp;quot;&amp;quot;,      # Suffix (digits) that is removed from collected digits&lt;br /&gt;
                                        # and causes routing script to be immediately called.&lt;br /&gt;
                                        # Default is empty.&lt;br /&gt;
    :suffix_removal         =&amp;gt; false,   # Controls the removal of the suffix from the collected digit string that's reported to routing script.&lt;br /&gt;
                                        # Default is false&lt;br /&gt;
    :timeout                =&amp;gt; 0,       # Inter-digit timeout (ms) after which collected digits are passed to the routing script.&lt;br /&gt;
                                        # Use 0 for &amp;quot;no timeout&amp;quot;.&lt;br /&gt;
                                        # Default is 1000ms&lt;br /&gt;
    :barge_in_interruption  =&amp;gt; true,    # When enabled, playing announcement is stopped as soon as first digit is collected.&lt;br /&gt;
                                        # Default is true.&lt;br /&gt;
    :proceed_on_play_done   =&amp;gt; false,   # When true:  Outgoing call is made after announcement finishes playing.&lt;br /&gt;
                                        #             Routing script is not called again.&lt;br /&gt;
                                        # When false: Outgoing call is never made.&lt;br /&gt;
                                        #             Digits are collected until timeout or suffix match,&lt;br /&gt;
                                        #             then routing script is called again.&lt;br /&gt;
                                        # Default is false.&lt;br /&gt;
    :cas_on_hook            =&amp;gt; false,   # Specific for CAS-R1 calls. Makes CAS bits switch to &amp;quot;on-hook&amp;quot; when announcement finished playing&lt;br /&gt;
                                        # (but the call is not &amp;quot;terminated&amp;quot; from Toolpack point of view)&lt;br /&gt;
                                        # Default is false.&lt;br /&gt;
    :cas_on_hook_delay      =&amp;gt; 0,       # Duration of cas bits &amp;quot;on-hook&amp;quot; state.&lt;br /&gt;
                                        # Only effective if cas_on_hook is set to true.&lt;br /&gt;
                                        # Value of 0 stands for &amp;quot;infinite delay&amp;quot;.&lt;br /&gt;
                                        # Default is 0.&lt;br /&gt;
    :repeat_delay           =&amp;gt; 0,       # Delay between repetition of the announcement. The announcement will repeat&lt;br /&gt;
                                        # itself every &amp;quot;repeat_delay&amp;quot; until a code is detected (suffix match or timetout).&lt;br /&gt;
                                        # Value of 0 stands for &amp;quot;infinite delay&amp;quot; (no repeating).&lt;br /&gt;
                                        # Default is 0.&lt;br /&gt;
  }&lt;br /&gt;
'''Example 1''': Collect DTMF digits, and call routing script again with collected digits upon timeout or suffix match.&lt;br /&gt;
  code_detect = { :type =&amp;gt; :DTMF, :suffix =&amp;gt; &amp;quot;#&amp;quot;, :timeout =&amp;gt; 5000 }&lt;br /&gt;
  params[:bridge][:announcement_code_detect] = code_detect&lt;br /&gt;
&lt;br /&gt;
'''Example 2''': Collect digits during the announcement (for CDR logs), then proceed (make outgoing call) after announcement finishes playing&lt;br /&gt;
  code_detect = { :type =&amp;gt; :DTMF, :timeout =&amp;gt; 0, :barge_in_interruption =&amp;gt; false, :proceed_on_play_done =&amp;gt; true }&lt;br /&gt;
  params[:bridge][:announcement_code_detect] = code_detect&lt;br /&gt;
&lt;br /&gt;
==== Controlling what happens after announcement ====&lt;br /&gt;
The routing script can control what happens with the call after the announcement finishes playing:&lt;br /&gt;
* An outgoing call is made&lt;br /&gt;
* Incoming call is hung-up&lt;br /&gt;
* Do nothing (wait for the incoming call to hang-up)&lt;br /&gt;
===== An outgoing call is made =====&lt;br /&gt;
This happens when the script has returned matching routes (and did not raise RoutingException)&lt;br /&gt;
&lt;br /&gt;
===== Incoming call is hung-up =====&lt;br /&gt;
This happens when the script returns no routes (in which case base_routing will raise RoutingException with cause :no_route).&lt;br /&gt;
&lt;br /&gt;
It also happens when the script explicitly raises RoutingException.&lt;br /&gt;
&lt;br /&gt;
The incoming call will be terminated with the specified cause.&lt;br /&gt;
For example&lt;br /&gt;
    raise RoutingException, :temporary_failure&lt;br /&gt;
(See &amp;quot;Reason values&amp;quot; section in this page for list of available causes)&lt;br /&gt;
&lt;br /&gt;
===== Do nothing (wait for the incoming call to hang-up) =====&lt;br /&gt;
If a filter raises RoutingException with code :ok, then the incoming call will not be terminated at the end of the announcement play.&lt;br /&gt;
Announcement digit collection will remain active if appropriate.&lt;br /&gt;
For example:&lt;br /&gt;
    raise RoutingException, :ok&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ring_tone  ===&lt;br /&gt;
  params[:bridge][:ring_tone] = &amp;quot;ringing.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call while waiting for the outgoing call to be answered.&lt;br /&gt;
&lt;br /&gt;
Ring tone playback can also be configured in the Web Portal, from the incoming call's profile (under &amp;quot;Tones and Call Progress Options&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Routing script has precedence over profile (a routing script that fills params[:bridge][:ring_tone] will override the profile's ring tone behavior).&lt;br /&gt;
&lt;br /&gt;
==== ring_tone options ====&lt;br /&gt;
===== ring_tone_state =====&lt;br /&gt;
  params[:bridge][:ring_tone_state] = :alerted&lt;br /&gt;
&lt;br /&gt;
Call state from which ring tone is being played. Available values are:&lt;br /&gt;
* '''immediately''':  Ring tone starts playing immediately on the incoming leg&lt;br /&gt;
* '''accepted''':     Ring tone starts playing as soon as outgoing call is accepted&lt;br /&gt;
* '''callprogress''': Ring tone starts playing as soon as &amp;quot;call progress&amp;quot; is received on the outgoing call&lt;br /&gt;
* '''alerted''' (default):      Ring tone starts playing only once outgoing call is alerted (but won't play if alert indicates early media from outgoing call)&lt;br /&gt;
&lt;br /&gt;
This option also apply when params[:bridge][:ring_tone] is not used, because it also apply to ring tone playback configured in the Web Portal, from the incoming call's profile.&lt;br /&gt;
&lt;br /&gt;
=== busy_tone  ===&lt;br /&gt;
  Toolpack 2.8 and above:&lt;br /&gt;
    params[:bridge][:busy_tone] = &amp;quot;no_route.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Note: Obsolete name (toolpack 2.7.153 and earlier, but still supported in recent releases):&lt;br /&gt;
    params[:bridge][:call_progress_tone] = &amp;quot;no_route.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call when outgoing call fails (never answered).&lt;br /&gt;
&lt;br /&gt;
Note that announcement_tone, if used, is played before the outgoing call attempt is made, and thus before the busy_tone.&lt;br /&gt;
&lt;br /&gt;
Busy tone playback can also be configured in the Web Portal, from the incoming call's profile (under &amp;quot;Tones and Call Progress Options&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Routing script has precedence over profile (a routing script that fills params[:bridge][:busy_tone] will override the profile's busy tone behavior).&lt;br /&gt;
&lt;br /&gt;
Special value '''&amp;quot;none&amp;quot;''' can be used by routing script to force playing nothing (as empty string would default to profile's behavior)&lt;br /&gt;
&lt;br /&gt;
==== busy_tone options ====&lt;br /&gt;
===== busy_tone_answer =====&lt;br /&gt;
  params[:bridge][:busy_tone_answer] = &amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Forces an answer of the call before playing the busy tone. Default if argument not provided is &amp;quot;no&amp;quot;, in which case call is only alerted with in-band media.&lt;br /&gt;
&lt;br /&gt;
=== disconnect_tone  ===&lt;br /&gt;
  params[:bridge][:disconnect_tone] = &amp;quot;max_duration.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call when call duration (:max_call_duration) is reached. Then the leg will be terminated with specified reason (:call_duration_reason).&lt;br /&gt;
&lt;br /&gt;
==== disconnect_tone options ====&lt;br /&gt;
===== max_call_duration  =====&lt;br /&gt;
  params[:bridge][:max_call_duration] = &amp;quot;60000&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Maximum call duration in millisecond. This timer is started when entering answer state.&lt;br /&gt;
&lt;br /&gt;
===== call_duration_reason  =====&lt;br /&gt;
  params[:bridge][:call_duration_reason] =&amp;amp;nbsp;:resource_unavailable &lt;br /&gt;
&lt;br /&gt;
Drop both legs with this reason when call duration (:max_call_duration) is reached.&lt;br /&gt;
&lt;br /&gt;
=== Managing audio prompts through Web Portal ===&lt;br /&gt;
Audio prompts can be uploaded or deleted from the TMedia unit through the Web Portal:&lt;br /&gt;
[[Toolpack:Configuring_Audio_Prompts_A|Managing audio prompts]]&lt;br /&gt;
&lt;br /&gt;
Prompts management must be done using the Web Portal of the primary server (in systems with redundant TMedia units or redundant host servers).&lt;br /&gt;
The file will automatically get replicated to the secondary server.&lt;br /&gt;
&lt;br /&gt;
=== Managing audio prompts manually ===&lt;br /&gt;
Any file on the TMedia host file system can be played. This means it's possible to manage prompts through ssh/scp.&lt;br /&gt;
&lt;br /&gt;
==== The default (replicated) prompts folder ====&lt;br /&gt;
By default, when playing a prompt, Toolpack will look in the default prompts folder:&lt;br /&gt;
 /lib/tb/toolpack/pkg/prompts&lt;br /&gt;
The root of this &amp;quot;prompts&amp;quot; directory is automatically replicated to secondary unit of redundant setups (1+1, N+1, redundant hosts). Sub-folders won't be replicated.&lt;br /&gt;
&lt;br /&gt;
Any prompt play request without explicit file path will map to this folder. For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /lib/tb/toolpack/pkg/prompts/no_route.wav&lt;br /&gt;
&lt;br /&gt;
==== Relative file paths ====&lt;br /&gt;
Any file path that begins with &amp;quot;file://&amp;quot; is considered relative to the tbstreamserver application's working directory:&lt;br /&gt;
 /lib/tb/toolpack/setup/12358/2.8/apps/tbstreamserver/&lt;br /&gt;
(Where &amp;quot;2.8&amp;quot; may be replaced by the current major version of your system)&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;file://my_folder/no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /lib/tb/toolpack/setup/12358/2.8/apps/tbstreamserver/my_folder/no_route.wav&lt;br /&gt;
&lt;br /&gt;
==== Absolute file paths ====&lt;br /&gt;
Absolute paths can also be provided.&lt;br /&gt;
For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;file:///root/my_folder/no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /root/my_folder/no_route.wav&lt;br /&gt;
&lt;br /&gt;
== Recording call legs  ==&lt;br /&gt;
Introduced in release 2.6.44, it's now possible to use routing scripts to ask for recording incoming and/or outgoing call legs.&lt;br /&gt;
&lt;br /&gt;
See example filter script &amp;quot;call_recording&amp;quot; (created by default in Web Portal routing scripts starting with 2.6.44) for an example.&lt;br /&gt;
&lt;br /&gt;
=== Recording the incoming call leg  ===&lt;br /&gt;
To record the incoming call leg, the routing script (in a &amp;quot;after filter&amp;quot; for example) has to set the following parameter:&lt;br /&gt;
&lt;br /&gt;
  bridge[ :record_incoming ]  = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Recording the outgoing call leg  ===&lt;br /&gt;
To record the outgoing call leg, the routing script (in a &amp;quot;after filter&amp;quot; for example) has to set the following parameter, per route (the decision to record or not, or the file name to record to, can be set per matching route):&lt;br /&gt;
&lt;br /&gt;
  # Need to clone the routes in order to have the right to modify them&lt;br /&gt;
  routes = clone_routes params[:routes]&lt;br /&gt;
  routes.each do |route|&lt;br /&gt;
    route[ :record_outgoing ]  = &amp;quot;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  # Store modified routes back to the parameters for this outgoing call&lt;br /&gt;
  params[:routes] = routes&lt;br /&gt;
&lt;br /&gt;
=== Record the outgoing call leg within incoming leg's recorded file (mixing)  ===&lt;br /&gt;
  [...]&lt;br /&gt;
    route[ :record_outgoing ]  = &amp;quot;@{MixWithIncoming}&amp;quot;&lt;br /&gt;
  [...]&lt;br /&gt;
&lt;br /&gt;
=== Choosing file path to record to  ===&lt;br /&gt;
The value assigned to &amp;quot;:record_incoming&amp;quot; or &amp;quot;:record_outgoing&amp;quot; is the path to record the file to.&lt;br /&gt;
&lt;br /&gt;
The paths can be absolute, or relative. When relative, they are relative to the &amp;quot;tbstreamserver&amp;quot; application working directory, for example:&lt;br /&gt;
  /lib/tb/toolpack/setup/12358/2.7/apps/tbstreamserver/&lt;br /&gt;
&lt;br /&gt;
* Empty file name will default to a name that contains various information about the call:&lt;br /&gt;
** ''LinkId'':     Id common between all legs of this call bridge&lt;br /&gt;
** ''LegId'':      Unique Id for this leg&lt;br /&gt;
** ''Nap'':        Current NAP name this call leg is from&lt;br /&gt;
** ''Direction'':  &amp;quot;IN&amp;quot; or &amp;quot;OUT&amp;quot; (depends if call leg is incoming or outgoing leg)&lt;br /&gt;
** ''Calling'':    The calling number of this call leg&lt;br /&gt;
** ''Called'':     The called number of this call leg&lt;br /&gt;
** ''Protocol'':   The signaling protocol of this call leg (SS7, ISDN, CAS, SIP)&lt;br /&gt;
** ''Media info'': Codec + IP/Port for SIP calls, Trunk/Timeslot for TDM calls&lt;br /&gt;
* To record outgoing call leg in the same audio file as incoming call leg (mixing), use the following:&lt;br /&gt;
** @{MixWithIncoming}: Record outgoing legs in same file as incoming legs&lt;br /&gt;
* Variables can be used to insert in the recording path information that's not already available from routing scripts:&lt;br /&gt;
** @{CURRENT_PKG}: Version of current package&lt;br /&gt;
*** Example: 2.6.45&lt;br /&gt;
** @{DATE format}: Prints the date, where 'format' is expressed as described for the 'strftime' function&lt;br /&gt;
*** Example: @{DATE %Y-%m-%d} =&amp;gt; 2013-01-28&lt;br /&gt;
** @{DefaultName}: Replaced by the default file name for recording, which contains:&lt;br /&gt;
*** LinkId:     Id common between all legs of this call bridge&lt;br /&gt;
*** LegId:      Unique Id for this leg&lt;br /&gt;
*** Nap:        Current NAP name this call leg is from&lt;br /&gt;
*** Direction:  &amp;quot;IN&amp;quot; or &amp;quot;OUT&amp;quot; (depends if call leg is incoming or outgoing leg)&lt;br /&gt;
*** Calling:    Calling number&lt;br /&gt;
*** Called:     Called number&lt;br /&gt;
*** Protocol:   Protocol type of this call (SS7, ISDN, CASR2, SIP)&lt;br /&gt;
*** Media info: Codec + IP/Port for SIP calls, Trunk/Timeslot for TDM calls&lt;br /&gt;
*** Example: &amp;quot;73EBA698-F3D67B4B-NAP_SS7-IN-5550000-5550001-SS7-TRUNK_BELL_11-24.wav&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;73EBA698-73EBA698-NAP_SIP-OUT-5550000-5550001-SIP-G723-10.3.10.101-1050.wav&amp;quot;&lt;br /&gt;
** @{DefaultPath}:  Default recording folder and file name: &amp;quot;@{RECORD_PATH}/@{DATE %Y-%m-%d}/@{DefaultName}&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;/lib/tb/toolpack/setup/12358/recorded_calls/73EBA698-F3D67B4B-NAP_SS7-IN-5550000-5550001-SS7-TRUNK_BELL_11-24.wav&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;/lib/tb/toolpack/setup/12358/recorded_calls/73EBA698-73EBA698-NAP_SIP-OUT-5550000-5550001-SIP-G723-10.3.10.101-1050.wav&amp;quot;&lt;br /&gt;
** @{Direction}: Direction of current leg (IN our OUT)&lt;br /&gt;
*** Example: IN&lt;br /&gt;
** @{LegId}: Current LegId (Unique Id for this leg)&lt;br /&gt;
*** Example: F3D67B4B&lt;br /&gt;
** @{LinkId}: Current LinkId (Id common between all legs of this call bridge)&lt;br /&gt;
*** Example: 73EBA698&lt;br /&gt;
** @{PKG_HOME}: Path where packages are stored.&lt;br /&gt;
*** Note: It's not recomended to use that path on redundant systems, package file replication may cause confusion in recorded files.&lt;br /&gt;
*** Example: /lib/tb/toolpack/pkg&lt;br /&gt;
** @{PROMPT_PATH}: Default path where audio prompts are stored&lt;br /&gt;
*** Note: It's not recomended to use that path on redundant systems, package file replication may cause confusion in recorded files.&lt;br /&gt;
*** Example: /lib/tb/toolpack/pkg/prompts&lt;br /&gt;
** @{Protocol}: Protocol of current leg&lt;br /&gt;
*** Example: SS7&lt;br /&gt;
** @{RECORD_PATH}: Default recording folder: &amp;quot;@{TB_SETUP_HOME}/recorded_calls/&amp;quot;&lt;br /&gt;
** @{TBX_GW_PORT}: Current &amp;quot;System Id&amp;quot; (also called &amp;quot;Gateway Port&amp;quot;)&lt;br /&gt;
*** Example: 12358&lt;br /&gt;
** And all variables listed here: [[Customer_application_framework:play_audio_files#Helpful_variables_to_build_play_or_record_file_paths|Building play or record file path]]&lt;br /&gt;
&lt;br /&gt;
== Controlling UUI (user-to-user information) relay  ==&lt;br /&gt;
UUI (user-to-user information) can be present in different messages received by either call leg during a call. For example, information can be carried during the initial invite, other information can be carried when the call is alerted, answered, or terminated.&lt;br /&gt;
&lt;br /&gt;
Routing scripts can control if the UUI received from one leg through the call will be forwarded to the other call leg:&lt;br /&gt;
*uui_forward_enabled&lt;br /&gt;
&lt;br /&gt;
Routing scripts can also read and modify the UUI received with the incoming call leg, before it gets forwarded upon creation of the outgoing call leg:&lt;br /&gt;
*uui &lt;br /&gt;
&lt;br /&gt;
=== UUI (user-to-user indication) values  ===&lt;br /&gt;
&lt;br /&gt;
Byte array represented as ruby String. Use ''bridge=params[:bridge]'', then ''bridge[:uui]'' to access the data.&lt;br /&gt;
&lt;br /&gt;
To access the bytes in Ruby, use ruby String operator []. For example:  bridge[:uui][0] will return the binary value of the first UUI byte.&lt;br /&gt;
&lt;br /&gt;
Function each_byte can also be useful to iterate through all bytes of the UUI.&lt;br /&gt;
&lt;br /&gt;
=== uui_forward_enabled values  ===&lt;br /&gt;
&lt;br /&gt;
Controls forwarding or discarding of UUI to outgoing call leg. &lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true.&lt;br /&gt;
* 0/false: UUI is not forwarded between call legs&lt;br /&gt;
* 1/true: UUI is forwarded between call legs&lt;br /&gt;
&lt;br /&gt;
The value for this parameter at input of routing script depends on the &amp;quot;Forward UUI&amp;quot; parameter in the &amp;quot;Advanced&amp;quot; section of the Gateway configuration page of the Web Portal. The script may change this value to override the Gateway configuration.&lt;br /&gt;
&lt;br /&gt;
== Authorization ==&lt;br /&gt;
Starting with release 2.7, it is possible to issue RADIUS authorization requests from routing scripts. To do so, the params[:authorization] object must be filled with the required RADIUS attributes and [[#Refuse|an exception must be raised]] with reason :authorization_required.&lt;br /&gt;
&lt;br /&gt;
When the authorization is completed, the routing script is called again with the result. The params[:authorization] object will be filled with the RADIUS attributes from the response. The params[:authorization][:result] field will also contain a string indicating the result of the authorization:&lt;br /&gt;
&lt;br /&gt;
* ''accept'': The authorization was successful.&lt;br /&gt;
* ''reject'': The authorization was refused.&lt;br /&gt;
* ''challenge'': The authorization was challenged.&lt;br /&gt;
* ''timeout'': The authorization was not answered.&lt;br /&gt;
&lt;br /&gt;
== Call diversion options ==&lt;br /&gt;
It's possible to control the call flow when a call diversion information is received in the alerting state.&lt;br /&gt;
&lt;br /&gt;
Two fields are available: bridge[ :diversion ] and bridge[ :diversion_reason ]&lt;br /&gt;
&lt;br /&gt;
The internal release cause TOOLPACK_DIVERT_NOT_ALLOWED is used by gateway application to terminate both legs.&lt;br /&gt;
&lt;br /&gt;
  bridge[ :diversion ] = :allowed&lt;br /&gt;
The alert message will not be analyzed and the call will be progressed. Default behavior.&lt;br /&gt;
  bridge[ :diversion ] = :not_allowed&lt;br /&gt;
If the alert message indicates that the call is diverted, the call will be released no matter the In-band information to allow&lt;br /&gt;
early media.&lt;br /&gt;
  bridge[ :diversion ] = :not_allowed_w_early_media&lt;br /&gt;
The call will be released If the alert message indicates that the call is diverted with in-band information to allow early media.&lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;*&amp;quot;&lt;br /&gt;
If the diversion is not allowed, the gateway will drop the call for any redirecting reason. &lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;0,1,2&amp;quot;&lt;br /&gt;
or&lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;unknown,busy,no_reply&amp;quot;&lt;br /&gt;
If the diversion is not allowed, the redirecting reason will be analyzed and the call will only be dropped for the configured cases.&lt;br /&gt;
&lt;br /&gt;
See section [[Routing_script_tutorial:Mini_Development_Guide#Redirecting_number,_Original_Called_Number_and_Diversion_Reason|Redirecting number reason values]].&lt;br /&gt;
&lt;br /&gt;
== Call transfer requests ==&lt;br /&gt;
Toolpack allows that [[Call transfer]] requests are relayed from one leg to the other, or to process them locally (making another outgoing call to replace the call that requested the call transfer).&lt;br /&gt;
&lt;br /&gt;
If the chosen [[Call transfer]] mode is to process requests locally, upon reception of a call transfer request (SIP REFER or ISDN Facility), routing script will be called once again, to select the routes for the new outgoing call (call transfer target).&lt;br /&gt;
&lt;br /&gt;
=== How to route call transfer request ===&lt;br /&gt;
Routing of a call transfer request is done exactly like routing of a normal incoming call.&lt;br /&gt;
The routing script generally does not need any modification to support that.&lt;br /&gt;
&lt;br /&gt;
In some cases, the routing script may want to use information related to the transfer request to perform routing, or to insert information in the outgoing call leg.&lt;br /&gt;
Additional information is provided to the routing script, allowing routing decisions using information from the call transfer request (SIP REFER or ISDN Facility).&lt;br /&gt;
See below...&lt;br /&gt;
&lt;br /&gt;
=== params[ :call ] content during transfer request ===&lt;br /&gt;
When processing a call transfer request, the params[ :call ] hash contains the information from the inbound call (same as was passed to the routing script upon arrival of the inbound call)&lt;br /&gt;
 call = params[ :call ]          -&amp;gt; Information from original inbound call, with exception of call[ :called ]&lt;br /&gt;
&lt;br /&gt;
One exception (convenient because it allows a unmodified routing script to process call transfer request the same way as any other routing request):&lt;br /&gt;
 call[ :called ]                 -&amp;gt; Replaced by the called number from the call transfer request (also called &amp;quot;redirection number&amp;quot;)&lt;br /&gt;
Complementary information:&lt;br /&gt;
 call[ :original_called_number ] -&amp;gt; Contains the called number that was initially received from the incoming call, prior to call transfer request&lt;br /&gt;
 call[ :redirecting_number ]     -&amp;gt; Number of the call from which the call transfer request was received (generally equals to original_called_number)&lt;br /&gt;
&lt;br /&gt;
These fields will also be included in the outgoing call made after routing:&lt;br /&gt;
* original called number and redirecting number are existing fields on SS7 and ISDN calls&lt;br /&gt;
* SIP &amp;quot;diversion&amp;quot; header is used for SIP calls&lt;br /&gt;
&lt;br /&gt;
=== params[ :transfer ] content ===&lt;br /&gt;
(this if valid only for release 2.7.102 and above)&amp;lt;br&amp;gt;&lt;br /&gt;
When processing a call transfer request, information from the call transfer request message (SIP REFER, ISDN Facility) is provided in params[ :transfer ]:&lt;br /&gt;
  transfer = params[ :transfer ]&lt;br /&gt;
The following field is always present:&lt;br /&gt;
  transfer[ :original_nap ]      -&amp;gt; Contains the NAP of the first call from which a call transfer request was received&lt;br /&gt;
  transfer[ :redirecting_nap ]   -&amp;gt; Contains the NAP of the call from which the current call transfer request was received&lt;br /&gt;
                                    (same as :original_nap for the first call transfer, different for subsequent transfers)&lt;br /&gt;
Examples of other fields that may be present, when appropriate:&lt;br /&gt;
  transfer[ :uui ]               -&amp;gt; The UUI (user-to-user information) found in the call transfer request&lt;br /&gt;
  transfer[ :sip_header ]        -&amp;gt; Contains custom SIP headers from the call transfer request&lt;br /&gt;
  transfer[ :request_uri ]       -&amp;gt; Contains the SIP Request URI&lt;br /&gt;
&lt;br /&gt;
These fields are 'read-only'. They will not be included in the outgoing call, as they represent the contents of the call transfer request, and not the outgoing call to be made.&lt;br /&gt;
&lt;br /&gt;
To insert/modify attributes of the outgoing call, the parameters from params[ :call ] must be edited instead.&lt;br /&gt;
&lt;br /&gt;
== Redirection ==&lt;br /&gt;
In release 2.8 and above, redirection contacts are obtained from the routing engine in the following format:&lt;br /&gt;
&lt;br /&gt;
  contacts = params[ :contacts ]&lt;br /&gt;
  contacts = {&lt;br /&gt;
      :index=&amp;gt;&amp;quot;3&amp;quot;,&lt;br /&gt;
      :list=&amp;gt;[&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6660&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6661&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6661@192.168.215.127&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6661@192.168.215.127&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6662&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6662@192.168.215.128&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6662@192.168.215.128&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6663&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6663@192.168.215.129&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6663@192.168.215.129&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6664&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6664@192.168.215.150&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6664@192.168.215.150&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
      ],&lt;br /&gt;
      :source_indexes=&amp;gt;&amp;quot;nil,0,0,0,2&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:list]&amp;lt;/code&amp;gt; contains the contact log. Each contact within the list has the following fields:&lt;br /&gt;
** &amp;lt;code&amp;gt;:called_number&amp;lt;/code&amp;gt; - the called number&lt;br /&gt;
** &amp;lt;code&amp;gt;:is_number_ported&amp;lt;/code&amp;gt; - if the called number has been ported (for SIP: if the npdi parameter is present)&lt;br /&gt;
** &amp;lt;code&amp;gt;:ported_number&amp;lt;/code&amp;gt; - the called number that was ported (for SIP: the rn parameter value, if available)&lt;br /&gt;
** &amp;lt;code&amp;gt;:sip_uri&amp;lt;/code&amp;gt; - the SIP URI of the contact, without the contact-params section (without the expires and q contact parameters)&lt;br /&gt;
** &amp;lt;code&amp;gt;:raw_data&amp;lt;/code&amp;gt; - the raw data representing the contact in the signaling protocol. For SIP, this is the full SIP URI (including the expires and q contact parameters).&lt;br /&gt;
** &amp;lt;code&amp;gt;:priority&amp;lt;/code&amp;gt; - the priority of the contact [0-1000]&lt;br /&gt;
** &amp;lt;code&amp;gt;:expiration&amp;lt;/code&amp;gt; - the expiration time in seconds of the contact&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:index]&amp;lt;/code&amp;gt; contains the index of the contact that is currently being routed.&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:source_indexes]&amp;lt;/code&amp;gt; contains a comma-separated list of indexes from &amp;lt;code&amp;gt;params[:contacts][:list]&amp;lt;/code&amp;gt;. Each index represents the contact from which the contact in the list was obtained from.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get more information, see:&lt;br /&gt;
*[[Routing_script_tutorial:SIP_Redirection_Contacts|SIP Redirection Contacts Parameters in a Call Flow]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Connected number ==&lt;br /&gt;
Insert a connected number in the answer message of the call flow.&lt;br /&gt;
&lt;br /&gt;
Routing script example:&lt;br /&gt;
    bridge = params[ :bridge ]&lt;br /&gt;
    bridge [ :connected_number ] = &amp;quot;3335577&amp;quot;&lt;br /&gt;
    bridge [ :connected_number_noa ] = :national_number&lt;br /&gt;
    bridge [ :connected_number_npi ] = :private&lt;br /&gt;
    bridge [ :connected_number_presentation ] = :allowed&lt;br /&gt;
    bridge [ :connected_number_screening ] = :pass&lt;br /&gt;
&lt;br /&gt;
== Terminating calls ==&lt;br /&gt;
In release 2.8, it is now possible to terminate a call through the routing scripts. The [[#Reason values|reason code]] must be specified in &amp;lt;code&amp;gt;params[:bridge][:reason]&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;:terminate&amp;lt;/code&amp;gt; hash must be created and copied into &amp;lt;code&amp;gt;params&amp;lt;/code&amp;gt;:&lt;br /&gt;
  terminate = {}&lt;br /&gt;
  params[:terminate] = terminate&lt;br /&gt;
The following fields can then be set in &amp;lt;code&amp;gt;:terminate&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;:sip_header&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:contacts&amp;lt;/code&amp;gt; # list of contacts as described in the [[#Redirection|redirection]] section&lt;br /&gt;
* &amp;lt;code&amp;gt;:isup_raw&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:isup_raw_variant&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_noa&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_npi&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_presentation&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_reason&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_counter&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_indicator&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_noa&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_npi&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_presentation&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_reason&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_counter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reason values  ==&lt;br /&gt;
&lt;br /&gt;
Check here for Termination Reason Cause codes:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Termination_cause_codes|Termination Reason Cause codes]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to refuse an incoming call leg.&lt;br /&gt;
  raise RoutingException, :no_route&lt;br /&gt;
&lt;br /&gt;
Reason cause strings available inside routing scripts:&lt;br /&gt;
&lt;br /&gt;
List of Q.850 reason causes:&lt;br /&gt;
  :unallocated_number&lt;br /&gt;
  :no_route_to_network&lt;br /&gt;
  :no_route_to_destination&lt;br /&gt;
  :send_special_tone&lt;br /&gt;
  :misdialled_trunk_prefix&lt;br /&gt;
  :channel_unacceptable&lt;br /&gt;
  :call_awarded_in_established_channel&lt;br /&gt;
  :preemption&lt;br /&gt;
  :reattempt&lt;br /&gt;
  :qor_ported_number&lt;br /&gt;
  :normal_call_clearing&lt;br /&gt;
  :user_busy&lt;br /&gt;
  :no_user_responding&lt;br /&gt;
  :no_answer_from_user&lt;br /&gt;
  :subscriber_absent&lt;br /&gt;
  :call_rejected&lt;br /&gt;
  :number_changed&lt;br /&gt;
  :redirection&lt;br /&gt;
  :exchange_routing_error&lt;br /&gt;
  :non_selected_user_clearing&lt;br /&gt;
  :destination_out_of_order&lt;br /&gt;
  :address_incomplete&lt;br /&gt;
  :facility_rejected&lt;br /&gt;
  :response_to_status_enquiry&lt;br /&gt;
  :normal_unspecified&lt;br /&gt;
  :no_circuit_available&lt;br /&gt;
  :network_out_of_order&lt;br /&gt;
  :frame_mode_out_of_service&lt;br /&gt;
  :frame_mode_connection_operational&lt;br /&gt;
  :temporary_failure&lt;br /&gt;
  :switching_equipment_congestion&lt;br /&gt;
  :access_information_discarded&lt;br /&gt;
  :requested_circuit_not_available&lt;br /&gt;
  :precedence_call_blocked&lt;br /&gt;
  :resource_unavailable&lt;br /&gt;
  :quality_of_service_not_available&lt;br /&gt;
  :requested_facility_not_subscribed&lt;br /&gt;
  :outgoing_calls_barred&lt;br /&gt;
  :outgoing_calls_barred_within_cug&lt;br /&gt;
  :incoming_calls_barred&lt;br /&gt;
  :incoming_calls_barred_within_cug&lt;br /&gt;
  :bearer_cap_not_authorized&lt;br /&gt;
  :bearer_cap_not_available&lt;br /&gt;
  :inconsistency_access_info&lt;br /&gt;
  :service_not_available&lt;br /&gt;
  :bearer_cap_not_implemented&lt;br /&gt;
  :channel_type_not_implemented&lt;br /&gt;
  :requested_facility_not_implemented&lt;br /&gt;
  :only_restricted_digital_info&lt;br /&gt;
  :service_not_implemented&lt;br /&gt;
  :invalid_call_reference&lt;br /&gt;
  :channel_does_not_exist&lt;br /&gt;
  :call_identity_does_not_exist&lt;br /&gt;
  :call_identity_in_use&lt;br /&gt;
  :no_call_suspended&lt;br /&gt;
  :call_has_been_cleared&lt;br /&gt;
  :user_not_member_of_cug&lt;br /&gt;
  :incompatible_destination&lt;br /&gt;
  :non_existant_cug&lt;br /&gt;
  :invalid_transit_network&lt;br /&gt;
  :invalid_message_unspecified&lt;br /&gt;
  :mandatory_ie_missing&lt;br /&gt;
  :message_type_non_existent&lt;br /&gt;
  :message_not_compatible_with_call_state&lt;br /&gt;
  :ie_non_existent&lt;br /&gt;
  :invalid_ie_content&lt;br /&gt;
  :msg_not_compatible_with_call_state&lt;br /&gt;
  :recovery_on_timer_expiry&lt;br /&gt;
  :parameter_non_existent_passed_on&lt;br /&gt;
  :message_with_non_recognized_parameters_discarded&lt;br /&gt;
  :protocol_error&lt;br /&gt;
  :interworking_unspecified&lt;br /&gt;
&lt;br /&gt;
List of toolpack reason causes:&lt;br /&gt;
&lt;br /&gt;
  :toolpack_normal                       or :normal&lt;br /&gt;
  :toolpack_resource_error               or :resource_error&lt;br /&gt;
  :toolpack_timeout                      or :timeout&lt;br /&gt;
  :toolpack_no_route                     or :no_route&lt;br /&gt;
  :toolpack_call_collision               or :call_collision&lt;br /&gt;
  :toolpack_sync_drop                    or :sync_drop&lt;br /&gt;
  :toolpack_signaling_error              or :signaling_error&lt;br /&gt;
  :toolpack_locally_rejected             or :locally_rejected&lt;br /&gt;
  :toolpack_interface_not_available      or :interface_not_available&lt;br /&gt;
  :toolpack_reset_in_progress            or :reset_in_progress&lt;br /&gt;
  :toolpack_adapter_reject               or :adapter_reject&lt;br /&gt;
  :toolpack_missing_or_invalid_ie        or :missing_or_invalid_ie&lt;br /&gt;
  :toolpack_incoming_only                or :incoming_only&lt;br /&gt;
  :toolpack_system_configuration_changed or :system_configuration_changed&lt;br /&gt;
  :toolpack_resource_no_more_available   or :resource_no_more_available&lt;br /&gt;
  :toolpack_incompatible_media           or :incompatible_media&lt;br /&gt;
  :toolpack_resource_allocation_failed   or :resource_allocation_failed&lt;br /&gt;
  :toolpack_data_path_not_available      or :data_path_not_available&lt;br /&gt;
  :toolpack_local_congestion             or :local_congestion&lt;br /&gt;
  :toolpack_authorization_required       or :authorization_required&lt;br /&gt;
  :toolpack_call_divert_is_not_allowed   or :call_divert_is_not_allowed&lt;br /&gt;
&lt;br /&gt;
List of SIP reason causes:&amp;lt;br/&amp;gt;&lt;br /&gt;
Reason causes starting with a digit must use the following syntax (can't use : as prefix).&lt;br /&gt;
&lt;br /&gt;
  '300_multiple_choices'&lt;br /&gt;
  '301_moved_permanently'&lt;br /&gt;
  '302_moved_temporarily'&lt;br /&gt;
  '305_use_proxy'&lt;br /&gt;
  '380_alternative_service'&lt;br /&gt;
  '400_bad_request'&lt;br /&gt;
  '401_unauthorized'&lt;br /&gt;
  '402_payment_required'&lt;br /&gt;
  '403_forbidden'&lt;br /&gt;
  '404_not_found'&lt;br /&gt;
  '405_method_not_allowed'&lt;br /&gt;
  '406_not_acceptable'&lt;br /&gt;
  '407_proxy_authentication_required'&lt;br /&gt;
  '408_request_timeout'&lt;br /&gt;
  '409_conflict'&lt;br /&gt;
  '410_gone'&lt;br /&gt;
  '413_request_entity_too_large'&lt;br /&gt;
  '414_request_URI_too_long'&lt;br /&gt;
  '415_unsupported_media'&lt;br /&gt;
  '416_unsupported_URI_scheme'&lt;br /&gt;
  '420_bad_extension'&lt;br /&gt;
  '421_extension_required'&lt;br /&gt;
  '422_session_timer_too_small'&lt;br /&gt;
  '423_interval_too_brief'&lt;br /&gt;
  '429_referrer_identity_error'&lt;br /&gt;
  '480_temporary_unavailable'&lt;br /&gt;
  '481_call_or_transaction_does_not_exist'&lt;br /&gt;
  '482_loop_detected'&lt;br /&gt;
  '483_too_many_hops'&lt;br /&gt;
  '484_address_incomplete'&lt;br /&gt;
  '485_ambiguous'&lt;br /&gt;
  '486_busy_here'&lt;br /&gt;
  '487_request_terminated'&lt;br /&gt;
  '488_not_acceptable_here'&lt;br /&gt;
  '489_bad_event'&lt;br /&gt;
  '491_retry_after'&lt;br /&gt;
  '500_server_internal_error'&lt;br /&gt;
  '501_not_implemented'&lt;br /&gt;
  '502_bad_gateway'&lt;br /&gt;
  '503_service_unavailable'&lt;br /&gt;
  '504_server_timeout'&lt;br /&gt;
  '505_version_unsupported'&lt;br /&gt;
  '513_message_too_large'&lt;br /&gt;
  '600_busy_everywhere'&lt;br /&gt;
  '603_decline'&lt;br /&gt;
  '604_not_exist_anywhere'&lt;br /&gt;
  '606_not_acceptable'&lt;br /&gt;
&lt;br /&gt;
== Nap status  ==&lt;br /&gt;
&lt;br /&gt;
All the status fields of the NAPs are provided for use by the routing scripts. See the nap status provider for more details on which fields are available in the CEngineStatTransNap.hpp file. &lt;br /&gt;
&lt;br /&gt;
'''Notice:''' These values may change between major release. &lt;br /&gt;
&lt;br /&gt;
  Routing script call attribute name    Description&lt;br /&gt;
  --------------------------------------------------------------------------------------------&lt;br /&gt;
  &amp;quot;name&amp;quot;                                NAP name.&lt;br /&gt;
  &amp;quot;signaling_type&amp;quot;                      Signaling type (SS7, ISDN, CASR2, SIP)&lt;br /&gt;
  &amp;quot;profile&amp;quot;                             Profile name.&lt;br /&gt;
  &amp;quot;sip_destination_ip&amp;quot;                  Destination IP address.&lt;br /&gt;
  &amp;quot;sip_destination_port&amp;quot;                Destination IP port.&lt;br /&gt;
  &amp;quot;sip_transport_type&amp;quot;                  SIP transport type (:udp, :tcp, or :tls) (Toolpack 3.1 and more)&lt;br /&gt;
  &amp;quot;inst_incoming_call_cnt&amp;quot;              Instantaneous Count of incoming calls.&lt;br /&gt;
  &amp;quot;inst_outgoing_call_cnt&amp;quot;              Instantaneous Count of outgoing calls.&lt;br /&gt;
  &amp;quot;available_cnt&amp;quot;                       Number of available circuits or channels.&lt;br /&gt;
  &amp;quot;unavailable_cnt&amp;quot;                     Number of unavailable circuits or channels.&lt;br /&gt;
  &amp;quot;availability_percent&amp;quot;                Percentage of available circuits or channels.&lt;br /&gt;
  &amp;quot;usage_percent&amp;quot;                       Percentage of used circuits or channels.&lt;br /&gt;
  &amp;quot;unused_shared_percent&amp;quot;               Percentage of used circuits or channels of this NAP available to make new calls with (taking into account shared with other NAPs)&lt;br /&gt;
  &amp;quot;total_incoming_call_cnt&amp;quot;             Total Count of incoming calls.&lt;br /&gt;
  &amp;quot;global_asr_percent&amp;quot;                  Global calculated ASR percentage.&lt;br /&gt;
  &amp;quot;total_outgoing_call_cnt&amp;quot;             Total Count of outgoing calls.&lt;br /&gt;
  &amp;quot;last_24h_asr_percent&amp;quot;                Last 24 hours calculated ASR percentage.&lt;br /&gt;
  &amp;quot;last_24h_outgoing_call_cnt&amp;quot;          Last 24 hours outgoing calls.&lt;br /&gt;
  &amp;quot;current_hour_asr_percent&amp;quot;            Current hour calculated ASR percentage.&lt;br /&gt;
  &amp;quot;current_hour_outgoing_call_cnt&amp;quot;      Current hour outgoing calls.&lt;br /&gt;
  &amp;quot;last_hour_asr_percent&amp;quot;               Last hour calculated ASR percentage.&lt;br /&gt;
  &amp;quot;last_hour_outgoing_call_cnt&amp;quot;         Last hour outgoing calls.&lt;br /&gt;
  &amp;quot;poll_remote_proxy&amp;quot;                   Remote proxy polling enabled&lt;br /&gt;
  &amp;quot;is_available&amp;quot;                        Remote proxy actually available or not&lt;br /&gt;
  &amp;quot;time_since_polling&amp;quot;                  Time since the last availibility polling&lt;br /&gt;
  &amp;quot;time_available_seconds&amp;quot;              Number of seconds since the NAP is available&lt;br /&gt;
  &amp;quot;time_unavailable_seconds&amp;quot;            Number of seconds since the NAP is unavailable&lt;br /&gt;
  &amp;quot;register_to_proxy&amp;quot;                   Register to proxy enabled&lt;br /&gt;
  &amp;quot;registered&amp;quot;                          Actually registered or not&lt;br /&gt;
  &amp;quot;time_since_refresh&amp;quot;                  Time since the last refresh&lt;br /&gt;
  &amp;quot;time_registered_seconds&amp;quot;             Number of seconds since the NAP is registered&lt;br /&gt;
  &amp;quot;time_not_registered_seconds&amp;quot;         Number of seconds since the NAP is not registered&lt;br /&gt;
  &amp;quot;asr_stats_incoming_struct&amp;quot;           Detailed Answer-Seizure Rate incoming statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;global_asr_percent&amp;quot;                Global calculated ASR percentage.&lt;br /&gt;
    &amp;quot;total_call_cnt&amp;quot;                    Total count of calls.&lt;br /&gt;
    &amp;quot;total_accepted_call_cnt&amp;quot;           Total count of accepted calls (not dropped due to congestion or rate-limiting).&lt;br /&gt;
    &amp;quot;total_answered_call_cnt&amp;quot;           Total count of answered calls.&lt;br /&gt;
    &amp;quot;last_24h_asr_percent&amp;quot;              Last 24 hours calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_24h_call_cnt&amp;quot;                 Last 24 hours count of calls.&lt;br /&gt;
    &amp;quot;current_hour_asr_percent&amp;quot;          Current hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;current_hour_call_cnt&amp;quot;             Current hour count of calls.&lt;br /&gt;
    &amp;quot;last_hour_asr_percent&amp;quot;             Last hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_hour_call_cnt&amp;quot;                Last hour count of calls.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;asr_stats_outgoing_struct&amp;quot;           Detailed Answer-Seizure Rate outgoing statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;global_asr_percent&amp;quot;                Global calculated ASR percentage.&lt;br /&gt;
    &amp;quot;total_call_cnt&amp;quot;                    Total count of calls.&lt;br /&gt;
    &amp;quot;total_accepted_call_cnt&amp;quot;           Total count of accepted calls (not dropped due to congestion or rate-limiting).&lt;br /&gt;
    &amp;quot;total_answered_call_cnt&amp;quot;           Total count of answered calls.&lt;br /&gt;
    &amp;quot;last_24h_asr_percent&amp;quot;              Last 24 hours calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_24h_call_cnt&amp;quot;                 Last 24 hours count of calls.&lt;br /&gt;
    &amp;quot;current_hour_asr_percent&amp;quot;          Current hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;current_hour_call_cnt&amp;quot;             Current hour count of calls.&lt;br /&gt;
    &amp;quot;last_hour_asr_percent&amp;quot;             Last hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_hour_call_cnt&amp;quot;                Last hour count of calls.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;mos_struct&amp;quot;                          Detailed Mean Opinion Score statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;last_24h_ingress&amp;quot;                  Last 24 hours calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_24h_egress&amp;quot;                   Last 24 hours calculated MOS for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_ingress&amp;quot;              Current hour calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_egress&amp;quot;               Current hour calculated MOS for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_ingress&amp;quot;                 Last hour calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_egress&amp;quot;                  Last hour calculated MOS for outgoing RTP packets.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;network_quality_struct&amp;quot;              Detailed network quality statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;last_24h_ingress&amp;quot;                  Last 24 hours network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_24h_egress&amp;quot;                   Last 24 hours network quality percentage for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_ingress&amp;quot;              Current hour network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_egress&amp;quot;               Current hour network quality percentage for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_ingress&amp;quot;                 Last hour network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_egress&amp;quot;                  Last hour network quality percentage for outgoing RTP packets.&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; If the nap status is part of a substructure, the substructure will be a hash containing all subfield elements. &lt;br /&gt;
&lt;br /&gt;
Example to access the signaling type and the number of incoming call count for the NAP of the current call:&lt;br /&gt;
&lt;br /&gt;
   incoming_nap = params[:naps][ params[:call][ :nap ].to_sym]&lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP parameters=&amp;quot; + incoming_nap.inspect &lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP signaling type=&amp;quot; + incoming_nap[:signaling_type].inspect &lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP call cnt=&amp;quot; + incoming_nap[:asr_stats_incoming_struct][:total_call_cnt].inspect &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; It is also possible to add dynamic nap attributes in the web portal. These can be referenced by their name.&lt;br /&gt;
&lt;br /&gt;
== Telephony Services ==&lt;br /&gt;
In release 2.10 and the above, telephony services (CNAM Request) can be manage from the routing engine in the following format:&lt;br /&gt;
&lt;br /&gt;
  params[:telephony_services].each do |service|  -&amp;gt; Array of telephony services&lt;br /&gt;
    service[:name]                               -&amp;gt; Customer telephony service name&lt;br /&gt;
    service[:type]                               -&amp;gt; For now only &amp;quot;CNAM Request&amp;quot;&lt;br /&gt;
    service[:enabled]                            -&amp;gt; Indicate if the service is enabled (true) or not (false)&lt;br /&gt;
                                                    (Only the telephony service define in the profile associated to the NAP is enabled)&lt;br /&gt;
                                                    (The others telephony services define in others profiles are disabled)&lt;br /&gt;
                                                    (If we are in the case where we return in the routing script with a response, it is important to set :enabled to false in order to avoid repeating the same query)&lt;br /&gt;
    serviceParams = service[:params]&lt;br /&gt;
    serviceParams[:return_to_script]             -&amp;gt; Indicates to Gateway if we must return to the routing script after receiving the CNAM response&lt;br /&gt;
                                                    (It is important to set back to false this field to avoid an infinite loop)&lt;br /&gt;
    serviceQuery = service[:query]&lt;br /&gt;
    serviceQuery[:phone]                         -&amp;gt; 10 digits of calling number from the incoming call to send to the CNAM server&lt;br /&gt;
    serviceQuery[:timeout]                       -&amp;gt; Timeout in millisecond to wait a CNAM response from CNAM server&lt;br /&gt;
                                                    (Default value from profile configuration)&lt;br /&gt;
    serviceResponse = service[:response]&lt;br /&gt;
    serviceResponse[:success]                    -&amp;gt; Indicates if we received a good CNAM response from the CNAM Server (Only present if :return_to_script is set to true)&lt;br /&gt;
    serviceResponse[:caller_name]                -&amp;gt; The caller name received in the CNAM response from the CNAM Server (Only present if :return_to_script is set to true)&lt;br /&gt;
&lt;br /&gt;
== Custom user context ==&lt;br /&gt;
The routing script may '''save per-call information within the call context''', that will be available if routing is called again later during the call flow.&lt;br /&gt;
&lt;br /&gt;
Cases where routing is called multiple time for the same call are:&lt;br /&gt;
- Call transfer requests&lt;br /&gt;
- SIP redirect requests&lt;br /&gt;
- Radius Authorization result&lt;br /&gt;
- Announcement server with digit collection&lt;br /&gt;
&lt;br /&gt;
The routing script can save a recursive hash of attributes here:&lt;br /&gt;
  params[:user_context]&lt;br /&gt;
&lt;br /&gt;
For example&lt;br /&gt;
  params[:user_context] = { &amp;quot;SomeKey&amp;quot; =&amp;gt; &amp;quot;Some value I want to retrieve upon next routing for this call&amp;quot;, &amp;quot;OtherVal&amp;quot; =&amp;gt; { &amp;quot;subkey&amp;quot; =&amp;gt; &amp;quot;subval&amp;quot; } }&lt;br /&gt;
&lt;br /&gt;
Upon first call to routing script, params[:user_context] will be nil.&lt;br /&gt;
Upon subsequent calls to routing script, it will contain whatever the script had stored upon previous call (or nil if it was not set)&lt;br /&gt;
&lt;br /&gt;
Note: This feature is available starting from release 2.9.85, 2.10.31 and 3.0.15 (in respective branches 2.9, 2.10 or 3.0)&lt;br /&gt;
&lt;br /&gt;
== Routing Script Tests ==&lt;br /&gt;
The Web portal features a tool for Testing Scripts. The user must enter parameters to simulate the incoming call and after pressing the Test button, will output selected routes and numbers.  You do not need to activate the new routes, or the new scripts to use this test tool: It can be used to test the routing scripts and routing table before activating it.&lt;br /&gt;
This is available in the Routing Scripts section of the Web portal.&lt;br /&gt;
&lt;br /&gt;
=== Test parameters ===&lt;br /&gt;
==== @call_params  ====&lt;br /&gt;
&lt;br /&gt;
That variable should contain a hash of call parameters that will be passed to the routing script. This is equivalent to the incoming call parameters. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== @nap_list  ====&lt;br /&gt;
&lt;br /&gt;
A list of the hash containing the nap statuses. This is equivalent to the nap statuses at the time the call is to be routed. &lt;br /&gt;
&lt;br /&gt;
'''The nap list is hashed by the nap names in UPPERCASE.''' It is important to consider this when creating new dynamic route or nap attributes that may nap names that will be used to fetch a status. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== @params  ====&lt;br /&gt;
&lt;br /&gt;
A hash of hashes containing parameters. This hash contains bridge parameters and other kind of parameter groups may be added in the future. &lt;br /&gt;
&lt;br /&gt;
  @params = {&lt;br /&gt;
     :bridge =&amp;gt; {:announcement_tone, &amp;quot;announcement.wav&amp;quot;},&lt;br /&gt;
     :contacts =&amp;gt; {&lt;br /&gt;
       :index=&amp;gt;&amp;quot;1&amp;quot;,&lt;br /&gt;
       :list=&amp;gt;[&lt;br /&gt;
          {:called_number=&amp;gt;&amp;quot;6660&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;&amp;quot;,&lt;br /&gt;
           :raw_data=&amp;gt;&amp;quot;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
          {:called_number=&amp;gt;&amp;quot;6661&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6661@192.168.215.127&amp;quot;, &lt;br /&gt;
           :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6661@192.168.215.127&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
       ],&lt;br /&gt;
       :source_indexes=&amp;gt;&amp;quot;nil,0&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Back to [[Routing script tutorial|Routing Script Tutorial]].&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Routing_script_tutorial:Mini_Development_Guide</id>
		<title>Routing script tutorial:Mini Development Guide</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Routing_script_tutorial:Mini_Development_Guide"/>
				<updated>2019-04-30T13:49:07Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* Example usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Call object  ==&lt;br /&gt;
&lt;br /&gt;
=== Get  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to get the call parameters. The possible parameters are described in the section &amp;quot;Call parameters&amp;quot; &lt;br /&gt;
&lt;br /&gt;
  called_number = caf_call.get&amp;amp;nbsp;:called&lt;br /&gt;
&lt;br /&gt;
=== List_params  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to retrieve the list of supported call parameters. For example to extract all the possible call parameters from the the call object and put it in hash. &lt;br /&gt;
&lt;br /&gt;
  caf_call.list_params.each {|param| call[param] = caf_call.get param }&lt;br /&gt;
&lt;br /&gt;
=== Accept  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to accept a call.  It actually creates one outgoing route that the gateway application will use to bridge the incoming call leg.  If more than one outgoing route is &amp;quot;accepted&amp;quot;, the gateway will try them one by one in the same order that they were accepted.   If an outgoing call leg fails (according to 'route retry' parameters), the next route in line will be used.  &lt;br /&gt;
&lt;br /&gt;
This method takes 2 arguments, the call parameters (hash) and the route parameters (hash).  Note that calling this method does NOT stop the flow of the script.&lt;br /&gt;
&lt;br /&gt;
Apply route remapping rules &lt;br /&gt;
&lt;br /&gt;
  caf_call.accept out_call, route&lt;br /&gt;
&lt;br /&gt;
=== Refuse  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to set the reason code for the incoming call leg refusal.  However, this function does NOT stop the flow of the script. &lt;br /&gt;
&lt;br /&gt;
  caf_call.refuse&amp;amp;nbsp;:reason =&amp;amp;gt;&amp;amp;nbsp;:temporary_failure&lt;br /&gt;
&lt;br /&gt;
To immediately refuse the incoming call leg and stop processing the script, the script must raise an exception.  Exiting the script by raising the exception overwrites any reason cause previously stored using refuse().&lt;br /&gt;
&lt;br /&gt;
  raise RoutingException, :no_route&lt;br /&gt;
&lt;br /&gt;
The supported refusal cause values for both refuse() and raise() are described in the section &amp;quot;[[Routing_script_tutorial:Mini_Development_Guide#Reason_values|Reason values]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Script parameters protocol mapping  ===&lt;br /&gt;
&lt;br /&gt;
The following call parameters are available in the call object. For example:&lt;br /&gt;
&lt;br /&gt;
  called_number = call[:called]&lt;br /&gt;
&lt;br /&gt;
For information on how to use and remap call parameters, see [[Toolpack:_How_to_Use_RegEx_in_Remapped_Called_and_Calling_Number_Mask | How to use regex in Remapped Called and Calling Number Mask]]&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 921px; height: 805px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Script parameter name''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''ISDN&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''R2 CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SS7&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SIP&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Comment&amp;lt;br&amp;gt;'''&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Toolpack version&amp;lt;br&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| leg_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Leg ID&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| session_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Session ID&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_session_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Original Session ID (before call transfer or redirections)&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| ANI (Group B)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - address signals (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used (when present) instead.&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - host (domain or IP) &amp;lt;br&amp;gt; &lt;br /&gt;
|  For example : The 'telcobridges.com' in From: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - port &amp;lt;br&amp;gt; &lt;br /&gt;
|  For example : The '6060' in From: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_noa&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - nature of address indicator (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used (when present) instead&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - numbering plan indicator (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used&amp;amp;nbsp;(when present) instead&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_display &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Display' IE - Display information&amp;lt;br&amp;gt; &lt;br /&gt;
Q931: 'Facility CNAM' IE when presentation is allowed for DMS/NI2 variants&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763 &lt;br /&gt;
ITU97: 'Display information' IE - display information &lt;br /&gt;
ANSI95: 'Generic name' IE - display information &lt;br /&gt;
| SIP:From - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_display_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Display' IE - Display information (present and/or first byte)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Display information' IE - present or not&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Presentation indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - display-name (displays 'anonymous' or not) &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - privacy&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_screening&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Screening indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Remote-party-id - screen&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_category&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Call party category (Group A)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party's category' IE - calling party's category&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - cpc &lt;br /&gt;
&lt;br /&gt;
SIP:P-asserted-identity - cpc&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber &lt;br /&gt;
(Generic Number / NDS)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Number digits &amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - Number digits&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| Requires option 'support 2 calling number IE' in the profile.  This variable has priority over 'private_address' in the outgoing direction.&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_noa&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_presentation&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Presentation indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_screening &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Screening indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_display&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Facility CNAM' IE when presentation is restricted for DMS/NI2 variants&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_display_type &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Indicate presence or not of the private calling information&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The 'fluffy' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - host (domain or IP)&lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - host (domain or IP) &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The 'telcobridges.com' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - port&lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - port&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The '6060' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| DNIS (Group A)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - user-info and host&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - host &amp;lt;br&amp;gt; &lt;br /&gt;
| For example : The 'telcobridges.com' in To: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - port number &amp;lt;br&amp;gt; &lt;br /&gt;
| For example : The '6060' in To: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number_npi&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default redirecting number and original called number forwarding behavior from incoming to outgoing leg &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number'&amp;amp;nbsp;1st IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Presentation indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion&amp;amp;nbsp;(2nd header) - diversion-privacy&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirecting indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_reason &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Reason for redirection&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirecting reason&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - diversion-reason&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_counter &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirection counter&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - diversion-counter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number &lt;br /&gt;
(OCN) &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion&amp;amp;nbsp; (1st header) - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Presentation indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-privacy&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_reason &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Reason for redirection&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - original redirection reason&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-reason&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_counter &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-counter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_npdi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - with qualifier=Ported number is present&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:RequestURI - npdi=yes is present&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - address signals with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:RequestURI - to user part when rn is present&amp;lt;br&amp;gt; &lt;br /&gt;
| rn is stored in the called number&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - nature of address indicator with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - numbering plan indicator with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| oli&lt;br /&gt;
(Originating line information) &amp;lt;br&amp;gt; &lt;br /&gt;
| 5ESS Codeset 6 OLI - Value&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Originating line information' IE - OLI&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - oli &lt;br /&gt;
&lt;br /&gt;
SIP:P-asserted-identity - oli&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| request_uri &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Complete Request URI string&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| request_uri_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default URI&amp;amp;nbsp;forwarding behavior from incoming to outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_header&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Any header&amp;lt;br&amp;gt; &lt;br /&gt;
| Requires option 'Forward custom headers' in Profiles-&amp;gt;SIP &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7.63&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| nap&lt;br /&gt;
(Network Access Point) &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg NAP name (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| type_of_network_identification&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Type of network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Type of network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| network_identification&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| SIP: Request-Line - cic&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| network_identification_plan&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Network identification plan &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Network identification plan &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default location number forwarding behavior from incoming to outgoing leg &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_presentation&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_screening &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| A script needs to set this to true if it wants to overwrite MLPP information in the outgoing leg.  Otherwise, profile relay 'outgoing mode' applies automatically.&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_look_for_busy &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - look ahead for busy&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_precedence_level &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - precedence level&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Resource-Priority - q735&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_network_identity &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - network identity&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_service_domain&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - MLPP service domain&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_isub &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party subaddress' IE - subaddress information&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - isub parameter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_isub_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party subaddress' IE - type of subaddress&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - isub-encoding parameter&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_isub &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party subaddress' IE - subaddress information&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - isub&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_isub_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Callinf party subaddress' IE - type of subaddress&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - isub-encoding&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_fci_default &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Default forward call indicator (FCI) value.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will overwrite FCI bits A, D, F, I and M with appropriate values according to call conditions&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_fci_force_mask &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Mask to select bits from ss7_fci_default that must be forced.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Bits from ss7_fci_default which corresponding bit in ss7_fci_force_mask is set will be forced, and no more controlled by Toolpack&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_bci_default &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Default backward call indicator (BCI) value.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will overwrite BCI bits AB, I, K, M and N with appropriate values according to call conditions&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_bci_force_mask &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Mask to select bits from ss7_bci_default that must be forced.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Bits from ss7_bci_default which corresponding bit in ss7_bci_force_mask is set will be forced, and no more controlled by Toolpack&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ls_name_forward_enabled&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| Enable line service and timeslot selection to create the outgoing leg&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.0&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ls_name&lt;br /&gt;
(Line Service or T1/E1 trunk) &amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| if tdm_ls_name_forward_enabled is set, try to use this line service name to create outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_timeslot_nb&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| if tdm_ls_name_forward_enabled is set, try to use this timeslot number to create outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_local_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SDP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_local_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SDP IP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_remote_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SDP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_remote_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SDP IP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_cot_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Requests SS7 in-call continuity test for this outgoing SS7 call&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will request a continuity test on the timeslot before making the outgoing call. If COT fails, the call will be dropped (then another route may be attempted)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reverse_charging_indication&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg Reverse charging indication IE present&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| If set in routing script, will add Reverse charging indication IE in outgoing leg (also use reverse_charging_indication_forward_enabled)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.12&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reverse_charging_indication_forward_enabled&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Enable forwarding of reverse charging indication from incoming to outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.12&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_call_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg SIP Call-Id&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.9.112 / 3.0.131&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_local_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SIP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_local_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SIP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_remote_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SIP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_remote_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SIP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noa values  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown_number (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number (0x4)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number (0x3)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;subscriber_number (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_specific (0x5)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_routing_national_format (0x7)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_routing_international_format (0x8)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;abbreviated_number (0x6)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;subscriber_number_operator_requested (0x71)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number_operator_requested (0x72)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number_operator_requested (0x73)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_number_present_operator_requested (0x74)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_number_present_cut_through_call_to_carrier (0x75)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;test_line_test_code (0x77)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_subscriber_number (0x71)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_national_number (0x73)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_international_number (0x74)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_950_numbe (0x76)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;special_number (0x73)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number_with_transit_network_selection (0x74)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number_with_transit_network_selection (0x75)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Those values will be remapped to the protocol specific NOA value. To provide protocol specific value: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:called_noa] = 0x70&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:called_noa] = 112&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Npi values  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown_number&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;isdn&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;telephony&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;data&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;telex&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Display Type values  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; =&amp;amp;gt; Type is unspecified. &lt;br /&gt;
*&amp;lt;tt&amp;gt;calling_party_name&amp;lt;/tt&amp;gt; =&amp;amp;gt; Type is 0xB1.&lt;br /&gt;
&lt;br /&gt;
Those values will be remapped to the protocol specific Display Information Type value. To provide protocol specific value: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display_type] = 0xB1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display_type] = 177&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Display value  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display] = &amp;quot;Roger Fluffy&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Presentation values for Calling number, Calling Subscriber (Generic Number), Redirecting Number, Original Called Number (OCN) and Location Number ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;not_available (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;allowed (0x0)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;restricted (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;addr_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;name_restricted&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Party Category  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
In case it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mapping from routing script to SS7/CAS R2/SIP&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Routing Script string &amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SS7 raw value &amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''R2 CAS scripts'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Default Rx CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''default Tx CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SIP &amp;quot;cpc=&amp;quot;  &amp;lt;br&amp;gt;''' &lt;br /&gt;
|-&lt;br /&gt;
| subscriber&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xa&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_SUBSCRIBER &amp;lt;br&amp;gt; &lt;br /&gt;
| 1 and 7&amp;lt;br&amp;gt; &lt;br /&gt;
| 7&amp;lt;br&amp;gt; &lt;br /&gt;
| ordinary&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| subscriber_with_priority&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xb&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_SUBSCRIBER_WITH_PRIORITY &amp;lt;br&amp;gt; &lt;br /&gt;
| 2 and 9 &amp;lt;br&amp;gt; &lt;br /&gt;
| 2 &amp;lt;br&amp;gt; &lt;br /&gt;
| priority&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_french&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x1&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_FRENCH &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_english&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x2&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_ENGLISH (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_german&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x3&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_GERMAN (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_russian&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x4&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_RUSSIAN (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_spanish &amp;lt;br&amp;gt; &lt;br /&gt;
| 0x5&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_SPANISH (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| data&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xc&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_DATA &amp;lt;br&amp;gt; &lt;br /&gt;
| 6 and 8&amp;lt;br&amp;gt; &lt;br /&gt;
| 6 &amp;lt;br&amp;gt; &lt;br /&gt;
| datacall&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| test&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xd&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_TEST &amp;lt;br&amp;gt; &lt;br /&gt;
| 3 &amp;lt;br&amp;gt; &lt;br /&gt;
| 3 &amp;lt;br&amp;gt; &lt;br /&gt;
| test&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| payphone &amp;lt;br&amp;gt; &lt;br /&gt;
| 0xf&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_PAYPHONE &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| 7 &amp;lt;br&amp;gt; &lt;br /&gt;
| payphone&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| unknown &amp;lt;br&amp;gt; &lt;br /&gt;
| 0x0 &amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_UNKNOWN&amp;lt;br&amp;gt; &lt;br /&gt;
| 4, 11 to 15&amp;lt;br&amp;gt; &lt;br /&gt;
| 7 &amp;lt;br&amp;gt; &lt;br /&gt;
| unknown&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| unspecified &amp;lt;br&amp;gt; &lt;br /&gt;
| 0xa &amp;lt;br&amp;gt; &lt;br /&gt;
| invalid &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| invalid &amp;lt;br&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
[[CAS_R2_scripting#Category_meanings|Link to calling party categories used in CAS R2 scripts]]&lt;br /&gt;
&lt;br /&gt;
=== Screening values for Calling number, Calling Subscriber (Generic Number), and Location Number  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no (0x0)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;pass (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;fail (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_provided (0x3)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redirecting indicator values  ===&lt;br /&gt;
&lt;br /&gt;
SS7: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;no_redirection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted_all_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted_all_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted_restricted&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;spare&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redirecting number, Original Called Number and Diversion Reason ===&lt;br /&gt;
&lt;br /&gt;
ISDN: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;busy&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_reply&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;dte_out_of_order&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;forwarding_by_called_dte&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;unconditional&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SS7: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;busy      (SIP: user-busy)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_reply  (SIP: no-answer)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;unconditional&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection_immediate&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;mobile_not_reachable&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OLI (originating line information) values  ===&lt;br /&gt;
&lt;br /&gt;
The OLI parameter is a string that represents an integer value from 0 to 255. &lt;br /&gt;
&lt;br /&gt;
=== Information Transfer Capability values  ===&lt;br /&gt;
&lt;br /&gt;
information_transfer_capability: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;digital&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;restricted_digital&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;digital_with_tones&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;speech&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;3_1_khz_audio&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;video&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== redirecting_number_forward_enabled values  ===&lt;br /&gt;
&lt;br /&gt;
Controls forwarding or discarding of redirecting number (SIP: diversion header) to the outgoing call leg. &lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true. &lt;br /&gt;
*0/false: Redirecting number (and original called number) is not forwarded to outgoing call leg&lt;br /&gt;
*1/true: Redirecting number (and original called number) is forwarded to outgoing call leg&lt;br /&gt;
&lt;br /&gt;
The value for this parameter at the input of the routing script depends on the &amp;quot;Forward redirecting number&amp;quot; parameter in the &amp;quot;Advanced&amp;quot; section of the Gateway configuration page of the Web Portal. The script may change this value to override the Gateway configuration.&lt;br /&gt;
&lt;br /&gt;
Note: To &amp;quot;insert&amp;quot; a new redirecting number value on the outgoing leg, redirecting_number_forward_enabled must also be set to true.&lt;br /&gt;
&lt;br /&gt;
=== request_uri  ===&lt;br /&gt;
&lt;br /&gt;
Enables access to the Request-Line URI.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For example, if the Request-Line is: &lt;br /&gt;
&amp;lt;pre&amp;gt;Request-Line: INVITE sip:4175162082@172.22.45.13:5060;user=phone;transport=udp SIP/2.0&amp;lt;/pre&amp;gt; &lt;br /&gt;
Then the retrieved request_uri will be &amp;quot;sip:4175162082@172.22.45.13:5060;user=phone;transport=udp SIP/2.0&amp;quot;. &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
In the routing scripts, to retrieve only the called number, this script can be used:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;    if call_params[:request_uri] &amp;amp;amp;&amp;amp;amp; call_params[:request_uri] =~ /sip:(.*)@.*/&lt;br /&gt;
       call_params[:called] = $1&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
==== request_uri_forward_enabled ====&lt;br /&gt;
&lt;br /&gt;
This call parameter controls forwarding or discarding of request uri to outgoing call leg.The request uri is the information in the &amp;quot;Request-Line:&amp;quot; of the SIP INVITE message.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true. &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 0/false: Request uri is not forwarded to outgoing call leg &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 1/true: Request uri is forwarded to outgoing call leg &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The default value for this parameters is false. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== sip_scheme  ====&lt;br /&gt;
(Available in Toolpack 3.1+)&lt;br /&gt;
This call parameters indicates the scheme (generally &amp;quot;sip&amp;quot; or &amp;quot;sips&amp;quot;) of the incoming call.&lt;br /&gt;
&lt;br /&gt;
This also allows to control the scheme used for the outgoing call (regardless if request_uri_forward_enabled is used or not)&lt;br /&gt;
&lt;br /&gt;
Note: sips scheme must only be used on TLS NAPs (will cause call routing failure if NAP has only UDP or TCP transport types).&lt;br /&gt;
&lt;br /&gt;
=== sip_header values  ===&lt;br /&gt;
Contains custom sip headers from the inbound call leg. Any custom sip header can be added to an outgoing call leg:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
The  SIP header is in string format.&lt;br /&gt;
&lt;br /&gt;
'''string format:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;call[ :sip_header ] = &amp;quot;P-my-custom-header:value1 \nP-my-custom-header2:value2 \nP-my-custom-header3:value3&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Note: \n above are actual newline characters, not '\' followed by 'n')&lt;br /&gt;
&lt;br /&gt;
* PCAP sample: [[File:TB_Custom_SIP_Headers.pcap]]&lt;br /&gt;
&lt;br /&gt;
List of sip headers that will not appear in call[:sip_header] since they are already processed by the SIP stack:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Accept               Error-Info             Remote-Party-ID      &lt;br /&gt;
Accept-Contact       Event                  Replaces                        &lt;br /&gt;
Accept-Encoding      Expires                Reply-To               &lt;br /&gt;
Accept-Language      From                   Request-Disposition    &lt;br /&gt;
Alert-Info           In-Reply-To            Subject          &lt;br /&gt;
Allow                Max-Forwards           Subscription-State  &lt;br /&gt;
Allow-Events         MIME-version           Supported           &lt;br /&gt;
Also                 Min-Expires            Timestamp           &lt;br /&gt;
Anonymity            Min-SE                 To             &lt;br /&gt;
Authorization        Organization           Unsupported  &lt;br /&gt;
Authentication-Info  Path                   User-Agent  &lt;br /&gt;
Call-ID              Priority               Via  &lt;br /&gt;
Call-Info            Privacy                Warning  &lt;br /&gt;
Contact              Proxy-Authenticate     WWW-Authenticate  &lt;br /&gt;
Content-Disposition  Proxy-Authorization    Require  &lt;br /&gt;
Content-Encoding     Proxy-Require          Response-Key  &lt;br /&gt;
Content-Language     P-Media-Authorization  Retry-After  &lt;br /&gt;
Content-Length       P-Preferred-Identity   RPID-Privacy  &lt;br /&gt;
Content-Type         P-Asserted-Identity    Route  &lt;br /&gt;
CSeq                 RAck                   RSeq  &lt;br /&gt;
RAck                 Reason                 Security-Client  &lt;br /&gt;
Reason               Record-Route           Security-Server  &lt;br /&gt;
Date                 Refer-To               Security-Verify&lt;br /&gt;
Diversion            Referred-By            Server&lt;br /&gt;
Encryption           Reject-Contact         Service-Route             &lt;br /&gt;
                                            Session-Expires&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sip header parameters  ===&lt;br /&gt;
The routing script can read (and modify) some SIP header parameters (user parameters, URI parameters or header parameters) from some SIP headers (To, From, P-Asserted-Identity, Remote-Party-ID, Contact).&lt;br /&gt;
&lt;br /&gt;
==== Available parameters ====&lt;br /&gt;
* '''call[ :calling_parameters ]''' (SIP &amp;quot;From&amp;quot; header)&lt;br /&gt;
* '''call[ :called_parameters ]''' (SIP &amp;quot;To&amp;quot; header)&lt;br /&gt;
* '''call[ :private_address_parameters ]''' (SIP &amp;quot;P-Asserted-Identity&amp;quot; or &amp;quot;Remote-Party-ID&amp;quot; header)&lt;br /&gt;
* '''call[ :contact_parameters ]''' (SIP &amp;quot;Contact&amp;quot; header)&lt;br /&gt;
&lt;br /&gt;
These parameters (if present) contain a hash with 3 keys: user_param, uri_param and header_param.&lt;br /&gt;
Each of this key points to a string that contains all the parameters found in the corresponding SIP header.&lt;br /&gt;
* '''User parameters''' (parameters between the user name/number and the host). Example  &amp;lt;sip:alice;'''param=value'''@somewhere.com&amp;gt;&lt;br /&gt;
* '''URI parameters''' (parameters at the end of the URI). Example  &amp;lt;sip:alice@somewhere.com;'''param=value'''&amp;gt;&lt;br /&gt;
* '''Header parameters''' (outside the URI). Example  &amp;lt;sip:alice@somewhere.com&amp;gt;;'''param=value'''&lt;br /&gt;
Example to print all parameters of SIP &amp;quot;To&amp;quot; header:&lt;br /&gt;
  call[ :called_parameters ].inspect -&amp;gt; '{ :user_param =&amp;gt; &amp;quot;name1=value1;name2=value2&amp;quot;, :uri_param =&amp;gt; &amp;quot;name=value&amp;quot;, :header_param =&amp;gt; &amp;quot;name=value;example_param_without_value&amp;quot; }'&lt;br /&gt;
Example to modify (replace) the URI parameters of SIP &amp;quot;To&amp;quot; header:&lt;br /&gt;
  call[ :called_parameters ][ :uri_param ] = &amp;quot;user=phone&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Exceptions ====&lt;br /&gt;
'''Note:''' Some parameters are reported as their own call attribute (oli, isub, cpc, transport) so they have the same representation for all protocols (SS7, IDSN, SIP). They won't appear present in the generic SIP header parameters structures above.&lt;br /&gt;
&lt;br /&gt;
==== Forwarding from inbound to outbound call ====&lt;br /&gt;
&lt;br /&gt;
==== Legacy behavior ====&lt;br /&gt;
(For base_routing version 1.32 or older)&lt;br /&gt;
By default, the parameters are not forwarded in a SIP to SIP call flow. The parameters '''will be forwarded''' when:&lt;br /&gt;
* accessed (read) from either the inbound or outbound call parameters&lt;br /&gt;
* written in either the inbound or outbound call parameters&lt;br /&gt;
&lt;br /&gt;
==== Current behavior ====&lt;br /&gt;
(For Toolpack 3.0.118+, with base_routing version 1.33+)&lt;br /&gt;
SIP headers host and parameters are forwarded by default.&lt;br /&gt;
&lt;br /&gt;
A route attribute &amp;quot;forward_sip_domain&amp;quot; (along with filter script &amp;quot;forward_sip_domain.rb&amp;quot;) will control, per route, if SIP headers host+parameters must be forwarded.&lt;br /&gt;
&lt;br /&gt;
==== Example usage ====&lt;br /&gt;
Example to print the user parameters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  if call[:calling_parameters]&lt;br /&gt;
    puts &amp;quot;user parameters = #{call[:calling_parameters][:user_param].inspect}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example SIP &amp;quot;From&amp;quot; header:&lt;br /&gt;
  From:&amp;lt;sip:123456782;test1=val1;test2=val2@something.com;test3=val3;test4=val4&amp;gt;;test5=val5;test6=val6&lt;br /&gt;
And the resulting content in the routing script:&lt;br /&gt;
  call[:calling_parameters].inspect -&amp;gt; {:user_param=&amp;gt;&amp;quot;test1=val1;test2=val2&amp;quot;, :uri_param=&amp;gt;&amp;quot;test3=val3;test4=val4&amp;quot;, :header_param=&amp;gt;&amp;quot;test5=val5;test6=val6&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
Example to overwrite inbound leg calling parameters with new parameters for the outbound leg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call [:calling_parameters] = { &lt;br /&gt;
  :user_param =&amp;gt; &amp;quot;user_param7=7;user_param8=8&amp;quot;,&lt;br /&gt;
  :uri_param =&amp;gt; &amp;quot;uri_param9=value9&amp;quot;,&lt;br /&gt;
  :header_param =&amp;gt; &amp;quot;header_paramA=A&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to add user=phone and keep all other uri parameters.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  call[:calling_parameters] ||= {} # Create a hash if not already present&lt;br /&gt;
  call[:calling_parameters][:uri_param] ||= &amp;quot;&amp;quot; # Create a string if not already present&lt;br /&gt;
  call[:calling_parameters][:uri_param] += &amp;quot;;&amp;quot; if call[:calling_parameters][:uri_param] != &amp;quot;&amp;quot;&lt;br /&gt;
  call[:calling_parameters][:uri_param] += &amp;quot;user=phone&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MLPP Precedence values  ===&lt;br /&gt;
&lt;br /&gt;
mlpp_look_for_busy: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;allowed&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;path_reserved&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;not_allowed&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_precedence_level: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;flash_override&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;flash&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;immediate&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;priority&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;routine&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_network_identity:&lt;br /&gt;
&lt;br /&gt;
3 digits value from 0 to 999&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_service_domain:&lt;br /&gt;
&lt;br /&gt;
24 bits value from 0 to 16777215&lt;br /&gt;
&lt;br /&gt;
=== ISUB subaddress information values  ===&lt;br /&gt;
&lt;br /&gt;
called_isub_type: &lt;br /&gt;
calling_isub_type: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap_ia5&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap_bcd&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;user&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
called_isub: &lt;br /&gt;
calling_isub: &lt;br /&gt;
&lt;br /&gt;
Digits for the subaddress information.&lt;br /&gt;
&lt;br /&gt;
=== Network Identification Plan  ===&lt;br /&gt;
&lt;br /&gt;
network_identification_plan: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;Unknown&amp;lt;/tt&amp;gt; (value 0)&lt;br /&gt;
*&amp;lt;tt&amp;gt;cic&amp;lt;/tt&amp;gt; (3 digits carrier identification code plus circuit code, value 1, SS7 or ISDN)&lt;br /&gt;
*&amp;lt;tt&amp;gt;user&amp;lt;/tt&amp;gt; (User, value 2, ISDN only)&lt;br /&gt;
*&amp;lt;tt&amp;gt;cic4&amp;lt;/tt&amp;gt; (4 digits carrier identification code plus circuit code, value 2, SS7 only) &lt;br /&gt;
*&amp;lt;tt&amp;gt;dnic&amp;lt;/tt&amp;gt; (public Data Network ID, value 3, SS7 only) &lt;br /&gt;
*&amp;lt;tt&amp;gt;mnic&amp;lt;/tt&amp;gt; (public land mobile network, value 6, SS7 only)&lt;br /&gt;
&lt;br /&gt;
=== Registered Users Information ===&lt;br /&gt;
Routing script can access information about registered users (when either the calling or called user is a known registered user).&lt;br /&gt;
When these fields are empty, it means that the calling/called (SIP from/to) does not correspond to a known registered user (routing script may still decide to route the call based on static routes).&lt;br /&gt;
&lt;br /&gt;
Information for the called user:&lt;br /&gt;
  params[:registered_user]&lt;br /&gt;
Information for the calling user:&lt;br /&gt;
  params[:calling_registered_user]&lt;br /&gt;
&lt;br /&gt;
These parameters are a hash of key/values that provide information about the contact.&lt;br /&gt;
  {&lt;br /&gt;
    :contact_list=&amp;gt;&lt;br /&gt;
    [&lt;br /&gt;
      {&lt;br /&gt;
        :contact=&amp;gt;&amp;quot;&amp;lt;sip:user_name_or_number@hostname:7070;transport=UDP&amp;gt;&amp;quot;,    -&amp;gt; Full contact&lt;br /&gt;
        :expires=&amp;gt;&amp;quot;60&amp;quot;,                   -&amp;gt; Contact expiry time (seconds)&lt;br /&gt;
        :host=&amp;gt;&amp;quot;hostname&amp;quot;,                -&amp;gt; host name from the contact header&lt;br /&gt;
        :name=&amp;gt;&amp;quot;user_name_or_number&amp;quot;,     -&amp;gt; user name from the contact header&lt;br /&gt;
        :nap_in=&amp;gt;&amp;quot;NAP_NAME&amp;quot;,              -&amp;gt; NAP that the contact has registered from&lt;br /&gt;
        :port=&amp;gt;&amp;quot;7070&amp;quot;,                    -&amp;gt; Port from the contact header&lt;br /&gt;
        :transport=&amp;gt;&amp;quot;UDP&amp;quot;                 -&amp;gt; Transport type from the contact header&lt;br /&gt;
        :q_value=&amp;gt;&amp;quot;0.00&amp;quot;,                 -&amp;gt; Q-value for the contact (for contact ordering)&lt;br /&gt;
        :src_host=&amp;gt;&amp;quot;10.0.0.10&amp;quot;,           -&amp;gt; Actual source IP address that the contact has registered from&lt;br /&gt;
        :src_port=&amp;gt;&amp;quot;7070&amp;quot;,                -&amp;gt; Actual source port that the contact has registered from&lt;br /&gt;
        :src_transport=&amp;gt;&amp;quot;UDP&amp;quot;,            -&amp;gt; Actual protocol that the contact has been registering with&lt;br /&gt;
       }&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
== Route parameters  ==&lt;br /&gt;
&lt;br /&gt;
All route may have these parameters: &lt;br /&gt;
&lt;br /&gt;
*calling &lt;br /&gt;
*called &lt;br /&gt;
*nap &lt;br /&gt;
*remapped_calling &lt;br /&gt;
*remapped_called &lt;br /&gt;
*remapped_nap &lt;br /&gt;
*remapped_destination_leg_profile (called remapped_profile prior to Toolpack 2.9)&lt;br /&gt;
*remapped_source_leg_profile (called remapped_incoming_profile prior to Toolpack 2.9)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  route[:remapped_nap]&lt;br /&gt;
&lt;br /&gt;
Additionally it is possible to add dynamic route attributes in the web portal. These can be referenced by their name.&lt;br /&gt;
For example:&lt;br /&gt;
*priority&lt;br /&gt;
*weight&lt;br /&gt;
&lt;br /&gt;
== Routing calls toward registered users ==&lt;br /&gt;
Static routes normally chose an outbound NAP to forward the call to.&lt;br /&gt;
&lt;br /&gt;
But it's also possible to create routes which outbound NAP is dynamically chosen by matching a registered user (when using [[Sip_registration_forwarding|SIP registration forwarding]]).&lt;br /&gt;
&lt;br /&gt;
More information can be found [[Sip_registration_forwarding#SIP_Calls_routing|here]] about the way to control the [[Sip_registration_forwarding#SIP_Calls_routing|priority of &amp;quot;dynamic&amp;quot; vs &amp;quot;static&amp;quot; routes]].&lt;br /&gt;
&lt;br /&gt;
More information can be found [[#Registered_Users_Information|here]] about using routing scripts to access registered users information during call routing.&lt;br /&gt;
&lt;br /&gt;
== Playing prompts announcements or tones  ==&lt;br /&gt;
&lt;br /&gt;
New feature in release 2.6, all bridges may have these parameters. These can be used to play IVR prompts (audio files) in different states of the call flow.&lt;br /&gt;
&lt;br /&gt;
*'''announcement_tone''' (played before outgoing call is routed)&lt;br /&gt;
*'''ring_tone''' (played after when waiting for outgoing call to answer)&lt;br /&gt;
*'''busy_tone''' (played if outgoing call failed)&lt;br /&gt;
*'''disconnect_tone''' (played after the call has reached it's maximum duration)&lt;br /&gt;
&lt;br /&gt;
Example to play an announcement to incoming call (before routing outgoing call, regardless if a matching route is found or not):&lt;br /&gt;
  bridge[:announcement_tone ] = &amp;quot;my_announcement.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play a ring-tone while the outgoing call is ringing:&lt;br /&gt;
  bridge[:ring_tone] = &amp;quot;my_ring_tone.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play an audio file when outgoing call fails (no route, or outgoing call is refused):&lt;br /&gt;
  bridge[:busy_tone] = &amp;quot;my_busy_tone.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play an audio file when call has reached the maximum allowed duration:&lt;br /&gt;
  bridge[:disconnect_tone] = &amp;quot;your_account_balance_is_empty.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Announcement file path format and options ===&lt;br /&gt;
&lt;br /&gt;
All file plabyacks (:announcement_tone,&amp;amp;nbsp;:busy_tone,&amp;amp;nbsp;:ring_tone,&amp;amp;nbsp;:disconnect_tone) inside bridge parameters use this format. &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;file1.wav:repeat:start_off:end_off,file2.wav:repeat:start_off:end_off,file3.wav:repeat:start_off:end_off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Optional parameters:&lt;br /&gt;
* repeat: number of times to play the file (0 and 1 have the same result)&lt;br /&gt;
* start_off: Start offset in milliseconds&lt;br /&gt;
* end_off: End offset in milliseconds&lt;br /&gt;
&lt;br /&gt;
Http and other path formats are described here: [[Customer_application_framework:play_audio_files#Play_path_format|Path format]]&lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
The following example will play file1.wav once, and then play file2.wav in loop: &lt;br /&gt;
  &amp;quot;file1.wav,file2.wav:-1&amp;quot; &lt;br /&gt;
&lt;br /&gt;
==== Example 2 ====&lt;br /&gt;
The following example will play file1.wav from start offset of 1 second to end offset of 3 seconds, then twice file2.wav from second 5 to second 10.&lt;br /&gt;
  &amp;quot;file1.wav:0:1000:3000,file2.wav:2:5000:10000&amp;quot; &lt;br /&gt;
&lt;br /&gt;
==== Example 3 ====&lt;br /&gt;
The following example will play file1.wav once, ending at offset of 30 seconds.&lt;br /&gt;
  &amp;quot;file1.wav:0:0:30000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== announcement_tone  ===&lt;br /&gt;
&lt;br /&gt;
  params[:bridge][:announcement_tone] = &amp;quot;announcement.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call before any outgoing call is placed. The outgoing call occurs when the file finished playing.&lt;br /&gt;
&lt;br /&gt;
==== announcement_tone options ====&lt;br /&gt;
===== announcement_tone_answer =====&lt;br /&gt;
  params[:bridge][:announcement_tone_answer] = &amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Forces an answer of the call before playing the announcement. Default if argument not provided is &amp;quot;no&amp;quot;, in which case call is only alerted with in-band media.&lt;br /&gt;
&lt;br /&gt;
===== announcement_code_detect =====&lt;br /&gt;
This option allows that the tone detection is enabled during the announcement play.&lt;br /&gt;
&lt;br /&gt;
Collected digits can be inserted into the CDR logs (radius attribute &amp;quot;Telcob-CollectedDigits&amp;quot;, or text CDR variable @{CollectedDigits}).&lt;br /&gt;
&lt;br /&gt;
Collected digits can also be sent back to routing script, which is called again with the same call attributes, except that the called number is replaced by the collected digits.&lt;br /&gt;
&lt;br /&gt;
Code detect has multiple options, as shown in the following code:&lt;br /&gt;
  code_detect = {&lt;br /&gt;
    :type                   =&amp;gt; :DTMF,   # :DTMF or :MFR1 tone detection.&lt;br /&gt;
                                        # Default is MFR1.&lt;br /&gt;
    :prefix                 =&amp;gt; &amp;quot;&amp;quot;,      # Prefix (digits) that is removed from collected digits.&lt;br /&gt;
                                        # Default is empty.&lt;br /&gt;
    :suffix                 =&amp;gt; &amp;quot;&amp;quot;,      # Suffix (digits) that is removed from collected digits&lt;br /&gt;
                                        # and causes routing script to be immediately called.&lt;br /&gt;
                                        # Default is empty.&lt;br /&gt;
    :suffix_removal         =&amp;gt; false,   # Controls the removal of the suffix from the collected digit string that's reported to routing script.&lt;br /&gt;
                                        # Default is false&lt;br /&gt;
    :timeout                =&amp;gt; 0,       # Inter-digit timeout (ms) after which collected digits are passed to the routing script.&lt;br /&gt;
                                        # Use 0 for &amp;quot;no timeout&amp;quot;.&lt;br /&gt;
                                        # Default is 1000ms&lt;br /&gt;
    :barge_in_interruption  =&amp;gt; true,    # When enabled, playing announcement is stopped as soon as first digit is collected.&lt;br /&gt;
                                        # Default is true.&lt;br /&gt;
    :proceed_on_play_done   =&amp;gt; false,   # When true:  Outgoing call is made after announcement finishes playing.&lt;br /&gt;
                                        #             Routing script is not called again.&lt;br /&gt;
                                        # When false: Outgoing call is never made.&lt;br /&gt;
                                        #             Digits are collected until timeout or suffix match,&lt;br /&gt;
                                        #             then routing script is called again.&lt;br /&gt;
                                        # Default is false.&lt;br /&gt;
    :cas_on_hook            =&amp;gt; false,   # Specific for CAS-R1 calls. Makes CAS bits switch to &amp;quot;on-hook&amp;quot; when announcement finished playing&lt;br /&gt;
                                        # (but the call is not &amp;quot;terminated&amp;quot; from Toolpack point of view)&lt;br /&gt;
                                        # Default is false.&lt;br /&gt;
    :cas_on_hook_delay      =&amp;gt; 0,       # Duration of cas bits &amp;quot;on-hook&amp;quot; state.&lt;br /&gt;
                                        # Only effective if cas_on_hook is set to true.&lt;br /&gt;
                                        # Value of 0 stands for &amp;quot;infinite delay&amp;quot;.&lt;br /&gt;
                                        # Default is 0.&lt;br /&gt;
    :repeat_delay           =&amp;gt; 0,       # Delay between repetition of the announcement. The announcement will repeat&lt;br /&gt;
                                        # itself every &amp;quot;repeat_delay&amp;quot; until a code is detected (suffix match or timetout).&lt;br /&gt;
                                        # Value of 0 stands for &amp;quot;infinite delay&amp;quot; (no repeating).&lt;br /&gt;
                                        # Default is 0.&lt;br /&gt;
  }&lt;br /&gt;
'''Example 1''': Collect DTMF digits, and call routing script again with collected digits upon timeout or suffix match.&lt;br /&gt;
  code_detect = { :type =&amp;gt; :DTMF, :suffix =&amp;gt; &amp;quot;#&amp;quot;, :timeout =&amp;gt; 5000 }&lt;br /&gt;
  params[:bridge][:announcement_code_detect] = code_detect&lt;br /&gt;
&lt;br /&gt;
'''Example 2''': Collect digits during the announcement (for CDR logs), then proceed (make outgoing call) after announcement finishes playing&lt;br /&gt;
  code_detect = { :type =&amp;gt; :DTMF, :timeout =&amp;gt; 0, :barge_in_interruption =&amp;gt; false, :proceed_on_play_done =&amp;gt; true }&lt;br /&gt;
  params[:bridge][:announcement_code_detect] = code_detect&lt;br /&gt;
&lt;br /&gt;
==== Controlling what happens after announcement ====&lt;br /&gt;
The routing script can control what happens with the call after the announcement finishes playing:&lt;br /&gt;
* An outgoing call is made&lt;br /&gt;
* Incoming call is hung-up&lt;br /&gt;
* Do nothing (wait for the incoming call to hang-up)&lt;br /&gt;
===== An outgoing call is made =====&lt;br /&gt;
This happens when the script has returned matching routes (and did not raise RoutingException)&lt;br /&gt;
&lt;br /&gt;
===== Incoming call is hung-up =====&lt;br /&gt;
This happens when the script returns no routes (in which case base_routing will raise RoutingException with cause :no_route).&lt;br /&gt;
&lt;br /&gt;
It also happens when the script explicitly raises RoutingException.&lt;br /&gt;
&lt;br /&gt;
The incoming call will be terminated with the specified cause.&lt;br /&gt;
For example&lt;br /&gt;
    raise RoutingException, :temporary_failure&lt;br /&gt;
(See &amp;quot;Reason values&amp;quot; section in this page for list of available causes)&lt;br /&gt;
&lt;br /&gt;
===== Do nothing (wait for the incoming call to hang-up) =====&lt;br /&gt;
If a filter raises RoutingException with code :ok, then the incoming call will not be terminated at the end of the announcement play.&lt;br /&gt;
Announcement digit collection will remain active if appropriate.&lt;br /&gt;
For example:&lt;br /&gt;
    raise RoutingException, :ok&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ring_tone  ===&lt;br /&gt;
  params[:bridge][:ring_tone] = &amp;quot;ringing.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call while waiting for the outgoing call to be answered.&lt;br /&gt;
&lt;br /&gt;
Ring tone playback can also be configured in the Web Portal, from the incoming call's profile (under &amp;quot;Tones and Call Progress Options&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Routing script has precedence over profile (a routing script that fills params[:bridge][:ring_tone] will override the profile's ring tone behavior).&lt;br /&gt;
&lt;br /&gt;
==== ring_tone options ====&lt;br /&gt;
===== ring_tone_state =====&lt;br /&gt;
  params[:bridge][:ring_tone_state] = :alerted&lt;br /&gt;
&lt;br /&gt;
Call state from which ring tone is being played. Available values are:&lt;br /&gt;
* '''immediately''':  Ring tone starts playing immediately on the incoming leg&lt;br /&gt;
* '''accepted''':     Ring tone starts playing as soon as outgoing call is accepted&lt;br /&gt;
* '''callprogress''': Ring tone starts playing as soon as &amp;quot;call progress&amp;quot; is received on the outgoing call&lt;br /&gt;
* '''alerted''' (default):      Ring tone starts playing only once outgoing call is alerted (but won't play if alert indicates early media from outgoing call)&lt;br /&gt;
&lt;br /&gt;
This option also apply when params[:bridge][:ring_tone] is not used, because it also apply to ring tone playback configured in the Web Portal, from the incoming call's profile.&lt;br /&gt;
&lt;br /&gt;
=== busy_tone  ===&lt;br /&gt;
  Toolpack 2.8 and above:&lt;br /&gt;
    params[:bridge][:busy_tone] = &amp;quot;no_route.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Note: Obsolete name (toolpack 2.7.153 and earlier, but still supported in recent releases):&lt;br /&gt;
    params[:bridge][:call_progress_tone] = &amp;quot;no_route.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call when outgoing call fails (never answered).&lt;br /&gt;
&lt;br /&gt;
Note that announcement_tone, if used, is played before the outgoing call attempt is made, and thus before the busy_tone.&lt;br /&gt;
&lt;br /&gt;
Busy tone playback can also be configured in the Web Portal, from the incoming call's profile (under &amp;quot;Tones and Call Progress Options&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Routing script has precedence over profile (a routing script that fills params[:bridge][:busy_tone] will override the profile's busy tone behavior).&lt;br /&gt;
&lt;br /&gt;
Special value '''&amp;quot;none&amp;quot;''' can be used by routing script to force playing nothing (as empty string would default to profile's behavior)&lt;br /&gt;
&lt;br /&gt;
==== busy_tone options ====&lt;br /&gt;
===== busy_tone_answer =====&lt;br /&gt;
  params[:bridge][:busy_tone_answer] = &amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Forces an answer of the call before playing the busy tone. Default if argument not provided is &amp;quot;no&amp;quot;, in which case call is only alerted with in-band media.&lt;br /&gt;
&lt;br /&gt;
=== disconnect_tone  ===&lt;br /&gt;
  params[:bridge][:disconnect_tone] = &amp;quot;max_duration.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call when call duration (:max_call_duration) is reached. Then the leg will be terminated with specified reason (:call_duration_reason).&lt;br /&gt;
&lt;br /&gt;
==== disconnect_tone options ====&lt;br /&gt;
===== max_call_duration  =====&lt;br /&gt;
  params[:bridge][:max_call_duration] = &amp;quot;60000&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Maximum call duration in millisecond. This timer is started when entering answer state.&lt;br /&gt;
&lt;br /&gt;
===== call_duration_reason  =====&lt;br /&gt;
  params[:bridge][:call_duration_reason] =&amp;amp;nbsp;:resource_unavailable &lt;br /&gt;
&lt;br /&gt;
Drop both legs with this reason when call duration (:max_call_duration) is reached.&lt;br /&gt;
&lt;br /&gt;
=== Managing audio prompts through Web Portal ===&lt;br /&gt;
Audio prompts can be uploaded or deleted from the TMedia unit through the Web Portal:&lt;br /&gt;
[[Toolpack:Configuring_Audio_Prompts_A|Managing audio prompts]]&lt;br /&gt;
&lt;br /&gt;
Prompts management must be done using the Web Portal of the primary server (in systems with redundant TMedia units or redundant host servers).&lt;br /&gt;
The file will automatically get replicated to the secondary server.&lt;br /&gt;
&lt;br /&gt;
=== Managing audio prompts manually ===&lt;br /&gt;
Any file on the TMedia host file system can be played. This means it's possible to manage prompts through ssh/scp.&lt;br /&gt;
&lt;br /&gt;
==== The default (replicated) prompts folder ====&lt;br /&gt;
By default, when playing a prompt, Toolpack will look in the default prompts folder:&lt;br /&gt;
 /lib/tb/toolpack/pkg/prompts&lt;br /&gt;
The root of this &amp;quot;prompts&amp;quot; directory is automatically replicated to secondary unit of redundant setups (1+1, N+1, redundant hosts). Sub-folders won't be replicated.&lt;br /&gt;
&lt;br /&gt;
Any prompt play request without explicit file path will map to this folder. For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /lib/tb/toolpack/pkg/prompts/no_route.wav&lt;br /&gt;
&lt;br /&gt;
==== Relative file paths ====&lt;br /&gt;
Any file path that begins with &amp;quot;file://&amp;quot; is considered relative to the tbstreamserver application's working directory:&lt;br /&gt;
 /lib/tb/toolpack/setup/12358/2.8/apps/tbstreamserver/&lt;br /&gt;
(Where &amp;quot;2.8&amp;quot; may be replaced by the current major version of your system)&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;file://my_folder/no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /lib/tb/toolpack/setup/12358/2.8/apps/tbstreamserver/my_folder/no_route.wav&lt;br /&gt;
&lt;br /&gt;
==== Absolute file paths ====&lt;br /&gt;
Absolute paths can also be provided.&lt;br /&gt;
For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;file:///root/my_folder/no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /root/my_folder/no_route.wav&lt;br /&gt;
&lt;br /&gt;
== Recording call legs  ==&lt;br /&gt;
Introduced in release 2.6.44, it's now possible to use routing scripts to ask for recording incoming and/or outgoing call legs.&lt;br /&gt;
&lt;br /&gt;
See example filter script &amp;quot;call_recording&amp;quot; (created by default in Web Portal routing scripts starting with 2.6.44) for an example.&lt;br /&gt;
&lt;br /&gt;
=== Recording the incoming call leg  ===&lt;br /&gt;
To record the incoming call leg, the routing script (in a &amp;quot;after filter&amp;quot; for example) has to set the following parameter:&lt;br /&gt;
&lt;br /&gt;
  bridge[ :record_incoming ]  = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Recording the outgoing call leg  ===&lt;br /&gt;
To record the outgoing call leg, the routing script (in a &amp;quot;after filter&amp;quot; for example) has to set the following parameter, per route (the decision to record or not, or the file name to record to, can be set per matching route):&lt;br /&gt;
&lt;br /&gt;
  # Need to clone the routes in order to have the right to modify them&lt;br /&gt;
  routes = clone_routes params[:routes]&lt;br /&gt;
  routes.each do |route|&lt;br /&gt;
    route[ :record_outgoing ]  = &amp;quot;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  # Store modified routes back to the parameters for this outgoing call&lt;br /&gt;
  params[:routes] = routes&lt;br /&gt;
&lt;br /&gt;
=== Record the outgoing call leg within incoming leg's recorded file (mixing)  ===&lt;br /&gt;
  [...]&lt;br /&gt;
    route[ :record_outgoing ]  = &amp;quot;@{MixWithIncoming}&amp;quot;&lt;br /&gt;
  [...]&lt;br /&gt;
&lt;br /&gt;
=== Choosing file path to record to  ===&lt;br /&gt;
The value assigned to &amp;quot;:record_incoming&amp;quot; or &amp;quot;:record_outgoing&amp;quot; is the path to record the file to.&lt;br /&gt;
&lt;br /&gt;
The paths can be absolute, or relative. When relative, they are relative to the &amp;quot;tbstreamserver&amp;quot; application working directory, for example:&lt;br /&gt;
  /lib/tb/toolpack/setup/12358/2.7/apps/tbstreamserver/&lt;br /&gt;
&lt;br /&gt;
* Empty file name will default to a name that contains various information about the call:&lt;br /&gt;
** ''LinkId'':     Id common between all legs of this call bridge&lt;br /&gt;
** ''LegId'':      Unique Id for this leg&lt;br /&gt;
** ''Nap'':        Current NAP name this call leg is from&lt;br /&gt;
** ''Direction'':  &amp;quot;IN&amp;quot; or &amp;quot;OUT&amp;quot; (depends if call leg is incoming or outgoing leg)&lt;br /&gt;
** ''Calling'':    The calling number of this call leg&lt;br /&gt;
** ''Called'':     The called number of this call leg&lt;br /&gt;
** ''Protocol'':   The signaling protocol of this call leg (SS7, ISDN, CAS, SIP)&lt;br /&gt;
** ''Media info'': Codec + IP/Port for SIP calls, Trunk/Timeslot for TDM calls&lt;br /&gt;
* To record outgoing call leg in the same audio file as incoming call leg (mixing), use the following:&lt;br /&gt;
** @{MixWithIncoming}: Record outgoing legs in same file as incoming legs&lt;br /&gt;
* Variables can be used to insert in the recording path information that's not already available from routing scripts:&lt;br /&gt;
** @{CURRENT_PKG}: Version of current package&lt;br /&gt;
*** Example: 2.6.45&lt;br /&gt;
** @{DATE format}: Prints the date, where 'format' is expressed as described for the 'strftime' function&lt;br /&gt;
*** Example: @{DATE %Y-%m-%d} =&amp;gt; 2013-01-28&lt;br /&gt;
** @{DefaultName}: Replaced by the default file name for recording, which contains:&lt;br /&gt;
*** LinkId:     Id common between all legs of this call bridge&lt;br /&gt;
*** LegId:      Unique Id for this leg&lt;br /&gt;
*** Nap:        Current NAP name this call leg is from&lt;br /&gt;
*** Direction:  &amp;quot;IN&amp;quot; or &amp;quot;OUT&amp;quot; (depends if call leg is incoming or outgoing leg)&lt;br /&gt;
*** Calling:    Calling number&lt;br /&gt;
*** Called:     Called number&lt;br /&gt;
*** Protocol:   Protocol type of this call (SS7, ISDN, CASR2, SIP)&lt;br /&gt;
*** Media info: Codec + IP/Port for SIP calls, Trunk/Timeslot for TDM calls&lt;br /&gt;
*** Example: &amp;quot;73EBA698-F3D67B4B-NAP_SS7-IN-5550000-5550001-SS7-TRUNK_BELL_11-24.wav&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;73EBA698-73EBA698-NAP_SIP-OUT-5550000-5550001-SIP-G723-10.3.10.101-1050.wav&amp;quot;&lt;br /&gt;
** @{DefaultPath}:  Default recording folder and file name: &amp;quot;@{RECORD_PATH}/@{DATE %Y-%m-%d}/@{DefaultName}&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;/lib/tb/toolpack/setup/12358/recorded_calls/73EBA698-F3D67B4B-NAP_SS7-IN-5550000-5550001-SS7-TRUNK_BELL_11-24.wav&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;/lib/tb/toolpack/setup/12358/recorded_calls/73EBA698-73EBA698-NAP_SIP-OUT-5550000-5550001-SIP-G723-10.3.10.101-1050.wav&amp;quot;&lt;br /&gt;
** @{Direction}: Direction of current leg (IN our OUT)&lt;br /&gt;
*** Example: IN&lt;br /&gt;
** @{LegId}: Current LegId (Unique Id for this leg)&lt;br /&gt;
*** Example: F3D67B4B&lt;br /&gt;
** @{LinkId}: Current LinkId (Id common between all legs of this call bridge)&lt;br /&gt;
*** Example: 73EBA698&lt;br /&gt;
** @{PKG_HOME}: Path where packages are stored.&lt;br /&gt;
*** Note: It's not recomended to use that path on redundant systems, package file replication may cause confusion in recorded files.&lt;br /&gt;
*** Example: /lib/tb/toolpack/pkg&lt;br /&gt;
** @{PROMPT_PATH}: Default path where audio prompts are stored&lt;br /&gt;
*** Note: It's not recomended to use that path on redundant systems, package file replication may cause confusion in recorded files.&lt;br /&gt;
*** Example: /lib/tb/toolpack/pkg/prompts&lt;br /&gt;
** @{Protocol}: Protocol of current leg&lt;br /&gt;
*** Example: SS7&lt;br /&gt;
** @{RECORD_PATH}: Default recording folder: &amp;quot;@{TB_SETUP_HOME}/recorded_calls/&amp;quot;&lt;br /&gt;
** @{TBX_GW_PORT}: Current &amp;quot;System Id&amp;quot; (also called &amp;quot;Gateway Port&amp;quot;)&lt;br /&gt;
*** Example: 12358&lt;br /&gt;
** And all variables listed here: [[Customer_application_framework:play_audio_files#Helpful_variables_to_build_play_or_record_file_paths|Building play or record file path]]&lt;br /&gt;
&lt;br /&gt;
== Controlling UUI (user-to-user information) relay  ==&lt;br /&gt;
UUI (user-to-user information) can be present in different messages received by either call leg during a call. For example, information can be carried during the initial invite, other information can be carried when the call is alerted, answered, or terminated.&lt;br /&gt;
&lt;br /&gt;
Routing scripts can control if the UUI received from one leg through the call will be forwarded to the other call leg:&lt;br /&gt;
*uui_forward_enabled&lt;br /&gt;
&lt;br /&gt;
Routing scripts can also read and modify the UUI received with the incoming call leg, before it gets forwarded upon creation of the outgoing call leg:&lt;br /&gt;
*uui &lt;br /&gt;
&lt;br /&gt;
=== UUI (user-to-user indication) values  ===&lt;br /&gt;
&lt;br /&gt;
Byte array represented as ruby String. Use ''bridge=params[:bridge]'', then ''bridge[:uui]'' to access the data.&lt;br /&gt;
&lt;br /&gt;
To access the bytes in Ruby, use ruby String operator []. For example:  bridge[:uui][0] will return the binary value of the first UUI byte.&lt;br /&gt;
&lt;br /&gt;
Function each_byte can also be useful to iterate through all bytes of the UUI.&lt;br /&gt;
&lt;br /&gt;
=== uui_forward_enabled values  ===&lt;br /&gt;
&lt;br /&gt;
Controls forwarding or discarding of UUI to outgoing call leg. &lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true.&lt;br /&gt;
* 0/false: UUI is not forwarded between call legs&lt;br /&gt;
* 1/true: UUI is forwarded between call legs&lt;br /&gt;
&lt;br /&gt;
The value for this parameter at input of routing script depends on the &amp;quot;Forward UUI&amp;quot; parameter in the &amp;quot;Advanced&amp;quot; section of the Gateway configuration page of the Web Portal. The script may change this value to override the Gateway configuration.&lt;br /&gt;
&lt;br /&gt;
== Authorization ==&lt;br /&gt;
Starting with release 2.7, it is possible to issue RADIUS authorization requests from routing scripts. To do so, the params[:authorization] object must be filled with the required RADIUS attributes and [[#Refuse|an exception must be raised]] with reason :authorization_required.&lt;br /&gt;
&lt;br /&gt;
When the authorization is completed, the routing script is called again with the result. The params[:authorization] object will be filled with the RADIUS attributes from the response. The params[:authorization][:result] field will also contain a string indicating the result of the authorization:&lt;br /&gt;
&lt;br /&gt;
* ''accept'': The authorization was successful.&lt;br /&gt;
* ''reject'': The authorization was refused.&lt;br /&gt;
* ''challenge'': The authorization was challenged.&lt;br /&gt;
* ''timeout'': The authorization was not answered.&lt;br /&gt;
&lt;br /&gt;
== Call diversion options ==&lt;br /&gt;
It's possible to control the call flow when a call diversion information is received in the alerting state.&lt;br /&gt;
&lt;br /&gt;
Two fields are available: bridge[ :diversion ] and bridge[ :diversion_reason ]&lt;br /&gt;
&lt;br /&gt;
The internal release cause TOOLPACK_DIVERT_NOT_ALLOWED is used by gateway application to terminate both legs.&lt;br /&gt;
&lt;br /&gt;
  bridge[ :diversion ] = :allowed&lt;br /&gt;
The alert message will not be analyzed and the call will be progressed. Default behavior.&lt;br /&gt;
  bridge[ :diversion ] = :not_allowed&lt;br /&gt;
If the alert message indicates that the call is diverted, the call will be released no matter the In-band information to allow&lt;br /&gt;
early media.&lt;br /&gt;
  bridge[ :diversion ] = :not_allowed_w_early_media&lt;br /&gt;
The call will be released If the alert message indicates that the call is diverted with in-band information to allow early media.&lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;*&amp;quot;&lt;br /&gt;
If the diversion is not allowed, the gateway will drop the call for any redirecting reason. &lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;0,1,2&amp;quot;&lt;br /&gt;
or&lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;unknown,busy,no_reply&amp;quot;&lt;br /&gt;
If the diversion is not allowed, the redirecting reason will be analyzed and the call will only be dropped for the configured cases.&lt;br /&gt;
&lt;br /&gt;
See section [[Routing_script_tutorial:Mini_Development_Guide#Redirecting_number,_Original_Called_Number_and_Diversion_Reason|Redirecting number reason values]].&lt;br /&gt;
&lt;br /&gt;
== Call transfer requests ==&lt;br /&gt;
Toolpack allows that [[Call transfer]] requests are relayed from one leg to the other, or to process them locally (making another outgoing call to replace the call that requested the call transfer).&lt;br /&gt;
&lt;br /&gt;
If the chosen [[Call transfer]] mode is to process requests locally, upon reception of a call transfer request (SIP REFER or ISDN Facility), routing script will be called once again, to select the routes for the new outgoing call (call transfer target).&lt;br /&gt;
&lt;br /&gt;
=== How to route call transfer request ===&lt;br /&gt;
Routing of a call transfer request is done exactly like routing of a normal incoming call.&lt;br /&gt;
The routing script generally does not need any modification to support that.&lt;br /&gt;
&lt;br /&gt;
In some cases, the routing script may want to use information related to the transfer request to perform routing, or to insert information in the outgoing call leg.&lt;br /&gt;
Additional information is provided to the routing script, allowing routing decisions using information from the call transfer request (SIP REFER or ISDN Facility).&lt;br /&gt;
See below...&lt;br /&gt;
&lt;br /&gt;
=== params[ :call ] content during transfer request ===&lt;br /&gt;
When processing a call transfer request, the params[ :call ] hash contains the information from the inbound call (same as was passed to the routing script upon arrival of the inbound call)&lt;br /&gt;
 call = params[ :call ]          -&amp;gt; Information from original inbound call, with exception of call[ :called ]&lt;br /&gt;
&lt;br /&gt;
One exception (convenient because it allows a unmodified routing script to process call transfer request the same way as any other routing request):&lt;br /&gt;
 call[ :called ]                 -&amp;gt; Replaced by the called number from the call transfer request (also called &amp;quot;redirection number&amp;quot;)&lt;br /&gt;
Complementary information:&lt;br /&gt;
 call[ :original_called_number ] -&amp;gt; Contains the called number that was initially received from the incoming call, prior to call transfer request&lt;br /&gt;
 call[ :redirecting_number ]     -&amp;gt; Number of the call from which the call transfer request was received (generally equals to original_called_number)&lt;br /&gt;
&lt;br /&gt;
These fields will also be included in the outgoing call made after routing:&lt;br /&gt;
* original called number and redirecting number are existing fields on SS7 and ISDN calls&lt;br /&gt;
* SIP &amp;quot;diversion&amp;quot; header is used for SIP calls&lt;br /&gt;
&lt;br /&gt;
=== params[ :transfer ] content ===&lt;br /&gt;
(this if valid only for release 2.7.102 and above)&amp;lt;br&amp;gt;&lt;br /&gt;
When processing a call transfer request, information from the call transfer request message (SIP REFER, ISDN Facility) is provided in params[ :transfer ]:&lt;br /&gt;
  transfer = params[ :transfer ]&lt;br /&gt;
The following field is always present:&lt;br /&gt;
  transfer[ :original_nap ]      -&amp;gt; Contains the NAP of the first call from which a call transfer request was received&lt;br /&gt;
  transfer[ :redirecting_nap ]   -&amp;gt; Contains the NAP of the call from which the current call transfer request was received&lt;br /&gt;
                                    (same as :original_nap for the first call transfer, different for subsequent transfers)&lt;br /&gt;
Examples of other fields that may be present, when appropriate:&lt;br /&gt;
  transfer[ :uui ]               -&amp;gt; The UUI (user-to-user information) found in the call transfer request&lt;br /&gt;
  transfer[ :sip_header ]        -&amp;gt; Contains custom SIP headers from the call transfer request&lt;br /&gt;
  transfer[ :request_uri ]       -&amp;gt; Contains the SIP Request URI&lt;br /&gt;
&lt;br /&gt;
These fields are 'read-only'. They will not be included in the outgoing call, as they represent the contents of the call transfer request, and not the outgoing call to be made.&lt;br /&gt;
&lt;br /&gt;
To insert/modify attributes of the outgoing call, the parameters from params[ :call ] must be edited instead.&lt;br /&gt;
&lt;br /&gt;
== Redirection ==&lt;br /&gt;
In release 2.8 and above, redirection contacts are obtained from the routing engine in the following format:&lt;br /&gt;
&lt;br /&gt;
  contacts = params[ :contacts ]&lt;br /&gt;
  contacts = {&lt;br /&gt;
      :index=&amp;gt;&amp;quot;3&amp;quot;,&lt;br /&gt;
      :list=&amp;gt;[&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6660&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6661&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6661@192.168.215.127&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6661@192.168.215.127&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6662&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6662@192.168.215.128&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6662@192.168.215.128&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6663&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6663@192.168.215.129&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6663@192.168.215.129&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6664&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6664@192.168.215.150&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6664@192.168.215.150&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
      ],&lt;br /&gt;
      :source_indexes=&amp;gt;&amp;quot;nil,0,0,0,2&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:list]&amp;lt;/code&amp;gt; contains the contact log. Each contact within the list has the following fields:&lt;br /&gt;
** &amp;lt;code&amp;gt;:called_number&amp;lt;/code&amp;gt; - the called number&lt;br /&gt;
** &amp;lt;code&amp;gt;:is_number_ported&amp;lt;/code&amp;gt; - if the called number has been ported (for SIP: if the npdi parameter is present)&lt;br /&gt;
** &amp;lt;code&amp;gt;:ported_number&amp;lt;/code&amp;gt; - the called number that was ported (for SIP: the rn parameter value, if available)&lt;br /&gt;
** &amp;lt;code&amp;gt;:sip_uri&amp;lt;/code&amp;gt; - the SIP URI of the contact, without the contact-params section (without the expires and q contact parameters)&lt;br /&gt;
** &amp;lt;code&amp;gt;:raw_data&amp;lt;/code&amp;gt; - the raw data representing the contact in the signaling protocol. For SIP, this is the full SIP URI (including the expires and q contact parameters).&lt;br /&gt;
** &amp;lt;code&amp;gt;:priority&amp;lt;/code&amp;gt; - the priority of the contact [0-1000]&lt;br /&gt;
** &amp;lt;code&amp;gt;:expiration&amp;lt;/code&amp;gt; - the expiration time in seconds of the contact&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:index]&amp;lt;/code&amp;gt; contains the index of the contact that is currently being routed.&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:source_indexes]&amp;lt;/code&amp;gt; contains a comma-separated list of indexes from &amp;lt;code&amp;gt;params[:contacts][:list]&amp;lt;/code&amp;gt;. Each index represents the contact from which the contact in the list was obtained from.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get more information, see:&lt;br /&gt;
*[[Routing_script_tutorial:SIP_Redirection_Contacts|SIP Redirection Contacts Parameters in a Call Flow]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Connected number ==&lt;br /&gt;
Insert a connected number in the answer message of the call flow.&lt;br /&gt;
&lt;br /&gt;
Routing script example:&lt;br /&gt;
    bridge = params[ :bridge ]&lt;br /&gt;
    bridge [ :connected_number ] = &amp;quot;3335577&amp;quot;&lt;br /&gt;
    bridge [ :connected_number_noa ] = :national_number&lt;br /&gt;
    bridge [ :connected_number_npi ] = :private&lt;br /&gt;
    bridge [ :connected_number_presentation ] = :allowed&lt;br /&gt;
    bridge [ :connected_number_screening ] = :pass&lt;br /&gt;
&lt;br /&gt;
== Terminating calls ==&lt;br /&gt;
In release 2.8, it is now possible to terminate a call through the routing scripts. The [[#Reason values|reason code]] must be specified in &amp;lt;code&amp;gt;params[:bridge][:reason]&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;:terminate&amp;lt;/code&amp;gt; hash must be created and copied into &amp;lt;code&amp;gt;params&amp;lt;/code&amp;gt;:&lt;br /&gt;
  terminate = {}&lt;br /&gt;
  params[:terminate] = terminate&lt;br /&gt;
The following fields can then be set in &amp;lt;code&amp;gt;:terminate&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;:sip_header&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:contacts&amp;lt;/code&amp;gt; # list of contacts as described in the [[#Redirection|redirection]] section&lt;br /&gt;
* &amp;lt;code&amp;gt;:isup_raw&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:isup_raw_variant&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_noa&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_npi&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_presentation&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_reason&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_counter&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_indicator&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_noa&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_npi&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_presentation&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_reason&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_counter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reason values  ==&lt;br /&gt;
&lt;br /&gt;
Check here for Termination Reason Cause codes:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Termination_cause_codes|Termination Reason Cause codes]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to refuse an incoming call leg.&lt;br /&gt;
  raise RoutingException, :no_route&lt;br /&gt;
&lt;br /&gt;
Reason cause strings available inside routing scripts:&lt;br /&gt;
&lt;br /&gt;
List of Q.850 reason causes:&lt;br /&gt;
  :unallocated_number&lt;br /&gt;
  :no_route_to_network&lt;br /&gt;
  :no_route_to_destination&lt;br /&gt;
  :send_special_tone&lt;br /&gt;
  :misdialled_trunk_prefix&lt;br /&gt;
  :channel_unacceptable&lt;br /&gt;
  :call_awarded_in_established_channel&lt;br /&gt;
  :preemption&lt;br /&gt;
  :reattempt&lt;br /&gt;
  :qor_ported_number&lt;br /&gt;
  :normal_call_clearing&lt;br /&gt;
  :user_busy&lt;br /&gt;
  :no_user_responding&lt;br /&gt;
  :no_answer_from_user&lt;br /&gt;
  :subscriber_absent&lt;br /&gt;
  :call_rejected&lt;br /&gt;
  :number_changed&lt;br /&gt;
  :redirection&lt;br /&gt;
  :exchange_routing_error&lt;br /&gt;
  :non_selected_user_clearing&lt;br /&gt;
  :destination_out_of_order&lt;br /&gt;
  :address_incomplete&lt;br /&gt;
  :facility_rejected&lt;br /&gt;
  :response_to_status_enquiry&lt;br /&gt;
  :normal_unspecified&lt;br /&gt;
  :no_circuit_available&lt;br /&gt;
  :network_out_of_order&lt;br /&gt;
  :frame_mode_out_of_service&lt;br /&gt;
  :frame_mode_connection_operational&lt;br /&gt;
  :temporary_failure&lt;br /&gt;
  :switching_equipment_congestion&lt;br /&gt;
  :access_information_discarded&lt;br /&gt;
  :requested_circuit_not_available&lt;br /&gt;
  :precedence_call_blocked&lt;br /&gt;
  :resource_unavailable&lt;br /&gt;
  :quality_of_service_not_available&lt;br /&gt;
  :requested_facility_not_subscribed&lt;br /&gt;
  :outgoing_calls_barred&lt;br /&gt;
  :outgoing_calls_barred_within_cug&lt;br /&gt;
  :incoming_calls_barred&lt;br /&gt;
  :incoming_calls_barred_within_cug&lt;br /&gt;
  :bearer_cap_not_authorized&lt;br /&gt;
  :bearer_cap_not_available&lt;br /&gt;
  :inconsistency_access_info&lt;br /&gt;
  :service_not_available&lt;br /&gt;
  :bearer_cap_not_implemented&lt;br /&gt;
  :channel_type_not_implemented&lt;br /&gt;
  :requested_facility_not_implemented&lt;br /&gt;
  :only_restricted_digital_info&lt;br /&gt;
  :service_not_implemented&lt;br /&gt;
  :invalid_call_reference&lt;br /&gt;
  :channel_does_not_exist&lt;br /&gt;
  :call_identity_does_not_exist&lt;br /&gt;
  :call_identity_in_use&lt;br /&gt;
  :no_call_suspended&lt;br /&gt;
  :call_has_been_cleared&lt;br /&gt;
  :user_not_member_of_cug&lt;br /&gt;
  :incompatible_destination&lt;br /&gt;
  :non_existant_cug&lt;br /&gt;
  :invalid_transit_network&lt;br /&gt;
  :invalid_message_unspecified&lt;br /&gt;
  :mandatory_ie_missing&lt;br /&gt;
  :message_type_non_existent&lt;br /&gt;
  :message_not_compatible_with_call_state&lt;br /&gt;
  :ie_non_existent&lt;br /&gt;
  :invalid_ie_content&lt;br /&gt;
  :msg_not_compatible_with_call_state&lt;br /&gt;
  :recovery_on_timer_expiry&lt;br /&gt;
  :parameter_non_existent_passed_on&lt;br /&gt;
  :message_with_non_recognized_parameters_discarded&lt;br /&gt;
  :protocol_error&lt;br /&gt;
  :interworking_unspecified&lt;br /&gt;
&lt;br /&gt;
List of toolpack reason causes:&lt;br /&gt;
&lt;br /&gt;
  :toolpack_normal                       or :normal&lt;br /&gt;
  :toolpack_resource_error               or :resource_error&lt;br /&gt;
  :toolpack_timeout                      or :timeout&lt;br /&gt;
  :toolpack_no_route                     or :no_route&lt;br /&gt;
  :toolpack_call_collision               or :call_collision&lt;br /&gt;
  :toolpack_sync_drop                    or :sync_drop&lt;br /&gt;
  :toolpack_signaling_error              or :signaling_error&lt;br /&gt;
  :toolpack_locally_rejected             or :locally_rejected&lt;br /&gt;
  :toolpack_interface_not_available      or :interface_not_available&lt;br /&gt;
  :toolpack_reset_in_progress            or :reset_in_progress&lt;br /&gt;
  :toolpack_adapter_reject               or :adapter_reject&lt;br /&gt;
  :toolpack_missing_or_invalid_ie        or :missing_or_invalid_ie&lt;br /&gt;
  :toolpack_incoming_only                or :incoming_only&lt;br /&gt;
  :toolpack_system_configuration_changed or :system_configuration_changed&lt;br /&gt;
  :toolpack_resource_no_more_available   or :resource_no_more_available&lt;br /&gt;
  :toolpack_incompatible_media           or :incompatible_media&lt;br /&gt;
  :toolpack_resource_allocation_failed   or :resource_allocation_failed&lt;br /&gt;
  :toolpack_data_path_not_available      or :data_path_not_available&lt;br /&gt;
  :toolpack_local_congestion             or :local_congestion&lt;br /&gt;
  :toolpack_authorization_required       or :authorization_required&lt;br /&gt;
  :toolpack_call_divert_is_not_allowed   or :call_divert_is_not_allowed&lt;br /&gt;
&lt;br /&gt;
List of SIP reason causes:&amp;lt;br/&amp;gt;&lt;br /&gt;
Reason causes starting with a digit must use the following syntax (can't use : as prefix).&lt;br /&gt;
&lt;br /&gt;
  '300_multiple_choices'&lt;br /&gt;
  '301_moved_permanently'&lt;br /&gt;
  '302_moved_temporarily'&lt;br /&gt;
  '305_use_proxy'&lt;br /&gt;
  '380_alternative_service'&lt;br /&gt;
  '400_bad_request'&lt;br /&gt;
  '401_unauthorized'&lt;br /&gt;
  '402_payment_required'&lt;br /&gt;
  '403_forbidden'&lt;br /&gt;
  '404_not_found'&lt;br /&gt;
  '405_method_not_allowed'&lt;br /&gt;
  '406_not_acceptable'&lt;br /&gt;
  '407_proxy_authentication_required'&lt;br /&gt;
  '408_request_timeout'&lt;br /&gt;
  '409_conflict'&lt;br /&gt;
  '410_gone'&lt;br /&gt;
  '413_request_entity_too_large'&lt;br /&gt;
  '414_request_URI_too_long'&lt;br /&gt;
  '415_unsupported_media'&lt;br /&gt;
  '416_unsupported_URI_scheme'&lt;br /&gt;
  '420_bad_extension'&lt;br /&gt;
  '421_extension_required'&lt;br /&gt;
  '422_session_timer_too_small'&lt;br /&gt;
  '423_interval_too_brief'&lt;br /&gt;
  '429_referrer_identity_error'&lt;br /&gt;
  '480_temporary_unavailable'&lt;br /&gt;
  '481_call_or_transaction_does_not_exist'&lt;br /&gt;
  '482_loop_detected'&lt;br /&gt;
  '483_too_many_hops'&lt;br /&gt;
  '484_address_incomplete'&lt;br /&gt;
  '485_ambiguous'&lt;br /&gt;
  '486_busy_here'&lt;br /&gt;
  '487_request_terminated'&lt;br /&gt;
  '488_not_acceptable_here'&lt;br /&gt;
  '489_bad_event'&lt;br /&gt;
  '491_retry_after'&lt;br /&gt;
  '500_server_internal_error'&lt;br /&gt;
  '501_not_implemented'&lt;br /&gt;
  '502_bad_gateway'&lt;br /&gt;
  '503_service_unavailable'&lt;br /&gt;
  '504_server_timeout'&lt;br /&gt;
  '505_version_unsupported'&lt;br /&gt;
  '513_message_too_large'&lt;br /&gt;
  '600_busy_everywhere'&lt;br /&gt;
  '603_decline'&lt;br /&gt;
  '604_not_exist_anywhere'&lt;br /&gt;
  '606_not_acceptable'&lt;br /&gt;
&lt;br /&gt;
== Nap status  ==&lt;br /&gt;
&lt;br /&gt;
All the status fields of the NAPs are provided for use by the routing scripts. See the nap status provider for more details on which fields are available in the CEngineStatTransNap.hpp file. &lt;br /&gt;
&lt;br /&gt;
'''Notice:''' These values may change between major release. &lt;br /&gt;
&lt;br /&gt;
  Routing script call attribute name    Description&lt;br /&gt;
  --------------------------------------------------------------------------------------------&lt;br /&gt;
  &amp;quot;name&amp;quot;                                NAP name.&lt;br /&gt;
  &amp;quot;signaling_type&amp;quot;                      Signaling type (SS7, ISDN, CASR2, SIP)&lt;br /&gt;
  &amp;quot;profile&amp;quot;                             Profile name.&lt;br /&gt;
  &amp;quot;sip_destination_ip&amp;quot;                  Destination IP address.&lt;br /&gt;
  &amp;quot;sip_destination_port&amp;quot;                Destination IP port.&lt;br /&gt;
  &amp;quot;sip_transport_type&amp;quot;                  SIP transport type (:udp, :tcp, or :tls) (Toolpack 3.1 and more)&lt;br /&gt;
  &amp;quot;inst_incoming_call_cnt&amp;quot;              Instantaneous Count of incoming calls.&lt;br /&gt;
  &amp;quot;inst_outgoing_call_cnt&amp;quot;              Instantaneous Count of outgoing calls.&lt;br /&gt;
  &amp;quot;available_cnt&amp;quot;                       Number of available circuits or channels.&lt;br /&gt;
  &amp;quot;unavailable_cnt&amp;quot;                     Number of unavailable circuits or channels.&lt;br /&gt;
  &amp;quot;availability_percent&amp;quot;                Percentage of available circuits or channels.&lt;br /&gt;
  &amp;quot;usage_percent&amp;quot;                       Percentage of used circuits or channels.&lt;br /&gt;
  &amp;quot;unused_shared_percent&amp;quot;               Percentage of used circuits or channels of this NAP available to make new calls with (taking into account shared with other NAPs)&lt;br /&gt;
  &amp;quot;total_incoming_call_cnt&amp;quot;             Total Count of incoming calls.&lt;br /&gt;
  &amp;quot;global_asr_percent&amp;quot;                  Global calculated ASR percentage.&lt;br /&gt;
  &amp;quot;total_outgoing_call_cnt&amp;quot;             Total Count of outgoing calls.&lt;br /&gt;
  &amp;quot;last_24h_asr_percent&amp;quot;                Last 24 hours calculated ASR percentage.&lt;br /&gt;
  &amp;quot;last_24h_outgoing_call_cnt&amp;quot;          Last 24 hours outgoing calls.&lt;br /&gt;
  &amp;quot;current_hour_asr_percent&amp;quot;            Current hour calculated ASR percentage.&lt;br /&gt;
  &amp;quot;current_hour_outgoing_call_cnt&amp;quot;      Current hour outgoing calls.&lt;br /&gt;
  &amp;quot;last_hour_asr_percent&amp;quot;               Last hour calculated ASR percentage.&lt;br /&gt;
  &amp;quot;last_hour_outgoing_call_cnt&amp;quot;         Last hour outgoing calls.&lt;br /&gt;
  &amp;quot;poll_remote_proxy&amp;quot;                   Remote proxy polling enabled&lt;br /&gt;
  &amp;quot;is_available&amp;quot;                        Remote proxy actually available or not&lt;br /&gt;
  &amp;quot;time_since_polling&amp;quot;                  Time since the last availibility polling&lt;br /&gt;
  &amp;quot;time_available_seconds&amp;quot;              Number of seconds since the NAP is available&lt;br /&gt;
  &amp;quot;time_unavailable_seconds&amp;quot;            Number of seconds since the NAP is unavailable&lt;br /&gt;
  &amp;quot;register_to_proxy&amp;quot;                   Register to proxy enabled&lt;br /&gt;
  &amp;quot;registered&amp;quot;                          Actually registered or not&lt;br /&gt;
  &amp;quot;time_since_refresh&amp;quot;                  Time since the last refresh&lt;br /&gt;
  &amp;quot;time_registered_seconds&amp;quot;             Number of seconds since the NAP is registered&lt;br /&gt;
  &amp;quot;time_not_registered_seconds&amp;quot;         Number of seconds since the NAP is not registered&lt;br /&gt;
  &amp;quot;asr_stats_incoming_struct&amp;quot;           Detailed Answer-Seizure Rate incoming statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;global_asr_percent&amp;quot;                Global calculated ASR percentage.&lt;br /&gt;
    &amp;quot;total_call_cnt&amp;quot;                    Total count of calls.&lt;br /&gt;
    &amp;quot;total_accepted_call_cnt&amp;quot;           Total count of accepted calls (not dropped due to congestion or rate-limiting).&lt;br /&gt;
    &amp;quot;total_answered_call_cnt&amp;quot;           Total count of answered calls.&lt;br /&gt;
    &amp;quot;last_24h_asr_percent&amp;quot;              Last 24 hours calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_24h_call_cnt&amp;quot;                 Last 24 hours count of calls.&lt;br /&gt;
    &amp;quot;current_hour_asr_percent&amp;quot;          Current hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;current_hour_call_cnt&amp;quot;             Current hour count of calls.&lt;br /&gt;
    &amp;quot;last_hour_asr_percent&amp;quot;             Last hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_hour_call_cnt&amp;quot;                Last hour count of calls.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;asr_stats_outgoing_struct&amp;quot;           Detailed Answer-Seizure Rate outgoing statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;global_asr_percent&amp;quot;                Global calculated ASR percentage.&lt;br /&gt;
    &amp;quot;total_call_cnt&amp;quot;                    Total count of calls.&lt;br /&gt;
    &amp;quot;total_accepted_call_cnt&amp;quot;           Total count of accepted calls (not dropped due to congestion or rate-limiting).&lt;br /&gt;
    &amp;quot;total_answered_call_cnt&amp;quot;           Total count of answered calls.&lt;br /&gt;
    &amp;quot;last_24h_asr_percent&amp;quot;              Last 24 hours calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_24h_call_cnt&amp;quot;                 Last 24 hours count of calls.&lt;br /&gt;
    &amp;quot;current_hour_asr_percent&amp;quot;          Current hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;current_hour_call_cnt&amp;quot;             Current hour count of calls.&lt;br /&gt;
    &amp;quot;last_hour_asr_percent&amp;quot;             Last hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_hour_call_cnt&amp;quot;                Last hour count of calls.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;mos_struct&amp;quot;                          Detailed Mean Opinion Score statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;last_24h_ingress&amp;quot;                  Last 24 hours calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_24h_egress&amp;quot;                   Last 24 hours calculated MOS for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_ingress&amp;quot;              Current hour calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_egress&amp;quot;               Current hour calculated MOS for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_ingress&amp;quot;                 Last hour calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_egress&amp;quot;                  Last hour calculated MOS for outgoing RTP packets.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;network_quality_struct&amp;quot;              Detailed network quality statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;last_24h_ingress&amp;quot;                  Last 24 hours network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_24h_egress&amp;quot;                   Last 24 hours network quality percentage for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_ingress&amp;quot;              Current hour network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_egress&amp;quot;               Current hour network quality percentage for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_ingress&amp;quot;                 Last hour network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_egress&amp;quot;                  Last hour network quality percentage for outgoing RTP packets.&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; If the nap status is part of a substructure, the substructure will be a hash containing all subfield elements. &lt;br /&gt;
&lt;br /&gt;
Example to access the signaling type and the number of incoming call count for the NAP of the current call:&lt;br /&gt;
&lt;br /&gt;
   incoming_nap = params[:naps][ params[:call][ :nap ].to_sym]&lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP parameters=&amp;quot; + incoming_nap.inspect &lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP signaling type=&amp;quot; + incoming_nap[:signaling_type].inspect &lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP call cnt=&amp;quot; + incoming_nap[:asr_stats_incoming_struct][:total_call_cnt].inspect &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; It is also possible to add dynamic nap attributes in the web portal. These can be referenced by their name.&lt;br /&gt;
&lt;br /&gt;
== Telephony Services ==&lt;br /&gt;
In release 2.10 and the above, telephony services (CNAM Request) can be manage from the routing engine in the following format:&lt;br /&gt;
&lt;br /&gt;
  params[:telephony_services].each do |service|  -&amp;gt; Array of telephony services&lt;br /&gt;
    service[:name]                               -&amp;gt; Customer telephony service name&lt;br /&gt;
    service[:type]                               -&amp;gt; For now only &amp;quot;CNAM Request&amp;quot;&lt;br /&gt;
    service[:enabled]                            -&amp;gt; Indicate if the service is enabled (true) or not (false)&lt;br /&gt;
                                                    (Only the telephony service define in the profile associated to the NAP is enabled)&lt;br /&gt;
                                                    (The others telephony services define in others profiles are disabled)&lt;br /&gt;
                                                    (If we are in the case where we return in the routing script with a response, it is important to set :enabled to false in order to avoid repeating the same query)&lt;br /&gt;
    serviceParams = service[:params]&lt;br /&gt;
    serviceParams[:return_to_script]             -&amp;gt; Indicates to Gateway if we must return to the routing script after receiving the CNAM response&lt;br /&gt;
                                                    (It is important to set back to false this field to avoid an infinite loop)&lt;br /&gt;
    serviceQuery = service[:query]&lt;br /&gt;
    serviceQuery[:phone]                         -&amp;gt; 10 digits of calling number from the incoming call to send to the CNAM server&lt;br /&gt;
    serviceQuery[:timeout]                       -&amp;gt; Timeout in millisecond to wait a CNAM response from CNAM server&lt;br /&gt;
                                                    (Default value from profile configuration)&lt;br /&gt;
    serviceResponse = service[:response]&lt;br /&gt;
    serviceResponse[:success]                    -&amp;gt; Indicates if we received a good CNAM response from the CNAM Server (Only present if :return_to_script is set to true)&lt;br /&gt;
    serviceResponse[:caller_name]                -&amp;gt; The caller name received in the CNAM response from the CNAM Server (Only present if :return_to_script is set to true)&lt;br /&gt;
&lt;br /&gt;
== Custom user context ==&lt;br /&gt;
The routing script may '''save per-call information within the call context''', that will be available if routing is called again later during the call flow.&lt;br /&gt;
&lt;br /&gt;
Cases where routing is called multiple time for the same call are:&lt;br /&gt;
- Call transfer requests&lt;br /&gt;
- SIP redirect requests&lt;br /&gt;
- Radius Authorization result&lt;br /&gt;
- Announcement server with digit collection&lt;br /&gt;
&lt;br /&gt;
The routing script can save a recursive hash of attributes here:&lt;br /&gt;
  params[:user_context]&lt;br /&gt;
&lt;br /&gt;
For example&lt;br /&gt;
  params[:user_context] = { &amp;quot;SomeKey&amp;quot; =&amp;gt; &amp;quot;Some value I want to retrieve upon next routing for this call&amp;quot;, &amp;quot;OtherVal&amp;quot; =&amp;gt; { &amp;quot;subkey&amp;quot; =&amp;gt; &amp;quot;subval&amp;quot; } }&lt;br /&gt;
&lt;br /&gt;
Upon first call to routing script, params[:user_context] will be nil.&lt;br /&gt;
Upon subsequent calls to routing script, it will contain whatever the script had stored upon previous call (or nil if it was not set)&lt;br /&gt;
&lt;br /&gt;
Note: This feature is available starting from release 2.9.85, 2.10.31 and 3.0.15 (in respective branches 2.9, 2.10 or 3.0)&lt;br /&gt;
&lt;br /&gt;
== Routing Script Tests ==&lt;br /&gt;
The Web portal features a tool for Testing Scripts. The user must enter parameters to simulate the incoming call and after pressing the Test button, will output selected routes and numbers.  You do not need to activate the new routes, or the new scripts to use this test tool: It can be used to test the routing scripts and routing table before activating it.&lt;br /&gt;
This is available in the Routing Scripts section of the Web portal.&lt;br /&gt;
&lt;br /&gt;
=== Test parameters ===&lt;br /&gt;
==== @call_params  ====&lt;br /&gt;
&lt;br /&gt;
That variable should contain a hash of call parameters that will be passed to the routing script. This is equivalent to the incoming call parameters. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== @nap_list  ====&lt;br /&gt;
&lt;br /&gt;
A list of the hash containing the nap statuses. This is equivalent to the nap statuses at the time the call is to be routed. &lt;br /&gt;
&lt;br /&gt;
'''The nap list is hashed by the nap names in UPPERCASE.''' It is important to consider this when creating new dynamic route or nap attributes that may nap names that will be used to fetch a status. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== @params  ====&lt;br /&gt;
&lt;br /&gt;
A hash of hashes containing parameters. This hash contains bridge parameters and other kind of parameter groups may be added in the future. &lt;br /&gt;
&lt;br /&gt;
  @params = {&lt;br /&gt;
     :bridge =&amp;gt; {:announcement_tone, &amp;quot;announcement.wav&amp;quot;},&lt;br /&gt;
     :contacts =&amp;gt; {&lt;br /&gt;
       :index=&amp;gt;&amp;quot;1&amp;quot;,&lt;br /&gt;
       :list=&amp;gt;[&lt;br /&gt;
          {:called_number=&amp;gt;&amp;quot;6660&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;&amp;quot;,&lt;br /&gt;
           :raw_data=&amp;gt;&amp;quot;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
          {:called_number=&amp;gt;&amp;quot;6661&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6661@192.168.215.127&amp;quot;, &lt;br /&gt;
           :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6661@192.168.215.127&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
       ],&lt;br /&gt;
       :source_indexes=&amp;gt;&amp;quot;nil,0&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Back to [[Routing script tutorial|Routing Script Tutorial]].&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Routing_script_tutorial:Mini_Development_Guide</id>
		<title>Routing script tutorial:Mini Development Guide</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Routing_script_tutorial:Mini_Development_Guide"/>
				<updated>2019-04-30T13:48:51Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* Example usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Call object  ==&lt;br /&gt;
&lt;br /&gt;
=== Get  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to get the call parameters. The possible parameters are described in the section &amp;quot;Call parameters&amp;quot; &lt;br /&gt;
&lt;br /&gt;
  called_number = caf_call.get&amp;amp;nbsp;:called&lt;br /&gt;
&lt;br /&gt;
=== List_params  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to retrieve the list of supported call parameters. For example to extract all the possible call parameters from the the call object and put it in hash. &lt;br /&gt;
&lt;br /&gt;
  caf_call.list_params.each {|param| call[param] = caf_call.get param }&lt;br /&gt;
&lt;br /&gt;
=== Accept  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to accept a call.  It actually creates one outgoing route that the gateway application will use to bridge the incoming call leg.  If more than one outgoing route is &amp;quot;accepted&amp;quot;, the gateway will try them one by one in the same order that they were accepted.   If an outgoing call leg fails (according to 'route retry' parameters), the next route in line will be used.  &lt;br /&gt;
&lt;br /&gt;
This method takes 2 arguments, the call parameters (hash) and the route parameters (hash).  Note that calling this method does NOT stop the flow of the script.&lt;br /&gt;
&lt;br /&gt;
Apply route remapping rules &lt;br /&gt;
&lt;br /&gt;
  caf_call.accept out_call, route&lt;br /&gt;
&lt;br /&gt;
=== Refuse  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to set the reason code for the incoming call leg refusal.  However, this function does NOT stop the flow of the script. &lt;br /&gt;
&lt;br /&gt;
  caf_call.refuse&amp;amp;nbsp;:reason =&amp;amp;gt;&amp;amp;nbsp;:temporary_failure&lt;br /&gt;
&lt;br /&gt;
To immediately refuse the incoming call leg and stop processing the script, the script must raise an exception.  Exiting the script by raising the exception overwrites any reason cause previously stored using refuse().&lt;br /&gt;
&lt;br /&gt;
  raise RoutingException, :no_route&lt;br /&gt;
&lt;br /&gt;
The supported refusal cause values for both refuse() and raise() are described in the section &amp;quot;[[Routing_script_tutorial:Mini_Development_Guide#Reason_values|Reason values]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Script parameters protocol mapping  ===&lt;br /&gt;
&lt;br /&gt;
The following call parameters are available in the call object. For example:&lt;br /&gt;
&lt;br /&gt;
  called_number = call[:called]&lt;br /&gt;
&lt;br /&gt;
For information on how to use and remap call parameters, see [[Toolpack:_How_to_Use_RegEx_in_Remapped_Called_and_Calling_Number_Mask | How to use regex in Remapped Called and Calling Number Mask]]&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 921px; height: 805px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Script parameter name''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''ISDN&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''R2 CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SS7&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SIP&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Comment&amp;lt;br&amp;gt;'''&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Toolpack version&amp;lt;br&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| leg_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Leg ID&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| session_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Session ID&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_session_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Original Session ID (before call transfer or redirections)&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| ANI (Group B)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - address signals (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used (when present) instead.&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - host (domain or IP) &amp;lt;br&amp;gt; &lt;br /&gt;
|  For example : The 'telcobridges.com' in From: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - port &amp;lt;br&amp;gt; &lt;br /&gt;
|  For example : The '6060' in From: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_noa&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - nature of address indicator (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used (when present) instead&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - numbering plan indicator (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used&amp;amp;nbsp;(when present) instead&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_display &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Display' IE - Display information&amp;lt;br&amp;gt; &lt;br /&gt;
Q931: 'Facility CNAM' IE when presentation is allowed for DMS/NI2 variants&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763 &lt;br /&gt;
ITU97: 'Display information' IE - display information &lt;br /&gt;
ANSI95: 'Generic name' IE - display information &lt;br /&gt;
| SIP:From - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_display_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Display' IE - Display information (present and/or first byte)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Display information' IE - present or not&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Presentation indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - display-name (displays 'anonymous' or not) &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - privacy&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_screening&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Screening indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Remote-party-id - screen&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_category&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Call party category (Group A)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party's category' IE - calling party's category&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - cpc &lt;br /&gt;
&lt;br /&gt;
SIP:P-asserted-identity - cpc&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber &lt;br /&gt;
(Generic Number / NDS)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Number digits &amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - Number digits&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| Requires option 'support 2 calling number IE' in the profile.  This variable has priority over 'private_address' in the outgoing direction.&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_noa&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_presentation&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Presentation indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_screening &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Screening indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_display&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Facility CNAM' IE when presentation is restricted for DMS/NI2 variants&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_display_type &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Indicate presence or not of the private calling information&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The 'fluffy' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - host (domain or IP)&lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - host (domain or IP) &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The 'telcobridges.com' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - port&lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - port&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The '6060' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| DNIS (Group A)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - user-info and host&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - host &amp;lt;br&amp;gt; &lt;br /&gt;
| For example : The 'telcobridges.com' in To: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - port number &amp;lt;br&amp;gt; &lt;br /&gt;
| For example : The '6060' in To: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number_npi&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default redirecting number and original called number forwarding behavior from incoming to outgoing leg &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number'&amp;amp;nbsp;1st IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Presentation indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion&amp;amp;nbsp;(2nd header) - diversion-privacy&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirecting indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_reason &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Reason for redirection&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirecting reason&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - diversion-reason&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_counter &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirection counter&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - diversion-counter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number &lt;br /&gt;
(OCN) &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion&amp;amp;nbsp; (1st header) - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Presentation indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-privacy&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_reason &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Reason for redirection&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - original redirection reason&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-reason&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_counter &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-counter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_npdi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - with qualifier=Ported number is present&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:RequestURI - npdi=yes is present&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - address signals with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:RequestURI - to user part when rn is present&amp;lt;br&amp;gt; &lt;br /&gt;
| rn is stored in the called number&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - nature of address indicator with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - numbering plan indicator with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| oli&lt;br /&gt;
(Originating line information) &amp;lt;br&amp;gt; &lt;br /&gt;
| 5ESS Codeset 6 OLI - Value&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Originating line information' IE - OLI&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - oli &lt;br /&gt;
&lt;br /&gt;
SIP:P-asserted-identity - oli&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| request_uri &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Complete Request URI string&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| request_uri_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default URI&amp;amp;nbsp;forwarding behavior from incoming to outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_header&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Any header&amp;lt;br&amp;gt; &lt;br /&gt;
| Requires option 'Forward custom headers' in Profiles-&amp;gt;SIP &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7.63&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| nap&lt;br /&gt;
(Network Access Point) &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg NAP name (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| type_of_network_identification&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Type of network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Type of network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| network_identification&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| SIP: Request-Line - cic&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| network_identification_plan&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Network identification plan &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Network identification plan &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default location number forwarding behavior from incoming to outgoing leg &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_presentation&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_screening &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| A script needs to set this to true if it wants to overwrite MLPP information in the outgoing leg.  Otherwise, profile relay 'outgoing mode' applies automatically.&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_look_for_busy &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - look ahead for busy&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_precedence_level &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - precedence level&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Resource-Priority - q735&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_network_identity &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - network identity&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_service_domain&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - MLPP service domain&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_isub &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party subaddress' IE - subaddress information&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - isub parameter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_isub_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party subaddress' IE - type of subaddress&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - isub-encoding parameter&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_isub &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party subaddress' IE - subaddress information&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - isub&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_isub_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Callinf party subaddress' IE - type of subaddress&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - isub-encoding&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_fci_default &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Default forward call indicator (FCI) value.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will overwrite FCI bits A, D, F, I and M with appropriate values according to call conditions&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_fci_force_mask &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Mask to select bits from ss7_fci_default that must be forced.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Bits from ss7_fci_default which corresponding bit in ss7_fci_force_mask is set will be forced, and no more controlled by Toolpack&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_bci_default &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Default backward call indicator (BCI) value.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will overwrite BCI bits AB, I, K, M and N with appropriate values according to call conditions&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_bci_force_mask &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Mask to select bits from ss7_bci_default that must be forced.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Bits from ss7_bci_default which corresponding bit in ss7_bci_force_mask is set will be forced, and no more controlled by Toolpack&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ls_name_forward_enabled&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| Enable line service and timeslot selection to create the outgoing leg&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.0&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ls_name&lt;br /&gt;
(Line Service or T1/E1 trunk) &amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| if tdm_ls_name_forward_enabled is set, try to use this line service name to create outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_timeslot_nb&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| if tdm_ls_name_forward_enabled is set, try to use this timeslot number to create outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_local_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SDP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_local_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SDP IP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_remote_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SDP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_remote_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SDP IP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_cot_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Requests SS7 in-call continuity test for this outgoing SS7 call&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will request a continuity test on the timeslot before making the outgoing call. If COT fails, the call will be dropped (then another route may be attempted)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reverse_charging_indication&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg Reverse charging indication IE present&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| If set in routing script, will add Reverse charging indication IE in outgoing leg (also use reverse_charging_indication_forward_enabled)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.12&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reverse_charging_indication_forward_enabled&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Enable forwarding of reverse charging indication from incoming to outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.12&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_call_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg SIP Call-Id&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.9.112 / 3.0.131&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_local_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SIP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_local_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SIP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_remote_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SIP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_remote_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SIP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noa values  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown_number (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number (0x4)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number (0x3)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;subscriber_number (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_specific (0x5)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_routing_national_format (0x7)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_routing_international_format (0x8)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;abbreviated_number (0x6)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;subscriber_number_operator_requested (0x71)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number_operator_requested (0x72)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number_operator_requested (0x73)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_number_present_operator_requested (0x74)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_number_present_cut_through_call_to_carrier (0x75)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;test_line_test_code (0x77)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_subscriber_number (0x71)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_national_number (0x73)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_international_number (0x74)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_950_numbe (0x76)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;special_number (0x73)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number_with_transit_network_selection (0x74)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number_with_transit_network_selection (0x75)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Those values will be remapped to the protocol specific NOA value. To provide protocol specific value: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:called_noa] = 0x70&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:called_noa] = 112&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Npi values  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown_number&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;isdn&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;telephony&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;data&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;telex&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Display Type values  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; =&amp;amp;gt; Type is unspecified. &lt;br /&gt;
*&amp;lt;tt&amp;gt;calling_party_name&amp;lt;/tt&amp;gt; =&amp;amp;gt; Type is 0xB1.&lt;br /&gt;
&lt;br /&gt;
Those values will be remapped to the protocol specific Display Information Type value. To provide protocol specific value: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display_type] = 0xB1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display_type] = 177&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Display value  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display] = &amp;quot;Roger Fluffy&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Presentation values for Calling number, Calling Subscriber (Generic Number), Redirecting Number, Original Called Number (OCN) and Location Number ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;not_available (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;allowed (0x0)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;restricted (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;addr_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;name_restricted&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Party Category  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
In case it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mapping from routing script to SS7/CAS R2/SIP&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Routing Script string &amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SS7 raw value &amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''R2 CAS scripts'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Default Rx CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''default Tx CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SIP &amp;quot;cpc=&amp;quot;  &amp;lt;br&amp;gt;''' &lt;br /&gt;
|-&lt;br /&gt;
| subscriber&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xa&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_SUBSCRIBER &amp;lt;br&amp;gt; &lt;br /&gt;
| 1 and 7&amp;lt;br&amp;gt; &lt;br /&gt;
| 7&amp;lt;br&amp;gt; &lt;br /&gt;
| ordinary&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| subscriber_with_priority&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xb&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_SUBSCRIBER_WITH_PRIORITY &amp;lt;br&amp;gt; &lt;br /&gt;
| 2 and 9 &amp;lt;br&amp;gt; &lt;br /&gt;
| 2 &amp;lt;br&amp;gt; &lt;br /&gt;
| priority&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_french&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x1&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_FRENCH &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_english&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x2&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_ENGLISH (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_german&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x3&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_GERMAN (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_russian&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x4&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_RUSSIAN (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_spanish &amp;lt;br&amp;gt; &lt;br /&gt;
| 0x5&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_SPANISH (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| data&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xc&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_DATA &amp;lt;br&amp;gt; &lt;br /&gt;
| 6 and 8&amp;lt;br&amp;gt; &lt;br /&gt;
| 6 &amp;lt;br&amp;gt; &lt;br /&gt;
| datacall&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| test&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xd&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_TEST &amp;lt;br&amp;gt; &lt;br /&gt;
| 3 &amp;lt;br&amp;gt; &lt;br /&gt;
| 3 &amp;lt;br&amp;gt; &lt;br /&gt;
| test&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| payphone &amp;lt;br&amp;gt; &lt;br /&gt;
| 0xf&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_PAYPHONE &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| 7 &amp;lt;br&amp;gt; &lt;br /&gt;
| payphone&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| unknown &amp;lt;br&amp;gt; &lt;br /&gt;
| 0x0 &amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_UNKNOWN&amp;lt;br&amp;gt; &lt;br /&gt;
| 4, 11 to 15&amp;lt;br&amp;gt; &lt;br /&gt;
| 7 &amp;lt;br&amp;gt; &lt;br /&gt;
| unknown&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| unspecified &amp;lt;br&amp;gt; &lt;br /&gt;
| 0xa &amp;lt;br&amp;gt; &lt;br /&gt;
| invalid &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| invalid &amp;lt;br&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
[[CAS_R2_scripting#Category_meanings|Link to calling party categories used in CAS R2 scripts]]&lt;br /&gt;
&lt;br /&gt;
=== Screening values for Calling number, Calling Subscriber (Generic Number), and Location Number  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no (0x0)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;pass (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;fail (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_provided (0x3)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redirecting indicator values  ===&lt;br /&gt;
&lt;br /&gt;
SS7: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;no_redirection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted_all_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted_all_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted_restricted&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;spare&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redirecting number, Original Called Number and Diversion Reason ===&lt;br /&gt;
&lt;br /&gt;
ISDN: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;busy&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_reply&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;dte_out_of_order&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;forwarding_by_called_dte&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;unconditional&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SS7: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;busy      (SIP: user-busy)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_reply  (SIP: no-answer)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;unconditional&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection_immediate&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;mobile_not_reachable&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OLI (originating line information) values  ===&lt;br /&gt;
&lt;br /&gt;
The OLI parameter is a string that represents an integer value from 0 to 255. &lt;br /&gt;
&lt;br /&gt;
=== Information Transfer Capability values  ===&lt;br /&gt;
&lt;br /&gt;
information_transfer_capability: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;digital&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;restricted_digital&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;digital_with_tones&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;speech&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;3_1_khz_audio&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;video&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== redirecting_number_forward_enabled values  ===&lt;br /&gt;
&lt;br /&gt;
Controls forwarding or discarding of redirecting number (SIP: diversion header) to the outgoing call leg. &lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true. &lt;br /&gt;
*0/false: Redirecting number (and original called number) is not forwarded to outgoing call leg&lt;br /&gt;
*1/true: Redirecting number (and original called number) is forwarded to outgoing call leg&lt;br /&gt;
&lt;br /&gt;
The value for this parameter at the input of the routing script depends on the &amp;quot;Forward redirecting number&amp;quot; parameter in the &amp;quot;Advanced&amp;quot; section of the Gateway configuration page of the Web Portal. The script may change this value to override the Gateway configuration.&lt;br /&gt;
&lt;br /&gt;
Note: To &amp;quot;insert&amp;quot; a new redirecting number value on the outgoing leg, redirecting_number_forward_enabled must also be set to true.&lt;br /&gt;
&lt;br /&gt;
=== request_uri  ===&lt;br /&gt;
&lt;br /&gt;
Enables access to the Request-Line URI.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For example, if the Request-Line is: &lt;br /&gt;
&amp;lt;pre&amp;gt;Request-Line: INVITE sip:4175162082@172.22.45.13:5060;user=phone;transport=udp SIP/2.0&amp;lt;/pre&amp;gt; &lt;br /&gt;
Then the retrieved request_uri will be &amp;quot;sip:4175162082@172.22.45.13:5060;user=phone;transport=udp SIP/2.0&amp;quot;. &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
In the routing scripts, to retrieve only the called number, this script can be used:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;    if call_params[:request_uri] &amp;amp;amp;&amp;amp;amp; call_params[:request_uri] =~ /sip:(.*)@.*/&lt;br /&gt;
       call_params[:called] = $1&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
==== request_uri_forward_enabled ====&lt;br /&gt;
&lt;br /&gt;
This call parameter controls forwarding or discarding of request uri to outgoing call leg.The request uri is the information in the &amp;quot;Request-Line:&amp;quot; of the SIP INVITE message.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true. &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 0/false: Request uri is not forwarded to outgoing call leg &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 1/true: Request uri is forwarded to outgoing call leg &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The default value for this parameters is false. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== sip_scheme  ====&lt;br /&gt;
(Available in Toolpack 3.1+)&lt;br /&gt;
This call parameters indicates the scheme (generally &amp;quot;sip&amp;quot; or &amp;quot;sips&amp;quot;) of the incoming call.&lt;br /&gt;
&lt;br /&gt;
This also allows to control the scheme used for the outgoing call (regardless if request_uri_forward_enabled is used or not)&lt;br /&gt;
&lt;br /&gt;
Note: sips scheme must only be used on TLS NAPs (will cause call routing failure if NAP has only UDP or TCP transport types).&lt;br /&gt;
&lt;br /&gt;
=== sip_header values  ===&lt;br /&gt;
Contains custom sip headers from the inbound call leg. Any custom sip header can be added to an outgoing call leg:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
The  SIP header is in string format.&lt;br /&gt;
&lt;br /&gt;
'''string format:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;call[ :sip_header ] = &amp;quot;P-my-custom-header:value1 \nP-my-custom-header2:value2 \nP-my-custom-header3:value3&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Note: \n above are actual newline characters, not '\' followed by 'n')&lt;br /&gt;
&lt;br /&gt;
* PCAP sample: [[File:TB_Custom_SIP_Headers.pcap]]&lt;br /&gt;
&lt;br /&gt;
List of sip headers that will not appear in call[:sip_header] since they are already processed by the SIP stack:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Accept               Error-Info             Remote-Party-ID      &lt;br /&gt;
Accept-Contact       Event                  Replaces                        &lt;br /&gt;
Accept-Encoding      Expires                Reply-To               &lt;br /&gt;
Accept-Language      From                   Request-Disposition    &lt;br /&gt;
Alert-Info           In-Reply-To            Subject          &lt;br /&gt;
Allow                Max-Forwards           Subscription-State  &lt;br /&gt;
Allow-Events         MIME-version           Supported           &lt;br /&gt;
Also                 Min-Expires            Timestamp           &lt;br /&gt;
Anonymity            Min-SE                 To             &lt;br /&gt;
Authorization        Organization           Unsupported  &lt;br /&gt;
Authentication-Info  Path                   User-Agent  &lt;br /&gt;
Call-ID              Priority               Via  &lt;br /&gt;
Call-Info            Privacy                Warning  &lt;br /&gt;
Contact              Proxy-Authenticate     WWW-Authenticate  &lt;br /&gt;
Content-Disposition  Proxy-Authorization    Require  &lt;br /&gt;
Content-Encoding     Proxy-Require          Response-Key  &lt;br /&gt;
Content-Language     P-Media-Authorization  Retry-After  &lt;br /&gt;
Content-Length       P-Preferred-Identity   RPID-Privacy  &lt;br /&gt;
Content-Type         P-Asserted-Identity    Route  &lt;br /&gt;
CSeq                 RAck                   RSeq  &lt;br /&gt;
RAck                 Reason                 Security-Client  &lt;br /&gt;
Reason               Record-Route           Security-Server  &lt;br /&gt;
Date                 Refer-To               Security-Verify&lt;br /&gt;
Diversion            Referred-By            Server&lt;br /&gt;
Encryption           Reject-Contact         Service-Route             &lt;br /&gt;
                                            Session-Expires&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sip header parameters  ===&lt;br /&gt;
The routing script can read (and modify) some SIP header parameters (user parameters, URI parameters or header parameters) from some SIP headers (To, From, P-Asserted-Identity, Remote-Party-ID, Contact).&lt;br /&gt;
&lt;br /&gt;
==== Available parameters ====&lt;br /&gt;
* '''call[ :calling_parameters ]''' (SIP &amp;quot;From&amp;quot; header)&lt;br /&gt;
* '''call[ :called_parameters ]''' (SIP &amp;quot;To&amp;quot; header)&lt;br /&gt;
* '''call[ :private_address_parameters ]''' (SIP &amp;quot;P-Asserted-Identity&amp;quot; or &amp;quot;Remote-Party-ID&amp;quot; header)&lt;br /&gt;
* '''call[ :contact_parameters ]''' (SIP &amp;quot;Contact&amp;quot; header)&lt;br /&gt;
&lt;br /&gt;
These parameters (if present) contain a hash with 3 keys: user_param, uri_param and header_param.&lt;br /&gt;
Each of this key points to a string that contains all the parameters found in the corresponding SIP header.&lt;br /&gt;
* '''User parameters''' (parameters between the user name/number and the host). Example  &amp;lt;sip:alice;'''param=value'''@somewhere.com&amp;gt;&lt;br /&gt;
* '''URI parameters''' (parameters at the end of the URI). Example  &amp;lt;sip:alice@somewhere.com;'''param=value'''&amp;gt;&lt;br /&gt;
* '''Header parameters''' (outside the URI). Example  &amp;lt;sip:alice@somewhere.com&amp;gt;;'''param=value'''&lt;br /&gt;
Example to print all parameters of SIP &amp;quot;To&amp;quot; header:&lt;br /&gt;
  call[ :called_parameters ].inspect -&amp;gt; '{ :user_param =&amp;gt; &amp;quot;name1=value1;name2=value2&amp;quot;, :uri_param =&amp;gt; &amp;quot;name=value&amp;quot;, :header_param =&amp;gt; &amp;quot;name=value;example_param_without_value&amp;quot; }'&lt;br /&gt;
Example to modify (replace) the URI parameters of SIP &amp;quot;To&amp;quot; header:&lt;br /&gt;
  call[ :called_parameters ][ :uri_param ] = &amp;quot;user=phone&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Exceptions ====&lt;br /&gt;
'''Note:''' Some parameters are reported as their own call attribute (oli, isub, cpc, transport) so they have the same representation for all protocols (SS7, IDSN, SIP). They won't appear present in the generic SIP header parameters structures above.&lt;br /&gt;
&lt;br /&gt;
==== Forwarding from inbound to outbound call ====&lt;br /&gt;
&lt;br /&gt;
==== Legacy behavior ====&lt;br /&gt;
(For base_routing version 1.32 or older)&lt;br /&gt;
By default, the parameters are not forwarded in a SIP to SIP call flow. The parameters '''will be forwarded''' when:&lt;br /&gt;
* accessed (read) from either the inbound or outbound call parameters&lt;br /&gt;
* written in either the inbound or outbound call parameters&lt;br /&gt;
&lt;br /&gt;
==== Current behavior ====&lt;br /&gt;
(For Toolpack 3.0.118+, with base_routing version 1.33+)&lt;br /&gt;
SIP headers host and parameters are forwarded by default.&lt;br /&gt;
&lt;br /&gt;
A route attribute &amp;quot;forward_sip_domain&amp;quot; (along with filter script &amp;quot;forward_sip_domain.rb&amp;quot;) will control, per route, if SIP headers host+parameters must be forwarded.&lt;br /&gt;
&lt;br /&gt;
==== Example usage ====&lt;br /&gt;
Example to print the user parameters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  if call[:calling_parameters]&lt;br /&gt;
    puts &amp;quot;user parameters = #{call[:calling_parameters][:user_param].inspect}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example SIP &amp;quot;From&amp;quot; header:&lt;br /&gt;
  From:&amp;lt;sip:123456782;test1=val1;test2=val2@something.com;test3=val3;test4=val4&amp;gt;;test5=val5;test6=val6&lt;br /&gt;
And the resulting content in the routing script:&lt;br /&gt;
  call[:calling_parameters].inspect -&amp;gt; {:user_param=&amp;gt;&amp;quot;test1=val1;test2=val2&amp;quot;, :uri_param=&amp;gt;&amp;quot;test3=val3;test4=val4&amp;quot;, :header_param=&amp;gt;&amp;quot;test5=val5;test6=val6&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
'''Note''' that printing the inbound or outbound call parameters is considered as a &amp;quot;read&amp;quot; action and would result in forwarding the parameter on the outbound leg.&lt;br /&gt;
&lt;br /&gt;
Example to overwrite inbound leg calling parameters with new parameters for the outbound leg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call [:calling_parameters] = { &lt;br /&gt;
  :user_param =&amp;gt; &amp;quot;user_param7=7;user_param8=8&amp;quot;,&lt;br /&gt;
  :uri_param =&amp;gt; &amp;quot;uri_param9=value9&amp;quot;,&lt;br /&gt;
  :header_param =&amp;gt; &amp;quot;header_paramA=A&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to add user=phone and keep all other uri parameters.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  call[:calling_parameters] ||= {} # Create a hash if not already present&lt;br /&gt;
  call[:calling_parameters][:uri_param] ||= &amp;quot;&amp;quot; # Create a string if not already present&lt;br /&gt;
  call[:calling_parameters][:uri_param] += &amp;quot;;&amp;quot; if call[:calling_parameters][:uri_param] != &amp;quot;&amp;quot;&lt;br /&gt;
  call[:calling_parameters][:uri_param] += &amp;quot;user=phone&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MLPP Precedence values  ===&lt;br /&gt;
&lt;br /&gt;
mlpp_look_for_busy: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;allowed&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;path_reserved&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;not_allowed&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_precedence_level: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;flash_override&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;flash&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;immediate&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;priority&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;routine&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_network_identity:&lt;br /&gt;
&lt;br /&gt;
3 digits value from 0 to 999&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_service_domain:&lt;br /&gt;
&lt;br /&gt;
24 bits value from 0 to 16777215&lt;br /&gt;
&lt;br /&gt;
=== ISUB subaddress information values  ===&lt;br /&gt;
&lt;br /&gt;
called_isub_type: &lt;br /&gt;
calling_isub_type: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap_ia5&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap_bcd&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;user&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
called_isub: &lt;br /&gt;
calling_isub: &lt;br /&gt;
&lt;br /&gt;
Digits for the subaddress information.&lt;br /&gt;
&lt;br /&gt;
=== Network Identification Plan  ===&lt;br /&gt;
&lt;br /&gt;
network_identification_plan: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;Unknown&amp;lt;/tt&amp;gt; (value 0)&lt;br /&gt;
*&amp;lt;tt&amp;gt;cic&amp;lt;/tt&amp;gt; (3 digits carrier identification code plus circuit code, value 1, SS7 or ISDN)&lt;br /&gt;
*&amp;lt;tt&amp;gt;user&amp;lt;/tt&amp;gt; (User, value 2, ISDN only)&lt;br /&gt;
*&amp;lt;tt&amp;gt;cic4&amp;lt;/tt&amp;gt; (4 digits carrier identification code plus circuit code, value 2, SS7 only) &lt;br /&gt;
*&amp;lt;tt&amp;gt;dnic&amp;lt;/tt&amp;gt; (public Data Network ID, value 3, SS7 only) &lt;br /&gt;
*&amp;lt;tt&amp;gt;mnic&amp;lt;/tt&amp;gt; (public land mobile network, value 6, SS7 only)&lt;br /&gt;
&lt;br /&gt;
=== Registered Users Information ===&lt;br /&gt;
Routing script can access information about registered users (when either the calling or called user is a known registered user).&lt;br /&gt;
When these fields are empty, it means that the calling/called (SIP from/to) does not correspond to a known registered user (routing script may still decide to route the call based on static routes).&lt;br /&gt;
&lt;br /&gt;
Information for the called user:&lt;br /&gt;
  params[:registered_user]&lt;br /&gt;
Information for the calling user:&lt;br /&gt;
  params[:calling_registered_user]&lt;br /&gt;
&lt;br /&gt;
These parameters are a hash of key/values that provide information about the contact.&lt;br /&gt;
  {&lt;br /&gt;
    :contact_list=&amp;gt;&lt;br /&gt;
    [&lt;br /&gt;
      {&lt;br /&gt;
        :contact=&amp;gt;&amp;quot;&amp;lt;sip:user_name_or_number@hostname:7070;transport=UDP&amp;gt;&amp;quot;,    -&amp;gt; Full contact&lt;br /&gt;
        :expires=&amp;gt;&amp;quot;60&amp;quot;,                   -&amp;gt; Contact expiry time (seconds)&lt;br /&gt;
        :host=&amp;gt;&amp;quot;hostname&amp;quot;,                -&amp;gt; host name from the contact header&lt;br /&gt;
        :name=&amp;gt;&amp;quot;user_name_or_number&amp;quot;,     -&amp;gt; user name from the contact header&lt;br /&gt;
        :nap_in=&amp;gt;&amp;quot;NAP_NAME&amp;quot;,              -&amp;gt; NAP that the contact has registered from&lt;br /&gt;
        :port=&amp;gt;&amp;quot;7070&amp;quot;,                    -&amp;gt; Port from the contact header&lt;br /&gt;
        :transport=&amp;gt;&amp;quot;UDP&amp;quot;                 -&amp;gt; Transport type from the contact header&lt;br /&gt;
        :q_value=&amp;gt;&amp;quot;0.00&amp;quot;,                 -&amp;gt; Q-value for the contact (for contact ordering)&lt;br /&gt;
        :src_host=&amp;gt;&amp;quot;10.0.0.10&amp;quot;,           -&amp;gt; Actual source IP address that the contact has registered from&lt;br /&gt;
        :src_port=&amp;gt;&amp;quot;7070&amp;quot;,                -&amp;gt; Actual source port that the contact has registered from&lt;br /&gt;
        :src_transport=&amp;gt;&amp;quot;UDP&amp;quot;,            -&amp;gt; Actual protocol that the contact has been registering with&lt;br /&gt;
       }&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
== Route parameters  ==&lt;br /&gt;
&lt;br /&gt;
All route may have these parameters: &lt;br /&gt;
&lt;br /&gt;
*calling &lt;br /&gt;
*called &lt;br /&gt;
*nap &lt;br /&gt;
*remapped_calling &lt;br /&gt;
*remapped_called &lt;br /&gt;
*remapped_nap &lt;br /&gt;
*remapped_destination_leg_profile (called remapped_profile prior to Toolpack 2.9)&lt;br /&gt;
*remapped_source_leg_profile (called remapped_incoming_profile prior to Toolpack 2.9)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  route[:remapped_nap]&lt;br /&gt;
&lt;br /&gt;
Additionally it is possible to add dynamic route attributes in the web portal. These can be referenced by their name.&lt;br /&gt;
For example:&lt;br /&gt;
*priority&lt;br /&gt;
*weight&lt;br /&gt;
&lt;br /&gt;
== Routing calls toward registered users ==&lt;br /&gt;
Static routes normally chose an outbound NAP to forward the call to.&lt;br /&gt;
&lt;br /&gt;
But it's also possible to create routes which outbound NAP is dynamically chosen by matching a registered user (when using [[Sip_registration_forwarding|SIP registration forwarding]]).&lt;br /&gt;
&lt;br /&gt;
More information can be found [[Sip_registration_forwarding#SIP_Calls_routing|here]] about the way to control the [[Sip_registration_forwarding#SIP_Calls_routing|priority of &amp;quot;dynamic&amp;quot; vs &amp;quot;static&amp;quot; routes]].&lt;br /&gt;
&lt;br /&gt;
More information can be found [[#Registered_Users_Information|here]] about using routing scripts to access registered users information during call routing.&lt;br /&gt;
&lt;br /&gt;
== Playing prompts announcements or tones  ==&lt;br /&gt;
&lt;br /&gt;
New feature in release 2.6, all bridges may have these parameters. These can be used to play IVR prompts (audio files) in different states of the call flow.&lt;br /&gt;
&lt;br /&gt;
*'''announcement_tone''' (played before outgoing call is routed)&lt;br /&gt;
*'''ring_tone''' (played after when waiting for outgoing call to answer)&lt;br /&gt;
*'''busy_tone''' (played if outgoing call failed)&lt;br /&gt;
*'''disconnect_tone''' (played after the call has reached it's maximum duration)&lt;br /&gt;
&lt;br /&gt;
Example to play an announcement to incoming call (before routing outgoing call, regardless if a matching route is found or not):&lt;br /&gt;
  bridge[:announcement_tone ] = &amp;quot;my_announcement.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play a ring-tone while the outgoing call is ringing:&lt;br /&gt;
  bridge[:ring_tone] = &amp;quot;my_ring_tone.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play an audio file when outgoing call fails (no route, or outgoing call is refused):&lt;br /&gt;
  bridge[:busy_tone] = &amp;quot;my_busy_tone.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play an audio file when call has reached the maximum allowed duration:&lt;br /&gt;
  bridge[:disconnect_tone] = &amp;quot;your_account_balance_is_empty.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Announcement file path format and options ===&lt;br /&gt;
&lt;br /&gt;
All file plabyacks (:announcement_tone,&amp;amp;nbsp;:busy_tone,&amp;amp;nbsp;:ring_tone,&amp;amp;nbsp;:disconnect_tone) inside bridge parameters use this format. &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;file1.wav:repeat:start_off:end_off,file2.wav:repeat:start_off:end_off,file3.wav:repeat:start_off:end_off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Optional parameters:&lt;br /&gt;
* repeat: number of times to play the file (0 and 1 have the same result)&lt;br /&gt;
* start_off: Start offset in milliseconds&lt;br /&gt;
* end_off: End offset in milliseconds&lt;br /&gt;
&lt;br /&gt;
Http and other path formats are described here: [[Customer_application_framework:play_audio_files#Play_path_format|Path format]]&lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
The following example will play file1.wav once, and then play file2.wav in loop: &lt;br /&gt;
  &amp;quot;file1.wav,file2.wav:-1&amp;quot; &lt;br /&gt;
&lt;br /&gt;
==== Example 2 ====&lt;br /&gt;
The following example will play file1.wav from start offset of 1 second to end offset of 3 seconds, then twice file2.wav from second 5 to second 10.&lt;br /&gt;
  &amp;quot;file1.wav:0:1000:3000,file2.wav:2:5000:10000&amp;quot; &lt;br /&gt;
&lt;br /&gt;
==== Example 3 ====&lt;br /&gt;
The following example will play file1.wav once, ending at offset of 30 seconds.&lt;br /&gt;
  &amp;quot;file1.wav:0:0:30000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== announcement_tone  ===&lt;br /&gt;
&lt;br /&gt;
  params[:bridge][:announcement_tone] = &amp;quot;announcement.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call before any outgoing call is placed. The outgoing call occurs when the file finished playing.&lt;br /&gt;
&lt;br /&gt;
==== announcement_tone options ====&lt;br /&gt;
===== announcement_tone_answer =====&lt;br /&gt;
  params[:bridge][:announcement_tone_answer] = &amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Forces an answer of the call before playing the announcement. Default if argument not provided is &amp;quot;no&amp;quot;, in which case call is only alerted with in-band media.&lt;br /&gt;
&lt;br /&gt;
===== announcement_code_detect =====&lt;br /&gt;
This option allows that the tone detection is enabled during the announcement play.&lt;br /&gt;
&lt;br /&gt;
Collected digits can be inserted into the CDR logs (radius attribute &amp;quot;Telcob-CollectedDigits&amp;quot;, or text CDR variable @{CollectedDigits}).&lt;br /&gt;
&lt;br /&gt;
Collected digits can also be sent back to routing script, which is called again with the same call attributes, except that the called number is replaced by the collected digits.&lt;br /&gt;
&lt;br /&gt;
Code detect has multiple options, as shown in the following code:&lt;br /&gt;
  code_detect = {&lt;br /&gt;
    :type                   =&amp;gt; :DTMF,   # :DTMF or :MFR1 tone detection.&lt;br /&gt;
                                        # Default is MFR1.&lt;br /&gt;
    :prefix                 =&amp;gt; &amp;quot;&amp;quot;,      # Prefix (digits) that is removed from collected digits.&lt;br /&gt;
                                        # Default is empty.&lt;br /&gt;
    :suffix                 =&amp;gt; &amp;quot;&amp;quot;,      # Suffix (digits) that is removed from collected digits&lt;br /&gt;
                                        # and causes routing script to be immediately called.&lt;br /&gt;
                                        # Default is empty.&lt;br /&gt;
    :suffix_removal         =&amp;gt; false,   # Controls the removal of the suffix from the collected digit string that's reported to routing script.&lt;br /&gt;
                                        # Default is false&lt;br /&gt;
    :timeout                =&amp;gt; 0,       # Inter-digit timeout (ms) after which collected digits are passed to the routing script.&lt;br /&gt;
                                        # Use 0 for &amp;quot;no timeout&amp;quot;.&lt;br /&gt;
                                        # Default is 1000ms&lt;br /&gt;
    :barge_in_interruption  =&amp;gt; true,    # When enabled, playing announcement is stopped as soon as first digit is collected.&lt;br /&gt;
                                        # Default is true.&lt;br /&gt;
    :proceed_on_play_done   =&amp;gt; false,   # When true:  Outgoing call is made after announcement finishes playing.&lt;br /&gt;
                                        #             Routing script is not called again.&lt;br /&gt;
                                        # When false: Outgoing call is never made.&lt;br /&gt;
                                        #             Digits are collected until timeout or suffix match,&lt;br /&gt;
                                        #             then routing script is called again.&lt;br /&gt;
                                        # Default is false.&lt;br /&gt;
    :cas_on_hook            =&amp;gt; false,   # Specific for CAS-R1 calls. Makes CAS bits switch to &amp;quot;on-hook&amp;quot; when announcement finished playing&lt;br /&gt;
                                        # (but the call is not &amp;quot;terminated&amp;quot; from Toolpack point of view)&lt;br /&gt;
                                        # Default is false.&lt;br /&gt;
    :cas_on_hook_delay      =&amp;gt; 0,       # Duration of cas bits &amp;quot;on-hook&amp;quot; state.&lt;br /&gt;
                                        # Only effective if cas_on_hook is set to true.&lt;br /&gt;
                                        # Value of 0 stands for &amp;quot;infinite delay&amp;quot;.&lt;br /&gt;
                                        # Default is 0.&lt;br /&gt;
    :repeat_delay           =&amp;gt; 0,       # Delay between repetition of the announcement. The announcement will repeat&lt;br /&gt;
                                        # itself every &amp;quot;repeat_delay&amp;quot; until a code is detected (suffix match or timetout).&lt;br /&gt;
                                        # Value of 0 stands for &amp;quot;infinite delay&amp;quot; (no repeating).&lt;br /&gt;
                                        # Default is 0.&lt;br /&gt;
  }&lt;br /&gt;
'''Example 1''': Collect DTMF digits, and call routing script again with collected digits upon timeout or suffix match.&lt;br /&gt;
  code_detect = { :type =&amp;gt; :DTMF, :suffix =&amp;gt; &amp;quot;#&amp;quot;, :timeout =&amp;gt; 5000 }&lt;br /&gt;
  params[:bridge][:announcement_code_detect] = code_detect&lt;br /&gt;
&lt;br /&gt;
'''Example 2''': Collect digits during the announcement (for CDR logs), then proceed (make outgoing call) after announcement finishes playing&lt;br /&gt;
  code_detect = { :type =&amp;gt; :DTMF, :timeout =&amp;gt; 0, :barge_in_interruption =&amp;gt; false, :proceed_on_play_done =&amp;gt; true }&lt;br /&gt;
  params[:bridge][:announcement_code_detect] = code_detect&lt;br /&gt;
&lt;br /&gt;
==== Controlling what happens after announcement ====&lt;br /&gt;
The routing script can control what happens with the call after the announcement finishes playing:&lt;br /&gt;
* An outgoing call is made&lt;br /&gt;
* Incoming call is hung-up&lt;br /&gt;
* Do nothing (wait for the incoming call to hang-up)&lt;br /&gt;
===== An outgoing call is made =====&lt;br /&gt;
This happens when the script has returned matching routes (and did not raise RoutingException)&lt;br /&gt;
&lt;br /&gt;
===== Incoming call is hung-up =====&lt;br /&gt;
This happens when the script returns no routes (in which case base_routing will raise RoutingException with cause :no_route).&lt;br /&gt;
&lt;br /&gt;
It also happens when the script explicitly raises RoutingException.&lt;br /&gt;
&lt;br /&gt;
The incoming call will be terminated with the specified cause.&lt;br /&gt;
For example&lt;br /&gt;
    raise RoutingException, :temporary_failure&lt;br /&gt;
(See &amp;quot;Reason values&amp;quot; section in this page for list of available causes)&lt;br /&gt;
&lt;br /&gt;
===== Do nothing (wait for the incoming call to hang-up) =====&lt;br /&gt;
If a filter raises RoutingException with code :ok, then the incoming call will not be terminated at the end of the announcement play.&lt;br /&gt;
Announcement digit collection will remain active if appropriate.&lt;br /&gt;
For example:&lt;br /&gt;
    raise RoutingException, :ok&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ring_tone  ===&lt;br /&gt;
  params[:bridge][:ring_tone] = &amp;quot;ringing.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call while waiting for the outgoing call to be answered.&lt;br /&gt;
&lt;br /&gt;
Ring tone playback can also be configured in the Web Portal, from the incoming call's profile (under &amp;quot;Tones and Call Progress Options&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Routing script has precedence over profile (a routing script that fills params[:bridge][:ring_tone] will override the profile's ring tone behavior).&lt;br /&gt;
&lt;br /&gt;
==== ring_tone options ====&lt;br /&gt;
===== ring_tone_state =====&lt;br /&gt;
  params[:bridge][:ring_tone_state] = :alerted&lt;br /&gt;
&lt;br /&gt;
Call state from which ring tone is being played. Available values are:&lt;br /&gt;
* '''immediately''':  Ring tone starts playing immediately on the incoming leg&lt;br /&gt;
* '''accepted''':     Ring tone starts playing as soon as outgoing call is accepted&lt;br /&gt;
* '''callprogress''': Ring tone starts playing as soon as &amp;quot;call progress&amp;quot; is received on the outgoing call&lt;br /&gt;
* '''alerted''' (default):      Ring tone starts playing only once outgoing call is alerted (but won't play if alert indicates early media from outgoing call)&lt;br /&gt;
&lt;br /&gt;
This option also apply when params[:bridge][:ring_tone] is not used, because it also apply to ring tone playback configured in the Web Portal, from the incoming call's profile.&lt;br /&gt;
&lt;br /&gt;
=== busy_tone  ===&lt;br /&gt;
  Toolpack 2.8 and above:&lt;br /&gt;
    params[:bridge][:busy_tone] = &amp;quot;no_route.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Note: Obsolete name (toolpack 2.7.153 and earlier, but still supported in recent releases):&lt;br /&gt;
    params[:bridge][:call_progress_tone] = &amp;quot;no_route.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call when outgoing call fails (never answered).&lt;br /&gt;
&lt;br /&gt;
Note that announcement_tone, if used, is played before the outgoing call attempt is made, and thus before the busy_tone.&lt;br /&gt;
&lt;br /&gt;
Busy tone playback can also be configured in the Web Portal, from the incoming call's profile (under &amp;quot;Tones and Call Progress Options&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Routing script has precedence over profile (a routing script that fills params[:bridge][:busy_tone] will override the profile's busy tone behavior).&lt;br /&gt;
&lt;br /&gt;
Special value '''&amp;quot;none&amp;quot;''' can be used by routing script to force playing nothing (as empty string would default to profile's behavior)&lt;br /&gt;
&lt;br /&gt;
==== busy_tone options ====&lt;br /&gt;
===== busy_tone_answer =====&lt;br /&gt;
  params[:bridge][:busy_tone_answer] = &amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Forces an answer of the call before playing the busy tone. Default if argument not provided is &amp;quot;no&amp;quot;, in which case call is only alerted with in-band media.&lt;br /&gt;
&lt;br /&gt;
=== disconnect_tone  ===&lt;br /&gt;
  params[:bridge][:disconnect_tone] = &amp;quot;max_duration.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call when call duration (:max_call_duration) is reached. Then the leg will be terminated with specified reason (:call_duration_reason).&lt;br /&gt;
&lt;br /&gt;
==== disconnect_tone options ====&lt;br /&gt;
===== max_call_duration  =====&lt;br /&gt;
  params[:bridge][:max_call_duration] = &amp;quot;60000&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Maximum call duration in millisecond. This timer is started when entering answer state.&lt;br /&gt;
&lt;br /&gt;
===== call_duration_reason  =====&lt;br /&gt;
  params[:bridge][:call_duration_reason] =&amp;amp;nbsp;:resource_unavailable &lt;br /&gt;
&lt;br /&gt;
Drop both legs with this reason when call duration (:max_call_duration) is reached.&lt;br /&gt;
&lt;br /&gt;
=== Managing audio prompts through Web Portal ===&lt;br /&gt;
Audio prompts can be uploaded or deleted from the TMedia unit through the Web Portal:&lt;br /&gt;
[[Toolpack:Configuring_Audio_Prompts_A|Managing audio prompts]]&lt;br /&gt;
&lt;br /&gt;
Prompts management must be done using the Web Portal of the primary server (in systems with redundant TMedia units or redundant host servers).&lt;br /&gt;
The file will automatically get replicated to the secondary server.&lt;br /&gt;
&lt;br /&gt;
=== Managing audio prompts manually ===&lt;br /&gt;
Any file on the TMedia host file system can be played. This means it's possible to manage prompts through ssh/scp.&lt;br /&gt;
&lt;br /&gt;
==== The default (replicated) prompts folder ====&lt;br /&gt;
By default, when playing a prompt, Toolpack will look in the default prompts folder:&lt;br /&gt;
 /lib/tb/toolpack/pkg/prompts&lt;br /&gt;
The root of this &amp;quot;prompts&amp;quot; directory is automatically replicated to secondary unit of redundant setups (1+1, N+1, redundant hosts). Sub-folders won't be replicated.&lt;br /&gt;
&lt;br /&gt;
Any prompt play request without explicit file path will map to this folder. For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /lib/tb/toolpack/pkg/prompts/no_route.wav&lt;br /&gt;
&lt;br /&gt;
==== Relative file paths ====&lt;br /&gt;
Any file path that begins with &amp;quot;file://&amp;quot; is considered relative to the tbstreamserver application's working directory:&lt;br /&gt;
 /lib/tb/toolpack/setup/12358/2.8/apps/tbstreamserver/&lt;br /&gt;
(Where &amp;quot;2.8&amp;quot; may be replaced by the current major version of your system)&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;file://my_folder/no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /lib/tb/toolpack/setup/12358/2.8/apps/tbstreamserver/my_folder/no_route.wav&lt;br /&gt;
&lt;br /&gt;
==== Absolute file paths ====&lt;br /&gt;
Absolute paths can also be provided.&lt;br /&gt;
For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;file:///root/my_folder/no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /root/my_folder/no_route.wav&lt;br /&gt;
&lt;br /&gt;
== Recording call legs  ==&lt;br /&gt;
Introduced in release 2.6.44, it's now possible to use routing scripts to ask for recording incoming and/or outgoing call legs.&lt;br /&gt;
&lt;br /&gt;
See example filter script &amp;quot;call_recording&amp;quot; (created by default in Web Portal routing scripts starting with 2.6.44) for an example.&lt;br /&gt;
&lt;br /&gt;
=== Recording the incoming call leg  ===&lt;br /&gt;
To record the incoming call leg, the routing script (in a &amp;quot;after filter&amp;quot; for example) has to set the following parameter:&lt;br /&gt;
&lt;br /&gt;
  bridge[ :record_incoming ]  = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Recording the outgoing call leg  ===&lt;br /&gt;
To record the outgoing call leg, the routing script (in a &amp;quot;after filter&amp;quot; for example) has to set the following parameter, per route (the decision to record or not, or the file name to record to, can be set per matching route):&lt;br /&gt;
&lt;br /&gt;
  # Need to clone the routes in order to have the right to modify them&lt;br /&gt;
  routes = clone_routes params[:routes]&lt;br /&gt;
  routes.each do |route|&lt;br /&gt;
    route[ :record_outgoing ]  = &amp;quot;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  # Store modified routes back to the parameters for this outgoing call&lt;br /&gt;
  params[:routes] = routes&lt;br /&gt;
&lt;br /&gt;
=== Record the outgoing call leg within incoming leg's recorded file (mixing)  ===&lt;br /&gt;
  [...]&lt;br /&gt;
    route[ :record_outgoing ]  = &amp;quot;@{MixWithIncoming}&amp;quot;&lt;br /&gt;
  [...]&lt;br /&gt;
&lt;br /&gt;
=== Choosing file path to record to  ===&lt;br /&gt;
The value assigned to &amp;quot;:record_incoming&amp;quot; or &amp;quot;:record_outgoing&amp;quot; is the path to record the file to.&lt;br /&gt;
&lt;br /&gt;
The paths can be absolute, or relative. When relative, they are relative to the &amp;quot;tbstreamserver&amp;quot; application working directory, for example:&lt;br /&gt;
  /lib/tb/toolpack/setup/12358/2.7/apps/tbstreamserver/&lt;br /&gt;
&lt;br /&gt;
* Empty file name will default to a name that contains various information about the call:&lt;br /&gt;
** ''LinkId'':     Id common between all legs of this call bridge&lt;br /&gt;
** ''LegId'':      Unique Id for this leg&lt;br /&gt;
** ''Nap'':        Current NAP name this call leg is from&lt;br /&gt;
** ''Direction'':  &amp;quot;IN&amp;quot; or &amp;quot;OUT&amp;quot; (depends if call leg is incoming or outgoing leg)&lt;br /&gt;
** ''Calling'':    The calling number of this call leg&lt;br /&gt;
** ''Called'':     The called number of this call leg&lt;br /&gt;
** ''Protocol'':   The signaling protocol of this call leg (SS7, ISDN, CAS, SIP)&lt;br /&gt;
** ''Media info'': Codec + IP/Port for SIP calls, Trunk/Timeslot for TDM calls&lt;br /&gt;
* To record outgoing call leg in the same audio file as incoming call leg (mixing), use the following:&lt;br /&gt;
** @{MixWithIncoming}: Record outgoing legs in same file as incoming legs&lt;br /&gt;
* Variables can be used to insert in the recording path information that's not already available from routing scripts:&lt;br /&gt;
** @{CURRENT_PKG}: Version of current package&lt;br /&gt;
*** Example: 2.6.45&lt;br /&gt;
** @{DATE format}: Prints the date, where 'format' is expressed as described for the 'strftime' function&lt;br /&gt;
*** Example: @{DATE %Y-%m-%d} =&amp;gt; 2013-01-28&lt;br /&gt;
** @{DefaultName}: Replaced by the default file name for recording, which contains:&lt;br /&gt;
*** LinkId:     Id common between all legs of this call bridge&lt;br /&gt;
*** LegId:      Unique Id for this leg&lt;br /&gt;
*** Nap:        Current NAP name this call leg is from&lt;br /&gt;
*** Direction:  &amp;quot;IN&amp;quot; or &amp;quot;OUT&amp;quot; (depends if call leg is incoming or outgoing leg)&lt;br /&gt;
*** Calling:    Calling number&lt;br /&gt;
*** Called:     Called number&lt;br /&gt;
*** Protocol:   Protocol type of this call (SS7, ISDN, CASR2, SIP)&lt;br /&gt;
*** Media info: Codec + IP/Port for SIP calls, Trunk/Timeslot for TDM calls&lt;br /&gt;
*** Example: &amp;quot;73EBA698-F3D67B4B-NAP_SS7-IN-5550000-5550001-SS7-TRUNK_BELL_11-24.wav&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;73EBA698-73EBA698-NAP_SIP-OUT-5550000-5550001-SIP-G723-10.3.10.101-1050.wav&amp;quot;&lt;br /&gt;
** @{DefaultPath}:  Default recording folder and file name: &amp;quot;@{RECORD_PATH}/@{DATE %Y-%m-%d}/@{DefaultName}&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;/lib/tb/toolpack/setup/12358/recorded_calls/73EBA698-F3D67B4B-NAP_SS7-IN-5550000-5550001-SS7-TRUNK_BELL_11-24.wav&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;/lib/tb/toolpack/setup/12358/recorded_calls/73EBA698-73EBA698-NAP_SIP-OUT-5550000-5550001-SIP-G723-10.3.10.101-1050.wav&amp;quot;&lt;br /&gt;
** @{Direction}: Direction of current leg (IN our OUT)&lt;br /&gt;
*** Example: IN&lt;br /&gt;
** @{LegId}: Current LegId (Unique Id for this leg)&lt;br /&gt;
*** Example: F3D67B4B&lt;br /&gt;
** @{LinkId}: Current LinkId (Id common between all legs of this call bridge)&lt;br /&gt;
*** Example: 73EBA698&lt;br /&gt;
** @{PKG_HOME}: Path where packages are stored.&lt;br /&gt;
*** Note: It's not recomended to use that path on redundant systems, package file replication may cause confusion in recorded files.&lt;br /&gt;
*** Example: /lib/tb/toolpack/pkg&lt;br /&gt;
** @{PROMPT_PATH}: Default path where audio prompts are stored&lt;br /&gt;
*** Note: It's not recomended to use that path on redundant systems, package file replication may cause confusion in recorded files.&lt;br /&gt;
*** Example: /lib/tb/toolpack/pkg/prompts&lt;br /&gt;
** @{Protocol}: Protocol of current leg&lt;br /&gt;
*** Example: SS7&lt;br /&gt;
** @{RECORD_PATH}: Default recording folder: &amp;quot;@{TB_SETUP_HOME}/recorded_calls/&amp;quot;&lt;br /&gt;
** @{TBX_GW_PORT}: Current &amp;quot;System Id&amp;quot; (also called &amp;quot;Gateway Port&amp;quot;)&lt;br /&gt;
*** Example: 12358&lt;br /&gt;
** And all variables listed here: [[Customer_application_framework:play_audio_files#Helpful_variables_to_build_play_or_record_file_paths|Building play or record file path]]&lt;br /&gt;
&lt;br /&gt;
== Controlling UUI (user-to-user information) relay  ==&lt;br /&gt;
UUI (user-to-user information) can be present in different messages received by either call leg during a call. For example, information can be carried during the initial invite, other information can be carried when the call is alerted, answered, or terminated.&lt;br /&gt;
&lt;br /&gt;
Routing scripts can control if the UUI received from one leg through the call will be forwarded to the other call leg:&lt;br /&gt;
*uui_forward_enabled&lt;br /&gt;
&lt;br /&gt;
Routing scripts can also read and modify the UUI received with the incoming call leg, before it gets forwarded upon creation of the outgoing call leg:&lt;br /&gt;
*uui &lt;br /&gt;
&lt;br /&gt;
=== UUI (user-to-user indication) values  ===&lt;br /&gt;
&lt;br /&gt;
Byte array represented as ruby String. Use ''bridge=params[:bridge]'', then ''bridge[:uui]'' to access the data.&lt;br /&gt;
&lt;br /&gt;
To access the bytes in Ruby, use ruby String operator []. For example:  bridge[:uui][0] will return the binary value of the first UUI byte.&lt;br /&gt;
&lt;br /&gt;
Function each_byte can also be useful to iterate through all bytes of the UUI.&lt;br /&gt;
&lt;br /&gt;
=== uui_forward_enabled values  ===&lt;br /&gt;
&lt;br /&gt;
Controls forwarding or discarding of UUI to outgoing call leg. &lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true.&lt;br /&gt;
* 0/false: UUI is not forwarded between call legs&lt;br /&gt;
* 1/true: UUI is forwarded between call legs&lt;br /&gt;
&lt;br /&gt;
The value for this parameter at input of routing script depends on the &amp;quot;Forward UUI&amp;quot; parameter in the &amp;quot;Advanced&amp;quot; section of the Gateway configuration page of the Web Portal. The script may change this value to override the Gateway configuration.&lt;br /&gt;
&lt;br /&gt;
== Authorization ==&lt;br /&gt;
Starting with release 2.7, it is possible to issue RADIUS authorization requests from routing scripts. To do so, the params[:authorization] object must be filled with the required RADIUS attributes and [[#Refuse|an exception must be raised]] with reason :authorization_required.&lt;br /&gt;
&lt;br /&gt;
When the authorization is completed, the routing script is called again with the result. The params[:authorization] object will be filled with the RADIUS attributes from the response. The params[:authorization][:result] field will also contain a string indicating the result of the authorization:&lt;br /&gt;
&lt;br /&gt;
* ''accept'': The authorization was successful.&lt;br /&gt;
* ''reject'': The authorization was refused.&lt;br /&gt;
* ''challenge'': The authorization was challenged.&lt;br /&gt;
* ''timeout'': The authorization was not answered.&lt;br /&gt;
&lt;br /&gt;
== Call diversion options ==&lt;br /&gt;
It's possible to control the call flow when a call diversion information is received in the alerting state.&lt;br /&gt;
&lt;br /&gt;
Two fields are available: bridge[ :diversion ] and bridge[ :diversion_reason ]&lt;br /&gt;
&lt;br /&gt;
The internal release cause TOOLPACK_DIVERT_NOT_ALLOWED is used by gateway application to terminate both legs.&lt;br /&gt;
&lt;br /&gt;
  bridge[ :diversion ] = :allowed&lt;br /&gt;
The alert message will not be analyzed and the call will be progressed. Default behavior.&lt;br /&gt;
  bridge[ :diversion ] = :not_allowed&lt;br /&gt;
If the alert message indicates that the call is diverted, the call will be released no matter the In-band information to allow&lt;br /&gt;
early media.&lt;br /&gt;
  bridge[ :diversion ] = :not_allowed_w_early_media&lt;br /&gt;
The call will be released If the alert message indicates that the call is diverted with in-band information to allow early media.&lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;*&amp;quot;&lt;br /&gt;
If the diversion is not allowed, the gateway will drop the call for any redirecting reason. &lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;0,1,2&amp;quot;&lt;br /&gt;
or&lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;unknown,busy,no_reply&amp;quot;&lt;br /&gt;
If the diversion is not allowed, the redirecting reason will be analyzed and the call will only be dropped for the configured cases.&lt;br /&gt;
&lt;br /&gt;
See section [[Routing_script_tutorial:Mini_Development_Guide#Redirecting_number,_Original_Called_Number_and_Diversion_Reason|Redirecting number reason values]].&lt;br /&gt;
&lt;br /&gt;
== Call transfer requests ==&lt;br /&gt;
Toolpack allows that [[Call transfer]] requests are relayed from one leg to the other, or to process them locally (making another outgoing call to replace the call that requested the call transfer).&lt;br /&gt;
&lt;br /&gt;
If the chosen [[Call transfer]] mode is to process requests locally, upon reception of a call transfer request (SIP REFER or ISDN Facility), routing script will be called once again, to select the routes for the new outgoing call (call transfer target).&lt;br /&gt;
&lt;br /&gt;
=== How to route call transfer request ===&lt;br /&gt;
Routing of a call transfer request is done exactly like routing of a normal incoming call.&lt;br /&gt;
The routing script generally does not need any modification to support that.&lt;br /&gt;
&lt;br /&gt;
In some cases, the routing script may want to use information related to the transfer request to perform routing, or to insert information in the outgoing call leg.&lt;br /&gt;
Additional information is provided to the routing script, allowing routing decisions using information from the call transfer request (SIP REFER or ISDN Facility).&lt;br /&gt;
See below...&lt;br /&gt;
&lt;br /&gt;
=== params[ :call ] content during transfer request ===&lt;br /&gt;
When processing a call transfer request, the params[ :call ] hash contains the information from the inbound call (same as was passed to the routing script upon arrival of the inbound call)&lt;br /&gt;
 call = params[ :call ]          -&amp;gt; Information from original inbound call, with exception of call[ :called ]&lt;br /&gt;
&lt;br /&gt;
One exception (convenient because it allows a unmodified routing script to process call transfer request the same way as any other routing request):&lt;br /&gt;
 call[ :called ]                 -&amp;gt; Replaced by the called number from the call transfer request (also called &amp;quot;redirection number&amp;quot;)&lt;br /&gt;
Complementary information:&lt;br /&gt;
 call[ :original_called_number ] -&amp;gt; Contains the called number that was initially received from the incoming call, prior to call transfer request&lt;br /&gt;
 call[ :redirecting_number ]     -&amp;gt; Number of the call from which the call transfer request was received (generally equals to original_called_number)&lt;br /&gt;
&lt;br /&gt;
These fields will also be included in the outgoing call made after routing:&lt;br /&gt;
* original called number and redirecting number are existing fields on SS7 and ISDN calls&lt;br /&gt;
* SIP &amp;quot;diversion&amp;quot; header is used for SIP calls&lt;br /&gt;
&lt;br /&gt;
=== params[ :transfer ] content ===&lt;br /&gt;
(this if valid only for release 2.7.102 and above)&amp;lt;br&amp;gt;&lt;br /&gt;
When processing a call transfer request, information from the call transfer request message (SIP REFER, ISDN Facility) is provided in params[ :transfer ]:&lt;br /&gt;
  transfer = params[ :transfer ]&lt;br /&gt;
The following field is always present:&lt;br /&gt;
  transfer[ :original_nap ]      -&amp;gt; Contains the NAP of the first call from which a call transfer request was received&lt;br /&gt;
  transfer[ :redirecting_nap ]   -&amp;gt; Contains the NAP of the call from which the current call transfer request was received&lt;br /&gt;
                                    (same as :original_nap for the first call transfer, different for subsequent transfers)&lt;br /&gt;
Examples of other fields that may be present, when appropriate:&lt;br /&gt;
  transfer[ :uui ]               -&amp;gt; The UUI (user-to-user information) found in the call transfer request&lt;br /&gt;
  transfer[ :sip_header ]        -&amp;gt; Contains custom SIP headers from the call transfer request&lt;br /&gt;
  transfer[ :request_uri ]       -&amp;gt; Contains the SIP Request URI&lt;br /&gt;
&lt;br /&gt;
These fields are 'read-only'. They will not be included in the outgoing call, as they represent the contents of the call transfer request, and not the outgoing call to be made.&lt;br /&gt;
&lt;br /&gt;
To insert/modify attributes of the outgoing call, the parameters from params[ :call ] must be edited instead.&lt;br /&gt;
&lt;br /&gt;
== Redirection ==&lt;br /&gt;
In release 2.8 and above, redirection contacts are obtained from the routing engine in the following format:&lt;br /&gt;
&lt;br /&gt;
  contacts = params[ :contacts ]&lt;br /&gt;
  contacts = {&lt;br /&gt;
      :index=&amp;gt;&amp;quot;3&amp;quot;,&lt;br /&gt;
      :list=&amp;gt;[&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6660&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6661&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6661@192.168.215.127&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6661@192.168.215.127&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6662&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6662@192.168.215.128&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6662@192.168.215.128&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6663&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6663@192.168.215.129&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6663@192.168.215.129&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6664&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6664@192.168.215.150&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6664@192.168.215.150&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
      ],&lt;br /&gt;
      :source_indexes=&amp;gt;&amp;quot;nil,0,0,0,2&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:list]&amp;lt;/code&amp;gt; contains the contact log. Each contact within the list has the following fields:&lt;br /&gt;
** &amp;lt;code&amp;gt;:called_number&amp;lt;/code&amp;gt; - the called number&lt;br /&gt;
** &amp;lt;code&amp;gt;:is_number_ported&amp;lt;/code&amp;gt; - if the called number has been ported (for SIP: if the npdi parameter is present)&lt;br /&gt;
** &amp;lt;code&amp;gt;:ported_number&amp;lt;/code&amp;gt; - the called number that was ported (for SIP: the rn parameter value, if available)&lt;br /&gt;
** &amp;lt;code&amp;gt;:sip_uri&amp;lt;/code&amp;gt; - the SIP URI of the contact, without the contact-params section (without the expires and q contact parameters)&lt;br /&gt;
** &amp;lt;code&amp;gt;:raw_data&amp;lt;/code&amp;gt; - the raw data representing the contact in the signaling protocol. For SIP, this is the full SIP URI (including the expires and q contact parameters).&lt;br /&gt;
** &amp;lt;code&amp;gt;:priority&amp;lt;/code&amp;gt; - the priority of the contact [0-1000]&lt;br /&gt;
** &amp;lt;code&amp;gt;:expiration&amp;lt;/code&amp;gt; - the expiration time in seconds of the contact&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:index]&amp;lt;/code&amp;gt; contains the index of the contact that is currently being routed.&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:source_indexes]&amp;lt;/code&amp;gt; contains a comma-separated list of indexes from &amp;lt;code&amp;gt;params[:contacts][:list]&amp;lt;/code&amp;gt;. Each index represents the contact from which the contact in the list was obtained from.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get more information, see:&lt;br /&gt;
*[[Routing_script_tutorial:SIP_Redirection_Contacts|SIP Redirection Contacts Parameters in a Call Flow]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Connected number ==&lt;br /&gt;
Insert a connected number in the answer message of the call flow.&lt;br /&gt;
&lt;br /&gt;
Routing script example:&lt;br /&gt;
    bridge = params[ :bridge ]&lt;br /&gt;
    bridge [ :connected_number ] = &amp;quot;3335577&amp;quot;&lt;br /&gt;
    bridge [ :connected_number_noa ] = :national_number&lt;br /&gt;
    bridge [ :connected_number_npi ] = :private&lt;br /&gt;
    bridge [ :connected_number_presentation ] = :allowed&lt;br /&gt;
    bridge [ :connected_number_screening ] = :pass&lt;br /&gt;
&lt;br /&gt;
== Terminating calls ==&lt;br /&gt;
In release 2.8, it is now possible to terminate a call through the routing scripts. The [[#Reason values|reason code]] must be specified in &amp;lt;code&amp;gt;params[:bridge][:reason]&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;:terminate&amp;lt;/code&amp;gt; hash must be created and copied into &amp;lt;code&amp;gt;params&amp;lt;/code&amp;gt;:&lt;br /&gt;
  terminate = {}&lt;br /&gt;
  params[:terminate] = terminate&lt;br /&gt;
The following fields can then be set in &amp;lt;code&amp;gt;:terminate&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;:sip_header&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:contacts&amp;lt;/code&amp;gt; # list of contacts as described in the [[#Redirection|redirection]] section&lt;br /&gt;
* &amp;lt;code&amp;gt;:isup_raw&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:isup_raw_variant&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_noa&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_npi&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_presentation&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_reason&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_counter&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_indicator&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_noa&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_npi&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_presentation&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_reason&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_counter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reason values  ==&lt;br /&gt;
&lt;br /&gt;
Check here for Termination Reason Cause codes:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Termination_cause_codes|Termination Reason Cause codes]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to refuse an incoming call leg.&lt;br /&gt;
  raise RoutingException, :no_route&lt;br /&gt;
&lt;br /&gt;
Reason cause strings available inside routing scripts:&lt;br /&gt;
&lt;br /&gt;
List of Q.850 reason causes:&lt;br /&gt;
  :unallocated_number&lt;br /&gt;
  :no_route_to_network&lt;br /&gt;
  :no_route_to_destination&lt;br /&gt;
  :send_special_tone&lt;br /&gt;
  :misdialled_trunk_prefix&lt;br /&gt;
  :channel_unacceptable&lt;br /&gt;
  :call_awarded_in_established_channel&lt;br /&gt;
  :preemption&lt;br /&gt;
  :reattempt&lt;br /&gt;
  :qor_ported_number&lt;br /&gt;
  :normal_call_clearing&lt;br /&gt;
  :user_busy&lt;br /&gt;
  :no_user_responding&lt;br /&gt;
  :no_answer_from_user&lt;br /&gt;
  :subscriber_absent&lt;br /&gt;
  :call_rejected&lt;br /&gt;
  :number_changed&lt;br /&gt;
  :redirection&lt;br /&gt;
  :exchange_routing_error&lt;br /&gt;
  :non_selected_user_clearing&lt;br /&gt;
  :destination_out_of_order&lt;br /&gt;
  :address_incomplete&lt;br /&gt;
  :facility_rejected&lt;br /&gt;
  :response_to_status_enquiry&lt;br /&gt;
  :normal_unspecified&lt;br /&gt;
  :no_circuit_available&lt;br /&gt;
  :network_out_of_order&lt;br /&gt;
  :frame_mode_out_of_service&lt;br /&gt;
  :frame_mode_connection_operational&lt;br /&gt;
  :temporary_failure&lt;br /&gt;
  :switching_equipment_congestion&lt;br /&gt;
  :access_information_discarded&lt;br /&gt;
  :requested_circuit_not_available&lt;br /&gt;
  :precedence_call_blocked&lt;br /&gt;
  :resource_unavailable&lt;br /&gt;
  :quality_of_service_not_available&lt;br /&gt;
  :requested_facility_not_subscribed&lt;br /&gt;
  :outgoing_calls_barred&lt;br /&gt;
  :outgoing_calls_barred_within_cug&lt;br /&gt;
  :incoming_calls_barred&lt;br /&gt;
  :incoming_calls_barred_within_cug&lt;br /&gt;
  :bearer_cap_not_authorized&lt;br /&gt;
  :bearer_cap_not_available&lt;br /&gt;
  :inconsistency_access_info&lt;br /&gt;
  :service_not_available&lt;br /&gt;
  :bearer_cap_not_implemented&lt;br /&gt;
  :channel_type_not_implemented&lt;br /&gt;
  :requested_facility_not_implemented&lt;br /&gt;
  :only_restricted_digital_info&lt;br /&gt;
  :service_not_implemented&lt;br /&gt;
  :invalid_call_reference&lt;br /&gt;
  :channel_does_not_exist&lt;br /&gt;
  :call_identity_does_not_exist&lt;br /&gt;
  :call_identity_in_use&lt;br /&gt;
  :no_call_suspended&lt;br /&gt;
  :call_has_been_cleared&lt;br /&gt;
  :user_not_member_of_cug&lt;br /&gt;
  :incompatible_destination&lt;br /&gt;
  :non_existant_cug&lt;br /&gt;
  :invalid_transit_network&lt;br /&gt;
  :invalid_message_unspecified&lt;br /&gt;
  :mandatory_ie_missing&lt;br /&gt;
  :message_type_non_existent&lt;br /&gt;
  :message_not_compatible_with_call_state&lt;br /&gt;
  :ie_non_existent&lt;br /&gt;
  :invalid_ie_content&lt;br /&gt;
  :msg_not_compatible_with_call_state&lt;br /&gt;
  :recovery_on_timer_expiry&lt;br /&gt;
  :parameter_non_existent_passed_on&lt;br /&gt;
  :message_with_non_recognized_parameters_discarded&lt;br /&gt;
  :protocol_error&lt;br /&gt;
  :interworking_unspecified&lt;br /&gt;
&lt;br /&gt;
List of toolpack reason causes:&lt;br /&gt;
&lt;br /&gt;
  :toolpack_normal                       or :normal&lt;br /&gt;
  :toolpack_resource_error               or :resource_error&lt;br /&gt;
  :toolpack_timeout                      or :timeout&lt;br /&gt;
  :toolpack_no_route                     or :no_route&lt;br /&gt;
  :toolpack_call_collision               or :call_collision&lt;br /&gt;
  :toolpack_sync_drop                    or :sync_drop&lt;br /&gt;
  :toolpack_signaling_error              or :signaling_error&lt;br /&gt;
  :toolpack_locally_rejected             or :locally_rejected&lt;br /&gt;
  :toolpack_interface_not_available      or :interface_not_available&lt;br /&gt;
  :toolpack_reset_in_progress            or :reset_in_progress&lt;br /&gt;
  :toolpack_adapter_reject               or :adapter_reject&lt;br /&gt;
  :toolpack_missing_or_invalid_ie        or :missing_or_invalid_ie&lt;br /&gt;
  :toolpack_incoming_only                or :incoming_only&lt;br /&gt;
  :toolpack_system_configuration_changed or :system_configuration_changed&lt;br /&gt;
  :toolpack_resource_no_more_available   or :resource_no_more_available&lt;br /&gt;
  :toolpack_incompatible_media           or :incompatible_media&lt;br /&gt;
  :toolpack_resource_allocation_failed   or :resource_allocation_failed&lt;br /&gt;
  :toolpack_data_path_not_available      or :data_path_not_available&lt;br /&gt;
  :toolpack_local_congestion             or :local_congestion&lt;br /&gt;
  :toolpack_authorization_required       or :authorization_required&lt;br /&gt;
  :toolpack_call_divert_is_not_allowed   or :call_divert_is_not_allowed&lt;br /&gt;
&lt;br /&gt;
List of SIP reason causes:&amp;lt;br/&amp;gt;&lt;br /&gt;
Reason causes starting with a digit must use the following syntax (can't use : as prefix).&lt;br /&gt;
&lt;br /&gt;
  '300_multiple_choices'&lt;br /&gt;
  '301_moved_permanently'&lt;br /&gt;
  '302_moved_temporarily'&lt;br /&gt;
  '305_use_proxy'&lt;br /&gt;
  '380_alternative_service'&lt;br /&gt;
  '400_bad_request'&lt;br /&gt;
  '401_unauthorized'&lt;br /&gt;
  '402_payment_required'&lt;br /&gt;
  '403_forbidden'&lt;br /&gt;
  '404_not_found'&lt;br /&gt;
  '405_method_not_allowed'&lt;br /&gt;
  '406_not_acceptable'&lt;br /&gt;
  '407_proxy_authentication_required'&lt;br /&gt;
  '408_request_timeout'&lt;br /&gt;
  '409_conflict'&lt;br /&gt;
  '410_gone'&lt;br /&gt;
  '413_request_entity_too_large'&lt;br /&gt;
  '414_request_URI_too_long'&lt;br /&gt;
  '415_unsupported_media'&lt;br /&gt;
  '416_unsupported_URI_scheme'&lt;br /&gt;
  '420_bad_extension'&lt;br /&gt;
  '421_extension_required'&lt;br /&gt;
  '422_session_timer_too_small'&lt;br /&gt;
  '423_interval_too_brief'&lt;br /&gt;
  '429_referrer_identity_error'&lt;br /&gt;
  '480_temporary_unavailable'&lt;br /&gt;
  '481_call_or_transaction_does_not_exist'&lt;br /&gt;
  '482_loop_detected'&lt;br /&gt;
  '483_too_many_hops'&lt;br /&gt;
  '484_address_incomplete'&lt;br /&gt;
  '485_ambiguous'&lt;br /&gt;
  '486_busy_here'&lt;br /&gt;
  '487_request_terminated'&lt;br /&gt;
  '488_not_acceptable_here'&lt;br /&gt;
  '489_bad_event'&lt;br /&gt;
  '491_retry_after'&lt;br /&gt;
  '500_server_internal_error'&lt;br /&gt;
  '501_not_implemented'&lt;br /&gt;
  '502_bad_gateway'&lt;br /&gt;
  '503_service_unavailable'&lt;br /&gt;
  '504_server_timeout'&lt;br /&gt;
  '505_version_unsupported'&lt;br /&gt;
  '513_message_too_large'&lt;br /&gt;
  '600_busy_everywhere'&lt;br /&gt;
  '603_decline'&lt;br /&gt;
  '604_not_exist_anywhere'&lt;br /&gt;
  '606_not_acceptable'&lt;br /&gt;
&lt;br /&gt;
== Nap status  ==&lt;br /&gt;
&lt;br /&gt;
All the status fields of the NAPs are provided for use by the routing scripts. See the nap status provider for more details on which fields are available in the CEngineStatTransNap.hpp file. &lt;br /&gt;
&lt;br /&gt;
'''Notice:''' These values may change between major release. &lt;br /&gt;
&lt;br /&gt;
  Routing script call attribute name    Description&lt;br /&gt;
  --------------------------------------------------------------------------------------------&lt;br /&gt;
  &amp;quot;name&amp;quot;                                NAP name.&lt;br /&gt;
  &amp;quot;signaling_type&amp;quot;                      Signaling type (SS7, ISDN, CASR2, SIP)&lt;br /&gt;
  &amp;quot;profile&amp;quot;                             Profile name.&lt;br /&gt;
  &amp;quot;sip_destination_ip&amp;quot;                  Destination IP address.&lt;br /&gt;
  &amp;quot;sip_destination_port&amp;quot;                Destination IP port.&lt;br /&gt;
  &amp;quot;sip_transport_type&amp;quot;                  SIP transport type (:udp, :tcp, or :tls) (Toolpack 3.1 and more)&lt;br /&gt;
  &amp;quot;inst_incoming_call_cnt&amp;quot;              Instantaneous Count of incoming calls.&lt;br /&gt;
  &amp;quot;inst_outgoing_call_cnt&amp;quot;              Instantaneous Count of outgoing calls.&lt;br /&gt;
  &amp;quot;available_cnt&amp;quot;                       Number of available circuits or channels.&lt;br /&gt;
  &amp;quot;unavailable_cnt&amp;quot;                     Number of unavailable circuits or channels.&lt;br /&gt;
  &amp;quot;availability_percent&amp;quot;                Percentage of available circuits or channels.&lt;br /&gt;
  &amp;quot;usage_percent&amp;quot;                       Percentage of used circuits or channels.&lt;br /&gt;
  &amp;quot;unused_shared_percent&amp;quot;               Percentage of used circuits or channels of this NAP available to make new calls with (taking into account shared with other NAPs)&lt;br /&gt;
  &amp;quot;total_incoming_call_cnt&amp;quot;             Total Count of incoming calls.&lt;br /&gt;
  &amp;quot;global_asr_percent&amp;quot;                  Global calculated ASR percentage.&lt;br /&gt;
  &amp;quot;total_outgoing_call_cnt&amp;quot;             Total Count of outgoing calls.&lt;br /&gt;
  &amp;quot;last_24h_asr_percent&amp;quot;                Last 24 hours calculated ASR percentage.&lt;br /&gt;
  &amp;quot;last_24h_outgoing_call_cnt&amp;quot;          Last 24 hours outgoing calls.&lt;br /&gt;
  &amp;quot;current_hour_asr_percent&amp;quot;            Current hour calculated ASR percentage.&lt;br /&gt;
  &amp;quot;current_hour_outgoing_call_cnt&amp;quot;      Current hour outgoing calls.&lt;br /&gt;
  &amp;quot;last_hour_asr_percent&amp;quot;               Last hour calculated ASR percentage.&lt;br /&gt;
  &amp;quot;last_hour_outgoing_call_cnt&amp;quot;         Last hour outgoing calls.&lt;br /&gt;
  &amp;quot;poll_remote_proxy&amp;quot;                   Remote proxy polling enabled&lt;br /&gt;
  &amp;quot;is_available&amp;quot;                        Remote proxy actually available or not&lt;br /&gt;
  &amp;quot;time_since_polling&amp;quot;                  Time since the last availibility polling&lt;br /&gt;
  &amp;quot;time_available_seconds&amp;quot;              Number of seconds since the NAP is available&lt;br /&gt;
  &amp;quot;time_unavailable_seconds&amp;quot;            Number of seconds since the NAP is unavailable&lt;br /&gt;
  &amp;quot;register_to_proxy&amp;quot;                   Register to proxy enabled&lt;br /&gt;
  &amp;quot;registered&amp;quot;                          Actually registered or not&lt;br /&gt;
  &amp;quot;time_since_refresh&amp;quot;                  Time since the last refresh&lt;br /&gt;
  &amp;quot;time_registered_seconds&amp;quot;             Number of seconds since the NAP is registered&lt;br /&gt;
  &amp;quot;time_not_registered_seconds&amp;quot;         Number of seconds since the NAP is not registered&lt;br /&gt;
  &amp;quot;asr_stats_incoming_struct&amp;quot;           Detailed Answer-Seizure Rate incoming statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;global_asr_percent&amp;quot;                Global calculated ASR percentage.&lt;br /&gt;
    &amp;quot;total_call_cnt&amp;quot;                    Total count of calls.&lt;br /&gt;
    &amp;quot;total_accepted_call_cnt&amp;quot;           Total count of accepted calls (not dropped due to congestion or rate-limiting).&lt;br /&gt;
    &amp;quot;total_answered_call_cnt&amp;quot;           Total count of answered calls.&lt;br /&gt;
    &amp;quot;last_24h_asr_percent&amp;quot;              Last 24 hours calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_24h_call_cnt&amp;quot;                 Last 24 hours count of calls.&lt;br /&gt;
    &amp;quot;current_hour_asr_percent&amp;quot;          Current hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;current_hour_call_cnt&amp;quot;             Current hour count of calls.&lt;br /&gt;
    &amp;quot;last_hour_asr_percent&amp;quot;             Last hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_hour_call_cnt&amp;quot;                Last hour count of calls.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;asr_stats_outgoing_struct&amp;quot;           Detailed Answer-Seizure Rate outgoing statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;global_asr_percent&amp;quot;                Global calculated ASR percentage.&lt;br /&gt;
    &amp;quot;total_call_cnt&amp;quot;                    Total count of calls.&lt;br /&gt;
    &amp;quot;total_accepted_call_cnt&amp;quot;           Total count of accepted calls (not dropped due to congestion or rate-limiting).&lt;br /&gt;
    &amp;quot;total_answered_call_cnt&amp;quot;           Total count of answered calls.&lt;br /&gt;
    &amp;quot;last_24h_asr_percent&amp;quot;              Last 24 hours calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_24h_call_cnt&amp;quot;                 Last 24 hours count of calls.&lt;br /&gt;
    &amp;quot;current_hour_asr_percent&amp;quot;          Current hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;current_hour_call_cnt&amp;quot;             Current hour count of calls.&lt;br /&gt;
    &amp;quot;last_hour_asr_percent&amp;quot;             Last hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_hour_call_cnt&amp;quot;                Last hour count of calls.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;mos_struct&amp;quot;                          Detailed Mean Opinion Score statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;last_24h_ingress&amp;quot;                  Last 24 hours calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_24h_egress&amp;quot;                   Last 24 hours calculated MOS for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_ingress&amp;quot;              Current hour calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_egress&amp;quot;               Current hour calculated MOS for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_ingress&amp;quot;                 Last hour calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_egress&amp;quot;                  Last hour calculated MOS for outgoing RTP packets.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;network_quality_struct&amp;quot;              Detailed network quality statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;last_24h_ingress&amp;quot;                  Last 24 hours network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_24h_egress&amp;quot;                   Last 24 hours network quality percentage for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_ingress&amp;quot;              Current hour network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_egress&amp;quot;               Current hour network quality percentage for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_ingress&amp;quot;                 Last hour network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_egress&amp;quot;                  Last hour network quality percentage for outgoing RTP packets.&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; If the nap status is part of a substructure, the substructure will be a hash containing all subfield elements. &lt;br /&gt;
&lt;br /&gt;
Example to access the signaling type and the number of incoming call count for the NAP of the current call:&lt;br /&gt;
&lt;br /&gt;
   incoming_nap = params[:naps][ params[:call][ :nap ].to_sym]&lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP parameters=&amp;quot; + incoming_nap.inspect &lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP signaling type=&amp;quot; + incoming_nap[:signaling_type].inspect &lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP call cnt=&amp;quot; + incoming_nap[:asr_stats_incoming_struct][:total_call_cnt].inspect &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; It is also possible to add dynamic nap attributes in the web portal. These can be referenced by their name.&lt;br /&gt;
&lt;br /&gt;
== Telephony Services ==&lt;br /&gt;
In release 2.10 and the above, telephony services (CNAM Request) can be manage from the routing engine in the following format:&lt;br /&gt;
&lt;br /&gt;
  params[:telephony_services].each do |service|  -&amp;gt; Array of telephony services&lt;br /&gt;
    service[:name]                               -&amp;gt; Customer telephony service name&lt;br /&gt;
    service[:type]                               -&amp;gt; For now only &amp;quot;CNAM Request&amp;quot;&lt;br /&gt;
    service[:enabled]                            -&amp;gt; Indicate if the service is enabled (true) or not (false)&lt;br /&gt;
                                                    (Only the telephony service define in the profile associated to the NAP is enabled)&lt;br /&gt;
                                                    (The others telephony services define in others profiles are disabled)&lt;br /&gt;
                                                    (If we are in the case where we return in the routing script with a response, it is important to set :enabled to false in order to avoid repeating the same query)&lt;br /&gt;
    serviceParams = service[:params]&lt;br /&gt;
    serviceParams[:return_to_script]             -&amp;gt; Indicates to Gateway if we must return to the routing script after receiving the CNAM response&lt;br /&gt;
                                                    (It is important to set back to false this field to avoid an infinite loop)&lt;br /&gt;
    serviceQuery = service[:query]&lt;br /&gt;
    serviceQuery[:phone]                         -&amp;gt; 10 digits of calling number from the incoming call to send to the CNAM server&lt;br /&gt;
    serviceQuery[:timeout]                       -&amp;gt; Timeout in millisecond to wait a CNAM response from CNAM server&lt;br /&gt;
                                                    (Default value from profile configuration)&lt;br /&gt;
    serviceResponse = service[:response]&lt;br /&gt;
    serviceResponse[:success]                    -&amp;gt; Indicates if we received a good CNAM response from the CNAM Server (Only present if :return_to_script is set to true)&lt;br /&gt;
    serviceResponse[:caller_name]                -&amp;gt; The caller name received in the CNAM response from the CNAM Server (Only present if :return_to_script is set to true)&lt;br /&gt;
&lt;br /&gt;
== Custom user context ==&lt;br /&gt;
The routing script may '''save per-call information within the call context''', that will be available if routing is called again later during the call flow.&lt;br /&gt;
&lt;br /&gt;
Cases where routing is called multiple time for the same call are:&lt;br /&gt;
- Call transfer requests&lt;br /&gt;
- SIP redirect requests&lt;br /&gt;
- Radius Authorization result&lt;br /&gt;
- Announcement server with digit collection&lt;br /&gt;
&lt;br /&gt;
The routing script can save a recursive hash of attributes here:&lt;br /&gt;
  params[:user_context]&lt;br /&gt;
&lt;br /&gt;
For example&lt;br /&gt;
  params[:user_context] = { &amp;quot;SomeKey&amp;quot; =&amp;gt; &amp;quot;Some value I want to retrieve upon next routing for this call&amp;quot;, &amp;quot;OtherVal&amp;quot; =&amp;gt; { &amp;quot;subkey&amp;quot; =&amp;gt; &amp;quot;subval&amp;quot; } }&lt;br /&gt;
&lt;br /&gt;
Upon first call to routing script, params[:user_context] will be nil.&lt;br /&gt;
Upon subsequent calls to routing script, it will contain whatever the script had stored upon previous call (or nil if it was not set)&lt;br /&gt;
&lt;br /&gt;
Note: This feature is available starting from release 2.9.85, 2.10.31 and 3.0.15 (in respective branches 2.9, 2.10 or 3.0)&lt;br /&gt;
&lt;br /&gt;
== Routing Script Tests ==&lt;br /&gt;
The Web portal features a tool for Testing Scripts. The user must enter parameters to simulate the incoming call and after pressing the Test button, will output selected routes and numbers.  You do not need to activate the new routes, or the new scripts to use this test tool: It can be used to test the routing scripts and routing table before activating it.&lt;br /&gt;
This is available in the Routing Scripts section of the Web portal.&lt;br /&gt;
&lt;br /&gt;
=== Test parameters ===&lt;br /&gt;
==== @call_params  ====&lt;br /&gt;
&lt;br /&gt;
That variable should contain a hash of call parameters that will be passed to the routing script. This is equivalent to the incoming call parameters. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== @nap_list  ====&lt;br /&gt;
&lt;br /&gt;
A list of the hash containing the nap statuses. This is equivalent to the nap statuses at the time the call is to be routed. &lt;br /&gt;
&lt;br /&gt;
'''The nap list is hashed by the nap names in UPPERCASE.''' It is important to consider this when creating new dynamic route or nap attributes that may nap names that will be used to fetch a status. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== @params  ====&lt;br /&gt;
&lt;br /&gt;
A hash of hashes containing parameters. This hash contains bridge parameters and other kind of parameter groups may be added in the future. &lt;br /&gt;
&lt;br /&gt;
  @params = {&lt;br /&gt;
     :bridge =&amp;gt; {:announcement_tone, &amp;quot;announcement.wav&amp;quot;},&lt;br /&gt;
     :contacts =&amp;gt; {&lt;br /&gt;
       :index=&amp;gt;&amp;quot;1&amp;quot;,&lt;br /&gt;
       :list=&amp;gt;[&lt;br /&gt;
          {:called_number=&amp;gt;&amp;quot;6660&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;&amp;quot;,&lt;br /&gt;
           :raw_data=&amp;gt;&amp;quot;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
          {:called_number=&amp;gt;&amp;quot;6661&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6661@192.168.215.127&amp;quot;, &lt;br /&gt;
           :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6661@192.168.215.127&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
       ],&lt;br /&gt;
       :source_indexes=&amp;gt;&amp;quot;nil,0&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Back to [[Routing script tutorial|Routing Script Tutorial]].&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Routing_script_tutorial:Mini_Development_Guide</id>
		<title>Routing script tutorial:Mini Development Guide</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Routing_script_tutorial:Mini_Development_Guide"/>
				<updated>2019-04-30T13:48:30Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* Forwarding from inbound to outbound call */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Call object  ==&lt;br /&gt;
&lt;br /&gt;
=== Get  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to get the call parameters. The possible parameters are described in the section &amp;quot;Call parameters&amp;quot; &lt;br /&gt;
&lt;br /&gt;
  called_number = caf_call.get&amp;amp;nbsp;:called&lt;br /&gt;
&lt;br /&gt;
=== List_params  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to retrieve the list of supported call parameters. For example to extract all the possible call parameters from the the call object and put it in hash. &lt;br /&gt;
&lt;br /&gt;
  caf_call.list_params.each {|param| call[param] = caf_call.get param }&lt;br /&gt;
&lt;br /&gt;
=== Accept  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to accept a call.  It actually creates one outgoing route that the gateway application will use to bridge the incoming call leg.  If more than one outgoing route is &amp;quot;accepted&amp;quot;, the gateway will try them one by one in the same order that they were accepted.   If an outgoing call leg fails (according to 'route retry' parameters), the next route in line will be used.  &lt;br /&gt;
&lt;br /&gt;
This method takes 2 arguments, the call parameters (hash) and the route parameters (hash).  Note that calling this method does NOT stop the flow of the script.&lt;br /&gt;
&lt;br /&gt;
Apply route remapping rules &lt;br /&gt;
&lt;br /&gt;
  caf_call.accept out_call, route&lt;br /&gt;
&lt;br /&gt;
=== Refuse  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to set the reason code for the incoming call leg refusal.  However, this function does NOT stop the flow of the script. &lt;br /&gt;
&lt;br /&gt;
  caf_call.refuse&amp;amp;nbsp;:reason =&amp;amp;gt;&amp;amp;nbsp;:temporary_failure&lt;br /&gt;
&lt;br /&gt;
To immediately refuse the incoming call leg and stop processing the script, the script must raise an exception.  Exiting the script by raising the exception overwrites any reason cause previously stored using refuse().&lt;br /&gt;
&lt;br /&gt;
  raise RoutingException, :no_route&lt;br /&gt;
&lt;br /&gt;
The supported refusal cause values for both refuse() and raise() are described in the section &amp;quot;[[Routing_script_tutorial:Mini_Development_Guide#Reason_values|Reason values]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Script parameters protocol mapping  ===&lt;br /&gt;
&lt;br /&gt;
The following call parameters are available in the call object. For example:&lt;br /&gt;
&lt;br /&gt;
  called_number = call[:called]&lt;br /&gt;
&lt;br /&gt;
For information on how to use and remap call parameters, see [[Toolpack:_How_to_Use_RegEx_in_Remapped_Called_and_Calling_Number_Mask | How to use regex in Remapped Called and Calling Number Mask]]&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 921px; height: 805px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Script parameter name''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''ISDN&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''R2 CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SS7&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SIP&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Comment&amp;lt;br&amp;gt;'''&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Toolpack version&amp;lt;br&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| leg_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Leg ID&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| session_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Session ID&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_session_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Original Session ID (before call transfer or redirections)&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| ANI (Group B)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - address signals (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used (when present) instead.&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - host (domain or IP) &amp;lt;br&amp;gt; &lt;br /&gt;
|  For example : The 'telcobridges.com' in From: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - port &amp;lt;br&amp;gt; &lt;br /&gt;
|  For example : The '6060' in From: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_noa&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - nature of address indicator (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used (when present) instead&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - numbering plan indicator (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used&amp;amp;nbsp;(when present) instead&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_display &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Display' IE - Display information&amp;lt;br&amp;gt; &lt;br /&gt;
Q931: 'Facility CNAM' IE when presentation is allowed for DMS/NI2 variants&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763 &lt;br /&gt;
ITU97: 'Display information' IE - display information &lt;br /&gt;
ANSI95: 'Generic name' IE - display information &lt;br /&gt;
| SIP:From - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_display_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Display' IE - Display information (present and/or first byte)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Display information' IE - present or not&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Presentation indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - display-name (displays 'anonymous' or not) &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - privacy&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_screening&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Screening indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Remote-party-id - screen&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_category&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Call party category (Group A)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party's category' IE - calling party's category&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - cpc &lt;br /&gt;
&lt;br /&gt;
SIP:P-asserted-identity - cpc&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber &lt;br /&gt;
(Generic Number / NDS)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Number digits &amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - Number digits&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| Requires option 'support 2 calling number IE' in the profile.  This variable has priority over 'private_address' in the outgoing direction.&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_noa&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_presentation&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Presentation indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_screening &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Screening indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_display&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Facility CNAM' IE when presentation is restricted for DMS/NI2 variants&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_display_type &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Indicate presence or not of the private calling information&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The 'fluffy' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - host (domain or IP)&lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - host (domain or IP) &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The 'telcobridges.com' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - port&lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - port&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The '6060' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| DNIS (Group A)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - user-info and host&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - host &amp;lt;br&amp;gt; &lt;br /&gt;
| For example : The 'telcobridges.com' in To: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - port number &amp;lt;br&amp;gt; &lt;br /&gt;
| For example : The '6060' in To: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number_npi&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default redirecting number and original called number forwarding behavior from incoming to outgoing leg &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number'&amp;amp;nbsp;1st IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Presentation indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion&amp;amp;nbsp;(2nd header) - diversion-privacy&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirecting indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_reason &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Reason for redirection&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirecting reason&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - diversion-reason&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_counter &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirection counter&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - diversion-counter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number &lt;br /&gt;
(OCN) &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion&amp;amp;nbsp; (1st header) - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Presentation indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-privacy&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_reason &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Reason for redirection&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - original redirection reason&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-reason&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_counter &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-counter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_npdi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - with qualifier=Ported number is present&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:RequestURI - npdi=yes is present&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - address signals with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:RequestURI - to user part when rn is present&amp;lt;br&amp;gt; &lt;br /&gt;
| rn is stored in the called number&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - nature of address indicator with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - numbering plan indicator with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| oli&lt;br /&gt;
(Originating line information) &amp;lt;br&amp;gt; &lt;br /&gt;
| 5ESS Codeset 6 OLI - Value&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Originating line information' IE - OLI&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - oli &lt;br /&gt;
&lt;br /&gt;
SIP:P-asserted-identity - oli&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| request_uri &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Complete Request URI string&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| request_uri_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default URI&amp;amp;nbsp;forwarding behavior from incoming to outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_header&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Any header&amp;lt;br&amp;gt; &lt;br /&gt;
| Requires option 'Forward custom headers' in Profiles-&amp;gt;SIP &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7.63&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| nap&lt;br /&gt;
(Network Access Point) &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg NAP name (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| type_of_network_identification&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Type of network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Type of network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| network_identification&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| SIP: Request-Line - cic&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| network_identification_plan&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Network identification plan &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Network identification plan &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default location number forwarding behavior from incoming to outgoing leg &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_presentation&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_screening &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| A script needs to set this to true if it wants to overwrite MLPP information in the outgoing leg.  Otherwise, profile relay 'outgoing mode' applies automatically.&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_look_for_busy &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - look ahead for busy&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_precedence_level &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - precedence level&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Resource-Priority - q735&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_network_identity &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - network identity&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_service_domain&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - MLPP service domain&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_isub &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party subaddress' IE - subaddress information&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - isub parameter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_isub_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party subaddress' IE - type of subaddress&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - isub-encoding parameter&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_isub &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party subaddress' IE - subaddress information&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - isub&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_isub_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Callinf party subaddress' IE - type of subaddress&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - isub-encoding&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_fci_default &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Default forward call indicator (FCI) value.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will overwrite FCI bits A, D, F, I and M with appropriate values according to call conditions&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_fci_force_mask &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Mask to select bits from ss7_fci_default that must be forced.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Bits from ss7_fci_default which corresponding bit in ss7_fci_force_mask is set will be forced, and no more controlled by Toolpack&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_bci_default &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Default backward call indicator (BCI) value.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will overwrite BCI bits AB, I, K, M and N with appropriate values according to call conditions&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_bci_force_mask &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Mask to select bits from ss7_bci_default that must be forced.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Bits from ss7_bci_default which corresponding bit in ss7_bci_force_mask is set will be forced, and no more controlled by Toolpack&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ls_name_forward_enabled&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| Enable line service and timeslot selection to create the outgoing leg&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.0&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ls_name&lt;br /&gt;
(Line Service or T1/E1 trunk) &amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| if tdm_ls_name_forward_enabled is set, try to use this line service name to create outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_timeslot_nb&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| if tdm_ls_name_forward_enabled is set, try to use this timeslot number to create outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_local_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SDP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_local_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SDP IP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_remote_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SDP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_remote_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SDP IP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_cot_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Requests SS7 in-call continuity test for this outgoing SS7 call&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will request a continuity test on the timeslot before making the outgoing call. If COT fails, the call will be dropped (then another route may be attempted)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reverse_charging_indication&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg Reverse charging indication IE present&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| If set in routing script, will add Reverse charging indication IE in outgoing leg (also use reverse_charging_indication_forward_enabled)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.12&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reverse_charging_indication_forward_enabled&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Enable forwarding of reverse charging indication from incoming to outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.12&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_call_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg SIP Call-Id&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.9.112 / 3.0.131&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_local_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SIP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_local_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SIP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_remote_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SIP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_remote_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SIP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noa values  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown_number (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number (0x4)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number (0x3)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;subscriber_number (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_specific (0x5)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_routing_national_format (0x7)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_routing_international_format (0x8)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;abbreviated_number (0x6)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;subscriber_number_operator_requested (0x71)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number_operator_requested (0x72)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number_operator_requested (0x73)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_number_present_operator_requested (0x74)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_number_present_cut_through_call_to_carrier (0x75)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;test_line_test_code (0x77)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_subscriber_number (0x71)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_national_number (0x73)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_international_number (0x74)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_950_numbe (0x76)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;special_number (0x73)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number_with_transit_network_selection (0x74)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number_with_transit_network_selection (0x75)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Those values will be remapped to the protocol specific NOA value. To provide protocol specific value: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:called_noa] = 0x70&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:called_noa] = 112&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Npi values  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown_number&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;isdn&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;telephony&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;data&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;telex&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Display Type values  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; =&amp;amp;gt; Type is unspecified. &lt;br /&gt;
*&amp;lt;tt&amp;gt;calling_party_name&amp;lt;/tt&amp;gt; =&amp;amp;gt; Type is 0xB1.&lt;br /&gt;
&lt;br /&gt;
Those values will be remapped to the protocol specific Display Information Type value. To provide protocol specific value: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display_type] = 0xB1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display_type] = 177&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Display value  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display] = &amp;quot;Roger Fluffy&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Presentation values for Calling number, Calling Subscriber (Generic Number), Redirecting Number, Original Called Number (OCN) and Location Number ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;not_available (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;allowed (0x0)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;restricted (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;addr_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;name_restricted&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Party Category  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
In case it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mapping from routing script to SS7/CAS R2/SIP&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Routing Script string &amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SS7 raw value &amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''R2 CAS scripts'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Default Rx CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''default Tx CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SIP &amp;quot;cpc=&amp;quot;  &amp;lt;br&amp;gt;''' &lt;br /&gt;
|-&lt;br /&gt;
| subscriber&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xa&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_SUBSCRIBER &amp;lt;br&amp;gt; &lt;br /&gt;
| 1 and 7&amp;lt;br&amp;gt; &lt;br /&gt;
| 7&amp;lt;br&amp;gt; &lt;br /&gt;
| ordinary&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| subscriber_with_priority&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xb&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_SUBSCRIBER_WITH_PRIORITY &amp;lt;br&amp;gt; &lt;br /&gt;
| 2 and 9 &amp;lt;br&amp;gt; &lt;br /&gt;
| 2 &amp;lt;br&amp;gt; &lt;br /&gt;
| priority&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_french&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x1&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_FRENCH &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_english&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x2&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_ENGLISH (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_german&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x3&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_GERMAN (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_russian&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x4&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_RUSSIAN (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_spanish &amp;lt;br&amp;gt; &lt;br /&gt;
| 0x5&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_SPANISH (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| data&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xc&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_DATA &amp;lt;br&amp;gt; &lt;br /&gt;
| 6 and 8&amp;lt;br&amp;gt; &lt;br /&gt;
| 6 &amp;lt;br&amp;gt; &lt;br /&gt;
| datacall&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| test&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xd&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_TEST &amp;lt;br&amp;gt; &lt;br /&gt;
| 3 &amp;lt;br&amp;gt; &lt;br /&gt;
| 3 &amp;lt;br&amp;gt; &lt;br /&gt;
| test&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| payphone &amp;lt;br&amp;gt; &lt;br /&gt;
| 0xf&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_PAYPHONE &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| 7 &amp;lt;br&amp;gt; &lt;br /&gt;
| payphone&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| unknown &amp;lt;br&amp;gt; &lt;br /&gt;
| 0x0 &amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_UNKNOWN&amp;lt;br&amp;gt; &lt;br /&gt;
| 4, 11 to 15&amp;lt;br&amp;gt; &lt;br /&gt;
| 7 &amp;lt;br&amp;gt; &lt;br /&gt;
| unknown&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| unspecified &amp;lt;br&amp;gt; &lt;br /&gt;
| 0xa &amp;lt;br&amp;gt; &lt;br /&gt;
| invalid &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| invalid &amp;lt;br&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
[[CAS_R2_scripting#Category_meanings|Link to calling party categories used in CAS R2 scripts]]&lt;br /&gt;
&lt;br /&gt;
=== Screening values for Calling number, Calling Subscriber (Generic Number), and Location Number  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no (0x0)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;pass (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;fail (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_provided (0x3)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redirecting indicator values  ===&lt;br /&gt;
&lt;br /&gt;
SS7: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;no_redirection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted_all_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted_all_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted_restricted&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;spare&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redirecting number, Original Called Number and Diversion Reason ===&lt;br /&gt;
&lt;br /&gt;
ISDN: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;busy&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_reply&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;dte_out_of_order&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;forwarding_by_called_dte&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;unconditional&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SS7: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;busy      (SIP: user-busy)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_reply  (SIP: no-answer)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;unconditional&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection_immediate&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;mobile_not_reachable&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OLI (originating line information) values  ===&lt;br /&gt;
&lt;br /&gt;
The OLI parameter is a string that represents an integer value from 0 to 255. &lt;br /&gt;
&lt;br /&gt;
=== Information Transfer Capability values  ===&lt;br /&gt;
&lt;br /&gt;
information_transfer_capability: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;digital&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;restricted_digital&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;digital_with_tones&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;speech&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;3_1_khz_audio&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;video&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== redirecting_number_forward_enabled values  ===&lt;br /&gt;
&lt;br /&gt;
Controls forwarding or discarding of redirecting number (SIP: diversion header) to the outgoing call leg. &lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true. &lt;br /&gt;
*0/false: Redirecting number (and original called number) is not forwarded to outgoing call leg&lt;br /&gt;
*1/true: Redirecting number (and original called number) is forwarded to outgoing call leg&lt;br /&gt;
&lt;br /&gt;
The value for this parameter at the input of the routing script depends on the &amp;quot;Forward redirecting number&amp;quot; parameter in the &amp;quot;Advanced&amp;quot; section of the Gateway configuration page of the Web Portal. The script may change this value to override the Gateway configuration.&lt;br /&gt;
&lt;br /&gt;
Note: To &amp;quot;insert&amp;quot; a new redirecting number value on the outgoing leg, redirecting_number_forward_enabled must also be set to true.&lt;br /&gt;
&lt;br /&gt;
=== request_uri  ===&lt;br /&gt;
&lt;br /&gt;
Enables access to the Request-Line URI.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For example, if the Request-Line is: &lt;br /&gt;
&amp;lt;pre&amp;gt;Request-Line: INVITE sip:4175162082@172.22.45.13:5060;user=phone;transport=udp SIP/2.0&amp;lt;/pre&amp;gt; &lt;br /&gt;
Then the retrieved request_uri will be &amp;quot;sip:4175162082@172.22.45.13:5060;user=phone;transport=udp SIP/2.0&amp;quot;. &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
In the routing scripts, to retrieve only the called number, this script can be used:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;    if call_params[:request_uri] &amp;amp;amp;&amp;amp;amp; call_params[:request_uri] =~ /sip:(.*)@.*/&lt;br /&gt;
       call_params[:called] = $1&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
==== request_uri_forward_enabled ====&lt;br /&gt;
&lt;br /&gt;
This call parameter controls forwarding or discarding of request uri to outgoing call leg.The request uri is the information in the &amp;quot;Request-Line:&amp;quot; of the SIP INVITE message.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true. &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 0/false: Request uri is not forwarded to outgoing call leg &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 1/true: Request uri is forwarded to outgoing call leg &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The default value for this parameters is false. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== sip_scheme  ====&lt;br /&gt;
(Available in Toolpack 3.1+)&lt;br /&gt;
This call parameters indicates the scheme (generally &amp;quot;sip&amp;quot; or &amp;quot;sips&amp;quot;) of the incoming call.&lt;br /&gt;
&lt;br /&gt;
This also allows to control the scheme used for the outgoing call (regardless if request_uri_forward_enabled is used or not)&lt;br /&gt;
&lt;br /&gt;
Note: sips scheme must only be used on TLS NAPs (will cause call routing failure if NAP has only UDP or TCP transport types).&lt;br /&gt;
&lt;br /&gt;
=== sip_header values  ===&lt;br /&gt;
Contains custom sip headers from the inbound call leg. Any custom sip header can be added to an outgoing call leg:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
The  SIP header is in string format.&lt;br /&gt;
&lt;br /&gt;
'''string format:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;call[ :sip_header ] = &amp;quot;P-my-custom-header:value1 \nP-my-custom-header2:value2 \nP-my-custom-header3:value3&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Note: \n above are actual newline characters, not '\' followed by 'n')&lt;br /&gt;
&lt;br /&gt;
* PCAP sample: [[File:TB_Custom_SIP_Headers.pcap]]&lt;br /&gt;
&lt;br /&gt;
List of sip headers that will not appear in call[:sip_header] since they are already processed by the SIP stack:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Accept               Error-Info             Remote-Party-ID      &lt;br /&gt;
Accept-Contact       Event                  Replaces                        &lt;br /&gt;
Accept-Encoding      Expires                Reply-To               &lt;br /&gt;
Accept-Language      From                   Request-Disposition    &lt;br /&gt;
Alert-Info           In-Reply-To            Subject          &lt;br /&gt;
Allow                Max-Forwards           Subscription-State  &lt;br /&gt;
Allow-Events         MIME-version           Supported           &lt;br /&gt;
Also                 Min-Expires            Timestamp           &lt;br /&gt;
Anonymity            Min-SE                 To             &lt;br /&gt;
Authorization        Organization           Unsupported  &lt;br /&gt;
Authentication-Info  Path                   User-Agent  &lt;br /&gt;
Call-ID              Priority               Via  &lt;br /&gt;
Call-Info            Privacy                Warning  &lt;br /&gt;
Contact              Proxy-Authenticate     WWW-Authenticate  &lt;br /&gt;
Content-Disposition  Proxy-Authorization    Require  &lt;br /&gt;
Content-Encoding     Proxy-Require          Response-Key  &lt;br /&gt;
Content-Language     P-Media-Authorization  Retry-After  &lt;br /&gt;
Content-Length       P-Preferred-Identity   RPID-Privacy  &lt;br /&gt;
Content-Type         P-Asserted-Identity    Route  &lt;br /&gt;
CSeq                 RAck                   RSeq  &lt;br /&gt;
RAck                 Reason                 Security-Client  &lt;br /&gt;
Reason               Record-Route           Security-Server  &lt;br /&gt;
Date                 Refer-To               Security-Verify&lt;br /&gt;
Diversion            Referred-By            Server&lt;br /&gt;
Encryption           Reject-Contact         Service-Route             &lt;br /&gt;
                                            Session-Expires&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sip header parameters  ===&lt;br /&gt;
The routing script can read (and modify) some SIP header parameters (user parameters, URI parameters or header parameters) from some SIP headers (To, From, P-Asserted-Identity, Remote-Party-ID, Contact).&lt;br /&gt;
&lt;br /&gt;
==== Available parameters ====&lt;br /&gt;
* '''call[ :calling_parameters ]''' (SIP &amp;quot;From&amp;quot; header)&lt;br /&gt;
* '''call[ :called_parameters ]''' (SIP &amp;quot;To&amp;quot; header)&lt;br /&gt;
* '''call[ :private_address_parameters ]''' (SIP &amp;quot;P-Asserted-Identity&amp;quot; or &amp;quot;Remote-Party-ID&amp;quot; header)&lt;br /&gt;
* '''call[ :contact_parameters ]''' (SIP &amp;quot;Contact&amp;quot; header)&lt;br /&gt;
&lt;br /&gt;
These parameters (if present) contain a hash with 3 keys: user_param, uri_param and header_param.&lt;br /&gt;
Each of this key points to a string that contains all the parameters found in the corresponding SIP header.&lt;br /&gt;
* '''User parameters''' (parameters between the user name/number and the host). Example  &amp;lt;sip:alice;'''param=value'''@somewhere.com&amp;gt;&lt;br /&gt;
* '''URI parameters''' (parameters at the end of the URI). Example  &amp;lt;sip:alice@somewhere.com;'''param=value'''&amp;gt;&lt;br /&gt;
* '''Header parameters''' (outside the URI). Example  &amp;lt;sip:alice@somewhere.com&amp;gt;;'''param=value'''&lt;br /&gt;
Example to print all parameters of SIP &amp;quot;To&amp;quot; header:&lt;br /&gt;
  call[ :called_parameters ].inspect -&amp;gt; '{ :user_param =&amp;gt; &amp;quot;name1=value1;name2=value2&amp;quot;, :uri_param =&amp;gt; &amp;quot;name=value&amp;quot;, :header_param =&amp;gt; &amp;quot;name=value;example_param_without_value&amp;quot; }'&lt;br /&gt;
Example to modify (replace) the URI parameters of SIP &amp;quot;To&amp;quot; header:&lt;br /&gt;
  call[ :called_parameters ][ :uri_param ] = &amp;quot;user=phone&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Exceptions ====&lt;br /&gt;
'''Note:''' Some parameters are reported as their own call attribute (oli, isub, cpc, transport) so they have the same representation for all protocols (SS7, IDSN, SIP). They won't appear present in the generic SIP header parameters structures above.&lt;br /&gt;
&lt;br /&gt;
==== Forwarding from inbound to outbound call ====&lt;br /&gt;
&lt;br /&gt;
==== Legacy behavior ====&lt;br /&gt;
(For base_routing version 1.32 or older)&lt;br /&gt;
By default, the parameters are not forwarded in a SIP to SIP call flow. The parameters '''will be forwarded''' when:&lt;br /&gt;
* accessed (read) from either the inbound or outbound call parameters&lt;br /&gt;
* written in either the inbound or outbound call parameters&lt;br /&gt;
&lt;br /&gt;
==== Current behavior ====&lt;br /&gt;
(For Toolpack 3.0.118+, with base_routing version 1.33+)&lt;br /&gt;
SIP headers host and parameters are forwarded by default.&lt;br /&gt;
&lt;br /&gt;
A route attribute &amp;quot;forward_sip_domain&amp;quot; (along with filter script &amp;quot;forward_sip_domain.rb&amp;quot;) will control, per route, if SIP headers host+parameters must be forwarded.&lt;br /&gt;
&lt;br /&gt;
==== Example usage ====&lt;br /&gt;
Example to print the user parameters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  if call[:calling_parameters]&lt;br /&gt;
    puts &amp;quot;user parameters = #{call[:calling_parameters][:user_param].inspect}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example SIP &amp;quot;From&amp;quot; header:&lt;br /&gt;
  From:&amp;lt;sip:123456782;test1=val1;test2=val2@something.com;test3=val3;test4=val4&amp;gt;;test5=val5;test6=val6&lt;br /&gt;
And the resulting content in the routing script:&lt;br /&gt;
  calling_param.inspect -&amp;gt; {:user_param=&amp;gt;&amp;quot;test1=val1;test2=val2&amp;quot;, :uri_param=&amp;gt;&amp;quot;test3=val3;test4=val4&amp;quot;, :header_param=&amp;gt;&amp;quot;test5=val5;test6=val6&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
'''Note''' that printing the inbound or outbound call parameters is considered as a &amp;quot;read&amp;quot; action and would result in forwarding the parameter on the outbound leg.&lt;br /&gt;
&lt;br /&gt;
Example to overwrite inbound leg calling parameters with new parameters for the outbound leg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call [:calling_parameters] = { &lt;br /&gt;
  :user_param =&amp;gt; &amp;quot;user_param7=7;user_param8=8&amp;quot;,&lt;br /&gt;
  :uri_param =&amp;gt; &amp;quot;uri_param9=value9&amp;quot;,&lt;br /&gt;
  :header_param =&amp;gt; &amp;quot;header_paramA=A&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to add user=phone and keep all other uri parameters.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  call[:calling_parameters] ||= {} # Create a hash if not already present&lt;br /&gt;
  call[:calling_parameters][:uri_param] ||= &amp;quot;&amp;quot; # Create a string if not already present&lt;br /&gt;
  call[:calling_parameters][:uri_param] += &amp;quot;;&amp;quot; if call[:calling_parameters][:uri_param] != &amp;quot;&amp;quot;&lt;br /&gt;
  call[:calling_parameters][:uri_param] += &amp;quot;user=phone&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MLPP Precedence values  ===&lt;br /&gt;
&lt;br /&gt;
mlpp_look_for_busy: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;allowed&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;path_reserved&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;not_allowed&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_precedence_level: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;flash_override&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;flash&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;immediate&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;priority&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;routine&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_network_identity:&lt;br /&gt;
&lt;br /&gt;
3 digits value from 0 to 999&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_service_domain:&lt;br /&gt;
&lt;br /&gt;
24 bits value from 0 to 16777215&lt;br /&gt;
&lt;br /&gt;
=== ISUB subaddress information values  ===&lt;br /&gt;
&lt;br /&gt;
called_isub_type: &lt;br /&gt;
calling_isub_type: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap_ia5&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap_bcd&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;user&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
called_isub: &lt;br /&gt;
calling_isub: &lt;br /&gt;
&lt;br /&gt;
Digits for the subaddress information.&lt;br /&gt;
&lt;br /&gt;
=== Network Identification Plan  ===&lt;br /&gt;
&lt;br /&gt;
network_identification_plan: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;Unknown&amp;lt;/tt&amp;gt; (value 0)&lt;br /&gt;
*&amp;lt;tt&amp;gt;cic&amp;lt;/tt&amp;gt; (3 digits carrier identification code plus circuit code, value 1, SS7 or ISDN)&lt;br /&gt;
*&amp;lt;tt&amp;gt;user&amp;lt;/tt&amp;gt; (User, value 2, ISDN only)&lt;br /&gt;
*&amp;lt;tt&amp;gt;cic4&amp;lt;/tt&amp;gt; (4 digits carrier identification code plus circuit code, value 2, SS7 only) &lt;br /&gt;
*&amp;lt;tt&amp;gt;dnic&amp;lt;/tt&amp;gt; (public Data Network ID, value 3, SS7 only) &lt;br /&gt;
*&amp;lt;tt&amp;gt;mnic&amp;lt;/tt&amp;gt; (public land mobile network, value 6, SS7 only)&lt;br /&gt;
&lt;br /&gt;
=== Registered Users Information ===&lt;br /&gt;
Routing script can access information about registered users (when either the calling or called user is a known registered user).&lt;br /&gt;
When these fields are empty, it means that the calling/called (SIP from/to) does not correspond to a known registered user (routing script may still decide to route the call based on static routes).&lt;br /&gt;
&lt;br /&gt;
Information for the called user:&lt;br /&gt;
  params[:registered_user]&lt;br /&gt;
Information for the calling user:&lt;br /&gt;
  params[:calling_registered_user]&lt;br /&gt;
&lt;br /&gt;
These parameters are a hash of key/values that provide information about the contact.&lt;br /&gt;
  {&lt;br /&gt;
    :contact_list=&amp;gt;&lt;br /&gt;
    [&lt;br /&gt;
      {&lt;br /&gt;
        :contact=&amp;gt;&amp;quot;&amp;lt;sip:user_name_or_number@hostname:7070;transport=UDP&amp;gt;&amp;quot;,    -&amp;gt; Full contact&lt;br /&gt;
        :expires=&amp;gt;&amp;quot;60&amp;quot;,                   -&amp;gt; Contact expiry time (seconds)&lt;br /&gt;
        :host=&amp;gt;&amp;quot;hostname&amp;quot;,                -&amp;gt; host name from the contact header&lt;br /&gt;
        :name=&amp;gt;&amp;quot;user_name_or_number&amp;quot;,     -&amp;gt; user name from the contact header&lt;br /&gt;
        :nap_in=&amp;gt;&amp;quot;NAP_NAME&amp;quot;,              -&amp;gt; NAP that the contact has registered from&lt;br /&gt;
        :port=&amp;gt;&amp;quot;7070&amp;quot;,                    -&amp;gt; Port from the contact header&lt;br /&gt;
        :transport=&amp;gt;&amp;quot;UDP&amp;quot;                 -&amp;gt; Transport type from the contact header&lt;br /&gt;
        :q_value=&amp;gt;&amp;quot;0.00&amp;quot;,                 -&amp;gt; Q-value for the contact (for contact ordering)&lt;br /&gt;
        :src_host=&amp;gt;&amp;quot;10.0.0.10&amp;quot;,           -&amp;gt; Actual source IP address that the contact has registered from&lt;br /&gt;
        :src_port=&amp;gt;&amp;quot;7070&amp;quot;,                -&amp;gt; Actual source port that the contact has registered from&lt;br /&gt;
        :src_transport=&amp;gt;&amp;quot;UDP&amp;quot;,            -&amp;gt; Actual protocol that the contact has been registering with&lt;br /&gt;
       }&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
== Route parameters  ==&lt;br /&gt;
&lt;br /&gt;
All route may have these parameters: &lt;br /&gt;
&lt;br /&gt;
*calling &lt;br /&gt;
*called &lt;br /&gt;
*nap &lt;br /&gt;
*remapped_calling &lt;br /&gt;
*remapped_called &lt;br /&gt;
*remapped_nap &lt;br /&gt;
*remapped_destination_leg_profile (called remapped_profile prior to Toolpack 2.9)&lt;br /&gt;
*remapped_source_leg_profile (called remapped_incoming_profile prior to Toolpack 2.9)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  route[:remapped_nap]&lt;br /&gt;
&lt;br /&gt;
Additionally it is possible to add dynamic route attributes in the web portal. These can be referenced by their name.&lt;br /&gt;
For example:&lt;br /&gt;
*priority&lt;br /&gt;
*weight&lt;br /&gt;
&lt;br /&gt;
== Routing calls toward registered users ==&lt;br /&gt;
Static routes normally chose an outbound NAP to forward the call to.&lt;br /&gt;
&lt;br /&gt;
But it's also possible to create routes which outbound NAP is dynamically chosen by matching a registered user (when using [[Sip_registration_forwarding|SIP registration forwarding]]).&lt;br /&gt;
&lt;br /&gt;
More information can be found [[Sip_registration_forwarding#SIP_Calls_routing|here]] about the way to control the [[Sip_registration_forwarding#SIP_Calls_routing|priority of &amp;quot;dynamic&amp;quot; vs &amp;quot;static&amp;quot; routes]].&lt;br /&gt;
&lt;br /&gt;
More information can be found [[#Registered_Users_Information|here]] about using routing scripts to access registered users information during call routing.&lt;br /&gt;
&lt;br /&gt;
== Playing prompts announcements or tones  ==&lt;br /&gt;
&lt;br /&gt;
New feature in release 2.6, all bridges may have these parameters. These can be used to play IVR prompts (audio files) in different states of the call flow.&lt;br /&gt;
&lt;br /&gt;
*'''announcement_tone''' (played before outgoing call is routed)&lt;br /&gt;
*'''ring_tone''' (played after when waiting for outgoing call to answer)&lt;br /&gt;
*'''busy_tone''' (played if outgoing call failed)&lt;br /&gt;
*'''disconnect_tone''' (played after the call has reached it's maximum duration)&lt;br /&gt;
&lt;br /&gt;
Example to play an announcement to incoming call (before routing outgoing call, regardless if a matching route is found or not):&lt;br /&gt;
  bridge[:announcement_tone ] = &amp;quot;my_announcement.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play a ring-tone while the outgoing call is ringing:&lt;br /&gt;
  bridge[:ring_tone] = &amp;quot;my_ring_tone.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play an audio file when outgoing call fails (no route, or outgoing call is refused):&lt;br /&gt;
  bridge[:busy_tone] = &amp;quot;my_busy_tone.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play an audio file when call has reached the maximum allowed duration:&lt;br /&gt;
  bridge[:disconnect_tone] = &amp;quot;your_account_balance_is_empty.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Announcement file path format and options ===&lt;br /&gt;
&lt;br /&gt;
All file plabyacks (:announcement_tone,&amp;amp;nbsp;:busy_tone,&amp;amp;nbsp;:ring_tone,&amp;amp;nbsp;:disconnect_tone) inside bridge parameters use this format. &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;file1.wav:repeat:start_off:end_off,file2.wav:repeat:start_off:end_off,file3.wav:repeat:start_off:end_off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Optional parameters:&lt;br /&gt;
* repeat: number of times to play the file (0 and 1 have the same result)&lt;br /&gt;
* start_off: Start offset in milliseconds&lt;br /&gt;
* end_off: End offset in milliseconds&lt;br /&gt;
&lt;br /&gt;
Http and other path formats are described here: [[Customer_application_framework:play_audio_files#Play_path_format|Path format]]&lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
The following example will play file1.wav once, and then play file2.wav in loop: &lt;br /&gt;
  &amp;quot;file1.wav,file2.wav:-1&amp;quot; &lt;br /&gt;
&lt;br /&gt;
==== Example 2 ====&lt;br /&gt;
The following example will play file1.wav from start offset of 1 second to end offset of 3 seconds, then twice file2.wav from second 5 to second 10.&lt;br /&gt;
  &amp;quot;file1.wav:0:1000:3000,file2.wav:2:5000:10000&amp;quot; &lt;br /&gt;
&lt;br /&gt;
==== Example 3 ====&lt;br /&gt;
The following example will play file1.wav once, ending at offset of 30 seconds.&lt;br /&gt;
  &amp;quot;file1.wav:0:0:30000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== announcement_tone  ===&lt;br /&gt;
&lt;br /&gt;
  params[:bridge][:announcement_tone] = &amp;quot;announcement.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call before any outgoing call is placed. The outgoing call occurs when the file finished playing.&lt;br /&gt;
&lt;br /&gt;
==== announcement_tone options ====&lt;br /&gt;
===== announcement_tone_answer =====&lt;br /&gt;
  params[:bridge][:announcement_tone_answer] = &amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Forces an answer of the call before playing the announcement. Default if argument not provided is &amp;quot;no&amp;quot;, in which case call is only alerted with in-band media.&lt;br /&gt;
&lt;br /&gt;
===== announcement_code_detect =====&lt;br /&gt;
This option allows that the tone detection is enabled during the announcement play.&lt;br /&gt;
&lt;br /&gt;
Collected digits can be inserted into the CDR logs (radius attribute &amp;quot;Telcob-CollectedDigits&amp;quot;, or text CDR variable @{CollectedDigits}).&lt;br /&gt;
&lt;br /&gt;
Collected digits can also be sent back to routing script, which is called again with the same call attributes, except that the called number is replaced by the collected digits.&lt;br /&gt;
&lt;br /&gt;
Code detect has multiple options, as shown in the following code:&lt;br /&gt;
  code_detect = {&lt;br /&gt;
    :type                   =&amp;gt; :DTMF,   # :DTMF or :MFR1 tone detection.&lt;br /&gt;
                                        # Default is MFR1.&lt;br /&gt;
    :prefix                 =&amp;gt; &amp;quot;&amp;quot;,      # Prefix (digits) that is removed from collected digits.&lt;br /&gt;
                                        # Default is empty.&lt;br /&gt;
    :suffix                 =&amp;gt; &amp;quot;&amp;quot;,      # Suffix (digits) that is removed from collected digits&lt;br /&gt;
                                        # and causes routing script to be immediately called.&lt;br /&gt;
                                        # Default is empty.&lt;br /&gt;
    :suffix_removal         =&amp;gt; false,   # Controls the removal of the suffix from the collected digit string that's reported to routing script.&lt;br /&gt;
                                        # Default is false&lt;br /&gt;
    :timeout                =&amp;gt; 0,       # Inter-digit timeout (ms) after which collected digits are passed to the routing script.&lt;br /&gt;
                                        # Use 0 for &amp;quot;no timeout&amp;quot;.&lt;br /&gt;
                                        # Default is 1000ms&lt;br /&gt;
    :barge_in_interruption  =&amp;gt; true,    # When enabled, playing announcement is stopped as soon as first digit is collected.&lt;br /&gt;
                                        # Default is true.&lt;br /&gt;
    :proceed_on_play_done   =&amp;gt; false,   # When true:  Outgoing call is made after announcement finishes playing.&lt;br /&gt;
                                        #             Routing script is not called again.&lt;br /&gt;
                                        # When false: Outgoing call is never made.&lt;br /&gt;
                                        #             Digits are collected until timeout or suffix match,&lt;br /&gt;
                                        #             then routing script is called again.&lt;br /&gt;
                                        # Default is false.&lt;br /&gt;
    :cas_on_hook            =&amp;gt; false,   # Specific for CAS-R1 calls. Makes CAS bits switch to &amp;quot;on-hook&amp;quot; when announcement finished playing&lt;br /&gt;
                                        # (but the call is not &amp;quot;terminated&amp;quot; from Toolpack point of view)&lt;br /&gt;
                                        # Default is false.&lt;br /&gt;
    :cas_on_hook_delay      =&amp;gt; 0,       # Duration of cas bits &amp;quot;on-hook&amp;quot; state.&lt;br /&gt;
                                        # Only effective if cas_on_hook is set to true.&lt;br /&gt;
                                        # Value of 0 stands for &amp;quot;infinite delay&amp;quot;.&lt;br /&gt;
                                        # Default is 0.&lt;br /&gt;
    :repeat_delay           =&amp;gt; 0,       # Delay between repetition of the announcement. The announcement will repeat&lt;br /&gt;
                                        # itself every &amp;quot;repeat_delay&amp;quot; until a code is detected (suffix match or timetout).&lt;br /&gt;
                                        # Value of 0 stands for &amp;quot;infinite delay&amp;quot; (no repeating).&lt;br /&gt;
                                        # Default is 0.&lt;br /&gt;
  }&lt;br /&gt;
'''Example 1''': Collect DTMF digits, and call routing script again with collected digits upon timeout or suffix match.&lt;br /&gt;
  code_detect = { :type =&amp;gt; :DTMF, :suffix =&amp;gt; &amp;quot;#&amp;quot;, :timeout =&amp;gt; 5000 }&lt;br /&gt;
  params[:bridge][:announcement_code_detect] = code_detect&lt;br /&gt;
&lt;br /&gt;
'''Example 2''': Collect digits during the announcement (for CDR logs), then proceed (make outgoing call) after announcement finishes playing&lt;br /&gt;
  code_detect = { :type =&amp;gt; :DTMF, :timeout =&amp;gt; 0, :barge_in_interruption =&amp;gt; false, :proceed_on_play_done =&amp;gt; true }&lt;br /&gt;
  params[:bridge][:announcement_code_detect] = code_detect&lt;br /&gt;
&lt;br /&gt;
==== Controlling what happens after announcement ====&lt;br /&gt;
The routing script can control what happens with the call after the announcement finishes playing:&lt;br /&gt;
* An outgoing call is made&lt;br /&gt;
* Incoming call is hung-up&lt;br /&gt;
* Do nothing (wait for the incoming call to hang-up)&lt;br /&gt;
===== An outgoing call is made =====&lt;br /&gt;
This happens when the script has returned matching routes (and did not raise RoutingException)&lt;br /&gt;
&lt;br /&gt;
===== Incoming call is hung-up =====&lt;br /&gt;
This happens when the script returns no routes (in which case base_routing will raise RoutingException with cause :no_route).&lt;br /&gt;
&lt;br /&gt;
It also happens when the script explicitly raises RoutingException.&lt;br /&gt;
&lt;br /&gt;
The incoming call will be terminated with the specified cause.&lt;br /&gt;
For example&lt;br /&gt;
    raise RoutingException, :temporary_failure&lt;br /&gt;
(See &amp;quot;Reason values&amp;quot; section in this page for list of available causes)&lt;br /&gt;
&lt;br /&gt;
===== Do nothing (wait for the incoming call to hang-up) =====&lt;br /&gt;
If a filter raises RoutingException with code :ok, then the incoming call will not be terminated at the end of the announcement play.&lt;br /&gt;
Announcement digit collection will remain active if appropriate.&lt;br /&gt;
For example:&lt;br /&gt;
    raise RoutingException, :ok&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ring_tone  ===&lt;br /&gt;
  params[:bridge][:ring_tone] = &amp;quot;ringing.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call while waiting for the outgoing call to be answered.&lt;br /&gt;
&lt;br /&gt;
Ring tone playback can also be configured in the Web Portal, from the incoming call's profile (under &amp;quot;Tones and Call Progress Options&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Routing script has precedence over profile (a routing script that fills params[:bridge][:ring_tone] will override the profile's ring tone behavior).&lt;br /&gt;
&lt;br /&gt;
==== ring_tone options ====&lt;br /&gt;
===== ring_tone_state =====&lt;br /&gt;
  params[:bridge][:ring_tone_state] = :alerted&lt;br /&gt;
&lt;br /&gt;
Call state from which ring tone is being played. Available values are:&lt;br /&gt;
* '''immediately''':  Ring tone starts playing immediately on the incoming leg&lt;br /&gt;
* '''accepted''':     Ring tone starts playing as soon as outgoing call is accepted&lt;br /&gt;
* '''callprogress''': Ring tone starts playing as soon as &amp;quot;call progress&amp;quot; is received on the outgoing call&lt;br /&gt;
* '''alerted''' (default):      Ring tone starts playing only once outgoing call is alerted (but won't play if alert indicates early media from outgoing call)&lt;br /&gt;
&lt;br /&gt;
This option also apply when params[:bridge][:ring_tone] is not used, because it also apply to ring tone playback configured in the Web Portal, from the incoming call's profile.&lt;br /&gt;
&lt;br /&gt;
=== busy_tone  ===&lt;br /&gt;
  Toolpack 2.8 and above:&lt;br /&gt;
    params[:bridge][:busy_tone] = &amp;quot;no_route.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Note: Obsolete name (toolpack 2.7.153 and earlier, but still supported in recent releases):&lt;br /&gt;
    params[:bridge][:call_progress_tone] = &amp;quot;no_route.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call when outgoing call fails (never answered).&lt;br /&gt;
&lt;br /&gt;
Note that announcement_tone, if used, is played before the outgoing call attempt is made, and thus before the busy_tone.&lt;br /&gt;
&lt;br /&gt;
Busy tone playback can also be configured in the Web Portal, from the incoming call's profile (under &amp;quot;Tones and Call Progress Options&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Routing script has precedence over profile (a routing script that fills params[:bridge][:busy_tone] will override the profile's busy tone behavior).&lt;br /&gt;
&lt;br /&gt;
Special value '''&amp;quot;none&amp;quot;''' can be used by routing script to force playing nothing (as empty string would default to profile's behavior)&lt;br /&gt;
&lt;br /&gt;
==== busy_tone options ====&lt;br /&gt;
===== busy_tone_answer =====&lt;br /&gt;
  params[:bridge][:busy_tone_answer] = &amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Forces an answer of the call before playing the busy tone. Default if argument not provided is &amp;quot;no&amp;quot;, in which case call is only alerted with in-band media.&lt;br /&gt;
&lt;br /&gt;
=== disconnect_tone  ===&lt;br /&gt;
  params[:bridge][:disconnect_tone] = &amp;quot;max_duration.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call when call duration (:max_call_duration) is reached. Then the leg will be terminated with specified reason (:call_duration_reason).&lt;br /&gt;
&lt;br /&gt;
==== disconnect_tone options ====&lt;br /&gt;
===== max_call_duration  =====&lt;br /&gt;
  params[:bridge][:max_call_duration] = &amp;quot;60000&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Maximum call duration in millisecond. This timer is started when entering answer state.&lt;br /&gt;
&lt;br /&gt;
===== call_duration_reason  =====&lt;br /&gt;
  params[:bridge][:call_duration_reason] =&amp;amp;nbsp;:resource_unavailable &lt;br /&gt;
&lt;br /&gt;
Drop both legs with this reason when call duration (:max_call_duration) is reached.&lt;br /&gt;
&lt;br /&gt;
=== Managing audio prompts through Web Portal ===&lt;br /&gt;
Audio prompts can be uploaded or deleted from the TMedia unit through the Web Portal:&lt;br /&gt;
[[Toolpack:Configuring_Audio_Prompts_A|Managing audio prompts]]&lt;br /&gt;
&lt;br /&gt;
Prompts management must be done using the Web Portal of the primary server (in systems with redundant TMedia units or redundant host servers).&lt;br /&gt;
The file will automatically get replicated to the secondary server.&lt;br /&gt;
&lt;br /&gt;
=== Managing audio prompts manually ===&lt;br /&gt;
Any file on the TMedia host file system can be played. This means it's possible to manage prompts through ssh/scp.&lt;br /&gt;
&lt;br /&gt;
==== The default (replicated) prompts folder ====&lt;br /&gt;
By default, when playing a prompt, Toolpack will look in the default prompts folder:&lt;br /&gt;
 /lib/tb/toolpack/pkg/prompts&lt;br /&gt;
The root of this &amp;quot;prompts&amp;quot; directory is automatically replicated to secondary unit of redundant setups (1+1, N+1, redundant hosts). Sub-folders won't be replicated.&lt;br /&gt;
&lt;br /&gt;
Any prompt play request without explicit file path will map to this folder. For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /lib/tb/toolpack/pkg/prompts/no_route.wav&lt;br /&gt;
&lt;br /&gt;
==== Relative file paths ====&lt;br /&gt;
Any file path that begins with &amp;quot;file://&amp;quot; is considered relative to the tbstreamserver application's working directory:&lt;br /&gt;
 /lib/tb/toolpack/setup/12358/2.8/apps/tbstreamserver/&lt;br /&gt;
(Where &amp;quot;2.8&amp;quot; may be replaced by the current major version of your system)&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;file://my_folder/no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /lib/tb/toolpack/setup/12358/2.8/apps/tbstreamserver/my_folder/no_route.wav&lt;br /&gt;
&lt;br /&gt;
==== Absolute file paths ====&lt;br /&gt;
Absolute paths can also be provided.&lt;br /&gt;
For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;file:///root/my_folder/no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /root/my_folder/no_route.wav&lt;br /&gt;
&lt;br /&gt;
== Recording call legs  ==&lt;br /&gt;
Introduced in release 2.6.44, it's now possible to use routing scripts to ask for recording incoming and/or outgoing call legs.&lt;br /&gt;
&lt;br /&gt;
See example filter script &amp;quot;call_recording&amp;quot; (created by default in Web Portal routing scripts starting with 2.6.44) for an example.&lt;br /&gt;
&lt;br /&gt;
=== Recording the incoming call leg  ===&lt;br /&gt;
To record the incoming call leg, the routing script (in a &amp;quot;after filter&amp;quot; for example) has to set the following parameter:&lt;br /&gt;
&lt;br /&gt;
  bridge[ :record_incoming ]  = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Recording the outgoing call leg  ===&lt;br /&gt;
To record the outgoing call leg, the routing script (in a &amp;quot;after filter&amp;quot; for example) has to set the following parameter, per route (the decision to record or not, or the file name to record to, can be set per matching route):&lt;br /&gt;
&lt;br /&gt;
  # Need to clone the routes in order to have the right to modify them&lt;br /&gt;
  routes = clone_routes params[:routes]&lt;br /&gt;
  routes.each do |route|&lt;br /&gt;
    route[ :record_outgoing ]  = &amp;quot;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  # Store modified routes back to the parameters for this outgoing call&lt;br /&gt;
  params[:routes] = routes&lt;br /&gt;
&lt;br /&gt;
=== Record the outgoing call leg within incoming leg's recorded file (mixing)  ===&lt;br /&gt;
  [...]&lt;br /&gt;
    route[ :record_outgoing ]  = &amp;quot;@{MixWithIncoming}&amp;quot;&lt;br /&gt;
  [...]&lt;br /&gt;
&lt;br /&gt;
=== Choosing file path to record to  ===&lt;br /&gt;
The value assigned to &amp;quot;:record_incoming&amp;quot; or &amp;quot;:record_outgoing&amp;quot; is the path to record the file to.&lt;br /&gt;
&lt;br /&gt;
The paths can be absolute, or relative. When relative, they are relative to the &amp;quot;tbstreamserver&amp;quot; application working directory, for example:&lt;br /&gt;
  /lib/tb/toolpack/setup/12358/2.7/apps/tbstreamserver/&lt;br /&gt;
&lt;br /&gt;
* Empty file name will default to a name that contains various information about the call:&lt;br /&gt;
** ''LinkId'':     Id common between all legs of this call bridge&lt;br /&gt;
** ''LegId'':      Unique Id for this leg&lt;br /&gt;
** ''Nap'':        Current NAP name this call leg is from&lt;br /&gt;
** ''Direction'':  &amp;quot;IN&amp;quot; or &amp;quot;OUT&amp;quot; (depends if call leg is incoming or outgoing leg)&lt;br /&gt;
** ''Calling'':    The calling number of this call leg&lt;br /&gt;
** ''Called'':     The called number of this call leg&lt;br /&gt;
** ''Protocol'':   The signaling protocol of this call leg (SS7, ISDN, CAS, SIP)&lt;br /&gt;
** ''Media info'': Codec + IP/Port for SIP calls, Trunk/Timeslot for TDM calls&lt;br /&gt;
* To record outgoing call leg in the same audio file as incoming call leg (mixing), use the following:&lt;br /&gt;
** @{MixWithIncoming}: Record outgoing legs in same file as incoming legs&lt;br /&gt;
* Variables can be used to insert in the recording path information that's not already available from routing scripts:&lt;br /&gt;
** @{CURRENT_PKG}: Version of current package&lt;br /&gt;
*** Example: 2.6.45&lt;br /&gt;
** @{DATE format}: Prints the date, where 'format' is expressed as described for the 'strftime' function&lt;br /&gt;
*** Example: @{DATE %Y-%m-%d} =&amp;gt; 2013-01-28&lt;br /&gt;
** @{DefaultName}: Replaced by the default file name for recording, which contains:&lt;br /&gt;
*** LinkId:     Id common between all legs of this call bridge&lt;br /&gt;
*** LegId:      Unique Id for this leg&lt;br /&gt;
*** Nap:        Current NAP name this call leg is from&lt;br /&gt;
*** Direction:  &amp;quot;IN&amp;quot; or &amp;quot;OUT&amp;quot; (depends if call leg is incoming or outgoing leg)&lt;br /&gt;
*** Calling:    Calling number&lt;br /&gt;
*** Called:     Called number&lt;br /&gt;
*** Protocol:   Protocol type of this call (SS7, ISDN, CASR2, SIP)&lt;br /&gt;
*** Media info: Codec + IP/Port for SIP calls, Trunk/Timeslot for TDM calls&lt;br /&gt;
*** Example: &amp;quot;73EBA698-F3D67B4B-NAP_SS7-IN-5550000-5550001-SS7-TRUNK_BELL_11-24.wav&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;73EBA698-73EBA698-NAP_SIP-OUT-5550000-5550001-SIP-G723-10.3.10.101-1050.wav&amp;quot;&lt;br /&gt;
** @{DefaultPath}:  Default recording folder and file name: &amp;quot;@{RECORD_PATH}/@{DATE %Y-%m-%d}/@{DefaultName}&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;/lib/tb/toolpack/setup/12358/recorded_calls/73EBA698-F3D67B4B-NAP_SS7-IN-5550000-5550001-SS7-TRUNK_BELL_11-24.wav&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;/lib/tb/toolpack/setup/12358/recorded_calls/73EBA698-73EBA698-NAP_SIP-OUT-5550000-5550001-SIP-G723-10.3.10.101-1050.wav&amp;quot;&lt;br /&gt;
** @{Direction}: Direction of current leg (IN our OUT)&lt;br /&gt;
*** Example: IN&lt;br /&gt;
** @{LegId}: Current LegId (Unique Id for this leg)&lt;br /&gt;
*** Example: F3D67B4B&lt;br /&gt;
** @{LinkId}: Current LinkId (Id common between all legs of this call bridge)&lt;br /&gt;
*** Example: 73EBA698&lt;br /&gt;
** @{PKG_HOME}: Path where packages are stored.&lt;br /&gt;
*** Note: It's not recomended to use that path on redundant systems, package file replication may cause confusion in recorded files.&lt;br /&gt;
*** Example: /lib/tb/toolpack/pkg&lt;br /&gt;
** @{PROMPT_PATH}: Default path where audio prompts are stored&lt;br /&gt;
*** Note: It's not recomended to use that path on redundant systems, package file replication may cause confusion in recorded files.&lt;br /&gt;
*** Example: /lib/tb/toolpack/pkg/prompts&lt;br /&gt;
** @{Protocol}: Protocol of current leg&lt;br /&gt;
*** Example: SS7&lt;br /&gt;
** @{RECORD_PATH}: Default recording folder: &amp;quot;@{TB_SETUP_HOME}/recorded_calls/&amp;quot;&lt;br /&gt;
** @{TBX_GW_PORT}: Current &amp;quot;System Id&amp;quot; (also called &amp;quot;Gateway Port&amp;quot;)&lt;br /&gt;
*** Example: 12358&lt;br /&gt;
** And all variables listed here: [[Customer_application_framework:play_audio_files#Helpful_variables_to_build_play_or_record_file_paths|Building play or record file path]]&lt;br /&gt;
&lt;br /&gt;
== Controlling UUI (user-to-user information) relay  ==&lt;br /&gt;
UUI (user-to-user information) can be present in different messages received by either call leg during a call. For example, information can be carried during the initial invite, other information can be carried when the call is alerted, answered, or terminated.&lt;br /&gt;
&lt;br /&gt;
Routing scripts can control if the UUI received from one leg through the call will be forwarded to the other call leg:&lt;br /&gt;
*uui_forward_enabled&lt;br /&gt;
&lt;br /&gt;
Routing scripts can also read and modify the UUI received with the incoming call leg, before it gets forwarded upon creation of the outgoing call leg:&lt;br /&gt;
*uui &lt;br /&gt;
&lt;br /&gt;
=== UUI (user-to-user indication) values  ===&lt;br /&gt;
&lt;br /&gt;
Byte array represented as ruby String. Use ''bridge=params[:bridge]'', then ''bridge[:uui]'' to access the data.&lt;br /&gt;
&lt;br /&gt;
To access the bytes in Ruby, use ruby String operator []. For example:  bridge[:uui][0] will return the binary value of the first UUI byte.&lt;br /&gt;
&lt;br /&gt;
Function each_byte can also be useful to iterate through all bytes of the UUI.&lt;br /&gt;
&lt;br /&gt;
=== uui_forward_enabled values  ===&lt;br /&gt;
&lt;br /&gt;
Controls forwarding or discarding of UUI to outgoing call leg. &lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true.&lt;br /&gt;
* 0/false: UUI is not forwarded between call legs&lt;br /&gt;
* 1/true: UUI is forwarded between call legs&lt;br /&gt;
&lt;br /&gt;
The value for this parameter at input of routing script depends on the &amp;quot;Forward UUI&amp;quot; parameter in the &amp;quot;Advanced&amp;quot; section of the Gateway configuration page of the Web Portal. The script may change this value to override the Gateway configuration.&lt;br /&gt;
&lt;br /&gt;
== Authorization ==&lt;br /&gt;
Starting with release 2.7, it is possible to issue RADIUS authorization requests from routing scripts. To do so, the params[:authorization] object must be filled with the required RADIUS attributes and [[#Refuse|an exception must be raised]] with reason :authorization_required.&lt;br /&gt;
&lt;br /&gt;
When the authorization is completed, the routing script is called again with the result. The params[:authorization] object will be filled with the RADIUS attributes from the response. The params[:authorization][:result] field will also contain a string indicating the result of the authorization:&lt;br /&gt;
&lt;br /&gt;
* ''accept'': The authorization was successful.&lt;br /&gt;
* ''reject'': The authorization was refused.&lt;br /&gt;
* ''challenge'': The authorization was challenged.&lt;br /&gt;
* ''timeout'': The authorization was not answered.&lt;br /&gt;
&lt;br /&gt;
== Call diversion options ==&lt;br /&gt;
It's possible to control the call flow when a call diversion information is received in the alerting state.&lt;br /&gt;
&lt;br /&gt;
Two fields are available: bridge[ :diversion ] and bridge[ :diversion_reason ]&lt;br /&gt;
&lt;br /&gt;
The internal release cause TOOLPACK_DIVERT_NOT_ALLOWED is used by gateway application to terminate both legs.&lt;br /&gt;
&lt;br /&gt;
  bridge[ :diversion ] = :allowed&lt;br /&gt;
The alert message will not be analyzed and the call will be progressed. Default behavior.&lt;br /&gt;
  bridge[ :diversion ] = :not_allowed&lt;br /&gt;
If the alert message indicates that the call is diverted, the call will be released no matter the In-band information to allow&lt;br /&gt;
early media.&lt;br /&gt;
  bridge[ :diversion ] = :not_allowed_w_early_media&lt;br /&gt;
The call will be released If the alert message indicates that the call is diverted with in-band information to allow early media.&lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;*&amp;quot;&lt;br /&gt;
If the diversion is not allowed, the gateway will drop the call for any redirecting reason. &lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;0,1,2&amp;quot;&lt;br /&gt;
or&lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;unknown,busy,no_reply&amp;quot;&lt;br /&gt;
If the diversion is not allowed, the redirecting reason will be analyzed and the call will only be dropped for the configured cases.&lt;br /&gt;
&lt;br /&gt;
See section [[Routing_script_tutorial:Mini_Development_Guide#Redirecting_number,_Original_Called_Number_and_Diversion_Reason|Redirecting number reason values]].&lt;br /&gt;
&lt;br /&gt;
== Call transfer requests ==&lt;br /&gt;
Toolpack allows that [[Call transfer]] requests are relayed from one leg to the other, or to process them locally (making another outgoing call to replace the call that requested the call transfer).&lt;br /&gt;
&lt;br /&gt;
If the chosen [[Call transfer]] mode is to process requests locally, upon reception of a call transfer request (SIP REFER or ISDN Facility), routing script will be called once again, to select the routes for the new outgoing call (call transfer target).&lt;br /&gt;
&lt;br /&gt;
=== How to route call transfer request ===&lt;br /&gt;
Routing of a call transfer request is done exactly like routing of a normal incoming call.&lt;br /&gt;
The routing script generally does not need any modification to support that.&lt;br /&gt;
&lt;br /&gt;
In some cases, the routing script may want to use information related to the transfer request to perform routing, or to insert information in the outgoing call leg.&lt;br /&gt;
Additional information is provided to the routing script, allowing routing decisions using information from the call transfer request (SIP REFER or ISDN Facility).&lt;br /&gt;
See below...&lt;br /&gt;
&lt;br /&gt;
=== params[ :call ] content during transfer request ===&lt;br /&gt;
When processing a call transfer request, the params[ :call ] hash contains the information from the inbound call (same as was passed to the routing script upon arrival of the inbound call)&lt;br /&gt;
 call = params[ :call ]          -&amp;gt; Information from original inbound call, with exception of call[ :called ]&lt;br /&gt;
&lt;br /&gt;
One exception (convenient because it allows a unmodified routing script to process call transfer request the same way as any other routing request):&lt;br /&gt;
 call[ :called ]                 -&amp;gt; Replaced by the called number from the call transfer request (also called &amp;quot;redirection number&amp;quot;)&lt;br /&gt;
Complementary information:&lt;br /&gt;
 call[ :original_called_number ] -&amp;gt; Contains the called number that was initially received from the incoming call, prior to call transfer request&lt;br /&gt;
 call[ :redirecting_number ]     -&amp;gt; Number of the call from which the call transfer request was received (generally equals to original_called_number)&lt;br /&gt;
&lt;br /&gt;
These fields will also be included in the outgoing call made after routing:&lt;br /&gt;
* original called number and redirecting number are existing fields on SS7 and ISDN calls&lt;br /&gt;
* SIP &amp;quot;diversion&amp;quot; header is used for SIP calls&lt;br /&gt;
&lt;br /&gt;
=== params[ :transfer ] content ===&lt;br /&gt;
(this if valid only for release 2.7.102 and above)&amp;lt;br&amp;gt;&lt;br /&gt;
When processing a call transfer request, information from the call transfer request message (SIP REFER, ISDN Facility) is provided in params[ :transfer ]:&lt;br /&gt;
  transfer = params[ :transfer ]&lt;br /&gt;
The following field is always present:&lt;br /&gt;
  transfer[ :original_nap ]      -&amp;gt; Contains the NAP of the first call from which a call transfer request was received&lt;br /&gt;
  transfer[ :redirecting_nap ]   -&amp;gt; Contains the NAP of the call from which the current call transfer request was received&lt;br /&gt;
                                    (same as :original_nap for the first call transfer, different for subsequent transfers)&lt;br /&gt;
Examples of other fields that may be present, when appropriate:&lt;br /&gt;
  transfer[ :uui ]               -&amp;gt; The UUI (user-to-user information) found in the call transfer request&lt;br /&gt;
  transfer[ :sip_header ]        -&amp;gt; Contains custom SIP headers from the call transfer request&lt;br /&gt;
  transfer[ :request_uri ]       -&amp;gt; Contains the SIP Request URI&lt;br /&gt;
&lt;br /&gt;
These fields are 'read-only'. They will not be included in the outgoing call, as they represent the contents of the call transfer request, and not the outgoing call to be made.&lt;br /&gt;
&lt;br /&gt;
To insert/modify attributes of the outgoing call, the parameters from params[ :call ] must be edited instead.&lt;br /&gt;
&lt;br /&gt;
== Redirection ==&lt;br /&gt;
In release 2.8 and above, redirection contacts are obtained from the routing engine in the following format:&lt;br /&gt;
&lt;br /&gt;
  contacts = params[ :contacts ]&lt;br /&gt;
  contacts = {&lt;br /&gt;
      :index=&amp;gt;&amp;quot;3&amp;quot;,&lt;br /&gt;
      :list=&amp;gt;[&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6660&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6661&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6661@192.168.215.127&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6661@192.168.215.127&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6662&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6662@192.168.215.128&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6662@192.168.215.128&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6663&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6663@192.168.215.129&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6663@192.168.215.129&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6664&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6664@192.168.215.150&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6664@192.168.215.150&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
      ],&lt;br /&gt;
      :source_indexes=&amp;gt;&amp;quot;nil,0,0,0,2&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:list]&amp;lt;/code&amp;gt; contains the contact log. Each contact within the list has the following fields:&lt;br /&gt;
** &amp;lt;code&amp;gt;:called_number&amp;lt;/code&amp;gt; - the called number&lt;br /&gt;
** &amp;lt;code&amp;gt;:is_number_ported&amp;lt;/code&amp;gt; - if the called number has been ported (for SIP: if the npdi parameter is present)&lt;br /&gt;
** &amp;lt;code&amp;gt;:ported_number&amp;lt;/code&amp;gt; - the called number that was ported (for SIP: the rn parameter value, if available)&lt;br /&gt;
** &amp;lt;code&amp;gt;:sip_uri&amp;lt;/code&amp;gt; - the SIP URI of the contact, without the contact-params section (without the expires and q contact parameters)&lt;br /&gt;
** &amp;lt;code&amp;gt;:raw_data&amp;lt;/code&amp;gt; - the raw data representing the contact in the signaling protocol. For SIP, this is the full SIP URI (including the expires and q contact parameters).&lt;br /&gt;
** &amp;lt;code&amp;gt;:priority&amp;lt;/code&amp;gt; - the priority of the contact [0-1000]&lt;br /&gt;
** &amp;lt;code&amp;gt;:expiration&amp;lt;/code&amp;gt; - the expiration time in seconds of the contact&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:index]&amp;lt;/code&amp;gt; contains the index of the contact that is currently being routed.&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:source_indexes]&amp;lt;/code&amp;gt; contains a comma-separated list of indexes from &amp;lt;code&amp;gt;params[:contacts][:list]&amp;lt;/code&amp;gt;. Each index represents the contact from which the contact in the list was obtained from.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get more information, see:&lt;br /&gt;
*[[Routing_script_tutorial:SIP_Redirection_Contacts|SIP Redirection Contacts Parameters in a Call Flow]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Connected number ==&lt;br /&gt;
Insert a connected number in the answer message of the call flow.&lt;br /&gt;
&lt;br /&gt;
Routing script example:&lt;br /&gt;
    bridge = params[ :bridge ]&lt;br /&gt;
    bridge [ :connected_number ] = &amp;quot;3335577&amp;quot;&lt;br /&gt;
    bridge [ :connected_number_noa ] = :national_number&lt;br /&gt;
    bridge [ :connected_number_npi ] = :private&lt;br /&gt;
    bridge [ :connected_number_presentation ] = :allowed&lt;br /&gt;
    bridge [ :connected_number_screening ] = :pass&lt;br /&gt;
&lt;br /&gt;
== Terminating calls ==&lt;br /&gt;
In release 2.8, it is now possible to terminate a call through the routing scripts. The [[#Reason values|reason code]] must be specified in &amp;lt;code&amp;gt;params[:bridge][:reason]&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;:terminate&amp;lt;/code&amp;gt; hash must be created and copied into &amp;lt;code&amp;gt;params&amp;lt;/code&amp;gt;:&lt;br /&gt;
  terminate = {}&lt;br /&gt;
  params[:terminate] = terminate&lt;br /&gt;
The following fields can then be set in &amp;lt;code&amp;gt;:terminate&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;:sip_header&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:contacts&amp;lt;/code&amp;gt; # list of contacts as described in the [[#Redirection|redirection]] section&lt;br /&gt;
* &amp;lt;code&amp;gt;:isup_raw&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:isup_raw_variant&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_noa&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_npi&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_presentation&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_reason&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_counter&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_indicator&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_noa&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_npi&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_presentation&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_reason&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_counter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reason values  ==&lt;br /&gt;
&lt;br /&gt;
Check here for Termination Reason Cause codes:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Termination_cause_codes|Termination Reason Cause codes]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to refuse an incoming call leg.&lt;br /&gt;
  raise RoutingException, :no_route&lt;br /&gt;
&lt;br /&gt;
Reason cause strings available inside routing scripts:&lt;br /&gt;
&lt;br /&gt;
List of Q.850 reason causes:&lt;br /&gt;
  :unallocated_number&lt;br /&gt;
  :no_route_to_network&lt;br /&gt;
  :no_route_to_destination&lt;br /&gt;
  :send_special_tone&lt;br /&gt;
  :misdialled_trunk_prefix&lt;br /&gt;
  :channel_unacceptable&lt;br /&gt;
  :call_awarded_in_established_channel&lt;br /&gt;
  :preemption&lt;br /&gt;
  :reattempt&lt;br /&gt;
  :qor_ported_number&lt;br /&gt;
  :normal_call_clearing&lt;br /&gt;
  :user_busy&lt;br /&gt;
  :no_user_responding&lt;br /&gt;
  :no_answer_from_user&lt;br /&gt;
  :subscriber_absent&lt;br /&gt;
  :call_rejected&lt;br /&gt;
  :number_changed&lt;br /&gt;
  :redirection&lt;br /&gt;
  :exchange_routing_error&lt;br /&gt;
  :non_selected_user_clearing&lt;br /&gt;
  :destination_out_of_order&lt;br /&gt;
  :address_incomplete&lt;br /&gt;
  :facility_rejected&lt;br /&gt;
  :response_to_status_enquiry&lt;br /&gt;
  :normal_unspecified&lt;br /&gt;
  :no_circuit_available&lt;br /&gt;
  :network_out_of_order&lt;br /&gt;
  :frame_mode_out_of_service&lt;br /&gt;
  :frame_mode_connection_operational&lt;br /&gt;
  :temporary_failure&lt;br /&gt;
  :switching_equipment_congestion&lt;br /&gt;
  :access_information_discarded&lt;br /&gt;
  :requested_circuit_not_available&lt;br /&gt;
  :precedence_call_blocked&lt;br /&gt;
  :resource_unavailable&lt;br /&gt;
  :quality_of_service_not_available&lt;br /&gt;
  :requested_facility_not_subscribed&lt;br /&gt;
  :outgoing_calls_barred&lt;br /&gt;
  :outgoing_calls_barred_within_cug&lt;br /&gt;
  :incoming_calls_barred&lt;br /&gt;
  :incoming_calls_barred_within_cug&lt;br /&gt;
  :bearer_cap_not_authorized&lt;br /&gt;
  :bearer_cap_not_available&lt;br /&gt;
  :inconsistency_access_info&lt;br /&gt;
  :service_not_available&lt;br /&gt;
  :bearer_cap_not_implemented&lt;br /&gt;
  :channel_type_not_implemented&lt;br /&gt;
  :requested_facility_not_implemented&lt;br /&gt;
  :only_restricted_digital_info&lt;br /&gt;
  :service_not_implemented&lt;br /&gt;
  :invalid_call_reference&lt;br /&gt;
  :channel_does_not_exist&lt;br /&gt;
  :call_identity_does_not_exist&lt;br /&gt;
  :call_identity_in_use&lt;br /&gt;
  :no_call_suspended&lt;br /&gt;
  :call_has_been_cleared&lt;br /&gt;
  :user_not_member_of_cug&lt;br /&gt;
  :incompatible_destination&lt;br /&gt;
  :non_existant_cug&lt;br /&gt;
  :invalid_transit_network&lt;br /&gt;
  :invalid_message_unspecified&lt;br /&gt;
  :mandatory_ie_missing&lt;br /&gt;
  :message_type_non_existent&lt;br /&gt;
  :message_not_compatible_with_call_state&lt;br /&gt;
  :ie_non_existent&lt;br /&gt;
  :invalid_ie_content&lt;br /&gt;
  :msg_not_compatible_with_call_state&lt;br /&gt;
  :recovery_on_timer_expiry&lt;br /&gt;
  :parameter_non_existent_passed_on&lt;br /&gt;
  :message_with_non_recognized_parameters_discarded&lt;br /&gt;
  :protocol_error&lt;br /&gt;
  :interworking_unspecified&lt;br /&gt;
&lt;br /&gt;
List of toolpack reason causes:&lt;br /&gt;
&lt;br /&gt;
  :toolpack_normal                       or :normal&lt;br /&gt;
  :toolpack_resource_error               or :resource_error&lt;br /&gt;
  :toolpack_timeout                      or :timeout&lt;br /&gt;
  :toolpack_no_route                     or :no_route&lt;br /&gt;
  :toolpack_call_collision               or :call_collision&lt;br /&gt;
  :toolpack_sync_drop                    or :sync_drop&lt;br /&gt;
  :toolpack_signaling_error              or :signaling_error&lt;br /&gt;
  :toolpack_locally_rejected             or :locally_rejected&lt;br /&gt;
  :toolpack_interface_not_available      or :interface_not_available&lt;br /&gt;
  :toolpack_reset_in_progress            or :reset_in_progress&lt;br /&gt;
  :toolpack_adapter_reject               or :adapter_reject&lt;br /&gt;
  :toolpack_missing_or_invalid_ie        or :missing_or_invalid_ie&lt;br /&gt;
  :toolpack_incoming_only                or :incoming_only&lt;br /&gt;
  :toolpack_system_configuration_changed or :system_configuration_changed&lt;br /&gt;
  :toolpack_resource_no_more_available   or :resource_no_more_available&lt;br /&gt;
  :toolpack_incompatible_media           or :incompatible_media&lt;br /&gt;
  :toolpack_resource_allocation_failed   or :resource_allocation_failed&lt;br /&gt;
  :toolpack_data_path_not_available      or :data_path_not_available&lt;br /&gt;
  :toolpack_local_congestion             or :local_congestion&lt;br /&gt;
  :toolpack_authorization_required       or :authorization_required&lt;br /&gt;
  :toolpack_call_divert_is_not_allowed   or :call_divert_is_not_allowed&lt;br /&gt;
&lt;br /&gt;
List of SIP reason causes:&amp;lt;br/&amp;gt;&lt;br /&gt;
Reason causes starting with a digit must use the following syntax (can't use : as prefix).&lt;br /&gt;
&lt;br /&gt;
  '300_multiple_choices'&lt;br /&gt;
  '301_moved_permanently'&lt;br /&gt;
  '302_moved_temporarily'&lt;br /&gt;
  '305_use_proxy'&lt;br /&gt;
  '380_alternative_service'&lt;br /&gt;
  '400_bad_request'&lt;br /&gt;
  '401_unauthorized'&lt;br /&gt;
  '402_payment_required'&lt;br /&gt;
  '403_forbidden'&lt;br /&gt;
  '404_not_found'&lt;br /&gt;
  '405_method_not_allowed'&lt;br /&gt;
  '406_not_acceptable'&lt;br /&gt;
  '407_proxy_authentication_required'&lt;br /&gt;
  '408_request_timeout'&lt;br /&gt;
  '409_conflict'&lt;br /&gt;
  '410_gone'&lt;br /&gt;
  '413_request_entity_too_large'&lt;br /&gt;
  '414_request_URI_too_long'&lt;br /&gt;
  '415_unsupported_media'&lt;br /&gt;
  '416_unsupported_URI_scheme'&lt;br /&gt;
  '420_bad_extension'&lt;br /&gt;
  '421_extension_required'&lt;br /&gt;
  '422_session_timer_too_small'&lt;br /&gt;
  '423_interval_too_brief'&lt;br /&gt;
  '429_referrer_identity_error'&lt;br /&gt;
  '480_temporary_unavailable'&lt;br /&gt;
  '481_call_or_transaction_does_not_exist'&lt;br /&gt;
  '482_loop_detected'&lt;br /&gt;
  '483_too_many_hops'&lt;br /&gt;
  '484_address_incomplete'&lt;br /&gt;
  '485_ambiguous'&lt;br /&gt;
  '486_busy_here'&lt;br /&gt;
  '487_request_terminated'&lt;br /&gt;
  '488_not_acceptable_here'&lt;br /&gt;
  '489_bad_event'&lt;br /&gt;
  '491_retry_after'&lt;br /&gt;
  '500_server_internal_error'&lt;br /&gt;
  '501_not_implemented'&lt;br /&gt;
  '502_bad_gateway'&lt;br /&gt;
  '503_service_unavailable'&lt;br /&gt;
  '504_server_timeout'&lt;br /&gt;
  '505_version_unsupported'&lt;br /&gt;
  '513_message_too_large'&lt;br /&gt;
  '600_busy_everywhere'&lt;br /&gt;
  '603_decline'&lt;br /&gt;
  '604_not_exist_anywhere'&lt;br /&gt;
  '606_not_acceptable'&lt;br /&gt;
&lt;br /&gt;
== Nap status  ==&lt;br /&gt;
&lt;br /&gt;
All the status fields of the NAPs are provided for use by the routing scripts. See the nap status provider for more details on which fields are available in the CEngineStatTransNap.hpp file. &lt;br /&gt;
&lt;br /&gt;
'''Notice:''' These values may change between major release. &lt;br /&gt;
&lt;br /&gt;
  Routing script call attribute name    Description&lt;br /&gt;
  --------------------------------------------------------------------------------------------&lt;br /&gt;
  &amp;quot;name&amp;quot;                                NAP name.&lt;br /&gt;
  &amp;quot;signaling_type&amp;quot;                      Signaling type (SS7, ISDN, CASR2, SIP)&lt;br /&gt;
  &amp;quot;profile&amp;quot;                             Profile name.&lt;br /&gt;
  &amp;quot;sip_destination_ip&amp;quot;                  Destination IP address.&lt;br /&gt;
  &amp;quot;sip_destination_port&amp;quot;                Destination IP port.&lt;br /&gt;
  &amp;quot;sip_transport_type&amp;quot;                  SIP transport type (:udp, :tcp, or :tls) (Toolpack 3.1 and more)&lt;br /&gt;
  &amp;quot;inst_incoming_call_cnt&amp;quot;              Instantaneous Count of incoming calls.&lt;br /&gt;
  &amp;quot;inst_outgoing_call_cnt&amp;quot;              Instantaneous Count of outgoing calls.&lt;br /&gt;
  &amp;quot;available_cnt&amp;quot;                       Number of available circuits or channels.&lt;br /&gt;
  &amp;quot;unavailable_cnt&amp;quot;                     Number of unavailable circuits or channels.&lt;br /&gt;
  &amp;quot;availability_percent&amp;quot;                Percentage of available circuits or channels.&lt;br /&gt;
  &amp;quot;usage_percent&amp;quot;                       Percentage of used circuits or channels.&lt;br /&gt;
  &amp;quot;unused_shared_percent&amp;quot;               Percentage of used circuits or channels of this NAP available to make new calls with (taking into account shared with other NAPs)&lt;br /&gt;
  &amp;quot;total_incoming_call_cnt&amp;quot;             Total Count of incoming calls.&lt;br /&gt;
  &amp;quot;global_asr_percent&amp;quot;                  Global calculated ASR percentage.&lt;br /&gt;
  &amp;quot;total_outgoing_call_cnt&amp;quot;             Total Count of outgoing calls.&lt;br /&gt;
  &amp;quot;last_24h_asr_percent&amp;quot;                Last 24 hours calculated ASR percentage.&lt;br /&gt;
  &amp;quot;last_24h_outgoing_call_cnt&amp;quot;          Last 24 hours outgoing calls.&lt;br /&gt;
  &amp;quot;current_hour_asr_percent&amp;quot;            Current hour calculated ASR percentage.&lt;br /&gt;
  &amp;quot;current_hour_outgoing_call_cnt&amp;quot;      Current hour outgoing calls.&lt;br /&gt;
  &amp;quot;last_hour_asr_percent&amp;quot;               Last hour calculated ASR percentage.&lt;br /&gt;
  &amp;quot;last_hour_outgoing_call_cnt&amp;quot;         Last hour outgoing calls.&lt;br /&gt;
  &amp;quot;poll_remote_proxy&amp;quot;                   Remote proxy polling enabled&lt;br /&gt;
  &amp;quot;is_available&amp;quot;                        Remote proxy actually available or not&lt;br /&gt;
  &amp;quot;time_since_polling&amp;quot;                  Time since the last availibility polling&lt;br /&gt;
  &amp;quot;time_available_seconds&amp;quot;              Number of seconds since the NAP is available&lt;br /&gt;
  &amp;quot;time_unavailable_seconds&amp;quot;            Number of seconds since the NAP is unavailable&lt;br /&gt;
  &amp;quot;register_to_proxy&amp;quot;                   Register to proxy enabled&lt;br /&gt;
  &amp;quot;registered&amp;quot;                          Actually registered or not&lt;br /&gt;
  &amp;quot;time_since_refresh&amp;quot;                  Time since the last refresh&lt;br /&gt;
  &amp;quot;time_registered_seconds&amp;quot;             Number of seconds since the NAP is registered&lt;br /&gt;
  &amp;quot;time_not_registered_seconds&amp;quot;         Number of seconds since the NAP is not registered&lt;br /&gt;
  &amp;quot;asr_stats_incoming_struct&amp;quot;           Detailed Answer-Seizure Rate incoming statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;global_asr_percent&amp;quot;                Global calculated ASR percentage.&lt;br /&gt;
    &amp;quot;total_call_cnt&amp;quot;                    Total count of calls.&lt;br /&gt;
    &amp;quot;total_accepted_call_cnt&amp;quot;           Total count of accepted calls (not dropped due to congestion or rate-limiting).&lt;br /&gt;
    &amp;quot;total_answered_call_cnt&amp;quot;           Total count of answered calls.&lt;br /&gt;
    &amp;quot;last_24h_asr_percent&amp;quot;              Last 24 hours calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_24h_call_cnt&amp;quot;                 Last 24 hours count of calls.&lt;br /&gt;
    &amp;quot;current_hour_asr_percent&amp;quot;          Current hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;current_hour_call_cnt&amp;quot;             Current hour count of calls.&lt;br /&gt;
    &amp;quot;last_hour_asr_percent&amp;quot;             Last hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_hour_call_cnt&amp;quot;                Last hour count of calls.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;asr_stats_outgoing_struct&amp;quot;           Detailed Answer-Seizure Rate outgoing statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;global_asr_percent&amp;quot;                Global calculated ASR percentage.&lt;br /&gt;
    &amp;quot;total_call_cnt&amp;quot;                    Total count of calls.&lt;br /&gt;
    &amp;quot;total_accepted_call_cnt&amp;quot;           Total count of accepted calls (not dropped due to congestion or rate-limiting).&lt;br /&gt;
    &amp;quot;total_answered_call_cnt&amp;quot;           Total count of answered calls.&lt;br /&gt;
    &amp;quot;last_24h_asr_percent&amp;quot;              Last 24 hours calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_24h_call_cnt&amp;quot;                 Last 24 hours count of calls.&lt;br /&gt;
    &amp;quot;current_hour_asr_percent&amp;quot;          Current hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;current_hour_call_cnt&amp;quot;             Current hour count of calls.&lt;br /&gt;
    &amp;quot;last_hour_asr_percent&amp;quot;             Last hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_hour_call_cnt&amp;quot;                Last hour count of calls.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;mos_struct&amp;quot;                          Detailed Mean Opinion Score statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;last_24h_ingress&amp;quot;                  Last 24 hours calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_24h_egress&amp;quot;                   Last 24 hours calculated MOS for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_ingress&amp;quot;              Current hour calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_egress&amp;quot;               Current hour calculated MOS for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_ingress&amp;quot;                 Last hour calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_egress&amp;quot;                  Last hour calculated MOS for outgoing RTP packets.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;network_quality_struct&amp;quot;              Detailed network quality statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;last_24h_ingress&amp;quot;                  Last 24 hours network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_24h_egress&amp;quot;                   Last 24 hours network quality percentage for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_ingress&amp;quot;              Current hour network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_egress&amp;quot;               Current hour network quality percentage for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_ingress&amp;quot;                 Last hour network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_egress&amp;quot;                  Last hour network quality percentage for outgoing RTP packets.&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; If the nap status is part of a substructure, the substructure will be a hash containing all subfield elements. &lt;br /&gt;
&lt;br /&gt;
Example to access the signaling type and the number of incoming call count for the NAP of the current call:&lt;br /&gt;
&lt;br /&gt;
   incoming_nap = params[:naps][ params[:call][ :nap ].to_sym]&lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP parameters=&amp;quot; + incoming_nap.inspect &lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP signaling type=&amp;quot; + incoming_nap[:signaling_type].inspect &lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP call cnt=&amp;quot; + incoming_nap[:asr_stats_incoming_struct][:total_call_cnt].inspect &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; It is also possible to add dynamic nap attributes in the web portal. These can be referenced by their name.&lt;br /&gt;
&lt;br /&gt;
== Telephony Services ==&lt;br /&gt;
In release 2.10 and the above, telephony services (CNAM Request) can be manage from the routing engine in the following format:&lt;br /&gt;
&lt;br /&gt;
  params[:telephony_services].each do |service|  -&amp;gt; Array of telephony services&lt;br /&gt;
    service[:name]                               -&amp;gt; Customer telephony service name&lt;br /&gt;
    service[:type]                               -&amp;gt; For now only &amp;quot;CNAM Request&amp;quot;&lt;br /&gt;
    service[:enabled]                            -&amp;gt; Indicate if the service is enabled (true) or not (false)&lt;br /&gt;
                                                    (Only the telephony service define in the profile associated to the NAP is enabled)&lt;br /&gt;
                                                    (The others telephony services define in others profiles are disabled)&lt;br /&gt;
                                                    (If we are in the case where we return in the routing script with a response, it is important to set :enabled to false in order to avoid repeating the same query)&lt;br /&gt;
    serviceParams = service[:params]&lt;br /&gt;
    serviceParams[:return_to_script]             -&amp;gt; Indicates to Gateway if we must return to the routing script after receiving the CNAM response&lt;br /&gt;
                                                    (It is important to set back to false this field to avoid an infinite loop)&lt;br /&gt;
    serviceQuery = service[:query]&lt;br /&gt;
    serviceQuery[:phone]                         -&amp;gt; 10 digits of calling number from the incoming call to send to the CNAM server&lt;br /&gt;
    serviceQuery[:timeout]                       -&amp;gt; Timeout in millisecond to wait a CNAM response from CNAM server&lt;br /&gt;
                                                    (Default value from profile configuration)&lt;br /&gt;
    serviceResponse = service[:response]&lt;br /&gt;
    serviceResponse[:success]                    -&amp;gt; Indicates if we received a good CNAM response from the CNAM Server (Only present if :return_to_script is set to true)&lt;br /&gt;
    serviceResponse[:caller_name]                -&amp;gt; The caller name received in the CNAM response from the CNAM Server (Only present if :return_to_script is set to true)&lt;br /&gt;
&lt;br /&gt;
== Custom user context ==&lt;br /&gt;
The routing script may '''save per-call information within the call context''', that will be available if routing is called again later during the call flow.&lt;br /&gt;
&lt;br /&gt;
Cases where routing is called multiple time for the same call are:&lt;br /&gt;
- Call transfer requests&lt;br /&gt;
- SIP redirect requests&lt;br /&gt;
- Radius Authorization result&lt;br /&gt;
- Announcement server with digit collection&lt;br /&gt;
&lt;br /&gt;
The routing script can save a recursive hash of attributes here:&lt;br /&gt;
  params[:user_context]&lt;br /&gt;
&lt;br /&gt;
For example&lt;br /&gt;
  params[:user_context] = { &amp;quot;SomeKey&amp;quot; =&amp;gt; &amp;quot;Some value I want to retrieve upon next routing for this call&amp;quot;, &amp;quot;OtherVal&amp;quot; =&amp;gt; { &amp;quot;subkey&amp;quot; =&amp;gt; &amp;quot;subval&amp;quot; } }&lt;br /&gt;
&lt;br /&gt;
Upon first call to routing script, params[:user_context] will be nil.&lt;br /&gt;
Upon subsequent calls to routing script, it will contain whatever the script had stored upon previous call (or nil if it was not set)&lt;br /&gt;
&lt;br /&gt;
Note: This feature is available starting from release 2.9.85, 2.10.31 and 3.0.15 (in respective branches 2.9, 2.10 or 3.0)&lt;br /&gt;
&lt;br /&gt;
== Routing Script Tests ==&lt;br /&gt;
The Web portal features a tool for Testing Scripts. The user must enter parameters to simulate the incoming call and after pressing the Test button, will output selected routes and numbers.  You do not need to activate the new routes, or the new scripts to use this test tool: It can be used to test the routing scripts and routing table before activating it.&lt;br /&gt;
This is available in the Routing Scripts section of the Web portal.&lt;br /&gt;
&lt;br /&gt;
=== Test parameters ===&lt;br /&gt;
==== @call_params  ====&lt;br /&gt;
&lt;br /&gt;
That variable should contain a hash of call parameters that will be passed to the routing script. This is equivalent to the incoming call parameters. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== @nap_list  ====&lt;br /&gt;
&lt;br /&gt;
A list of the hash containing the nap statuses. This is equivalent to the nap statuses at the time the call is to be routed. &lt;br /&gt;
&lt;br /&gt;
'''The nap list is hashed by the nap names in UPPERCASE.''' It is important to consider this when creating new dynamic route or nap attributes that may nap names that will be used to fetch a status. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== @params  ====&lt;br /&gt;
&lt;br /&gt;
A hash of hashes containing parameters. This hash contains bridge parameters and other kind of parameter groups may be added in the future. &lt;br /&gt;
&lt;br /&gt;
  @params = {&lt;br /&gt;
     :bridge =&amp;gt; {:announcement_tone, &amp;quot;announcement.wav&amp;quot;},&lt;br /&gt;
     :contacts =&amp;gt; {&lt;br /&gt;
       :index=&amp;gt;&amp;quot;1&amp;quot;,&lt;br /&gt;
       :list=&amp;gt;[&lt;br /&gt;
          {:called_number=&amp;gt;&amp;quot;6660&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;&amp;quot;,&lt;br /&gt;
           :raw_data=&amp;gt;&amp;quot;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
          {:called_number=&amp;gt;&amp;quot;6661&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6661@192.168.215.127&amp;quot;, &lt;br /&gt;
           :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6661@192.168.215.127&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
       ],&lt;br /&gt;
       :source_indexes=&amp;gt;&amp;quot;nil,0&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Back to [[Routing script tutorial|Routing Script Tutorial]].&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Routing_script_tutorial:Mini_Development_Guide</id>
		<title>Routing script tutorial:Mini Development Guide</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Routing_script_tutorial:Mini_Development_Guide"/>
				<updated>2019-04-04T20:20:21Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* Script parameters protocol mapping */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Call object  ==&lt;br /&gt;
&lt;br /&gt;
=== Get  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to get the call parameters. The possible parameters are described in the section &amp;quot;Call parameters&amp;quot; &lt;br /&gt;
&lt;br /&gt;
  called_number = caf_call.get&amp;amp;nbsp;:called&lt;br /&gt;
&lt;br /&gt;
=== List_params  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to retrieve the list of supported call parameters. For example to extract all the possible call parameters from the the call object and put it in hash. &lt;br /&gt;
&lt;br /&gt;
  caf_call.list_params.each {|param| call[param] = caf_call.get param }&lt;br /&gt;
&lt;br /&gt;
=== Accept  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to accept a call.  It actually creates one outgoing route that the gateway application will use to bridge the incoming call leg.  If more than one outgoing route is &amp;quot;accepted&amp;quot;, the gateway will try them one by one in the same order that they were accepted.   If an outgoing call leg fails (according to 'route retry' parameters), the next route in line will be used.  &lt;br /&gt;
&lt;br /&gt;
This method takes 2 arguments, the call parameters (hash) and the route parameters (hash).  Note that calling this method does NOT stop the flow of the script.&lt;br /&gt;
&lt;br /&gt;
Apply route remapping rules &lt;br /&gt;
&lt;br /&gt;
  caf_call.accept out_call, route&lt;br /&gt;
&lt;br /&gt;
=== Refuse  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to set the reason code for the incoming call leg refusal.  However, this function does NOT stop the flow of the script. &lt;br /&gt;
&lt;br /&gt;
  caf_call.refuse&amp;amp;nbsp;:reason =&amp;amp;gt;&amp;amp;nbsp;:temporary_failure&lt;br /&gt;
&lt;br /&gt;
To immediately refuse the incoming call leg and stop processing the script, the script must raise an exception.  Exiting the script by raising the exception overwrites any reason cause previously stored using refuse().&lt;br /&gt;
&lt;br /&gt;
  raise RoutingException, :no_route&lt;br /&gt;
&lt;br /&gt;
The supported refusal cause values for both refuse() and raise() are described in the section &amp;quot;[[Routing_script_tutorial:Mini_Development_Guide#Reason_values|Reason values]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Script parameters protocol mapping  ===&lt;br /&gt;
&lt;br /&gt;
The following call parameters are available in the call object. For example:&lt;br /&gt;
&lt;br /&gt;
  called_number = call[:called]&lt;br /&gt;
&lt;br /&gt;
For information on how to use and remap call parameters, see [[Toolpack:_How_to_Use_RegEx_in_Remapped_Called_and_Calling_Number_Mask | How to use regex in Remapped Called and Calling Number Mask]]&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 921px; height: 805px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Script parameter name''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''ISDN&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''R2 CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SS7&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SIP&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Comment&amp;lt;br&amp;gt;'''&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Toolpack version&amp;lt;br&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| leg_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Leg ID&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| session_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Session ID&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_session_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Original Session ID (before call transfer or redirections)&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| ANI (Group B)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - address signals (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used (when present) instead.&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - host (domain or IP) &amp;lt;br&amp;gt; &lt;br /&gt;
|  For example : The 'telcobridges.com' in From: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - port &amp;lt;br&amp;gt; &lt;br /&gt;
|  For example : The '6060' in From: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_noa&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - nature of address indicator (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used (when present) instead&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - numbering plan indicator (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used&amp;amp;nbsp;(when present) instead&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_display &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Display' IE - Display information&amp;lt;br&amp;gt; &lt;br /&gt;
Q931: 'Facility CNAM' IE when presentation is allowed for DMS/NI2 variants&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763 &lt;br /&gt;
ITU97: 'Display information' IE - display information &lt;br /&gt;
ANSI95: 'Generic name' IE - display information &lt;br /&gt;
| SIP:From - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_display_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Display' IE - Display information (present and/or first byte)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Display information' IE - present or not&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Presentation indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - display-name (displays 'anonymous' or not) &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - privacy&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_screening&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Screening indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Remote-party-id - screen&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_category&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Call party category (Group A)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party's category' IE - calling party's category&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - cpc &lt;br /&gt;
&lt;br /&gt;
SIP:P-asserted-identity - cpc&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber &lt;br /&gt;
(Generic Number / NDS)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Number digits &amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - Number digits&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| Requires option 'support 2 calling number IE' in the profile.  This variable has priority over 'private_address' in the outgoing direction.&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_noa&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_presentation&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Presentation indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_screening &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Screening indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_display&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Facility CNAM' IE when presentation is restricted for DMS/NI2 variants&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_display_type &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Indicate presence or not of the private calling information&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The 'fluffy' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - host (domain or IP)&lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - host (domain or IP) &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The 'telcobridges.com' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - port&lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - port&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The '6060' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| DNIS (Group A)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - user-info and host&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - host &amp;lt;br&amp;gt; &lt;br /&gt;
| For example : The 'telcobridges.com' in To: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - port number &amp;lt;br&amp;gt; &lt;br /&gt;
| For example : The '6060' in To: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number_npi&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default redirecting number and original called number forwarding behavior from incoming to outgoing leg &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number'&amp;amp;nbsp;1st IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Presentation indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion&amp;amp;nbsp;(2nd header) - diversion-privacy&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirecting indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_reason &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Reason for redirection&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirecting reason&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - diversion-reason&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_counter &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirection counter&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - diversion-counter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number &lt;br /&gt;
(OCN) &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion&amp;amp;nbsp; (1st header) - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Presentation indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-privacy&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_reason &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Reason for redirection&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - original redirection reason&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-reason&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_counter &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-counter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_npdi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - with qualifier=Ported number is present&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:RequestURI - npdi=yes is present&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - address signals with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:RequestURI - to user part when rn is present&amp;lt;br&amp;gt; &lt;br /&gt;
| rn is stored in the called number&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - nature of address indicator with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - numbering plan indicator with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| oli&lt;br /&gt;
(Originating line information) &amp;lt;br&amp;gt; &lt;br /&gt;
| 5ESS Codeset 6 OLI - Value&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Originating line information' IE - OLI&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - oli &lt;br /&gt;
&lt;br /&gt;
SIP:P-asserted-identity - oli&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| request_uri &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Complete Request URI string&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| request_uri_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default URI&amp;amp;nbsp;forwarding behavior from incoming to outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_header&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Any header&amp;lt;br&amp;gt; &lt;br /&gt;
| Requires option 'Forward custom headers' in Profiles-&amp;gt;SIP &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7.63&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| nap&lt;br /&gt;
(Network Access Point) &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg NAP name (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| type_of_network_identification&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Type of network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Type of network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| network_identification&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| SIP: Request-Line - cic&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| network_identification_plan&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Network identification plan &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Network identification plan &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default location number forwarding behavior from incoming to outgoing leg &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_presentation&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_screening &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| A script needs to set this to true if it wants to overwrite MLPP information in the outgoing leg.  Otherwise, profile relay 'outgoing mode' applies automatically.&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_look_for_busy &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - look ahead for busy&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_precedence_level &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - precedence level&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Resource-Priority - q735&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_network_identity &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - network identity&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_service_domain&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - MLPP service domain&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_isub &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party subaddress' IE - subaddress information&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - isub parameter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_isub_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party subaddress' IE - type of subaddress&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - isub-encoding parameter&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_isub &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party subaddress' IE - subaddress information&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - isub&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_isub_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Callinf party subaddress' IE - type of subaddress&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - isub-encoding&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_fci_default &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Default forward call indicator (FCI) value.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will overwrite FCI bits A, D, F, I and M with appropriate values according to call conditions&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_fci_force_mask &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Mask to select bits from ss7_fci_default that must be forced.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Bits from ss7_fci_default which corresponding bit in ss7_fci_force_mask is set will be forced, and no more controlled by Toolpack&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_bci_default &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Default backward call indicator (BCI) value.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will overwrite BCI bits AB, I, K, M and N with appropriate values according to call conditions&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_bci_force_mask &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Mask to select bits from ss7_bci_default that must be forced.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Bits from ss7_bci_default which corresponding bit in ss7_bci_force_mask is set will be forced, and no more controlled by Toolpack&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ls_name_forward_enabled&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| Enable line service and timeslot selection to create the outgoing leg&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.0&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ls_name&lt;br /&gt;
(Line Service or T1/E1 trunk) &amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| if tdm_ls_name_forward_enabled is set, try to use this line service name to create outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_timeslot_nb&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| if tdm_ls_name_forward_enabled is set, try to use this timeslot number to create outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_local_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SDP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_local_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SDP IP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_remote_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SDP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_remote_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SDP IP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_cot_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Requests SS7 in-call continuity test for this outgoing SS7 call&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will request a continuity test on the timeslot before making the outgoing call. If COT fails, the call will be dropped (then another route may be attempted)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reverse_charging_indication&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg Reverse charging indication IE present&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| If set in routing script, will add Reverse charging indication IE in outgoing leg (also use reverse_charging_indication_forward_enabled)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.12&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reverse_charging_indication_forward_enabled&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Enable forwarding of reverse charging indication from incoming to outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.12&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_call_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg SIP Call-Id&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.9.112 / 3.0.131&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_local_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SIP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_local_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SIP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_remote_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SIP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_remote_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SIP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noa values  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown_number (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number (0x4)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number (0x3)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;subscriber_number (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_specific (0x5)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_routing_national_format (0x7)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_routing_international_format (0x8)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;abbreviated_number (0x6)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;subscriber_number_operator_requested (0x71)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number_operator_requested (0x72)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number_operator_requested (0x73)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_number_present_operator_requested (0x74)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_number_present_cut_through_call_to_carrier (0x75)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;test_line_test_code (0x77)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_subscriber_number (0x71)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_national_number (0x73)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_international_number (0x74)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_950_numbe (0x76)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;special_number (0x73)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number_with_transit_network_selection (0x74)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number_with_transit_network_selection (0x75)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Those values will be remapped to the protocol specific NOA value. To provide protocol specific value: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:called_noa] = 0x70&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:called_noa] = 112&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Npi values  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown_number&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;isdn&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;telephony&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;data&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;telex&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Display Type values  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; =&amp;amp;gt; Type is unspecified. &lt;br /&gt;
*&amp;lt;tt&amp;gt;calling_party_name&amp;lt;/tt&amp;gt; =&amp;amp;gt; Type is 0xB1.&lt;br /&gt;
&lt;br /&gt;
Those values will be remapped to the protocol specific Display Information Type value. To provide protocol specific value: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display_type] = 0xB1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display_type] = 177&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Display value  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display] = &amp;quot;Roger Fluffy&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Presentation values for Calling number, Calling Subscriber (Generic Number), Redirecting Number, Original Called Number (OCN) and Location Number ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;not_available (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;allowed (0x0)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;restricted (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;addr_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;name_restricted&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Party Category  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
In case it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mapping from routing script to SS7/CAS R2/SIP&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Routing Script string &amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SS7 raw value &amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''R2 CAS scripts'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Default Rx CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''default Tx CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SIP &amp;quot;cpc=&amp;quot;  &amp;lt;br&amp;gt;''' &lt;br /&gt;
|-&lt;br /&gt;
| subscriber&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xa&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_SUBSCRIBER &amp;lt;br&amp;gt; &lt;br /&gt;
| 1 and 7&amp;lt;br&amp;gt; &lt;br /&gt;
| 7&amp;lt;br&amp;gt; &lt;br /&gt;
| ordinary&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| subscriber_with_priority&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xb&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_SUBSCRIBER_WITH_PRIORITY &amp;lt;br&amp;gt; &lt;br /&gt;
| 2 and 9 &amp;lt;br&amp;gt; &lt;br /&gt;
| 2 &amp;lt;br&amp;gt; &lt;br /&gt;
| priority&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_french&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x1&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_FRENCH &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_english&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x2&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_ENGLISH (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_german&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x3&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_GERMAN (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_russian&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x4&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_RUSSIAN (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_spanish &amp;lt;br&amp;gt; &lt;br /&gt;
| 0x5&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_SPANISH (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| data&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xc&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_DATA &amp;lt;br&amp;gt; &lt;br /&gt;
| 6 and 8&amp;lt;br&amp;gt; &lt;br /&gt;
| 6 &amp;lt;br&amp;gt; &lt;br /&gt;
| datacall&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| test&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xd&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_TEST &amp;lt;br&amp;gt; &lt;br /&gt;
| 3 &amp;lt;br&amp;gt; &lt;br /&gt;
| 3 &amp;lt;br&amp;gt; &lt;br /&gt;
| test&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| payphone &amp;lt;br&amp;gt; &lt;br /&gt;
| 0xf&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_PAYPHONE &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| 7 &amp;lt;br&amp;gt; &lt;br /&gt;
| payphone&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| unknown &amp;lt;br&amp;gt; &lt;br /&gt;
| 0x0 &amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_UNKNOWN&amp;lt;br&amp;gt; &lt;br /&gt;
| 4, 11 to 15&amp;lt;br&amp;gt; &lt;br /&gt;
| 7 &amp;lt;br&amp;gt; &lt;br /&gt;
| unknown&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| unspecified &amp;lt;br&amp;gt; &lt;br /&gt;
| 0xa &amp;lt;br&amp;gt; &lt;br /&gt;
| invalid &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| invalid &amp;lt;br&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
[[CAS_R2_scripting#Category_meanings|Link to calling party categories used in CAS R2 scripts]]&lt;br /&gt;
&lt;br /&gt;
=== Screening values for Calling number, Calling Subscriber (Generic Number), and Location Number  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no (0x0)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;pass (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;fail (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_provided (0x3)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redirecting indicator values  ===&lt;br /&gt;
&lt;br /&gt;
SS7: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;no_redirection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted_all_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted_all_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted_restricted&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;spare&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redirecting number, Original Called Number and Diversion Reason ===&lt;br /&gt;
&lt;br /&gt;
ISDN: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;busy&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_reply&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;dte_out_of_order&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;forwarding_by_called_dte&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;unconditional&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SS7: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;busy      (SIP: user-busy)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_reply  (SIP: no-answer)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;unconditional&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection_immediate&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;mobile_not_reachable&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OLI (originating line information) values  ===&lt;br /&gt;
&lt;br /&gt;
The OLI parameter is a string that represents an integer value from 0 to 255. &lt;br /&gt;
&lt;br /&gt;
=== Information Transfer Capability values  ===&lt;br /&gt;
&lt;br /&gt;
information_transfer_capability: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;digital&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;restricted_digital&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;digital_with_tones&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;speech&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;3_1_khz_audio&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;video&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== redirecting_number_forward_enabled values  ===&lt;br /&gt;
&lt;br /&gt;
Controls forwarding or discarding of redirecting number (SIP: diversion header) to the outgoing call leg. &lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true. &lt;br /&gt;
*0/false: Redirecting number (and original called number) is not forwarded to outgoing call leg&lt;br /&gt;
*1/true: Redirecting number (and original called number) is forwarded to outgoing call leg&lt;br /&gt;
&lt;br /&gt;
The value for this parameter at the input of the routing script depends on the &amp;quot;Forward redirecting number&amp;quot; parameter in the &amp;quot;Advanced&amp;quot; section of the Gateway configuration page of the Web Portal. The script may change this value to override the Gateway configuration.&lt;br /&gt;
&lt;br /&gt;
Note: To &amp;quot;insert&amp;quot; a new redirecting number value on the outgoing leg, redirecting_number_forward_enabled must also be set to true.&lt;br /&gt;
&lt;br /&gt;
=== request_uri  ===&lt;br /&gt;
&lt;br /&gt;
Enables access to the Request-Line URI.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For example, if the Request-Line is: &lt;br /&gt;
&amp;lt;pre&amp;gt;Request-Line: INVITE sip:4175162082@172.22.45.13:5060;user=phone;transport=udp SIP/2.0&amp;lt;/pre&amp;gt; &lt;br /&gt;
Then the retrieved request_uri will be &amp;quot;sip:4175162082@172.22.45.13:5060;user=phone;transport=udp SIP/2.0&amp;quot;. &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
In the routing scripts, to retrieve only the called number, this script can be used:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;    if call_params[:request_uri] &amp;amp;amp;&amp;amp;amp; call_params[:request_uri] =~ /sip:(.*)@.*/&lt;br /&gt;
       call_params[:called] = $1&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
==== request_uri_forward_enabled ====&lt;br /&gt;
&lt;br /&gt;
This call parameter controls forwarding or discarding of request uri to outgoing call leg.The request uri is the information in the &amp;quot;Request-Line:&amp;quot; of the SIP INVITE message.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true. &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 0/false: Request uri is not forwarded to outgoing call leg &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 1/true: Request uri is forwarded to outgoing call leg &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The default value for this parameters is false. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== sip_scheme  ====&lt;br /&gt;
(Available in Toolpack 3.1+)&lt;br /&gt;
This call parameters indicates the scheme (generally &amp;quot;sip&amp;quot; or &amp;quot;sips&amp;quot;) of the incoming call.&lt;br /&gt;
&lt;br /&gt;
This also allows to control the scheme used for the outgoing call (regardless if request_uri_forward_enabled is used or not)&lt;br /&gt;
&lt;br /&gt;
Note: sips scheme must only be used on TLS NAPs (will cause call routing failure if NAP has only UDP or TCP transport types).&lt;br /&gt;
&lt;br /&gt;
=== sip_header values  ===&lt;br /&gt;
Contains custom sip headers from the inbound call leg. Any custom sip header can be added to an outgoing call leg:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
The  SIP header is in string format.&lt;br /&gt;
&lt;br /&gt;
'''string format:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;call[ :sip_header ] = &amp;quot;P-my-custom-header:value1 \nP-my-custom-header2:value2 \nP-my-custom-header3:value3&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Note: \n above are actual newline characters, not '\' followed by 'n')&lt;br /&gt;
&lt;br /&gt;
* PCAP sample: [[File:TB_Custom_SIP_Headers.pcap]]&lt;br /&gt;
&lt;br /&gt;
List of sip headers that will not appear in call[:sip_header] since they are already processed by the SIP stack:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Accept               Error-Info             Remote-Party-ID      &lt;br /&gt;
Accept-Contact       Event                  Replaces                        &lt;br /&gt;
Accept-Encoding      Expires                Reply-To               &lt;br /&gt;
Accept-Language      From                   Request-Disposition    &lt;br /&gt;
Alert-Info           In-Reply-To            Subject          &lt;br /&gt;
Allow                Max-Forwards           Subscription-State  &lt;br /&gt;
Allow-Events         MIME-version           Supported           &lt;br /&gt;
Also                 Min-Expires            Timestamp           &lt;br /&gt;
Anonymity            Min-SE                 To             &lt;br /&gt;
Authorization        Organization           Unsupported  &lt;br /&gt;
Authentication-Info  Path                   User-Agent  &lt;br /&gt;
Call-ID              Priority               Via  &lt;br /&gt;
Call-Info            Privacy                Warning  &lt;br /&gt;
Contact              Proxy-Authenticate     WWW-Authenticate  &lt;br /&gt;
Content-Disposition  Proxy-Authorization    Require  &lt;br /&gt;
Content-Encoding     Proxy-Require          Response-Key  &lt;br /&gt;
Content-Language     P-Media-Authorization  Retry-After  &lt;br /&gt;
Content-Length       P-Preferred-Identity   RPID-Privacy  &lt;br /&gt;
Content-Type         P-Asserted-Identity    Route  &lt;br /&gt;
CSeq                 RAck                   RSeq  &lt;br /&gt;
RAck                 Reason                 Security-Client  &lt;br /&gt;
Reason               Record-Route           Security-Server  &lt;br /&gt;
Date                 Refer-To               Security-Verify&lt;br /&gt;
Diversion            Referred-By            Server&lt;br /&gt;
Encryption           Reject-Contact         Service-Route             &lt;br /&gt;
                                            Session-Expires&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sip header parameters  ===&lt;br /&gt;
The routing script can read (and modify) some SIP header parameters (user parameters, URI parameters or header parameters) from some SIP headers (To, From, P-Asserted-Identity, Remote-Party-ID, Contact).&lt;br /&gt;
&lt;br /&gt;
==== Available parameters ====&lt;br /&gt;
* '''call[ :calling_parameters ]''' (SIP &amp;quot;From&amp;quot; header)&lt;br /&gt;
* '''call[ :called_parameters ]''' (SIP &amp;quot;To&amp;quot; header)&lt;br /&gt;
* '''call[ :private_address_parameters ]''' (SIP &amp;quot;P-Asserted-Identity&amp;quot; or &amp;quot;Remote-Party-ID&amp;quot; header)&lt;br /&gt;
* '''call[ :contact_parameters ]''' (SIP &amp;quot;Contact&amp;quot; header)&lt;br /&gt;
&lt;br /&gt;
These parameters (if present) contain a hash with 3 keys: user_param, uri_param and header_param.&lt;br /&gt;
Each of this key points to a string that contains all the parameters found in the corresponding SIP header.&lt;br /&gt;
* '''User parameters''' (parameters between the user name/number and the host). Example  &amp;lt;sip:alice;'''param=value'''@somewhere.com&amp;gt;&lt;br /&gt;
* '''URI parameters''' (parameters at the end of the URI). Example  &amp;lt;sip:alice@somewhere.com;'''param=value'''&amp;gt;&lt;br /&gt;
* '''Header parameters''' (outside the URI). Example  &amp;lt;sip:alice@somewhere.com&amp;gt;;'''param=value'''&lt;br /&gt;
Example to print all parameters of SIP &amp;quot;To&amp;quot; header:&lt;br /&gt;
  call[ :called_parameters ].inspect -&amp;gt; '{ :user_param =&amp;gt; &amp;quot;name1=value1;name2=value2&amp;quot;, :uri_param =&amp;gt; &amp;quot;name=value&amp;quot;, :header_param =&amp;gt; &amp;quot;name=value;example_param_without_value&amp;quot; }'&lt;br /&gt;
Example to modify (replace) the URI parameters of SIP &amp;quot;To&amp;quot; header:&lt;br /&gt;
  call[ :called_parameters ][ :uri_param ] = &amp;quot;user=phone&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Exceptions ====&lt;br /&gt;
'''Note:''' Some parameters are reported as their own call attribute (oli, isub, cpc, transport) so they have the same representation for all protocols (SS7, IDSN, SIP). They won't appear present in the generic SIP header parameters structures above.&lt;br /&gt;
&lt;br /&gt;
==== Forwarding from inbound to outbound call ====&lt;br /&gt;
By default, the parameters are not forwarded in a SIP to SIP call flow. The parameters '''will be forwarded''' when:&lt;br /&gt;
* accessed (read) from either the inbound or outbound call parameters&lt;br /&gt;
* written in either the inbound or outbound call parameters&lt;br /&gt;
&lt;br /&gt;
==== Example usage ====&lt;br /&gt;
Example to print the user parameters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  if call[:calling_parameters]&lt;br /&gt;
    puts &amp;quot;user parameters = #{call[:calling_parameters][:user_param].inspect}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example SIP &amp;quot;From&amp;quot; header:&lt;br /&gt;
  From:&amp;lt;sip:123456782;test1=val1;test2=val2@something.com;test3=val3;test4=val4&amp;gt;;test5=val5;test6=val6&lt;br /&gt;
And the resulting content in the routing script:&lt;br /&gt;
  calling_param.inspect -&amp;gt; {:user_param=&amp;gt;&amp;quot;test1=val1;test2=val2&amp;quot;, :uri_param=&amp;gt;&amp;quot;test3=val3;test4=val4&amp;quot;, :header_param=&amp;gt;&amp;quot;test5=val5;test6=val6&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
'''Note''' that printing the inbound or outbound call parameters is considered as a &amp;quot;read&amp;quot; action and would result in forwarding the parameter on the outbound leg.&lt;br /&gt;
&lt;br /&gt;
Example to overwrite inbound leg calling parameters with new parameters for the outbound leg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call [:calling_parameters] = { &lt;br /&gt;
  :user_param =&amp;gt; &amp;quot;user_param7=7;user_param8=8&amp;quot;,&lt;br /&gt;
  :uri_param =&amp;gt; &amp;quot;uri_param9=value9&amp;quot;,&lt;br /&gt;
  :header_param =&amp;gt; &amp;quot;header_paramA=A&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to add user=phone and keep all other uri parameters.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  call[:calling_parameters] ||= {} # Create a hash if not already present&lt;br /&gt;
  call[:calling_parameters][:uri_param] ||= &amp;quot;&amp;quot; # Create a string if not already present&lt;br /&gt;
  call[:calling_parameters][:uri_param] += &amp;quot;;&amp;quot; if call[:calling_parameters][:uri_param] != &amp;quot;&amp;quot;&lt;br /&gt;
  call[:calling_parameters][:uri_param] += &amp;quot;user=phone&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MLPP Precedence values  ===&lt;br /&gt;
&lt;br /&gt;
mlpp_look_for_busy: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;allowed&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;path_reserved&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;not_allowed&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_precedence_level: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;flash_override&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;flash&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;immediate&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;priority&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;routine&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_network_identity:&lt;br /&gt;
&lt;br /&gt;
3 digits value from 0 to 999&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_service_domain:&lt;br /&gt;
&lt;br /&gt;
24 bits value from 0 to 16777215&lt;br /&gt;
&lt;br /&gt;
=== ISUB subaddress information values  ===&lt;br /&gt;
&lt;br /&gt;
called_isub_type: &lt;br /&gt;
calling_isub_type: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap_ia5&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap_bcd&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;user&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
called_isub: &lt;br /&gt;
calling_isub: &lt;br /&gt;
&lt;br /&gt;
Digits for the subaddress information.&lt;br /&gt;
&lt;br /&gt;
=== Network Identification Plan  ===&lt;br /&gt;
&lt;br /&gt;
network_identification_plan: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;Unknown&amp;lt;/tt&amp;gt; (value 0)&lt;br /&gt;
*&amp;lt;tt&amp;gt;cic&amp;lt;/tt&amp;gt; (3 digits carrier identification code plus circuit code, value 1, SS7 or ISDN)&lt;br /&gt;
*&amp;lt;tt&amp;gt;user&amp;lt;/tt&amp;gt; (User, value 2, ISDN only)&lt;br /&gt;
*&amp;lt;tt&amp;gt;cic4&amp;lt;/tt&amp;gt; (4 digits carrier identification code plus circuit code, value 2, SS7 only) &lt;br /&gt;
*&amp;lt;tt&amp;gt;dnic&amp;lt;/tt&amp;gt; (public Data Network ID, value 3, SS7 only) &lt;br /&gt;
*&amp;lt;tt&amp;gt;mnic&amp;lt;/tt&amp;gt; (public land mobile network, value 6, SS7 only)&lt;br /&gt;
&lt;br /&gt;
=== Registered Users Information ===&lt;br /&gt;
Routing script can access information about registered users (when either the calling or called user is a known registered user).&lt;br /&gt;
When these fields are empty, it means that the calling/called (SIP from/to) does not correspond to a known registered user (routing script may still decide to route the call based on static routes).&lt;br /&gt;
&lt;br /&gt;
Information for the called user:&lt;br /&gt;
  params[:registered_user]&lt;br /&gt;
Information for the calling user:&lt;br /&gt;
  params[:calling_registered_user]&lt;br /&gt;
&lt;br /&gt;
These parameters are a hash of key/values that provide information about the contact.&lt;br /&gt;
  {&lt;br /&gt;
    :contact_list=&amp;gt;&lt;br /&gt;
    [&lt;br /&gt;
      {&lt;br /&gt;
        :contact=&amp;gt;&amp;quot;&amp;lt;sip:user_name_or_number@hostname:7070;transport=UDP&amp;gt;&amp;quot;,    -&amp;gt; Full contact&lt;br /&gt;
        :expires=&amp;gt;&amp;quot;60&amp;quot;,                   -&amp;gt; Contact expiry time (seconds)&lt;br /&gt;
        :host=&amp;gt;&amp;quot;hostname&amp;quot;,                -&amp;gt; host name from the contact header&lt;br /&gt;
        :name=&amp;gt;&amp;quot;user_name_or_number&amp;quot;,     -&amp;gt; user name from the contact header&lt;br /&gt;
        :nap_in=&amp;gt;&amp;quot;NAP_NAME&amp;quot;,              -&amp;gt; NAP that the contact has registered from&lt;br /&gt;
        :port=&amp;gt;&amp;quot;7070&amp;quot;,                    -&amp;gt; Port from the contact header&lt;br /&gt;
        :transport=&amp;gt;&amp;quot;UDP&amp;quot;                 -&amp;gt; Transport type from the contact header&lt;br /&gt;
        :q_value=&amp;gt;&amp;quot;0.00&amp;quot;,                 -&amp;gt; Q-value for the contact (for contact ordering)&lt;br /&gt;
        :src_host=&amp;gt;&amp;quot;10.0.0.10&amp;quot;,           -&amp;gt; Actual source IP address that the contact has registered from&lt;br /&gt;
        :src_port=&amp;gt;&amp;quot;7070&amp;quot;,                -&amp;gt; Actual source port that the contact has registered from&lt;br /&gt;
        :src_transport=&amp;gt;&amp;quot;UDP&amp;quot;,            -&amp;gt; Actual protocol that the contact has been registering with&lt;br /&gt;
       }&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
== Route parameters  ==&lt;br /&gt;
&lt;br /&gt;
All route may have these parameters: &lt;br /&gt;
&lt;br /&gt;
*calling &lt;br /&gt;
*called &lt;br /&gt;
*nap &lt;br /&gt;
*remapped_calling &lt;br /&gt;
*remapped_called &lt;br /&gt;
*remapped_nap &lt;br /&gt;
*remapped_destination_leg_profile (called remapped_profile prior to Toolpack 2.9)&lt;br /&gt;
*remapped_source_leg_profile (called remapped_incoming_profile prior to Toolpack 2.9)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  route[:remapped_nap]&lt;br /&gt;
&lt;br /&gt;
Additionally it is possible to add dynamic route attributes in the web portal. These can be referenced by their name.&lt;br /&gt;
For example:&lt;br /&gt;
*priority&lt;br /&gt;
*weight&lt;br /&gt;
&lt;br /&gt;
== Routing calls toward registered users ==&lt;br /&gt;
Static routes normally chose an outbound NAP to forward the call to.&lt;br /&gt;
&lt;br /&gt;
But it's also possible to create routes which outbound NAP is dynamically chosen by matching a registered user (when using [[Sip_registration_forwarding|SIP registration forwarding]]).&lt;br /&gt;
&lt;br /&gt;
More information can be found [[Sip_registration_forwarding#SIP_Calls_routing|here]] about the way to control the [[Sip_registration_forwarding#SIP_Calls_routing|priority of &amp;quot;dynamic&amp;quot; vs &amp;quot;static&amp;quot; routes]].&lt;br /&gt;
&lt;br /&gt;
More information can be found [[#Registered_Users_Information|here]] about using routing scripts to access registered users information during call routing.&lt;br /&gt;
&lt;br /&gt;
== Playing prompts announcements or tones  ==&lt;br /&gt;
&lt;br /&gt;
New feature in release 2.6, all bridges may have these parameters. These can be used to play IVR prompts (audio files) in different states of the call flow.&lt;br /&gt;
&lt;br /&gt;
*'''announcement_tone''' (played before outgoing call is routed)&lt;br /&gt;
*'''ring_tone''' (played after when waiting for outgoing call to answer)&lt;br /&gt;
*'''busy_tone''' (played if outgoing call failed)&lt;br /&gt;
*'''disconnect_tone''' (played after the call has reached it's maximum duration)&lt;br /&gt;
&lt;br /&gt;
Example to play an announcement to incoming call (before routing outgoing call, regardless if a matching route is found or not):&lt;br /&gt;
  bridge[:announcement_tone ] = &amp;quot;my_announcement.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play a ring-tone while the outgoing call is ringing:&lt;br /&gt;
  bridge[:ring_tone] = &amp;quot;my_ring_tone.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play an audio file when outgoing call fails (no route, or outgoing call is refused):&lt;br /&gt;
  bridge[:busy_tone] = &amp;quot;my_busy_tone.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play an audio file when call has reached the maximum allowed duration:&lt;br /&gt;
  bridge[:disconnect_tone] = &amp;quot;your_account_balance_is_empty.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Announcement file path format and options ===&lt;br /&gt;
&lt;br /&gt;
All file plabyacks (:announcement_tone,&amp;amp;nbsp;:busy_tone,&amp;amp;nbsp;:ring_tone,&amp;amp;nbsp;:disconnect_tone) inside bridge parameters use this format. &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;file1.wav:repeat:start_off:end_off,file2.wav:repeat:start_off:end_off,file3.wav:repeat:start_off:end_off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Optional parameters:&lt;br /&gt;
* repeat: number of times to play the file (0 and 1 have the same result)&lt;br /&gt;
* start_off: Start offset in milliseconds&lt;br /&gt;
* end_off: End offset in milliseconds&lt;br /&gt;
&lt;br /&gt;
Http and other path formats are described here: [[Customer_application_framework:play_audio_files#Play_path_format|Path format]]&lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
The following example will play file1.wav once, and then play file2.wav in loop: &lt;br /&gt;
  &amp;quot;file1.wav,file2.wav:-1&amp;quot; &lt;br /&gt;
&lt;br /&gt;
==== Example 2 ====&lt;br /&gt;
The following example will play file1.wav from start offset of 1 second to end offset of 3 seconds, then twice file2.wav from second 5 to second 10.&lt;br /&gt;
  &amp;quot;file1.wav:0:1000:3000,file2.wav:2:5000:10000&amp;quot; &lt;br /&gt;
&lt;br /&gt;
==== Example 3 ====&lt;br /&gt;
The following example will play file1.wav once, ending at offset of 30 seconds.&lt;br /&gt;
  &amp;quot;file1.wav:0:0:30000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== announcement_tone  ===&lt;br /&gt;
&lt;br /&gt;
  params[:bridge][:announcement_tone] = &amp;quot;announcement.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call before any outgoing call is placed. The outgoing call occurs when the file finished playing.&lt;br /&gt;
&lt;br /&gt;
==== announcement_tone options ====&lt;br /&gt;
===== announcement_tone_answer =====&lt;br /&gt;
  params[:bridge][:announcement_tone_answer] = &amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Forces an answer of the call before playing the announcement. Default if argument not provided is &amp;quot;no&amp;quot;, in which case call is only alerted with in-band media.&lt;br /&gt;
&lt;br /&gt;
===== announcement_code_detect =====&lt;br /&gt;
This option allows that the tone detection is enabled during the announcement play.&lt;br /&gt;
&lt;br /&gt;
Collected digits can be inserted into the CDR logs (radius attribute &amp;quot;Telcob-CollectedDigits&amp;quot;, or text CDR variable @{CollectedDigits}).&lt;br /&gt;
&lt;br /&gt;
Collected digits can also be sent back to routing script, which is called again with the same call attributes, except that the called number is replaced by the collected digits.&lt;br /&gt;
&lt;br /&gt;
Code detect has multiple options, as shown in the following code:&lt;br /&gt;
  code_detect = {&lt;br /&gt;
    :type                   =&amp;gt; :DTMF,   # :DTMF or :MFR1 tone detection.&lt;br /&gt;
                                        # Default is MFR1.&lt;br /&gt;
    :prefix                 =&amp;gt; &amp;quot;&amp;quot;,      # Prefix (digits) that is removed from collected digits.&lt;br /&gt;
                                        # Default is empty.&lt;br /&gt;
    :suffix                 =&amp;gt; &amp;quot;&amp;quot;,      # Suffix (digits) that is removed from collected digits&lt;br /&gt;
                                        # and causes routing script to be immediately called.&lt;br /&gt;
                                        # Default is empty.&lt;br /&gt;
    :suffix_removal         =&amp;gt; false,   # Controls the removal of the suffix from the collected digit string that's reported to routing script.&lt;br /&gt;
                                        # Default is false&lt;br /&gt;
    :timeout                =&amp;gt; 0,       # Inter-digit timeout (ms) after which collected digits are passed to the routing script.&lt;br /&gt;
                                        # Use 0 for &amp;quot;no timeout&amp;quot;.&lt;br /&gt;
                                        # Default is 1000ms&lt;br /&gt;
    :barge_in_interruption  =&amp;gt; true,    # When enabled, playing announcement is stopped as soon as first digit is collected.&lt;br /&gt;
                                        # Default is true.&lt;br /&gt;
    :proceed_on_play_done   =&amp;gt; false,   # When true:  Outgoing call is made after announcement finishes playing.&lt;br /&gt;
                                        #             Routing script is not called again.&lt;br /&gt;
                                        # When false: Outgoing call is never made.&lt;br /&gt;
                                        #             Digits are collected until timeout or suffix match,&lt;br /&gt;
                                        #             then routing script is called again.&lt;br /&gt;
                                        # Default is false.&lt;br /&gt;
    :cas_on_hook            =&amp;gt; false,   # Specific for CAS-R1 calls. Makes CAS bits switch to &amp;quot;on-hook&amp;quot; when announcement finished playing&lt;br /&gt;
                                        # (but the call is not &amp;quot;terminated&amp;quot; from Toolpack point of view)&lt;br /&gt;
                                        # Default is false.&lt;br /&gt;
    :cas_on_hook_delay      =&amp;gt; 0,       # Duration of cas bits &amp;quot;on-hook&amp;quot; state.&lt;br /&gt;
                                        # Only effective if cas_on_hook is set to true.&lt;br /&gt;
                                        # Value of 0 stands for &amp;quot;infinite delay&amp;quot;.&lt;br /&gt;
                                        # Default is 0.&lt;br /&gt;
    :repeat_delay           =&amp;gt; 0,       # Delay between repetition of the announcement. The announcement will repeat&lt;br /&gt;
                                        # itself every &amp;quot;repeat_delay&amp;quot; until a code is detected (suffix match or timetout).&lt;br /&gt;
                                        # Value of 0 stands for &amp;quot;infinite delay&amp;quot; (no repeating).&lt;br /&gt;
                                        # Default is 0.&lt;br /&gt;
  }&lt;br /&gt;
'''Example 1''': Collect DTMF digits, and call routing script again with collected digits upon timeout or suffix match.&lt;br /&gt;
  code_detect = { :type =&amp;gt; :DTMF, :suffix =&amp;gt; &amp;quot;#&amp;quot;, :timeout =&amp;gt; 5000 }&lt;br /&gt;
  params[:bridge][:announcement_code_detect] = code_detect&lt;br /&gt;
&lt;br /&gt;
'''Example 2''': Collect digits during the announcement (for CDR logs), then proceed (make outgoing call) after announcement finishes playing&lt;br /&gt;
  code_detect = { :type =&amp;gt; :DTMF, :timeout =&amp;gt; 0, :barge_in_interruption =&amp;gt; false, :proceed_on_play_done =&amp;gt; true }&lt;br /&gt;
  params[:bridge][:announcement_code_detect] = code_detect&lt;br /&gt;
&lt;br /&gt;
==== Controlling what happens after announcement ====&lt;br /&gt;
The routing script can control what happens with the call after the announcement finishes playing:&lt;br /&gt;
* An outgoing call is made&lt;br /&gt;
* Incoming call is hung-up&lt;br /&gt;
* Do nothing (wait for the incoming call to hang-up)&lt;br /&gt;
===== An outgoing call is made =====&lt;br /&gt;
This happens when the script has returned matching routes (and did not raise RoutingException)&lt;br /&gt;
&lt;br /&gt;
===== Incoming call is hung-up =====&lt;br /&gt;
This happens when the script returns no routes (in which case base_routing will raise RoutingException with cause :no_route).&lt;br /&gt;
&lt;br /&gt;
It also happens when the script explicitly raises RoutingException.&lt;br /&gt;
&lt;br /&gt;
The incoming call will be terminated with the specified cause.&lt;br /&gt;
For example&lt;br /&gt;
    raise RoutingException, :temporary_failure&lt;br /&gt;
(See &amp;quot;Reason values&amp;quot; section in this page for list of available causes)&lt;br /&gt;
&lt;br /&gt;
===== Do nothing (wait for the incoming call to hang-up) =====&lt;br /&gt;
If a filter raises RoutingException with code :ok, then the incoming call will not be terminated at the end of the announcement play.&lt;br /&gt;
Announcement digit collection will remain active if appropriate.&lt;br /&gt;
For example:&lt;br /&gt;
    raise RoutingException, :ok&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ring_tone  ===&lt;br /&gt;
  params[:bridge][:ring_tone] = &amp;quot;ringing.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call while waiting for the outgoing call to be answered.&lt;br /&gt;
&lt;br /&gt;
Ring tone playback can also be configured in the Web Portal, from the incoming call's profile (under &amp;quot;Tones and Call Progress Options&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Routing script has precedence over profile (a routing script that fills params[:bridge][:ring_tone] will override the profile's ring tone behavior).&lt;br /&gt;
&lt;br /&gt;
==== ring_tone options ====&lt;br /&gt;
===== ring_tone_state =====&lt;br /&gt;
  params[:bridge][:ring_tone_state] = :alerted&lt;br /&gt;
&lt;br /&gt;
Call state from which ring tone is being played. Available values are:&lt;br /&gt;
* '''immediately''':  Ring tone starts playing immediately on the incoming leg&lt;br /&gt;
* '''accepted''':     Ring tone starts playing as soon as outgoing call is accepted&lt;br /&gt;
* '''callprogress''': Ring tone starts playing as soon as &amp;quot;call progress&amp;quot; is received on the outgoing call&lt;br /&gt;
* '''alerted''' (default):      Ring tone starts playing only once outgoing call is alerted (but won't play if alert indicates early media from outgoing call)&lt;br /&gt;
&lt;br /&gt;
This option also apply when params[:bridge][:ring_tone] is not used, because it also apply to ring tone playback configured in the Web Portal, from the incoming call's profile.&lt;br /&gt;
&lt;br /&gt;
=== busy_tone  ===&lt;br /&gt;
  Toolpack 2.8 and above:&lt;br /&gt;
    params[:bridge][:busy_tone] = &amp;quot;no_route.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Note: Obsolete name (toolpack 2.7.153 and earlier, but still supported in recent releases):&lt;br /&gt;
    params[:bridge][:call_progress_tone] = &amp;quot;no_route.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call when outgoing call fails (never answered).&lt;br /&gt;
&lt;br /&gt;
Note that announcement_tone, if used, is played before the outgoing call attempt is made, and thus before the busy_tone.&lt;br /&gt;
&lt;br /&gt;
Busy tone playback can also be configured in the Web Portal, from the incoming call's profile (under &amp;quot;Tones and Call Progress Options&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Routing script has precedence over profile (a routing script that fills params[:bridge][:busy_tone] will override the profile's busy tone behavior).&lt;br /&gt;
&lt;br /&gt;
Special value '''&amp;quot;none&amp;quot;''' can be used by routing script to force playing nothing (as empty string would default to profile's behavior)&lt;br /&gt;
&lt;br /&gt;
==== busy_tone options ====&lt;br /&gt;
===== busy_tone_answer =====&lt;br /&gt;
  params[:bridge][:busy_tone_answer] = &amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Forces an answer of the call before playing the busy tone. Default if argument not provided is &amp;quot;no&amp;quot;, in which case call is only alerted with in-band media.&lt;br /&gt;
&lt;br /&gt;
=== disconnect_tone  ===&lt;br /&gt;
  params[:bridge][:disconnect_tone] = &amp;quot;max_duration.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call when call duration (:max_call_duration) is reached. Then the leg will be terminated with specified reason (:call_duration_reason).&lt;br /&gt;
&lt;br /&gt;
==== disconnect_tone options ====&lt;br /&gt;
===== max_call_duration  =====&lt;br /&gt;
  params[:bridge][:max_call_duration] = &amp;quot;60000&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Maximum call duration in millisecond. This timer is started when entering answer state.&lt;br /&gt;
&lt;br /&gt;
===== call_duration_reason  =====&lt;br /&gt;
  params[:bridge][:call_duration_reason] =&amp;amp;nbsp;:resource_unavailable &lt;br /&gt;
&lt;br /&gt;
Drop both legs with this reason when call duration (:max_call_duration) is reached.&lt;br /&gt;
&lt;br /&gt;
=== Managing audio prompts through Web Portal ===&lt;br /&gt;
Audio prompts can be uploaded or deleted from the TMedia unit through the Web Portal:&lt;br /&gt;
[[Toolpack:Configuring_Audio_Prompts_A|Managing audio prompts]]&lt;br /&gt;
&lt;br /&gt;
Prompts management must be done using the Web Portal of the primary server (in systems with redundant TMedia units or redundant host servers).&lt;br /&gt;
The file will automatically get replicated to the secondary server.&lt;br /&gt;
&lt;br /&gt;
=== Managing audio prompts manually ===&lt;br /&gt;
Any file on the TMedia host file system can be played. This means it's possible to manage prompts through ssh/scp.&lt;br /&gt;
&lt;br /&gt;
==== The default (replicated) prompts folder ====&lt;br /&gt;
By default, when playing a prompt, Toolpack will look in the default prompts folder:&lt;br /&gt;
 /lib/tb/toolpack/pkg/prompts&lt;br /&gt;
The root of this &amp;quot;prompts&amp;quot; directory is automatically replicated to secondary unit of redundant setups (1+1, N+1, redundant hosts). Sub-folders won't be replicated.&lt;br /&gt;
&lt;br /&gt;
Any prompt play request without explicit file path will map to this folder. For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /lib/tb/toolpack/pkg/prompts/no_route.wav&lt;br /&gt;
&lt;br /&gt;
==== Relative file paths ====&lt;br /&gt;
Any file path that begins with &amp;quot;file://&amp;quot; is considered relative to the tbstreamserver application's working directory:&lt;br /&gt;
 /lib/tb/toolpack/setup/12358/2.8/apps/tbstreamserver/&lt;br /&gt;
(Where &amp;quot;2.8&amp;quot; may be replaced by the current major version of your system)&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;file://my_folder/no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /lib/tb/toolpack/setup/12358/2.8/apps/tbstreamserver/my_folder/no_route.wav&lt;br /&gt;
&lt;br /&gt;
==== Absolute file paths ====&lt;br /&gt;
Absolute paths can also be provided.&lt;br /&gt;
For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;file:///root/my_folder/no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /root/my_folder/no_route.wav&lt;br /&gt;
&lt;br /&gt;
== Recording call legs  ==&lt;br /&gt;
Introduced in release 2.6.44, it's now possible to use routing scripts to ask for recording incoming and/or outgoing call legs.&lt;br /&gt;
&lt;br /&gt;
See example filter script &amp;quot;call_recording&amp;quot; (created by default in Web Portal routing scripts starting with 2.6.44) for an example.&lt;br /&gt;
&lt;br /&gt;
=== Recording the incoming call leg  ===&lt;br /&gt;
To record the incoming call leg, the routing script (in a &amp;quot;after filter&amp;quot; for example) has to set the following parameter:&lt;br /&gt;
&lt;br /&gt;
  bridge[ :record_incoming ]  = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Recording the outgoing call leg  ===&lt;br /&gt;
To record the outgoing call leg, the routing script (in a &amp;quot;after filter&amp;quot; for example) has to set the following parameter, per route (the decision to record or not, or the file name to record to, can be set per matching route):&lt;br /&gt;
&lt;br /&gt;
  # Need to clone the routes in order to have the right to modify them&lt;br /&gt;
  routes = clone_routes params[:routes]&lt;br /&gt;
  routes.each do |route|&lt;br /&gt;
    route[ :record_outgoing ]  = &amp;quot;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  # Store modified routes back to the parameters for this outgoing call&lt;br /&gt;
  params[:routes] = routes&lt;br /&gt;
&lt;br /&gt;
=== Record the outgoing call leg within incoming leg's recorded file (mixing)  ===&lt;br /&gt;
  [...]&lt;br /&gt;
    route[ :record_outgoing ]  = &amp;quot;@{MixWithIncoming}&amp;quot;&lt;br /&gt;
  [...]&lt;br /&gt;
&lt;br /&gt;
=== Choosing file path to record to  ===&lt;br /&gt;
The value assigned to &amp;quot;:record_incoming&amp;quot; or &amp;quot;:record_outgoing&amp;quot; is the path to record the file to.&lt;br /&gt;
&lt;br /&gt;
The paths can be absolute, or relative. When relative, they are relative to the &amp;quot;tbstreamserver&amp;quot; application working directory, for example:&lt;br /&gt;
  /lib/tb/toolpack/setup/12358/2.7/apps/tbstreamserver/&lt;br /&gt;
&lt;br /&gt;
* Empty file name will default to a name that contains various information about the call:&lt;br /&gt;
** ''LinkId'':     Id common between all legs of this call bridge&lt;br /&gt;
** ''LegId'':      Unique Id for this leg&lt;br /&gt;
** ''Nap'':        Current NAP name this call leg is from&lt;br /&gt;
** ''Direction'':  &amp;quot;IN&amp;quot; or &amp;quot;OUT&amp;quot; (depends if call leg is incoming or outgoing leg)&lt;br /&gt;
** ''Calling'':    The calling number of this call leg&lt;br /&gt;
** ''Called'':     The called number of this call leg&lt;br /&gt;
** ''Protocol'':   The signaling protocol of this call leg (SS7, ISDN, CAS, SIP)&lt;br /&gt;
** ''Media info'': Codec + IP/Port for SIP calls, Trunk/Timeslot for TDM calls&lt;br /&gt;
* To record outgoing call leg in the same audio file as incoming call leg (mixing), use the following:&lt;br /&gt;
** @{MixWithIncoming}: Record outgoing legs in same file as incoming legs&lt;br /&gt;
* Variables can be used to insert in the recording path information that's not already available from routing scripts:&lt;br /&gt;
** @{CURRENT_PKG}: Version of current package&lt;br /&gt;
*** Example: 2.6.45&lt;br /&gt;
** @{DATE format}: Prints the date, where 'format' is expressed as described for the 'strftime' function&lt;br /&gt;
*** Example: @{DATE %Y-%m-%d} =&amp;gt; 2013-01-28&lt;br /&gt;
** @{DefaultName}: Replaced by the default file name for recording, which contains:&lt;br /&gt;
*** LinkId:     Id common between all legs of this call bridge&lt;br /&gt;
*** LegId:      Unique Id for this leg&lt;br /&gt;
*** Nap:        Current NAP name this call leg is from&lt;br /&gt;
*** Direction:  &amp;quot;IN&amp;quot; or &amp;quot;OUT&amp;quot; (depends if call leg is incoming or outgoing leg)&lt;br /&gt;
*** Calling:    Calling number&lt;br /&gt;
*** Called:     Called number&lt;br /&gt;
*** Protocol:   Protocol type of this call (SS7, ISDN, CASR2, SIP)&lt;br /&gt;
*** Media info: Codec + IP/Port for SIP calls, Trunk/Timeslot for TDM calls&lt;br /&gt;
*** Example: &amp;quot;73EBA698-F3D67B4B-NAP_SS7-IN-5550000-5550001-SS7-TRUNK_BELL_11-24.wav&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;73EBA698-73EBA698-NAP_SIP-OUT-5550000-5550001-SIP-G723-10.3.10.101-1050.wav&amp;quot;&lt;br /&gt;
** @{DefaultPath}:  Default recording folder and file name: &amp;quot;@{RECORD_PATH}/@{DATE %Y-%m-%d}/@{DefaultName}&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;/lib/tb/toolpack/setup/12358/recorded_calls/73EBA698-F3D67B4B-NAP_SS7-IN-5550000-5550001-SS7-TRUNK_BELL_11-24.wav&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;/lib/tb/toolpack/setup/12358/recorded_calls/73EBA698-73EBA698-NAP_SIP-OUT-5550000-5550001-SIP-G723-10.3.10.101-1050.wav&amp;quot;&lt;br /&gt;
** @{Direction}: Direction of current leg (IN our OUT)&lt;br /&gt;
*** Example: IN&lt;br /&gt;
** @{LegId}: Current LegId (Unique Id for this leg)&lt;br /&gt;
*** Example: F3D67B4B&lt;br /&gt;
** @{LinkId}: Current LinkId (Id common between all legs of this call bridge)&lt;br /&gt;
*** Example: 73EBA698&lt;br /&gt;
** @{PKG_HOME}: Path where packages are stored.&lt;br /&gt;
*** Note: It's not recomended to use that path on redundant systems, package file replication may cause confusion in recorded files.&lt;br /&gt;
*** Example: /lib/tb/toolpack/pkg&lt;br /&gt;
** @{PROMPT_PATH}: Default path where audio prompts are stored&lt;br /&gt;
*** Note: It's not recomended to use that path on redundant systems, package file replication may cause confusion in recorded files.&lt;br /&gt;
*** Example: /lib/tb/toolpack/pkg/prompts&lt;br /&gt;
** @{Protocol}: Protocol of current leg&lt;br /&gt;
*** Example: SS7&lt;br /&gt;
** @{RECORD_PATH}: Default recording folder: &amp;quot;@{TB_SETUP_HOME}/recorded_calls/&amp;quot;&lt;br /&gt;
** @{TBX_GW_PORT}: Current &amp;quot;System Id&amp;quot; (also called &amp;quot;Gateway Port&amp;quot;)&lt;br /&gt;
*** Example: 12358&lt;br /&gt;
** And all variables listed here: [[Customer_application_framework:play_audio_files#Helpful_variables_to_build_play_or_record_file_paths|Building play or record file path]]&lt;br /&gt;
&lt;br /&gt;
== Controlling UUI (user-to-user information) relay  ==&lt;br /&gt;
UUI (user-to-user information) can be present in different messages received by either call leg during a call. For example, information can be carried during the initial invite, other information can be carried when the call is alerted, answered, or terminated.&lt;br /&gt;
&lt;br /&gt;
Routing scripts can control if the UUI received from one leg through the call will be forwarded to the other call leg:&lt;br /&gt;
*uui_forward_enabled&lt;br /&gt;
&lt;br /&gt;
Routing scripts can also read and modify the UUI received with the incoming call leg, before it gets forwarded upon creation of the outgoing call leg:&lt;br /&gt;
*uui &lt;br /&gt;
&lt;br /&gt;
=== UUI (user-to-user indication) values  ===&lt;br /&gt;
&lt;br /&gt;
Byte array represented as ruby String. Use ''bridge=params[:bridge]'', then ''bridge[:uui]'' to access the data.&lt;br /&gt;
&lt;br /&gt;
To access the bytes in Ruby, use ruby String operator []. For example:  bridge[:uui][0] will return the binary value of the first UUI byte.&lt;br /&gt;
&lt;br /&gt;
Function each_byte can also be useful to iterate through all bytes of the UUI.&lt;br /&gt;
&lt;br /&gt;
=== uui_forward_enabled values  ===&lt;br /&gt;
&lt;br /&gt;
Controls forwarding or discarding of UUI to outgoing call leg. &lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true.&lt;br /&gt;
* 0/false: UUI is not forwarded between call legs&lt;br /&gt;
* 1/true: UUI is forwarded between call legs&lt;br /&gt;
&lt;br /&gt;
The value for this parameter at input of routing script depends on the &amp;quot;Forward UUI&amp;quot; parameter in the &amp;quot;Advanced&amp;quot; section of the Gateway configuration page of the Web Portal. The script may change this value to override the Gateway configuration.&lt;br /&gt;
&lt;br /&gt;
== Authorization ==&lt;br /&gt;
Starting with release 2.7, it is possible to issue RADIUS authorization requests from routing scripts. To do so, the params[:authorization] object must be filled with the required RADIUS attributes and [[#Refuse|an exception must be raised]] with reason :authorization_required.&lt;br /&gt;
&lt;br /&gt;
When the authorization is completed, the routing script is called again with the result. The params[:authorization] object will be filled with the RADIUS attributes from the response. The params[:authorization][:result] field will also contain a string indicating the result of the authorization:&lt;br /&gt;
&lt;br /&gt;
* ''accept'': The authorization was successful.&lt;br /&gt;
* ''reject'': The authorization was refused.&lt;br /&gt;
* ''challenge'': The authorization was challenged.&lt;br /&gt;
* ''timeout'': The authorization was not answered.&lt;br /&gt;
&lt;br /&gt;
== Call diversion options ==&lt;br /&gt;
It's possible to control the call flow when a call diversion information is received in the alerting state.&lt;br /&gt;
&lt;br /&gt;
Two fields are available: bridge[ :diversion ] and bridge[ :diversion_reason ]&lt;br /&gt;
&lt;br /&gt;
The internal release cause TOOLPACK_DIVERT_NOT_ALLOWED is used by gateway application to terminate both legs.&lt;br /&gt;
&lt;br /&gt;
  bridge[ :diversion ] = :allowed&lt;br /&gt;
The alert message will not be analyzed and the call will be progressed. Default behavior.&lt;br /&gt;
  bridge[ :diversion ] = :not_allowed&lt;br /&gt;
If the alert message indicates that the call is diverted, the call will be released no matter the In-band information to allow&lt;br /&gt;
early media.&lt;br /&gt;
  bridge[ :diversion ] = :not_allowed_w_early_media&lt;br /&gt;
The call will be released If the alert message indicates that the call is diverted with in-band information to allow early media.&lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;*&amp;quot;&lt;br /&gt;
If the diversion is not allowed, the gateway will drop the call for any redirecting reason. &lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;0,1,2&amp;quot;&lt;br /&gt;
or&lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;unknown,busy,no_reply&amp;quot;&lt;br /&gt;
If the diversion is not allowed, the redirecting reason will be analyzed and the call will only be dropped for the configured cases.&lt;br /&gt;
&lt;br /&gt;
See section [[Routing_script_tutorial:Mini_Development_Guide#Redirecting_number,_Original_Called_Number_and_Diversion_Reason|Redirecting number reason values]].&lt;br /&gt;
&lt;br /&gt;
== Call transfer requests ==&lt;br /&gt;
Toolpack allows that [[Call transfer]] requests are relayed from one leg to the other, or to process them locally (making another outgoing call to replace the call that requested the call transfer).&lt;br /&gt;
&lt;br /&gt;
If the chosen [[Call transfer]] mode is to process requests locally, upon reception of a call transfer request (SIP REFER or ISDN Facility), routing script will be called once again, to select the routes for the new outgoing call (call transfer target).&lt;br /&gt;
&lt;br /&gt;
=== How to route call transfer request ===&lt;br /&gt;
Routing of a call transfer request is done exactly like routing of a normal incoming call.&lt;br /&gt;
The routing script generally does not need any modification to support that.&lt;br /&gt;
&lt;br /&gt;
In some cases, the routing script may want to use information related to the transfer request to perform routing, or to insert information in the outgoing call leg.&lt;br /&gt;
Additional information is provided to the routing script, allowing routing decisions using information from the call transfer request (SIP REFER or ISDN Facility).&lt;br /&gt;
See below...&lt;br /&gt;
&lt;br /&gt;
=== params[ :call ] content during transfer request ===&lt;br /&gt;
When processing a call transfer request, the params[ :call ] hash contains the information from the inbound call (same as was passed to the routing script upon arrival of the inbound call)&lt;br /&gt;
 call = params[ :call ]          -&amp;gt; Information from original inbound call, with exception of call[ :called ]&lt;br /&gt;
&lt;br /&gt;
One exception (convenient because it allows a unmodified routing script to process call transfer request the same way as any other routing request):&lt;br /&gt;
 call[ :called ]                 -&amp;gt; Replaced by the called number from the call transfer request (also called &amp;quot;redirection number&amp;quot;)&lt;br /&gt;
Complementary information:&lt;br /&gt;
 call[ :original_called_number ] -&amp;gt; Contains the called number that was initially received from the incoming call, prior to call transfer request&lt;br /&gt;
 call[ :redirecting_number ]     -&amp;gt; Number of the call from which the call transfer request was received (generally equals to original_called_number)&lt;br /&gt;
&lt;br /&gt;
These fields will also be included in the outgoing call made after routing:&lt;br /&gt;
* original called number and redirecting number are existing fields on SS7 and ISDN calls&lt;br /&gt;
* SIP &amp;quot;diversion&amp;quot; header is used for SIP calls&lt;br /&gt;
&lt;br /&gt;
=== params[ :transfer ] content ===&lt;br /&gt;
(this if valid only for release 2.7.102 and above)&amp;lt;br&amp;gt;&lt;br /&gt;
When processing a call transfer request, information from the call transfer request message (SIP REFER, ISDN Facility) is provided in params[ :transfer ]:&lt;br /&gt;
  transfer = params[ :transfer ]&lt;br /&gt;
The following field is always present:&lt;br /&gt;
  transfer[ :original_nap ]      -&amp;gt; Contains the NAP of the first call from which a call transfer request was received&lt;br /&gt;
  transfer[ :redirecting_nap ]   -&amp;gt; Contains the NAP of the call from which the current call transfer request was received&lt;br /&gt;
                                    (same as :original_nap for the first call transfer, different for subsequent transfers)&lt;br /&gt;
Examples of other fields that may be present, when appropriate:&lt;br /&gt;
  transfer[ :uui ]               -&amp;gt; The UUI (user-to-user information) found in the call transfer request&lt;br /&gt;
  transfer[ :sip_header ]        -&amp;gt; Contains custom SIP headers from the call transfer request&lt;br /&gt;
  transfer[ :request_uri ]       -&amp;gt; Contains the SIP Request URI&lt;br /&gt;
&lt;br /&gt;
These fields are 'read-only'. They will not be included in the outgoing call, as they represent the contents of the call transfer request, and not the outgoing call to be made.&lt;br /&gt;
&lt;br /&gt;
To insert/modify attributes of the outgoing call, the parameters from params[ :call ] must be edited instead.&lt;br /&gt;
&lt;br /&gt;
== Redirection ==&lt;br /&gt;
In release 2.8 and above, redirection contacts are obtained from the routing engine in the following format:&lt;br /&gt;
&lt;br /&gt;
  contacts = params[ :contacts ]&lt;br /&gt;
  contacts = {&lt;br /&gt;
      :index=&amp;gt;&amp;quot;3&amp;quot;,&lt;br /&gt;
      :list=&amp;gt;[&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6660&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6661&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6661@192.168.215.127&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6661@192.168.215.127&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6662&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6662@192.168.215.128&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6662@192.168.215.128&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6663&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6663@192.168.215.129&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6663@192.168.215.129&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6664&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6664@192.168.215.150&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6664@192.168.215.150&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
      ],&lt;br /&gt;
      :source_indexes=&amp;gt;&amp;quot;nil,0,0,0,2&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:list]&amp;lt;/code&amp;gt; contains the contact log. Each contact within the list has the following fields:&lt;br /&gt;
** &amp;lt;code&amp;gt;:called_number&amp;lt;/code&amp;gt; - the called number&lt;br /&gt;
** &amp;lt;code&amp;gt;:is_number_ported&amp;lt;/code&amp;gt; - if the called number has been ported (for SIP: if the npdi parameter is present)&lt;br /&gt;
** &amp;lt;code&amp;gt;:ported_number&amp;lt;/code&amp;gt; - the called number that was ported (for SIP: the rn parameter value, if available)&lt;br /&gt;
** &amp;lt;code&amp;gt;:sip_uri&amp;lt;/code&amp;gt; - the SIP URI of the contact, without the contact-params section (without the expires and q contact parameters)&lt;br /&gt;
** &amp;lt;code&amp;gt;:raw_data&amp;lt;/code&amp;gt; - the raw data representing the contact in the signaling protocol. For SIP, this is the full SIP URI (including the expires and q contact parameters).&lt;br /&gt;
** &amp;lt;code&amp;gt;:priority&amp;lt;/code&amp;gt; - the priority of the contact [0-1000]&lt;br /&gt;
** &amp;lt;code&amp;gt;:expiration&amp;lt;/code&amp;gt; - the expiration time in seconds of the contact&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:index]&amp;lt;/code&amp;gt; contains the index of the contact that is currently being routed.&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:source_indexes]&amp;lt;/code&amp;gt; contains a comma-separated list of indexes from &amp;lt;code&amp;gt;params[:contacts][:list]&amp;lt;/code&amp;gt;. Each index represents the contact from which the contact in the list was obtained from.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get more information, see:&lt;br /&gt;
*[[Routing_script_tutorial:SIP_Redirection_Contacts|SIP Redirection Contacts Parameters in a Call Flow]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Connected number ==&lt;br /&gt;
Insert a connected number in the answer message of the call flow.&lt;br /&gt;
&lt;br /&gt;
Routing script example:&lt;br /&gt;
    bridge = params[ :bridge ]&lt;br /&gt;
    bridge [ :connected_number ] = &amp;quot;3335577&amp;quot;&lt;br /&gt;
    bridge [ :connected_number_noa ] = :national_number&lt;br /&gt;
    bridge [ :connected_number_npi ] = :private&lt;br /&gt;
    bridge [ :connected_number_presentation ] = :allowed&lt;br /&gt;
    bridge [ :connected_number_screening ] = :pass&lt;br /&gt;
&lt;br /&gt;
== Terminating calls ==&lt;br /&gt;
In release 2.8, it is now possible to terminate a call through the routing scripts. The [[#Reason values|reason code]] must be specified in &amp;lt;code&amp;gt;params[:bridge][:reason]&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;:terminate&amp;lt;/code&amp;gt; hash must be created and copied into &amp;lt;code&amp;gt;params&amp;lt;/code&amp;gt;:&lt;br /&gt;
  terminate = {}&lt;br /&gt;
  params[:terminate] = terminate&lt;br /&gt;
The following fields can then be set in &amp;lt;code&amp;gt;:terminate&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;:sip_header&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:contacts&amp;lt;/code&amp;gt; # list of contacts as described in the [[#Redirection|redirection]] section&lt;br /&gt;
* &amp;lt;code&amp;gt;:isup_raw&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:isup_raw_variant&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_noa&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_npi&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_presentation&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_reason&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_counter&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_indicator&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_noa&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_npi&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_presentation&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_reason&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_counter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reason values  ==&lt;br /&gt;
&lt;br /&gt;
Check here for Termination Reason Cause codes:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Termination_cause_codes|Termination Reason Cause codes]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to refuse an incoming call leg.&lt;br /&gt;
  raise RoutingException, :no_route&lt;br /&gt;
&lt;br /&gt;
Reason cause strings available inside routing scripts:&lt;br /&gt;
&lt;br /&gt;
List of Q.850 reason causes:&lt;br /&gt;
  :unallocated_number&lt;br /&gt;
  :no_route_to_network&lt;br /&gt;
  :no_route_to_destination&lt;br /&gt;
  :send_special_tone&lt;br /&gt;
  :misdialled_trunk_prefix&lt;br /&gt;
  :channel_unacceptable&lt;br /&gt;
  :call_awarded_in_established_channel&lt;br /&gt;
  :preemption&lt;br /&gt;
  :reattempt&lt;br /&gt;
  :qor_ported_number&lt;br /&gt;
  :normal_call_clearing&lt;br /&gt;
  :user_busy&lt;br /&gt;
  :no_user_responding&lt;br /&gt;
  :no_answer_from_user&lt;br /&gt;
  :subscriber_absent&lt;br /&gt;
  :call_rejected&lt;br /&gt;
  :number_changed&lt;br /&gt;
  :redirection&lt;br /&gt;
  :exchange_routing_error&lt;br /&gt;
  :non_selected_user_clearing&lt;br /&gt;
  :destination_out_of_order&lt;br /&gt;
  :address_incomplete&lt;br /&gt;
  :facility_rejected&lt;br /&gt;
  :response_to_status_enquiry&lt;br /&gt;
  :normal_unspecified&lt;br /&gt;
  :no_circuit_available&lt;br /&gt;
  :network_out_of_order&lt;br /&gt;
  :frame_mode_out_of_service&lt;br /&gt;
  :frame_mode_connection_operational&lt;br /&gt;
  :temporary_failure&lt;br /&gt;
  :switching_equipment_congestion&lt;br /&gt;
  :access_information_discarded&lt;br /&gt;
  :requested_circuit_not_available&lt;br /&gt;
  :precedence_call_blocked&lt;br /&gt;
  :resource_unavailable&lt;br /&gt;
  :quality_of_service_not_available&lt;br /&gt;
  :requested_facility_not_subscribed&lt;br /&gt;
  :outgoing_calls_barred&lt;br /&gt;
  :outgoing_calls_barred_within_cug&lt;br /&gt;
  :incoming_calls_barred&lt;br /&gt;
  :incoming_calls_barred_within_cug&lt;br /&gt;
  :bearer_cap_not_authorized&lt;br /&gt;
  :bearer_cap_not_available&lt;br /&gt;
  :inconsistency_access_info&lt;br /&gt;
  :service_not_available&lt;br /&gt;
  :bearer_cap_not_implemented&lt;br /&gt;
  :channel_type_not_implemented&lt;br /&gt;
  :requested_facility_not_implemented&lt;br /&gt;
  :only_restricted_digital_info&lt;br /&gt;
  :service_not_implemented&lt;br /&gt;
  :invalid_call_reference&lt;br /&gt;
  :channel_does_not_exist&lt;br /&gt;
  :call_identity_does_not_exist&lt;br /&gt;
  :call_identity_in_use&lt;br /&gt;
  :no_call_suspended&lt;br /&gt;
  :call_has_been_cleared&lt;br /&gt;
  :user_not_member_of_cug&lt;br /&gt;
  :incompatible_destination&lt;br /&gt;
  :non_existant_cug&lt;br /&gt;
  :invalid_transit_network&lt;br /&gt;
  :invalid_message_unspecified&lt;br /&gt;
  :mandatory_ie_missing&lt;br /&gt;
  :message_type_non_existent&lt;br /&gt;
  :message_not_compatible_with_call_state&lt;br /&gt;
  :ie_non_existent&lt;br /&gt;
  :invalid_ie_content&lt;br /&gt;
  :msg_not_compatible_with_call_state&lt;br /&gt;
  :recovery_on_timer_expiry&lt;br /&gt;
  :parameter_non_existent_passed_on&lt;br /&gt;
  :message_with_non_recognized_parameters_discarded&lt;br /&gt;
  :protocol_error&lt;br /&gt;
  :interworking_unspecified&lt;br /&gt;
&lt;br /&gt;
List of toolpack reason causes:&lt;br /&gt;
&lt;br /&gt;
  :toolpack_normal                       or :normal&lt;br /&gt;
  :toolpack_resource_error               or :resource_error&lt;br /&gt;
  :toolpack_timeout                      or :timeout&lt;br /&gt;
  :toolpack_no_route                     or :no_route&lt;br /&gt;
  :toolpack_call_collision               or :call_collision&lt;br /&gt;
  :toolpack_sync_drop                    or :sync_drop&lt;br /&gt;
  :toolpack_signaling_error              or :signaling_error&lt;br /&gt;
  :toolpack_locally_rejected             or :locally_rejected&lt;br /&gt;
  :toolpack_interface_not_available      or :interface_not_available&lt;br /&gt;
  :toolpack_reset_in_progress            or :reset_in_progress&lt;br /&gt;
  :toolpack_adapter_reject               or :adapter_reject&lt;br /&gt;
  :toolpack_missing_or_invalid_ie        or :missing_or_invalid_ie&lt;br /&gt;
  :toolpack_incoming_only                or :incoming_only&lt;br /&gt;
  :toolpack_system_configuration_changed or :system_configuration_changed&lt;br /&gt;
  :toolpack_resource_no_more_available   or :resource_no_more_available&lt;br /&gt;
  :toolpack_incompatible_media           or :incompatible_media&lt;br /&gt;
  :toolpack_resource_allocation_failed   or :resource_allocation_failed&lt;br /&gt;
  :toolpack_data_path_not_available      or :data_path_not_available&lt;br /&gt;
  :toolpack_local_congestion             or :local_congestion&lt;br /&gt;
  :toolpack_authorization_required       or :authorization_required&lt;br /&gt;
  :toolpack_call_divert_is_not_allowed   or :call_divert_is_not_allowed&lt;br /&gt;
&lt;br /&gt;
List of SIP reason causes:&amp;lt;br/&amp;gt;&lt;br /&gt;
Reason causes starting with a digit must use the following syntax (can't use : as prefix).&lt;br /&gt;
&lt;br /&gt;
  '300_multiple_choices'&lt;br /&gt;
  '301_moved_permanently'&lt;br /&gt;
  '302_moved_temporarily'&lt;br /&gt;
  '305_use_proxy'&lt;br /&gt;
  '380_alternative_service'&lt;br /&gt;
  '400_bad_request'&lt;br /&gt;
  '401_unauthorized'&lt;br /&gt;
  '402_payment_required'&lt;br /&gt;
  '403_forbidden'&lt;br /&gt;
  '404_not_found'&lt;br /&gt;
  '405_method_not_allowed'&lt;br /&gt;
  '406_not_acceptable'&lt;br /&gt;
  '407_proxy_authentication_required'&lt;br /&gt;
  '408_request_timeout'&lt;br /&gt;
  '409_conflict'&lt;br /&gt;
  '410_gone'&lt;br /&gt;
  '413_request_entity_too_large'&lt;br /&gt;
  '414_request_URI_too_long'&lt;br /&gt;
  '415_unsupported_media'&lt;br /&gt;
  '416_unsupported_URI_scheme'&lt;br /&gt;
  '420_bad_extension'&lt;br /&gt;
  '421_extension_required'&lt;br /&gt;
  '422_session_timer_too_small'&lt;br /&gt;
  '423_interval_too_brief'&lt;br /&gt;
  '429_referrer_identity_error'&lt;br /&gt;
  '480_temporary_unavailable'&lt;br /&gt;
  '481_call_or_transaction_does_not_exist'&lt;br /&gt;
  '482_loop_detected'&lt;br /&gt;
  '483_too_many_hops'&lt;br /&gt;
  '484_address_incomplete'&lt;br /&gt;
  '485_ambiguous'&lt;br /&gt;
  '486_busy_here'&lt;br /&gt;
  '487_request_terminated'&lt;br /&gt;
  '488_not_acceptable_here'&lt;br /&gt;
  '489_bad_event'&lt;br /&gt;
  '491_retry_after'&lt;br /&gt;
  '500_server_internal_error'&lt;br /&gt;
  '501_not_implemented'&lt;br /&gt;
  '502_bad_gateway'&lt;br /&gt;
  '503_service_unavailable'&lt;br /&gt;
  '504_server_timeout'&lt;br /&gt;
  '505_version_unsupported'&lt;br /&gt;
  '513_message_too_large'&lt;br /&gt;
  '600_busy_everywhere'&lt;br /&gt;
  '603_decline'&lt;br /&gt;
  '604_not_exist_anywhere'&lt;br /&gt;
  '606_not_acceptable'&lt;br /&gt;
&lt;br /&gt;
== Nap status  ==&lt;br /&gt;
&lt;br /&gt;
All the status fields of the NAPs are provided for use by the routing scripts. See the nap status provider for more details on which fields are available in the CEngineStatTransNap.hpp file. &lt;br /&gt;
&lt;br /&gt;
'''Notice:''' These values may change between major release. &lt;br /&gt;
&lt;br /&gt;
  Routing script call attribute name    Description&lt;br /&gt;
  --------------------------------------------------------------------------------------------&lt;br /&gt;
  &amp;quot;name&amp;quot;                                NAP name.&lt;br /&gt;
  &amp;quot;signaling_type&amp;quot;                      Signaling type (SS7, ISDN, CASR2, SIP)&lt;br /&gt;
  &amp;quot;profile&amp;quot;                             Profile name.&lt;br /&gt;
  &amp;quot;sip_destination_ip&amp;quot;                  Destination IP address.&lt;br /&gt;
  &amp;quot;sip_destination_port&amp;quot;                Destination IP port.&lt;br /&gt;
  &amp;quot;sip_transport_type&amp;quot;                  SIP transport type (:udp, :tcp, or :tls) (Toolpack 3.1 and more)&lt;br /&gt;
  &amp;quot;inst_incoming_call_cnt&amp;quot;              Instantaneous Count of incoming calls.&lt;br /&gt;
  &amp;quot;inst_outgoing_call_cnt&amp;quot;              Instantaneous Count of outgoing calls.&lt;br /&gt;
  &amp;quot;available_cnt&amp;quot;                       Number of available circuits or channels.&lt;br /&gt;
  &amp;quot;unavailable_cnt&amp;quot;                     Number of unavailable circuits or channels.&lt;br /&gt;
  &amp;quot;availability_percent&amp;quot;                Percentage of available circuits or channels.&lt;br /&gt;
  &amp;quot;usage_percent&amp;quot;                       Percentage of used circuits or channels.&lt;br /&gt;
  &amp;quot;unused_shared_percent&amp;quot;               Percentage of used circuits or channels of this NAP available to make new calls with (taking into account shared with other NAPs)&lt;br /&gt;
  &amp;quot;total_incoming_call_cnt&amp;quot;             Total Count of incoming calls.&lt;br /&gt;
  &amp;quot;global_asr_percent&amp;quot;                  Global calculated ASR percentage.&lt;br /&gt;
  &amp;quot;total_outgoing_call_cnt&amp;quot;             Total Count of outgoing calls.&lt;br /&gt;
  &amp;quot;last_24h_asr_percent&amp;quot;                Last 24 hours calculated ASR percentage.&lt;br /&gt;
  &amp;quot;last_24h_outgoing_call_cnt&amp;quot;          Last 24 hours outgoing calls.&lt;br /&gt;
  &amp;quot;current_hour_asr_percent&amp;quot;            Current hour calculated ASR percentage.&lt;br /&gt;
  &amp;quot;current_hour_outgoing_call_cnt&amp;quot;      Current hour outgoing calls.&lt;br /&gt;
  &amp;quot;last_hour_asr_percent&amp;quot;               Last hour calculated ASR percentage.&lt;br /&gt;
  &amp;quot;last_hour_outgoing_call_cnt&amp;quot;         Last hour outgoing calls.&lt;br /&gt;
  &amp;quot;poll_remote_proxy&amp;quot;                   Remote proxy polling enabled&lt;br /&gt;
  &amp;quot;is_available&amp;quot;                        Remote proxy actually available or not&lt;br /&gt;
  &amp;quot;time_since_polling&amp;quot;                  Time since the last availibility polling&lt;br /&gt;
  &amp;quot;time_available_seconds&amp;quot;              Number of seconds since the NAP is available&lt;br /&gt;
  &amp;quot;time_unavailable_seconds&amp;quot;            Number of seconds since the NAP is unavailable&lt;br /&gt;
  &amp;quot;register_to_proxy&amp;quot;                   Register to proxy enabled&lt;br /&gt;
  &amp;quot;registered&amp;quot;                          Actually registered or not&lt;br /&gt;
  &amp;quot;time_since_refresh&amp;quot;                  Time since the last refresh&lt;br /&gt;
  &amp;quot;time_registered_seconds&amp;quot;             Number of seconds since the NAP is registered&lt;br /&gt;
  &amp;quot;time_not_registered_seconds&amp;quot;         Number of seconds since the NAP is not registered&lt;br /&gt;
  &amp;quot;asr_stats_incoming_struct&amp;quot;           Detailed Answer-Seizure Rate incoming statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;global_asr_percent&amp;quot;                Global calculated ASR percentage.&lt;br /&gt;
    &amp;quot;total_call_cnt&amp;quot;                    Total count of calls.&lt;br /&gt;
    &amp;quot;total_accepted_call_cnt&amp;quot;           Total count of accepted calls (not dropped due to congestion or rate-limiting).&lt;br /&gt;
    &amp;quot;total_answered_call_cnt&amp;quot;           Total count of answered calls.&lt;br /&gt;
    &amp;quot;last_24h_asr_percent&amp;quot;              Last 24 hours calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_24h_call_cnt&amp;quot;                 Last 24 hours count of calls.&lt;br /&gt;
    &amp;quot;current_hour_asr_percent&amp;quot;          Current hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;current_hour_call_cnt&amp;quot;             Current hour count of calls.&lt;br /&gt;
    &amp;quot;last_hour_asr_percent&amp;quot;             Last hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_hour_call_cnt&amp;quot;                Last hour count of calls.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;asr_stats_outgoing_struct&amp;quot;           Detailed Answer-Seizure Rate outgoing statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;global_asr_percent&amp;quot;                Global calculated ASR percentage.&lt;br /&gt;
    &amp;quot;total_call_cnt&amp;quot;                    Total count of calls.&lt;br /&gt;
    &amp;quot;total_accepted_call_cnt&amp;quot;           Total count of accepted calls (not dropped due to congestion or rate-limiting).&lt;br /&gt;
    &amp;quot;total_answered_call_cnt&amp;quot;           Total count of answered calls.&lt;br /&gt;
    &amp;quot;last_24h_asr_percent&amp;quot;              Last 24 hours calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_24h_call_cnt&amp;quot;                 Last 24 hours count of calls.&lt;br /&gt;
    &amp;quot;current_hour_asr_percent&amp;quot;          Current hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;current_hour_call_cnt&amp;quot;             Current hour count of calls.&lt;br /&gt;
    &amp;quot;last_hour_asr_percent&amp;quot;             Last hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_hour_call_cnt&amp;quot;                Last hour count of calls.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;mos_struct&amp;quot;                          Detailed Mean Opinion Score statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;last_24h_ingress&amp;quot;                  Last 24 hours calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_24h_egress&amp;quot;                   Last 24 hours calculated MOS for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_ingress&amp;quot;              Current hour calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_egress&amp;quot;               Current hour calculated MOS for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_ingress&amp;quot;                 Last hour calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_egress&amp;quot;                  Last hour calculated MOS for outgoing RTP packets.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;network_quality_struct&amp;quot;              Detailed network quality statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;last_24h_ingress&amp;quot;                  Last 24 hours network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_24h_egress&amp;quot;                   Last 24 hours network quality percentage for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_ingress&amp;quot;              Current hour network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_egress&amp;quot;               Current hour network quality percentage for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_ingress&amp;quot;                 Last hour network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_egress&amp;quot;                  Last hour network quality percentage for outgoing RTP packets.&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; If the nap status is part of a substructure, the substructure will be a hash containing all subfield elements. &lt;br /&gt;
&lt;br /&gt;
Example to access the signaling type and the number of incoming call count for the NAP of the current call:&lt;br /&gt;
&lt;br /&gt;
   incoming_nap = params[:naps][ params[:call][ :nap ].to_sym]&lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP parameters=&amp;quot; + incoming_nap.inspect &lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP signaling type=&amp;quot; + incoming_nap[:signaling_type].inspect &lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP call cnt=&amp;quot; + incoming_nap[:asr_stats_incoming_struct][:total_call_cnt].inspect &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; It is also possible to add dynamic nap attributes in the web portal. These can be referenced by their name.&lt;br /&gt;
&lt;br /&gt;
== Telephony Services ==&lt;br /&gt;
In release 2.10 and the above, telephony services (CNAM Request) can be manage from the routing engine in the following format:&lt;br /&gt;
&lt;br /&gt;
  params[:telephony_services].each do |service|  -&amp;gt; Array of telephony services&lt;br /&gt;
    service[:name]                               -&amp;gt; Customer telephony service name&lt;br /&gt;
    service[:type]                               -&amp;gt; For now only &amp;quot;CNAM Request&amp;quot;&lt;br /&gt;
    service[:enabled]                            -&amp;gt; Indicate if the service is enabled (true) or not (false)&lt;br /&gt;
                                                    (Only the telephony service define in the profile associated to the NAP is enabled)&lt;br /&gt;
                                                    (The others telephony services define in others profiles are disabled)&lt;br /&gt;
                                                    (If we are in the case where we return in the routing script with a response, it is important to set :enabled to false in order to avoid repeating the same query)&lt;br /&gt;
    serviceParams = service[:params]&lt;br /&gt;
    serviceParams[:return_to_script]             -&amp;gt; Indicates to Gateway if we must return to the routing script after receiving the CNAM response&lt;br /&gt;
                                                    (It is important to set back to false this field to avoid an infinite loop)&lt;br /&gt;
    serviceQuery = service[:query]&lt;br /&gt;
    serviceQuery[:phone]                         -&amp;gt; 10 digits of calling number from the incoming call to send to the CNAM server&lt;br /&gt;
    serviceQuery[:timeout]                       -&amp;gt; Timeout in millisecond to wait a CNAM response from CNAM server&lt;br /&gt;
                                                    (Default value from profile configuration)&lt;br /&gt;
    serviceResponse = service[:response]&lt;br /&gt;
    serviceResponse[:success]                    -&amp;gt; Indicates if we received a good CNAM response from the CNAM Server (Only present if :return_to_script is set to true)&lt;br /&gt;
    serviceResponse[:caller_name]                -&amp;gt; The caller name received in the CNAM response from the CNAM Server (Only present if :return_to_script is set to true)&lt;br /&gt;
&lt;br /&gt;
== Custom user context ==&lt;br /&gt;
The routing script may '''save per-call information within the call context''', that will be available if routing is called again later during the call flow.&lt;br /&gt;
&lt;br /&gt;
Cases where routing is called multiple time for the same call are:&lt;br /&gt;
- Call transfer requests&lt;br /&gt;
- SIP redirect requests&lt;br /&gt;
- Radius Authorization result&lt;br /&gt;
- Announcement server with digit collection&lt;br /&gt;
&lt;br /&gt;
The routing script can save a recursive hash of attributes here:&lt;br /&gt;
  params[:user_context]&lt;br /&gt;
&lt;br /&gt;
For example&lt;br /&gt;
  params[:user_context] = { &amp;quot;SomeKey&amp;quot; =&amp;gt; &amp;quot;Some value I want to retrieve upon next routing for this call&amp;quot;, &amp;quot;OtherVal&amp;quot; =&amp;gt; { &amp;quot;subkey&amp;quot; =&amp;gt; &amp;quot;subval&amp;quot; } }&lt;br /&gt;
&lt;br /&gt;
Upon first call to routing script, params[:user_context] will be nil.&lt;br /&gt;
Upon subsequent calls to routing script, it will contain whatever the script had stored upon previous call (or nil if it was not set)&lt;br /&gt;
&lt;br /&gt;
Note: This feature is available starting from release 2.9.85, 2.10.31 and 3.0.15 (in respective branches 2.9, 2.10 or 3.0)&lt;br /&gt;
&lt;br /&gt;
== Routing Script Tests ==&lt;br /&gt;
The Web portal features a tool for Testing Scripts. The user must enter parameters to simulate the incoming call and after pressing the Test button, will output selected routes and numbers.  You do not need to activate the new routes, or the new scripts to use this test tool: It can be used to test the routing scripts and routing table before activating it.&lt;br /&gt;
This is available in the Routing Scripts section of the Web portal.&lt;br /&gt;
&lt;br /&gt;
=== Test parameters ===&lt;br /&gt;
==== @call_params  ====&lt;br /&gt;
&lt;br /&gt;
That variable should contain a hash of call parameters that will be passed to the routing script. This is equivalent to the incoming call parameters. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== @nap_list  ====&lt;br /&gt;
&lt;br /&gt;
A list of the hash containing the nap statuses. This is equivalent to the nap statuses at the time the call is to be routed. &lt;br /&gt;
&lt;br /&gt;
'''The nap list is hashed by the nap names in UPPERCASE.''' It is important to consider this when creating new dynamic route or nap attributes that may nap names that will be used to fetch a status. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== @params  ====&lt;br /&gt;
&lt;br /&gt;
A hash of hashes containing parameters. This hash contains bridge parameters and other kind of parameter groups may be added in the future. &lt;br /&gt;
&lt;br /&gt;
  @params = {&lt;br /&gt;
     :bridge =&amp;gt; {:announcement_tone, &amp;quot;announcement.wav&amp;quot;},&lt;br /&gt;
     :contacts =&amp;gt; {&lt;br /&gt;
       :index=&amp;gt;&amp;quot;1&amp;quot;,&lt;br /&gt;
       :list=&amp;gt;[&lt;br /&gt;
          {:called_number=&amp;gt;&amp;quot;6660&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;&amp;quot;,&lt;br /&gt;
           :raw_data=&amp;gt;&amp;quot;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
          {:called_number=&amp;gt;&amp;quot;6661&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6661@192.168.215.127&amp;quot;, &lt;br /&gt;
           :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6661@192.168.215.127&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
       ],&lt;br /&gt;
       :source_indexes=&amp;gt;&amp;quot;nil,0&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Back to [[Routing script tutorial|Routing Script Tutorial]].&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Routing_script_tutorial:Mini_Development_Guide</id>
		<title>Routing script tutorial:Mini Development Guide</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Routing_script_tutorial:Mini_Development_Guide"/>
				<updated>2019-04-04T20:10:29Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Call object  ==&lt;br /&gt;
&lt;br /&gt;
=== Get  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to get the call parameters. The possible parameters are described in the section &amp;quot;Call parameters&amp;quot; &lt;br /&gt;
&lt;br /&gt;
  called_number = caf_call.get&amp;amp;nbsp;:called&lt;br /&gt;
&lt;br /&gt;
=== List_params  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to retrieve the list of supported call parameters. For example to extract all the possible call parameters from the the call object and put it in hash. &lt;br /&gt;
&lt;br /&gt;
  caf_call.list_params.each {|param| call[param] = caf_call.get param }&lt;br /&gt;
&lt;br /&gt;
=== Accept  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to accept a call.  It actually creates one outgoing route that the gateway application will use to bridge the incoming call leg.  If more than one outgoing route is &amp;quot;accepted&amp;quot;, the gateway will try them one by one in the same order that they were accepted.   If an outgoing call leg fails (according to 'route retry' parameters), the next route in line will be used.  &lt;br /&gt;
&lt;br /&gt;
This method takes 2 arguments, the call parameters (hash) and the route parameters (hash).  Note that calling this method does NOT stop the flow of the script.&lt;br /&gt;
&lt;br /&gt;
Apply route remapping rules &lt;br /&gt;
&lt;br /&gt;
  caf_call.accept out_call, route&lt;br /&gt;
&lt;br /&gt;
=== Refuse  ===&lt;br /&gt;
&lt;br /&gt;
This function is used to set the reason code for the incoming call leg refusal.  However, this function does NOT stop the flow of the script. &lt;br /&gt;
&lt;br /&gt;
  caf_call.refuse&amp;amp;nbsp;:reason =&amp;amp;gt;&amp;amp;nbsp;:temporary_failure&lt;br /&gt;
&lt;br /&gt;
To immediately refuse the incoming call leg and stop processing the script, the script must raise an exception.  Exiting the script by raising the exception overwrites any reason cause previously stored using refuse().&lt;br /&gt;
&lt;br /&gt;
  raise RoutingException, :no_route&lt;br /&gt;
&lt;br /&gt;
The supported refusal cause values for both refuse() and raise() are described in the section &amp;quot;[[Routing_script_tutorial:Mini_Development_Guide#Reason_values|Reason values]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Script parameters protocol mapping  ===&lt;br /&gt;
&lt;br /&gt;
The following call parameters are available in the call object. For example:&lt;br /&gt;
&lt;br /&gt;
  called_number = call[:called]&lt;br /&gt;
&lt;br /&gt;
For information on how to use and remap call parameters, see [[Toolpack:_How_to_Use_RegEx_in_Remapped_Called_and_Calling_Number_Mask | How to use regex in Remapped Called and Calling Number Mask]]&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 921px; height: 805px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Script parameter name''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''ISDN&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''R2 CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SS7&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SIP&amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Comment&amp;lt;br&amp;gt;'''&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Toolpack version&amp;lt;br&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| leg_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Leg ID&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| session_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Session ID&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_session_id&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Original Session ID (before call transfer or redirections)&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| ANI (Group B)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - address signals (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used (when present) instead.&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - host (domain or IP) &amp;lt;br&amp;gt; &lt;br /&gt;
|  For example : The 'telcobridges.com' in From: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - port &amp;lt;br&amp;gt; &lt;br /&gt;
|  For example : The '6060' in From: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_noa&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - nature of address indicator (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used (when present) instead&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - numbering plan indicator (*)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| * In ANSI SS7 LNP networks, the IE 'generic address parameter' is used&amp;amp;nbsp;(when present) instead&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_display &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Display' IE - Display information&amp;lt;br&amp;gt; &lt;br /&gt;
Q931: 'Facility CNAM' IE when presentation is allowed for DMS/NI2 variants&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763 &lt;br /&gt;
ITU97: 'Display information' IE - display information &lt;br /&gt;
ANSI95: 'Generic name' IE - display information &lt;br /&gt;
| SIP:From - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_display_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Display' IE - Display information (present and/or first byte)&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Display information' IE - present or not&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Presentation indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - display-name (displays 'anonymous' or not) &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - privacy&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_screening&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party number' IE - Screening indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party number' IE - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Remote-party-id - screen&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_category&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Call party category (Group A)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Calling party's category' IE - calling party's category&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - cpc &lt;br /&gt;
&lt;br /&gt;
SIP:P-asserted-identity - cpc&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber &lt;br /&gt;
(Generic Number / NDS)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Number digits &amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - Number digits&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| Requires option 'support 2 calling number IE' in the profile.  This variable has priority over 'private_address' in the outgoing direction.&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_noa&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_presentation&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Presentation indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_subscriber_screening &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 2nd 'Calling party number' IE - Screening indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: Generic number IE with type 'additional calling party number' - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_display&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Facility CNAM' IE when presentation is restricted for DMS/NI2 variants&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_display_type &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Indicate presence or not of the private calling information&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - userinfo &lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - user-info&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The 'fluffy' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - host (domain or IP)&lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - host (domain or IP) &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The 'telcobridges.com' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| private_address_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:P-asserted-identity - port&lt;br /&gt;
&lt;br /&gt;
SIP:Remote-party-id - port&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| For example : The '6060' in P-Asserted-Identity: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| DNIS (Group A)&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - user-info and host&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_sip_host &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - host &amp;lt;br&amp;gt; &lt;br /&gt;
| For example : The 'telcobridges.com' in To: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_sip_port &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - port number &amp;lt;br&amp;gt; &lt;br /&gt;
| For example : The '6060' in To: &amp;quot;Cullen Jennings&amp;quot; &amp;lt;sip:fluffy@telcobridges.com:6060&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party number' IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Called party number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| charge_number_npi&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Charge number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default redirecting number and original called number forwarding behavior from incoming to outgoing leg &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number'&amp;amp;nbsp;1st IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Presentation indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirecting number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion&amp;amp;nbsp;(2nd header) - diversion-privacy&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirecting indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_reason &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 1st IE - Reason for redirection&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirecting reason&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - diversion-reason&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| redirecting_number_counter &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - redirection counter&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (2nd header) - diversion-counter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number &lt;br /&gt;
(OCN) &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Number digits &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion&amp;amp;nbsp; (1st header) - display-name&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Type of number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Numbering plan identification&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_presentation &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Presentation indicator &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection number' IE - address presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-privacy&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_reason &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Redirecting number' 2nd IE - Reason for redirection&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Redirection information' IE - original redirection reason&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-reason&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| original_called_number_counter &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Diversion (1st header) - diversion-counter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_npdi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - with qualifier=Ported number is present&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:RequestURI - npdi=yes is present&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - address signals with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:RequestURI - to user part when rn is present&amp;lt;br&amp;gt; &lt;br /&gt;
| rn is stored in the called number&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - nature of address indicator with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ported_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Generic number' IE - numbering plan indicator with qualifier=Ported number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Only valid if SIP/SS7 supports LNP&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| oli&lt;br /&gt;
(Originating line information) &amp;lt;br&amp;gt; &lt;br /&gt;
| 5ESS Codeset 6 OLI - Value&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| ANSI: 'Originating line information' IE - OLI&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
SIP:From - oli &lt;br /&gt;
&lt;br /&gt;
SIP:P-asserted-identity - oli&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| request_uri &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Complete Request URI string&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| request_uri_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default URI&amp;amp;nbsp;forwarding behavior from incoming to outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_header&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Any header&amp;lt;br&amp;gt; &lt;br /&gt;
| Requires option 'Forward custom headers' in Profiles-&amp;gt;SIP &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7.63&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| nap&lt;br /&gt;
(Network Access Point) &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg NAP name (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| type_of_network_identification&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Type of network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Type of network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| network_identification&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Network identification &amp;lt;br&amp;gt; &lt;br /&gt;
| SIP: Request-Line - cic&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| network_identification_plan&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Transit network selection' IE - Network identification plan &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Transit network selection' IE - Network identification plan &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Overwrite default location number forwarding behavior from incoming to outgoing leg &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - address signals&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_noa &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - nature of address indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_npi &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - numbering plan indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_presentation&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - presentation restricted indicator&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| location_number_screening &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Location number' IE - screening&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_forward_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| A script needs to set this to true if it wants to overwrite MLPP information in the outgoing leg.  Otherwise, profile relay 'outgoing mode' applies automatically.&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_look_for_busy &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - look ahead for busy&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_precedence_level &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - precedence level&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:Resource-Priority - q735&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_network_identity &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - network identity&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| mlpp_service_domain&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'MLPP precedence' IE - MLPP service domain&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_isub &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party subaddress' IE - subaddress information&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - isub parameter&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| called_isub_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Called party subaddress' IE - type of subaddress&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:To - isub-encoding parameter&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_isub &amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Calling party subaddress' IE - subaddress information&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - isub&amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| calling_isub_type&amp;lt;br&amp;gt; &lt;br /&gt;
| Q931: 'Callinf party subaddress' IE - type of subaddress&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Q763: 'Access transport' IE&amp;lt;br&amp;gt; &lt;br /&gt;
| SIP:From - isub-encoding&amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_fci_default &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Default forward call indicator (FCI) value.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will overwrite FCI bits A, D, F, I and M with appropriate values according to call conditions&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_fci_force_mask &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Mask to select bits from ss7_fci_default that must be forced.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Bits from ss7_fci_default which corresponding bit in ss7_fci_force_mask is set will be forced, and no more controlled by Toolpack&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_bci_default &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Default backward call indicator (BCI) value.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will overwrite BCI bits AB, I, K, M and N with appropriate values according to call conditions&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_bci_force_mask &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Mask to select bits from ss7_bci_default that must be forced.&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Bits from ss7_bci_default which corresponding bit in ss7_bci_force_mask is set will be forced, and no more controlled by Toolpack&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ls_name_forward_enabled&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| Enable line service and timeslot selection to create the outgoing leg&amp;lt;br&amp;gt; &lt;br /&gt;
| 3.0&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_ls_name&lt;br /&gt;
(Line Service or T1/E1 trunk) &amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg line service name&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| if tdm_ls_name_forward_enabled is set, try to use this line service name to create outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| tdm_timeslot_nb&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg timeslot number&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| if tdm_ls_name_forward_enabled is set, try to use this timeslot number to create outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_local_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SDP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_local_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SDP IP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_remote_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SDP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rtp_remote_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SDP IP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.7&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ss7_cot_enabled &amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Requests SS7 in-call continuity test for this outgoing SS7 call&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Toolpack will request a continuity test on the timeslot before making the outgoing call. If COT fails, the call will be dropped (then another route may be attempted)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reverse_charging_indication&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg Reverse charging indication IE present&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| If set in routing script, will add Reverse charging indication IE in outgoing leg (also use reverse_charging_indication_forward_enabled)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.12&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reverse_charging_indication_forward_enabled&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt;&lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Enable forwarding of reverse charging indication from incoming to outgoing leg&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.12&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_local_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SIP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_local_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg local SIP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_remote_addr&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SIP IP address&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sip_remote_port&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| N/A&amp;lt;br&amp;gt; &lt;br /&gt;
| Incoming leg remote SIP port&amp;lt;br&amp;gt; &lt;br /&gt;
| (read-only)&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.8.13&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Noa values  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown_number (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number (0x4)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number (0x3)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;subscriber_number (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_specific (0x5)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_routing_national_format (0x7)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_routing_international_format (0x8)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;abbreviated_number (0x6)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;subscriber_number_operator_requested (0x71)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number_operator_requested (0x72)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number_operator_requested (0x73)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_number_present_operator_requested (0x74)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_number_present_cut_through_call_to_carrier (0x75)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;test_line_test_code (0x77)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_subscriber_number (0x71)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_national_number (0x73)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;non_unique_international_number (0x74)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_950_numbe (0x76)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;special_number (0x73)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;national_number_with_transit_network_selection (0x74)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;international_number_with_transit_network_selection (0x75)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Those values will be remapped to the protocol specific NOA value. To provide protocol specific value: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:called_noa] = 0x70&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:called_noa] = 112&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Npi values  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown_number&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;isdn&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;telephony&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;private&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;data&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;telex&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;national&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Display Type values  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; =&amp;amp;gt; Type is unspecified. &lt;br /&gt;
*&amp;lt;tt&amp;gt;calling_party_name&amp;lt;/tt&amp;gt; =&amp;amp;gt; Type is 0xB1.&lt;br /&gt;
&lt;br /&gt;
Those values will be remapped to the protocol specific Display Information Type value. To provide protocol specific value: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display_type] = 0xB1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display_type] = 177&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Display value  ===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;call_params[:calling_display] = &amp;quot;Roger Fluffy&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Presentation values for Calling number, Calling Subscriber (Generic Number), Redirecting Number, Original Called Number (OCN) and Location Number ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;not_available (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;allowed (0x0)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;restricted (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;addr_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;name_restricted&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Calling Party Category  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
In case it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mapping from routing script to SS7/CAS R2/SIP&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Routing Script string &amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SS7 raw value &amp;lt;br&amp;gt;''' &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''R2 CAS scripts'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''Default Rx CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''default Tx CAS'''&amp;lt;br&amp;gt; &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | '''SIP &amp;quot;cpc=&amp;quot;  &amp;lt;br&amp;gt;''' &lt;br /&gt;
|-&lt;br /&gt;
| subscriber&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xa&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_SUBSCRIBER &amp;lt;br&amp;gt; &lt;br /&gt;
| 1 and 7&amp;lt;br&amp;gt; &lt;br /&gt;
| 7&amp;lt;br&amp;gt; &lt;br /&gt;
| ordinary&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| subscriber_with_priority&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xb&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_SUBSCRIBER_WITH_PRIORITY &amp;lt;br&amp;gt; &lt;br /&gt;
| 2 and 9 &amp;lt;br&amp;gt; &lt;br /&gt;
| 2 &amp;lt;br&amp;gt; &lt;br /&gt;
| priority&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_french&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x1&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_FRENCH &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_english&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x2&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_ENGLISH (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_german&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x3&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_GERMAN (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_russian&amp;lt;br&amp;gt; &lt;br /&gt;
| 0x4&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_RUSSIAN (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| operator_spanish &amp;lt;br&amp;gt; &lt;br /&gt;
| 0x5&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_OPERATOR_SPANISH (5)&amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt; &lt;br /&gt;
| 5 &amp;lt;br&amp;gt;&lt;br /&gt;
| operator&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| data&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xc&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_DATA &amp;lt;br&amp;gt; &lt;br /&gt;
| 6 and 8&amp;lt;br&amp;gt; &lt;br /&gt;
| 6 &amp;lt;br&amp;gt; &lt;br /&gt;
| datacall&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| test&amp;lt;br&amp;gt; &lt;br /&gt;
| 0xd&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_TEST &amp;lt;br&amp;gt; &lt;br /&gt;
| 3 &amp;lt;br&amp;gt; &lt;br /&gt;
| 3 &amp;lt;br&amp;gt; &lt;br /&gt;
| test&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| payphone &amp;lt;br&amp;gt; &lt;br /&gt;
| 0xf&amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_PAYPHONE &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| 7 &amp;lt;br&amp;gt; &lt;br /&gt;
| payphone&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| unknown &amp;lt;br&amp;gt; &lt;br /&gt;
| 0x0 &amp;lt;br&amp;gt; &lt;br /&gt;
| CATEGORY_UNKNOWN&amp;lt;br&amp;gt; &lt;br /&gt;
| 4, 11 to 15&amp;lt;br&amp;gt; &lt;br /&gt;
| 7 &amp;lt;br&amp;gt; &lt;br /&gt;
| unknown&amp;lt;br&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| unspecified &amp;lt;br&amp;gt; &lt;br /&gt;
| 0xa &amp;lt;br&amp;gt; &lt;br /&gt;
| invalid &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| none &amp;lt;br&amp;gt; &lt;br /&gt;
| invalid &amp;lt;br&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
[[CAS_R2_scripting#Category_meanings|Link to calling party categories used in CAS R2 scripts]]&lt;br /&gt;
&lt;br /&gt;
=== Screening values for Calling number, Calling Subscriber (Generic Number), and Location Number  ===&lt;br /&gt;
The text below represents the value normally used by routing script.&amp;lt;br&amp;gt;&lt;br /&gt;
Incase it's required to use a value that's not defined in the text values below, a integer can be provided and will be used &amp;quot;as-is&amp;quot; in the signaling message.&amp;lt;br&amp;gt;&lt;br /&gt;
Example numeric values for the SS7 protocol are shown in parenthesis.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;unspecified&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no (0x0)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;pass (0x1)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;fail (0x2)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;network_provided (0x3)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redirecting indicator values  ===&lt;br /&gt;
&lt;br /&gt;
SS7: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;no_redirection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted_all_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted_all_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_rerouted_restricted&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;call_diverted_restricted&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;spare&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redirecting number, Original Called Number and Diversion Reason ===&lt;br /&gt;
&lt;br /&gt;
ISDN: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;busy&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_reply&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;dte_out_of_order&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;forwarding_by_called_dte&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;unconditional&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SS7: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;unknown&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;busy      (SIP: user-busy)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;no_reply  (SIP: no-answer)&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;unconditional&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;deflection_immediate&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;mobile_not_reachable&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OLI (originating line information) values  ===&lt;br /&gt;
&lt;br /&gt;
The OLI parameter is a string that represents an integer value from 0 to 255. &lt;br /&gt;
&lt;br /&gt;
=== Information Transfer Capability values  ===&lt;br /&gt;
&lt;br /&gt;
information_transfer_capability: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;digital&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;restricted_digital&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;digital_with_tones&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;speech&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;3_1_khz_audio&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;video&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== redirecting_number_forward_enabled values  ===&lt;br /&gt;
&lt;br /&gt;
Controls forwarding or discarding of redirecting number (SIP: diversion header) to the outgoing call leg. &lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true. &lt;br /&gt;
*0/false: Redirecting number (and original called number) is not forwarded to outgoing call leg&lt;br /&gt;
*1/true: Redirecting number (and original called number) is forwarded to outgoing call leg&lt;br /&gt;
&lt;br /&gt;
The value for this parameter at the input of the routing script depends on the &amp;quot;Forward redirecting number&amp;quot; parameter in the &amp;quot;Advanced&amp;quot; section of the Gateway configuration page of the Web Portal. The script may change this value to override the Gateway configuration.&lt;br /&gt;
&lt;br /&gt;
Note: To &amp;quot;insert&amp;quot; a new redirecting number value on the outgoing leg, redirecting_number_forward_enabled must also be set to true.&lt;br /&gt;
&lt;br /&gt;
=== request_uri  ===&lt;br /&gt;
&lt;br /&gt;
Enables access to the Request-Line URI.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For example, if the Request-Line is: &lt;br /&gt;
&amp;lt;pre&amp;gt;Request-Line: INVITE sip:4175162082@172.22.45.13:5060;user=phone;transport=udp SIP/2.0&amp;lt;/pre&amp;gt; &lt;br /&gt;
Then the retrieved request_uri will be &amp;quot;sip:4175162082@172.22.45.13:5060;user=phone;transport=udp SIP/2.0&amp;quot;. &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
In the routing scripts, to retrieve only the called number, this script can be used:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;    if call_params[:request_uri] &amp;amp;amp;&amp;amp;amp; call_params[:request_uri] =~ /sip:(.*)@.*/&lt;br /&gt;
       call_params[:called] = $1&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
==== request_uri_forward_enabled ====&lt;br /&gt;
&lt;br /&gt;
This call parameter controls forwarding or discarding of request uri to outgoing call leg.The request uri is the information in the &amp;quot;Request-Line:&amp;quot; of the SIP INVITE message.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true. &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 0/false: Request uri is not forwarded to outgoing call leg &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 1/true: Request uri is forwarded to outgoing call leg &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The default value for this parameters is false. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== sip_scheme  ====&lt;br /&gt;
(Available in Toolpack 3.1+)&lt;br /&gt;
This call parameters indicates the scheme (generally &amp;quot;sip&amp;quot; or &amp;quot;sips&amp;quot;) of the incoming call.&lt;br /&gt;
&lt;br /&gt;
This also allows to control the scheme used for the outgoing call (regardless if request_uri_forward_enabled is used or not)&lt;br /&gt;
&lt;br /&gt;
Note: sips scheme must only be used on TLS NAPs (will cause call routing failure if NAP has only UDP or TCP transport types).&lt;br /&gt;
&lt;br /&gt;
=== sip_header values  ===&lt;br /&gt;
Contains custom sip headers from the inbound call leg. Any custom sip header can be added to an outgoing call leg:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
&lt;br /&gt;
The  SIP header is in string format.&lt;br /&gt;
&lt;br /&gt;
'''string format:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;call[ :sip_header ] = &amp;quot;P-my-custom-header:value1 \nP-my-custom-header2:value2 \nP-my-custom-header3:value3&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Note: \n above are actual newline characters, not '\' followed by 'n')&lt;br /&gt;
&lt;br /&gt;
* PCAP sample: [[File:TB_Custom_SIP_Headers.pcap]]&lt;br /&gt;
&lt;br /&gt;
List of sip headers that will not appear in call[:sip_header] since they are already processed by the SIP stack:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Accept               Error-Info             Remote-Party-ID      &lt;br /&gt;
Accept-Contact       Event                  Replaces                        &lt;br /&gt;
Accept-Encoding      Expires                Reply-To               &lt;br /&gt;
Accept-Language      From                   Request-Disposition    &lt;br /&gt;
Alert-Info           In-Reply-To            Subject          &lt;br /&gt;
Allow                Max-Forwards           Subscription-State  &lt;br /&gt;
Allow-Events         MIME-version           Supported           &lt;br /&gt;
Also                 Min-Expires            Timestamp           &lt;br /&gt;
Anonymity            Min-SE                 To             &lt;br /&gt;
Authorization        Organization           Unsupported  &lt;br /&gt;
Authentication-Info  Path                   User-Agent  &lt;br /&gt;
Call-ID              Priority               Via  &lt;br /&gt;
Call-Info            Privacy                Warning  &lt;br /&gt;
Contact              Proxy-Authenticate     WWW-Authenticate  &lt;br /&gt;
Content-Disposition  Proxy-Authorization    Require  &lt;br /&gt;
Content-Encoding     Proxy-Require          Response-Key  &lt;br /&gt;
Content-Language     P-Media-Authorization  Retry-After  &lt;br /&gt;
Content-Length       P-Preferred-Identity   RPID-Privacy  &lt;br /&gt;
Content-Type         P-Asserted-Identity    Route  &lt;br /&gt;
CSeq                 RAck                   RSeq  &lt;br /&gt;
RAck                 Reason                 Security-Client  &lt;br /&gt;
Reason               Record-Route           Security-Server  &lt;br /&gt;
Date                 Refer-To               Security-Verify&lt;br /&gt;
Diversion            Referred-By            Server&lt;br /&gt;
Encryption           Reject-Contact         Service-Route             &lt;br /&gt;
                                            Session-Expires&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sip header parameters  ===&lt;br /&gt;
The routing script can read (and modify) some SIP header parameters (user parameters, URI parameters or header parameters) from some SIP headers (To, From, P-Asserted-Identity, Remote-Party-ID, Contact).&lt;br /&gt;
&lt;br /&gt;
==== Available parameters ====&lt;br /&gt;
* '''call[ :calling_parameters ]''' (SIP &amp;quot;From&amp;quot; header)&lt;br /&gt;
* '''call[ :called_parameters ]''' (SIP &amp;quot;To&amp;quot; header)&lt;br /&gt;
* '''call[ :private_address_parameters ]''' (SIP &amp;quot;P-Asserted-Identity&amp;quot; or &amp;quot;Remote-Party-ID&amp;quot; header)&lt;br /&gt;
* '''call[ :contact_parameters ]''' (SIP &amp;quot;Contact&amp;quot; header)&lt;br /&gt;
&lt;br /&gt;
These parameters (if present) contain a hash with 3 keys: user_param, uri_param and header_param.&lt;br /&gt;
Each of this key points to a string that contains all the parameters found in the corresponding SIP header.&lt;br /&gt;
* '''User parameters''' (parameters between the user name/number and the host). Example  &amp;lt;sip:alice;'''param=value'''@somewhere.com&amp;gt;&lt;br /&gt;
* '''URI parameters''' (parameters at the end of the URI). Example  &amp;lt;sip:alice@somewhere.com;'''param=value'''&amp;gt;&lt;br /&gt;
* '''Header parameters''' (outside the URI). Example  &amp;lt;sip:alice@somewhere.com&amp;gt;;'''param=value'''&lt;br /&gt;
Example to print all parameters of SIP &amp;quot;To&amp;quot; header:&lt;br /&gt;
  call[ :called_parameters ].inspect -&amp;gt; '{ :user_param =&amp;gt; &amp;quot;name1=value1;name2=value2&amp;quot;, :uri_param =&amp;gt; &amp;quot;name=value&amp;quot;, :header_param =&amp;gt; &amp;quot;name=value;example_param_without_value&amp;quot; }'&lt;br /&gt;
Example to modify (replace) the URI parameters of SIP &amp;quot;To&amp;quot; header:&lt;br /&gt;
  call[ :called_parameters ][ :uri_param ] = &amp;quot;user=phone&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Exceptions ====&lt;br /&gt;
'''Note:''' Some parameters are reported as their own call attribute (oli, isub, cpc, transport) so they have the same representation for all protocols (SS7, IDSN, SIP). They won't appear present in the generic SIP header parameters structures above.&lt;br /&gt;
&lt;br /&gt;
==== Forwarding from inbound to outbound call ====&lt;br /&gt;
By default, the parameters are not forwarded in a SIP to SIP call flow. The parameters '''will be forwarded''' when:&lt;br /&gt;
* accessed (read) from either the inbound or outbound call parameters&lt;br /&gt;
* written in either the inbound or outbound call parameters&lt;br /&gt;
&lt;br /&gt;
==== Example usage ====&lt;br /&gt;
Example to print the user parameters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  if call[:calling_parameters]&lt;br /&gt;
    puts &amp;quot;user parameters = #{call[:calling_parameters][:user_param].inspect}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example SIP &amp;quot;From&amp;quot; header:&lt;br /&gt;
  From:&amp;lt;sip:123456782;test1=val1;test2=val2@something.com;test3=val3;test4=val4&amp;gt;;test5=val5;test6=val6&lt;br /&gt;
And the resulting content in the routing script:&lt;br /&gt;
  calling_param.inspect -&amp;gt; {:user_param=&amp;gt;&amp;quot;test1=val1;test2=val2&amp;quot;, :uri_param=&amp;gt;&amp;quot;test3=val3;test4=val4&amp;quot;, :header_param=&amp;gt;&amp;quot;test5=val5;test6=val6&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
'''Note''' that printing the inbound or outbound call parameters is considered as a &amp;quot;read&amp;quot; action and would result in forwarding the parameter on the outbound leg.&lt;br /&gt;
&lt;br /&gt;
Example to overwrite inbound leg calling parameters with new parameters for the outbound leg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call [:calling_parameters] = { &lt;br /&gt;
  :user_param =&amp;gt; &amp;quot;user_param7=7;user_param8=8&amp;quot;,&lt;br /&gt;
  :uri_param =&amp;gt; &amp;quot;uri_param9=value9&amp;quot;,&lt;br /&gt;
  :header_param =&amp;gt; &amp;quot;header_paramA=A&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to add user=phone and keep all other uri parameters.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  call[:calling_parameters] ||= {} # Create a hash if not already present&lt;br /&gt;
  call[:calling_parameters][:uri_param] ||= &amp;quot;&amp;quot; # Create a string if not already present&lt;br /&gt;
  call[:calling_parameters][:uri_param] += &amp;quot;;&amp;quot; if call[:calling_parameters][:uri_param] != &amp;quot;&amp;quot;&lt;br /&gt;
  call[:calling_parameters][:uri_param] += &amp;quot;user=phone&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MLPP Precedence values  ===&lt;br /&gt;
&lt;br /&gt;
mlpp_look_for_busy: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;allowed&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;path_reserved&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;not_allowed&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_precedence_level: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;flash_override&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;flash&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;immediate&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;priority&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;routine&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_network_identity:&lt;br /&gt;
&lt;br /&gt;
3 digits value from 0 to 999&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mlpp_service_domain:&lt;br /&gt;
&lt;br /&gt;
24 bits value from 0 to 16777215&lt;br /&gt;
&lt;br /&gt;
=== ISUB subaddress information values  ===&lt;br /&gt;
&lt;br /&gt;
called_isub_type: &lt;br /&gt;
calling_isub_type: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap_ia5&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;nsap_bcd&amp;lt;/tt&amp;gt; &lt;br /&gt;
*&amp;lt;tt&amp;gt;user&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
called_isub: &lt;br /&gt;
calling_isub: &lt;br /&gt;
&lt;br /&gt;
Digits for the subaddress information.&lt;br /&gt;
&lt;br /&gt;
=== Network Identification Plan  ===&lt;br /&gt;
&lt;br /&gt;
network_identification_plan: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;Unknown&amp;lt;/tt&amp;gt; (value 0)&lt;br /&gt;
*&amp;lt;tt&amp;gt;cic&amp;lt;/tt&amp;gt; (3 digits carrier identification code plus circuit code, value 1, SS7 or ISDN)&lt;br /&gt;
*&amp;lt;tt&amp;gt;user&amp;lt;/tt&amp;gt; (User, value 2, ISDN only)&lt;br /&gt;
*&amp;lt;tt&amp;gt;cic4&amp;lt;/tt&amp;gt; (4 digits carrier identification code plus circuit code, value 2, SS7 only) &lt;br /&gt;
*&amp;lt;tt&amp;gt;dnic&amp;lt;/tt&amp;gt; (public Data Network ID, value 3, SS7 only) &lt;br /&gt;
*&amp;lt;tt&amp;gt;mnic&amp;lt;/tt&amp;gt; (public land mobile network, value 6, SS7 only)&lt;br /&gt;
&lt;br /&gt;
=== Registered Users Information ===&lt;br /&gt;
Routing script can access information about registered users (when either the calling or called user is a known registered user).&lt;br /&gt;
When these fields are empty, it means that the calling/called (SIP from/to) does not correspond to a known registered user (routing script may still decide to route the call based on static routes).&lt;br /&gt;
&lt;br /&gt;
Information for the called user:&lt;br /&gt;
  params[:registered_user]&lt;br /&gt;
Information for the calling user:&lt;br /&gt;
  params[:calling_registered_user]&lt;br /&gt;
&lt;br /&gt;
These parameters are a hash of key/values that provide information about the contact.&lt;br /&gt;
  {&lt;br /&gt;
    :contact_list=&amp;gt;&lt;br /&gt;
    [&lt;br /&gt;
      {&lt;br /&gt;
        :contact=&amp;gt;&amp;quot;&amp;lt;sip:user_name_or_number@hostname:7070;transport=UDP&amp;gt;&amp;quot;,    -&amp;gt; Full contact&lt;br /&gt;
        :expires=&amp;gt;&amp;quot;60&amp;quot;,                   -&amp;gt; Contact expiry time (seconds)&lt;br /&gt;
        :host=&amp;gt;&amp;quot;hostname&amp;quot;,                -&amp;gt; host name from the contact header&lt;br /&gt;
        :name=&amp;gt;&amp;quot;user_name_or_number&amp;quot;,     -&amp;gt; user name from the contact header&lt;br /&gt;
        :nap_in=&amp;gt;&amp;quot;NAP_NAME&amp;quot;,              -&amp;gt; NAP that the contact has registered from&lt;br /&gt;
        :port=&amp;gt;&amp;quot;7070&amp;quot;,                    -&amp;gt; Port from the contact header&lt;br /&gt;
        :transport=&amp;gt;&amp;quot;UDP&amp;quot;                 -&amp;gt; Transport type from the contact header&lt;br /&gt;
        :q_value=&amp;gt;&amp;quot;0.00&amp;quot;,                 -&amp;gt; Q-value for the contact (for contact ordering)&lt;br /&gt;
        :src_host=&amp;gt;&amp;quot;10.0.0.10&amp;quot;,           -&amp;gt; Actual source IP address that the contact has registered from&lt;br /&gt;
        :src_port=&amp;gt;&amp;quot;7070&amp;quot;,                -&amp;gt; Actual source port that the contact has registered from&lt;br /&gt;
        :src_transport=&amp;gt;&amp;quot;UDP&amp;quot;,            -&amp;gt; Actual protocol that the contact has been registering with&lt;br /&gt;
       }&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
== Route parameters  ==&lt;br /&gt;
&lt;br /&gt;
All route may have these parameters: &lt;br /&gt;
&lt;br /&gt;
*calling &lt;br /&gt;
*called &lt;br /&gt;
*nap &lt;br /&gt;
*remapped_calling &lt;br /&gt;
*remapped_called &lt;br /&gt;
*remapped_nap &lt;br /&gt;
*remapped_destination_leg_profile (called remapped_profile prior to Toolpack 2.9)&lt;br /&gt;
*remapped_source_leg_profile (called remapped_incoming_profile prior to Toolpack 2.9)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  route[:remapped_nap]&lt;br /&gt;
&lt;br /&gt;
Additionally it is possible to add dynamic route attributes in the web portal. These can be referenced by their name.&lt;br /&gt;
For example:&lt;br /&gt;
*priority&lt;br /&gt;
*weight&lt;br /&gt;
&lt;br /&gt;
== Routing calls toward registered users ==&lt;br /&gt;
Static routes normally chose an outbound NAP to forward the call to.&lt;br /&gt;
&lt;br /&gt;
But it's also possible to create routes which outbound NAP is dynamically chosen by matching a registered user (when using [[Sip_registration_forwarding|SIP registration forwarding]]).&lt;br /&gt;
&lt;br /&gt;
More information can be found [[Sip_registration_forwarding#SIP_Calls_routing|here]] about the way to control the [[Sip_registration_forwarding#SIP_Calls_routing|priority of &amp;quot;dynamic&amp;quot; vs &amp;quot;static&amp;quot; routes]].&lt;br /&gt;
&lt;br /&gt;
More information can be found [[#Registered_Users_Information|here]] about using routing scripts to access registered users information during call routing.&lt;br /&gt;
&lt;br /&gt;
== Playing prompts announcements or tones  ==&lt;br /&gt;
&lt;br /&gt;
New feature in release 2.6, all bridges may have these parameters. These can be used to play IVR prompts (audio files) in different states of the call flow.&lt;br /&gt;
&lt;br /&gt;
*'''announcement_tone''' (played before outgoing call is routed)&lt;br /&gt;
*'''ring_tone''' (played after when waiting for outgoing call to answer)&lt;br /&gt;
*'''busy_tone''' (played if outgoing call failed)&lt;br /&gt;
*'''disconnect_tone''' (played after the call has reached it's maximum duration)&lt;br /&gt;
&lt;br /&gt;
Example to play an announcement to incoming call (before routing outgoing call, regardless if a matching route is found or not):&lt;br /&gt;
  bridge[:announcement_tone ] = &amp;quot;my_announcement.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play a ring-tone while the outgoing call is ringing:&lt;br /&gt;
  bridge[:ring_tone] = &amp;quot;my_ring_tone.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play an audio file when outgoing call fails (no route, or outgoing call is refused):&lt;br /&gt;
  bridge[:busy_tone] = &amp;quot;my_busy_tone.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example to play an audio file when call has reached the maximum allowed duration:&lt;br /&gt;
  bridge[:disconnect_tone] = &amp;quot;your_account_balance_is_empty.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Announcement file path format and options ===&lt;br /&gt;
&lt;br /&gt;
All file plabyacks (:announcement_tone,&amp;amp;nbsp;:busy_tone,&amp;amp;nbsp;:ring_tone,&amp;amp;nbsp;:disconnect_tone) inside bridge parameters use this format. &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;file1.wav:repeat:start_off:end_off,file2.wav:repeat:start_off:end_off,file3.wav:repeat:start_off:end_off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Optional parameters:&lt;br /&gt;
* repeat: number of times to play the file (0 and 1 have the same result)&lt;br /&gt;
* start_off: Start offset in milliseconds&lt;br /&gt;
* end_off: End offset in milliseconds&lt;br /&gt;
&lt;br /&gt;
Http and other path formats are described here: [[Customer_application_framework:play_audio_files#Play_path_format|Path format]]&lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
The following example will play file1.wav once, and then play file2.wav in loop: &lt;br /&gt;
  &amp;quot;file1.wav,file2.wav:-1&amp;quot; &lt;br /&gt;
&lt;br /&gt;
==== Example 2 ====&lt;br /&gt;
The following example will play file1.wav from start offset of 1 second to end offset of 3 seconds, then twice file2.wav from second 5 to second 10.&lt;br /&gt;
  &amp;quot;file1.wav:0:1000:3000,file2.wav:2:5000:10000&amp;quot; &lt;br /&gt;
&lt;br /&gt;
==== Example 3 ====&lt;br /&gt;
The following example will play file1.wav once, ending at offset of 30 seconds.&lt;br /&gt;
  &amp;quot;file1.wav:0:0:30000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== announcement_tone  ===&lt;br /&gt;
&lt;br /&gt;
  params[:bridge][:announcement_tone] = &amp;quot;announcement.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call before any outgoing call is placed. The outgoing call occurs when the file finished playing.&lt;br /&gt;
&lt;br /&gt;
==== announcement_tone options ====&lt;br /&gt;
===== announcement_tone_answer =====&lt;br /&gt;
  params[:bridge][:announcement_tone_answer] = &amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Forces an answer of the call before playing the announcement. Default if argument not provided is &amp;quot;no&amp;quot;, in which case call is only alerted with in-band media.&lt;br /&gt;
&lt;br /&gt;
===== announcement_code_detect =====&lt;br /&gt;
This option allows that the tone detection is enabled during the announcement play.&lt;br /&gt;
&lt;br /&gt;
Collected digits can be inserted into the CDR logs (radius attribute &amp;quot;Telcob-CollectedDigits&amp;quot;, or text CDR variable @{CollectedDigits}).&lt;br /&gt;
&lt;br /&gt;
Collected digits can also be sent back to routing script, which is called again with the same call attributes, except that the called number is replaced by the collected digits.&lt;br /&gt;
&lt;br /&gt;
Code detect has multiple options, as shown in the following code:&lt;br /&gt;
  code_detect = {&lt;br /&gt;
    :type                   =&amp;gt; :DTMF,   # :DTMF or :MFR1 tone detection.&lt;br /&gt;
                                        # Default is MFR1.&lt;br /&gt;
    :prefix                 =&amp;gt; &amp;quot;&amp;quot;,      # Prefix (digits) that is removed from collected digits.&lt;br /&gt;
                                        # Default is empty.&lt;br /&gt;
    :suffix                 =&amp;gt; &amp;quot;&amp;quot;,      # Suffix (digits) that is removed from collected digits&lt;br /&gt;
                                        # and causes routing script to be immediately called.&lt;br /&gt;
                                        # Default is empty.&lt;br /&gt;
    :suffix_removal         =&amp;gt; false,   # Controls the removal of the suffix from the collected digit string that's reported to routing script.&lt;br /&gt;
                                        # Default is false&lt;br /&gt;
    :timeout                =&amp;gt; 0,       # Inter-digit timeout (ms) after which collected digits are passed to the routing script.&lt;br /&gt;
                                        # Use 0 for &amp;quot;no timeout&amp;quot;.&lt;br /&gt;
                                        # Default is 1000ms&lt;br /&gt;
    :barge_in_interruption  =&amp;gt; true,    # When enabled, playing announcement is stopped as soon as first digit is collected.&lt;br /&gt;
                                        # Default is true.&lt;br /&gt;
    :proceed_on_play_done   =&amp;gt; false,   # When true:  Outgoing call is made after announcement finishes playing.&lt;br /&gt;
                                        #             Routing script is not called again.&lt;br /&gt;
                                        # When false: Outgoing call is never made.&lt;br /&gt;
                                        #             Digits are collected until timeout or suffix match,&lt;br /&gt;
                                        #             then routing script is called again.&lt;br /&gt;
                                        # Default is false.&lt;br /&gt;
    :cas_on_hook            =&amp;gt; false,   # Specific for CAS-R1 calls. Makes CAS bits switch to &amp;quot;on-hook&amp;quot; when announcement finished playing&lt;br /&gt;
                                        # (but the call is not &amp;quot;terminated&amp;quot; from Toolpack point of view)&lt;br /&gt;
                                        # Default is false.&lt;br /&gt;
    :cas_on_hook_delay      =&amp;gt; 0,       # Duration of cas bits &amp;quot;on-hook&amp;quot; state.&lt;br /&gt;
                                        # Only effective if cas_on_hook is set to true.&lt;br /&gt;
                                        # Value of 0 stands for &amp;quot;infinite delay&amp;quot;.&lt;br /&gt;
                                        # Default is 0.&lt;br /&gt;
    :repeat_delay           =&amp;gt; 0,       # Delay between repetition of the announcement. The announcement will repeat&lt;br /&gt;
                                        # itself every &amp;quot;repeat_delay&amp;quot; until a code is detected (suffix match or timetout).&lt;br /&gt;
                                        # Value of 0 stands for &amp;quot;infinite delay&amp;quot; (no repeating).&lt;br /&gt;
                                        # Default is 0.&lt;br /&gt;
  }&lt;br /&gt;
'''Example 1''': Collect DTMF digits, and call routing script again with collected digits upon timeout or suffix match.&lt;br /&gt;
  code_detect = { :type =&amp;gt; :DTMF, :suffix =&amp;gt; &amp;quot;#&amp;quot;, :timeout =&amp;gt; 5000 }&lt;br /&gt;
  params[:bridge][:announcement_code_detect] = code_detect&lt;br /&gt;
&lt;br /&gt;
'''Example 2''': Collect digits during the announcement (for CDR logs), then proceed (make outgoing call) after announcement finishes playing&lt;br /&gt;
  code_detect = { :type =&amp;gt; :DTMF, :timeout =&amp;gt; 0, :barge_in_interruption =&amp;gt; false, :proceed_on_play_done =&amp;gt; true }&lt;br /&gt;
  params[:bridge][:announcement_code_detect] = code_detect&lt;br /&gt;
&lt;br /&gt;
==== Controlling what happens after announcement ====&lt;br /&gt;
The routing script can control what happens with the call after the announcement finishes playing:&lt;br /&gt;
* An outgoing call is made&lt;br /&gt;
* Incoming call is hung-up&lt;br /&gt;
* Do nothing (wait for the incoming call to hang-up)&lt;br /&gt;
===== An outgoing call is made =====&lt;br /&gt;
This happens when the script has returned matching routes (and did not raise RoutingException)&lt;br /&gt;
&lt;br /&gt;
===== Incoming call is hung-up =====&lt;br /&gt;
This happens when the script returns no routes (in which case base_routing will raise RoutingException with cause :no_route).&lt;br /&gt;
&lt;br /&gt;
It also happens when the script explicitly raises RoutingException.&lt;br /&gt;
&lt;br /&gt;
The incoming call will be terminated with the specified cause.&lt;br /&gt;
For example&lt;br /&gt;
    raise RoutingException, :temporary_failure&lt;br /&gt;
(See &amp;quot;Reason values&amp;quot; section in this page for list of available causes)&lt;br /&gt;
&lt;br /&gt;
===== Do nothing (wait for the incoming call to hang-up) =====&lt;br /&gt;
If a filter raises RoutingException with code :ok, then the incoming call will not be terminated at the end of the announcement play.&lt;br /&gt;
Announcement digit collection will remain active if appropriate.&lt;br /&gt;
For example:&lt;br /&gt;
    raise RoutingException, :ok&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ring_tone  ===&lt;br /&gt;
  params[:bridge][:ring_tone] = &amp;quot;ringing.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call while waiting for the outgoing call to be answered.&lt;br /&gt;
&lt;br /&gt;
Ring tone playback can also be configured in the Web Portal, from the incoming call's profile (under &amp;quot;Tones and Call Progress Options&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Routing script has precedence over profile (a routing script that fills params[:bridge][:ring_tone] will override the profile's ring tone behavior).&lt;br /&gt;
&lt;br /&gt;
==== ring_tone options ====&lt;br /&gt;
===== ring_tone_state =====&lt;br /&gt;
  params[:bridge][:ring_tone_state] = :alerted&lt;br /&gt;
&lt;br /&gt;
Call state from which ring tone is being played. Available values are:&lt;br /&gt;
* '''immediately''':  Ring tone starts playing immediately on the incoming leg&lt;br /&gt;
* '''accepted''':     Ring tone starts playing as soon as outgoing call is accepted&lt;br /&gt;
* '''callprogress''': Ring tone starts playing as soon as &amp;quot;call progress&amp;quot; is received on the outgoing call&lt;br /&gt;
* '''alerted''' (default):      Ring tone starts playing only once outgoing call is alerted (but won't play if alert indicates early media from outgoing call)&lt;br /&gt;
&lt;br /&gt;
This option also apply when params[:bridge][:ring_tone] is not used, because it also apply to ring tone playback configured in the Web Portal, from the incoming call's profile.&lt;br /&gt;
&lt;br /&gt;
=== busy_tone  ===&lt;br /&gt;
  Toolpack 2.8 and above:&lt;br /&gt;
    params[:bridge][:busy_tone] = &amp;quot;no_route.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Note: Obsolete name (toolpack 2.7.153 and earlier, but still supported in recent releases):&lt;br /&gt;
    params[:bridge][:call_progress_tone] = &amp;quot;no_route.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call when outgoing call fails (never answered).&lt;br /&gt;
&lt;br /&gt;
Note that announcement_tone, if used, is played before the outgoing call attempt is made, and thus before the busy_tone.&lt;br /&gt;
&lt;br /&gt;
Busy tone playback can also be configured in the Web Portal, from the incoming call's profile (under &amp;quot;Tones and Call Progress Options&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Routing script has precedence over profile (a routing script that fills params[:bridge][:busy_tone] will override the profile's busy tone behavior).&lt;br /&gt;
&lt;br /&gt;
Special value '''&amp;quot;none&amp;quot;''' can be used by routing script to force playing nothing (as empty string would default to profile's behavior)&lt;br /&gt;
&lt;br /&gt;
==== busy_tone options ====&lt;br /&gt;
===== busy_tone_answer =====&lt;br /&gt;
  params[:bridge][:busy_tone_answer] = &amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Forces an answer of the call before playing the busy tone. Default if argument not provided is &amp;quot;no&amp;quot;, in which case call is only alerted with in-band media.&lt;br /&gt;
&lt;br /&gt;
=== disconnect_tone  ===&lt;br /&gt;
  params[:bridge][:disconnect_tone] = &amp;quot;max_duration.wav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Audio file played on the incoming call when call duration (:max_call_duration) is reached. Then the leg will be terminated with specified reason (:call_duration_reason).&lt;br /&gt;
&lt;br /&gt;
==== disconnect_tone options ====&lt;br /&gt;
===== max_call_duration  =====&lt;br /&gt;
  params[:bridge][:max_call_duration] = &amp;quot;60000&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Maximum call duration in millisecond. This timer is started when entering answer state.&lt;br /&gt;
&lt;br /&gt;
===== call_duration_reason  =====&lt;br /&gt;
  params[:bridge][:call_duration_reason] =&amp;amp;nbsp;:resource_unavailable &lt;br /&gt;
&lt;br /&gt;
Drop both legs with this reason when call duration (:max_call_duration) is reached.&lt;br /&gt;
&lt;br /&gt;
=== Managing audio prompts through Web Portal ===&lt;br /&gt;
Audio prompts can be uploaded or deleted from the TMedia unit through the Web Portal:&lt;br /&gt;
[[Toolpack:Configuring_Audio_Prompts_A|Managing audio prompts]]&lt;br /&gt;
&lt;br /&gt;
Prompts management must be done using the Web Portal of the primary server (in systems with redundant TMedia units or redundant host servers).&lt;br /&gt;
The file will automatically get replicated to the secondary server.&lt;br /&gt;
&lt;br /&gt;
=== Managing audio prompts manually ===&lt;br /&gt;
Any file on the TMedia host file system can be played. This means it's possible to manage prompts through ssh/scp.&lt;br /&gt;
&lt;br /&gt;
==== The default (replicated) prompts folder ====&lt;br /&gt;
By default, when playing a prompt, Toolpack will look in the default prompts folder:&lt;br /&gt;
 /lib/tb/toolpack/pkg/prompts&lt;br /&gt;
The root of this &amp;quot;prompts&amp;quot; directory is automatically replicated to secondary unit of redundant setups (1+1, N+1, redundant hosts). Sub-folders won't be replicated.&lt;br /&gt;
&lt;br /&gt;
Any prompt play request without explicit file path will map to this folder. For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /lib/tb/toolpack/pkg/prompts/no_route.wav&lt;br /&gt;
&lt;br /&gt;
==== Relative file paths ====&lt;br /&gt;
Any file path that begins with &amp;quot;file://&amp;quot; is considered relative to the tbstreamserver application's working directory:&lt;br /&gt;
 /lib/tb/toolpack/setup/12358/2.8/apps/tbstreamserver/&lt;br /&gt;
(Where &amp;quot;2.8&amp;quot; may be replaced by the current major version of your system)&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;file://my_folder/no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /lib/tb/toolpack/setup/12358/2.8/apps/tbstreamserver/my_folder/no_route.wav&lt;br /&gt;
&lt;br /&gt;
==== Absolute file paths ====&lt;br /&gt;
Absolute paths can also be provided.&lt;br /&gt;
For example:&lt;br /&gt;
  params[:bridge][:busy_tone] = &amp;quot;file:///root/my_folder/no_route.wav&amp;quot; &lt;br /&gt;
This will correspond to file /root/my_folder/no_route.wav&lt;br /&gt;
&lt;br /&gt;
== Recording call legs  ==&lt;br /&gt;
Introduced in release 2.6.44, it's now possible to use routing scripts to ask for recording incoming and/or outgoing call legs.&lt;br /&gt;
&lt;br /&gt;
See example filter script &amp;quot;call_recording&amp;quot; (created by default in Web Portal routing scripts starting with 2.6.44) for an example.&lt;br /&gt;
&lt;br /&gt;
=== Recording the incoming call leg  ===&lt;br /&gt;
To record the incoming call leg, the routing script (in a &amp;quot;after filter&amp;quot; for example) has to set the following parameter:&lt;br /&gt;
&lt;br /&gt;
  bridge[ :record_incoming ]  = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Recording the outgoing call leg  ===&lt;br /&gt;
To record the outgoing call leg, the routing script (in a &amp;quot;after filter&amp;quot; for example) has to set the following parameter, per route (the decision to record or not, or the file name to record to, can be set per matching route):&lt;br /&gt;
&lt;br /&gt;
  # Need to clone the routes in order to have the right to modify them&lt;br /&gt;
  routes = clone_routes params[:routes]&lt;br /&gt;
  routes.each do |route|&lt;br /&gt;
    route[ :record_outgoing ]  = &amp;quot;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  # Store modified routes back to the parameters for this outgoing call&lt;br /&gt;
  params[:routes] = routes&lt;br /&gt;
&lt;br /&gt;
=== Record the outgoing call leg within incoming leg's recorded file (mixing)  ===&lt;br /&gt;
  [...]&lt;br /&gt;
    route[ :record_outgoing ]  = &amp;quot;@{MixWithIncoming}&amp;quot;&lt;br /&gt;
  [...]&lt;br /&gt;
&lt;br /&gt;
=== Choosing file path to record to  ===&lt;br /&gt;
The value assigned to &amp;quot;:record_incoming&amp;quot; or &amp;quot;:record_outgoing&amp;quot; is the path to record the file to.&lt;br /&gt;
&lt;br /&gt;
The paths can be absolute, or relative. When relative, they are relative to the &amp;quot;tbstreamserver&amp;quot; application working directory, for example:&lt;br /&gt;
  /lib/tb/toolpack/setup/12358/2.7/apps/tbstreamserver/&lt;br /&gt;
&lt;br /&gt;
* Empty file name will default to a name that contains various information about the call:&lt;br /&gt;
** ''LinkId'':     Id common between all legs of this call bridge&lt;br /&gt;
** ''LegId'':      Unique Id for this leg&lt;br /&gt;
** ''Nap'':        Current NAP name this call leg is from&lt;br /&gt;
** ''Direction'':  &amp;quot;IN&amp;quot; or &amp;quot;OUT&amp;quot; (depends if call leg is incoming or outgoing leg)&lt;br /&gt;
** ''Calling'':    The calling number of this call leg&lt;br /&gt;
** ''Called'':     The called number of this call leg&lt;br /&gt;
** ''Protocol'':   The signaling protocol of this call leg (SS7, ISDN, CAS, SIP)&lt;br /&gt;
** ''Media info'': Codec + IP/Port for SIP calls, Trunk/Timeslot for TDM calls&lt;br /&gt;
* To record outgoing call leg in the same audio file as incoming call leg (mixing), use the following:&lt;br /&gt;
** @{MixWithIncoming}: Record outgoing legs in same file as incoming legs&lt;br /&gt;
* Variables can be used to insert in the recording path information that's not already available from routing scripts:&lt;br /&gt;
** @{CURRENT_PKG}: Version of current package&lt;br /&gt;
*** Example: 2.6.45&lt;br /&gt;
** @{DATE format}: Prints the date, where 'format' is expressed as described for the 'strftime' function&lt;br /&gt;
*** Example: @{DATE %Y-%m-%d} =&amp;gt; 2013-01-28&lt;br /&gt;
** @{DefaultName}: Replaced by the default file name for recording, which contains:&lt;br /&gt;
*** LinkId:     Id common between all legs of this call bridge&lt;br /&gt;
*** LegId:      Unique Id for this leg&lt;br /&gt;
*** Nap:        Current NAP name this call leg is from&lt;br /&gt;
*** Direction:  &amp;quot;IN&amp;quot; or &amp;quot;OUT&amp;quot; (depends if call leg is incoming or outgoing leg)&lt;br /&gt;
*** Calling:    Calling number&lt;br /&gt;
*** Called:     Called number&lt;br /&gt;
*** Protocol:   Protocol type of this call (SS7, ISDN, CASR2, SIP)&lt;br /&gt;
*** Media info: Codec + IP/Port for SIP calls, Trunk/Timeslot for TDM calls&lt;br /&gt;
*** Example: &amp;quot;73EBA698-F3D67B4B-NAP_SS7-IN-5550000-5550001-SS7-TRUNK_BELL_11-24.wav&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;73EBA698-73EBA698-NAP_SIP-OUT-5550000-5550001-SIP-G723-10.3.10.101-1050.wav&amp;quot;&lt;br /&gt;
** @{DefaultPath}:  Default recording folder and file name: &amp;quot;@{RECORD_PATH}/@{DATE %Y-%m-%d}/@{DefaultName}&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;/lib/tb/toolpack/setup/12358/recorded_calls/73EBA698-F3D67B4B-NAP_SS7-IN-5550000-5550001-SS7-TRUNK_BELL_11-24.wav&amp;quot;&lt;br /&gt;
*** Example: &amp;quot;/lib/tb/toolpack/setup/12358/recorded_calls/73EBA698-73EBA698-NAP_SIP-OUT-5550000-5550001-SIP-G723-10.3.10.101-1050.wav&amp;quot;&lt;br /&gt;
** @{Direction}: Direction of current leg (IN our OUT)&lt;br /&gt;
*** Example: IN&lt;br /&gt;
** @{LegId}: Current LegId (Unique Id for this leg)&lt;br /&gt;
*** Example: F3D67B4B&lt;br /&gt;
** @{LinkId}: Current LinkId (Id common between all legs of this call bridge)&lt;br /&gt;
*** Example: 73EBA698&lt;br /&gt;
** @{PKG_HOME}: Path where packages are stored.&lt;br /&gt;
*** Note: It's not recomended to use that path on redundant systems, package file replication may cause confusion in recorded files.&lt;br /&gt;
*** Example: /lib/tb/toolpack/pkg&lt;br /&gt;
** @{PROMPT_PATH}: Default path where audio prompts are stored&lt;br /&gt;
*** Note: It's not recomended to use that path on redundant systems, package file replication may cause confusion in recorded files.&lt;br /&gt;
*** Example: /lib/tb/toolpack/pkg/prompts&lt;br /&gt;
** @{Protocol}: Protocol of current leg&lt;br /&gt;
*** Example: SS7&lt;br /&gt;
** @{RECORD_PATH}: Default recording folder: &amp;quot;@{TB_SETUP_HOME}/recorded_calls/&amp;quot;&lt;br /&gt;
** @{TBX_GW_PORT}: Current &amp;quot;System Id&amp;quot; (also called &amp;quot;Gateway Port&amp;quot;)&lt;br /&gt;
*** Example: 12358&lt;br /&gt;
** And all variables listed here: [[Customer_application_framework:play_audio_files#Helpful_variables_to_build_play_or_record_file_paths|Building play or record file path]]&lt;br /&gt;
&lt;br /&gt;
== Controlling UUI (user-to-user information) relay  ==&lt;br /&gt;
UUI (user-to-user information) can be present in different messages received by either call leg during a call. For example, information can be carried during the initial invite, other information can be carried when the call is alerted, answered, or terminated.&lt;br /&gt;
&lt;br /&gt;
Routing scripts can control if the UUI received from one leg through the call will be forwarded to the other call leg:&lt;br /&gt;
*uui_forward_enabled&lt;br /&gt;
&lt;br /&gt;
Routing scripts can also read and modify the UUI received with the incoming call leg, before it gets forwarded upon creation of the outgoing call leg:&lt;br /&gt;
*uui &lt;br /&gt;
&lt;br /&gt;
=== UUI (user-to-user indication) values  ===&lt;br /&gt;
&lt;br /&gt;
Byte array represented as ruby String. Use ''bridge=params[:bridge]'', then ''bridge[:uui]'' to access the data.&lt;br /&gt;
&lt;br /&gt;
To access the bytes in Ruby, use ruby String operator []. For example:  bridge[:uui][0] will return the binary value of the first UUI byte.&lt;br /&gt;
&lt;br /&gt;
Function each_byte can also be useful to iterate through all bytes of the UUI.&lt;br /&gt;
&lt;br /&gt;
=== uui_forward_enabled values  ===&lt;br /&gt;
&lt;br /&gt;
Controls forwarding or discarding of UUI to outgoing call leg. &lt;br /&gt;
&lt;br /&gt;
Values for this parameter are &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;false&amp;quot; or &amp;quot;true.&lt;br /&gt;
* 0/false: UUI is not forwarded between call legs&lt;br /&gt;
* 1/true: UUI is forwarded between call legs&lt;br /&gt;
&lt;br /&gt;
The value for this parameter at input of routing script depends on the &amp;quot;Forward UUI&amp;quot; parameter in the &amp;quot;Advanced&amp;quot; section of the Gateway configuration page of the Web Portal. The script may change this value to override the Gateway configuration.&lt;br /&gt;
&lt;br /&gt;
== Authorization ==&lt;br /&gt;
Starting with release 2.7, it is possible to issue RADIUS authorization requests from routing scripts. To do so, the params[:authorization] object must be filled with the required RADIUS attributes and [[#Refuse|an exception must be raised]] with reason :authorization_required.&lt;br /&gt;
&lt;br /&gt;
When the authorization is completed, the routing script is called again with the result. The params[:authorization] object will be filled with the RADIUS attributes from the response. The params[:authorization][:result] field will also contain a string indicating the result of the authorization:&lt;br /&gt;
&lt;br /&gt;
* ''accept'': The authorization was successful.&lt;br /&gt;
* ''reject'': The authorization was refused.&lt;br /&gt;
* ''challenge'': The authorization was challenged.&lt;br /&gt;
* ''timeout'': The authorization was not answered.&lt;br /&gt;
&lt;br /&gt;
== Call diversion options ==&lt;br /&gt;
It's possible to control the call flow when a call diversion information is received in the alerting state.&lt;br /&gt;
&lt;br /&gt;
Two fields are available: bridge[ :diversion ] and bridge[ :diversion_reason ]&lt;br /&gt;
&lt;br /&gt;
The internal release cause TOOLPACK_DIVERT_NOT_ALLOWED is used by gateway application to terminate both legs.&lt;br /&gt;
&lt;br /&gt;
  bridge[ :diversion ] = :allowed&lt;br /&gt;
The alert message will not be analyzed and the call will be progressed. Default behavior.&lt;br /&gt;
  bridge[ :diversion ] = :not_allowed&lt;br /&gt;
If the alert message indicates that the call is diverted, the call will be released no matter the In-band information to allow&lt;br /&gt;
early media.&lt;br /&gt;
  bridge[ :diversion ] = :not_allowed_w_early_media&lt;br /&gt;
The call will be released If the alert message indicates that the call is diverted with in-band information to allow early media.&lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;*&amp;quot;&lt;br /&gt;
If the diversion is not allowed, the gateway will drop the call for any redirecting reason. &lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;0,1,2&amp;quot;&lt;br /&gt;
or&lt;br /&gt;
  bridge[ :diversion_reason ] = &amp;quot;unknown,busy,no_reply&amp;quot;&lt;br /&gt;
If the diversion is not allowed, the redirecting reason will be analyzed and the call will only be dropped for the configured cases.&lt;br /&gt;
&lt;br /&gt;
See section [[Routing_script_tutorial:Mini_Development_Guide#Redirecting_number,_Original_Called_Number_and_Diversion_Reason|Redirecting number reason values]].&lt;br /&gt;
&lt;br /&gt;
== Call transfer requests ==&lt;br /&gt;
Toolpack allows that [[Call transfer]] requests are relayed from one leg to the other, or to process them locally (making another outgoing call to replace the call that requested the call transfer).&lt;br /&gt;
&lt;br /&gt;
If the chosen [[Call transfer]] mode is to process requests locally, upon reception of a call transfer request (SIP REFER or ISDN Facility), routing script will be called once again, to select the routes for the new outgoing call (call transfer target).&lt;br /&gt;
&lt;br /&gt;
=== How to route call transfer request ===&lt;br /&gt;
Routing of a call transfer request is done exactly like routing of a normal incoming call.&lt;br /&gt;
The routing script generally does not need any modification to support that.&lt;br /&gt;
&lt;br /&gt;
In some cases, the routing script may want to use information related to the transfer request to perform routing, or to insert information in the outgoing call leg.&lt;br /&gt;
Additional information is provided to the routing script, allowing routing decisions using information from the call transfer request (SIP REFER or ISDN Facility).&lt;br /&gt;
See below...&lt;br /&gt;
&lt;br /&gt;
=== params[ :call ] content during transfer request ===&lt;br /&gt;
When processing a call transfer request, the params[ :call ] hash contains the information from the inbound call (same as was passed to the routing script upon arrival of the inbound call)&lt;br /&gt;
 call = params[ :call ]          -&amp;gt; Information from original inbound call, with exception of call[ :called ]&lt;br /&gt;
&lt;br /&gt;
One exception (convenient because it allows a unmodified routing script to process call transfer request the same way as any other routing request):&lt;br /&gt;
 call[ :called ]                 -&amp;gt; Replaced by the called number from the call transfer request (also called &amp;quot;redirection number&amp;quot;)&lt;br /&gt;
Complementary information:&lt;br /&gt;
 call[ :original_called_number ] -&amp;gt; Contains the called number that was initially received from the incoming call, prior to call transfer request&lt;br /&gt;
 call[ :redirecting_number ]     -&amp;gt; Number of the call from which the call transfer request was received (generally equals to original_called_number)&lt;br /&gt;
&lt;br /&gt;
These fields will also be included in the outgoing call made after routing:&lt;br /&gt;
* original called number and redirecting number are existing fields on SS7 and ISDN calls&lt;br /&gt;
* SIP &amp;quot;diversion&amp;quot; header is used for SIP calls&lt;br /&gt;
&lt;br /&gt;
=== params[ :transfer ] content ===&lt;br /&gt;
(this if valid only for release 2.7.102 and above)&amp;lt;br&amp;gt;&lt;br /&gt;
When processing a call transfer request, information from the call transfer request message (SIP REFER, ISDN Facility) is provided in params[ :transfer ]:&lt;br /&gt;
  transfer = params[ :transfer ]&lt;br /&gt;
The following field is always present:&lt;br /&gt;
  transfer[ :original_nap ]      -&amp;gt; Contains the NAP of the first call from which a call transfer request was received&lt;br /&gt;
  transfer[ :redirecting_nap ]   -&amp;gt; Contains the NAP of the call from which the current call transfer request was received&lt;br /&gt;
                                    (same as :original_nap for the first call transfer, different for subsequent transfers)&lt;br /&gt;
Examples of other fields that may be present, when appropriate:&lt;br /&gt;
  transfer[ :uui ]               -&amp;gt; The UUI (user-to-user information) found in the call transfer request&lt;br /&gt;
  transfer[ :sip_header ]        -&amp;gt; Contains custom SIP headers from the call transfer request&lt;br /&gt;
  transfer[ :request_uri ]       -&amp;gt; Contains the SIP Request URI&lt;br /&gt;
&lt;br /&gt;
These fields are 'read-only'. They will not be included in the outgoing call, as they represent the contents of the call transfer request, and not the outgoing call to be made.&lt;br /&gt;
&lt;br /&gt;
To insert/modify attributes of the outgoing call, the parameters from params[ :call ] must be edited instead.&lt;br /&gt;
&lt;br /&gt;
== Redirection ==&lt;br /&gt;
In release 2.8 and above, redirection contacts are obtained from the routing engine in the following format:&lt;br /&gt;
&lt;br /&gt;
  contacts = params[ :contacts ]&lt;br /&gt;
  contacts = {&lt;br /&gt;
      :index=&amp;gt;&amp;quot;3&amp;quot;,&lt;br /&gt;
      :list=&amp;gt;[&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6660&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6661&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6661@192.168.215.127&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6661@192.168.215.127&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6662&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6662@192.168.215.128&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6662@192.168.215.128&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6663&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6663@192.168.215.129&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6663@192.168.215.129&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
         {:called_number=&amp;gt;&amp;quot;6664&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6664@192.168.215.150&amp;quot;, :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6664@192.168.215.150&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
      ],&lt;br /&gt;
      :source_indexes=&amp;gt;&amp;quot;nil,0,0,0,2&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:list]&amp;lt;/code&amp;gt; contains the contact log. Each contact within the list has the following fields:&lt;br /&gt;
** &amp;lt;code&amp;gt;:called_number&amp;lt;/code&amp;gt; - the called number&lt;br /&gt;
** &amp;lt;code&amp;gt;:is_number_ported&amp;lt;/code&amp;gt; - if the called number has been ported (for SIP: if the npdi parameter is present)&lt;br /&gt;
** &amp;lt;code&amp;gt;:ported_number&amp;lt;/code&amp;gt; - the called number that was ported (for SIP: the rn parameter value, if available)&lt;br /&gt;
** &amp;lt;code&amp;gt;:sip_uri&amp;lt;/code&amp;gt; - the SIP URI of the contact, without the contact-params section (without the expires and q contact parameters)&lt;br /&gt;
** &amp;lt;code&amp;gt;:raw_data&amp;lt;/code&amp;gt; - the raw data representing the contact in the signaling protocol. For SIP, this is the full SIP URI (including the expires and q contact parameters).&lt;br /&gt;
** &amp;lt;code&amp;gt;:priority&amp;lt;/code&amp;gt; - the priority of the contact [0-1000]&lt;br /&gt;
** &amp;lt;code&amp;gt;:expiration&amp;lt;/code&amp;gt; - the expiration time in seconds of the contact&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:index]&amp;lt;/code&amp;gt; contains the index of the contact that is currently being routed.&lt;br /&gt;
* &amp;lt;code&amp;gt;params[:contacts][:source_indexes]&amp;lt;/code&amp;gt; contains a comma-separated list of indexes from &amp;lt;code&amp;gt;params[:contacts][:list]&amp;lt;/code&amp;gt;. Each index represents the contact from which the contact in the list was obtained from.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get more information, see:&lt;br /&gt;
*[[Routing_script_tutorial:SIP_Redirection_Contacts|SIP Redirection Contacts Parameters in a Call Flow]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Connected number ==&lt;br /&gt;
Insert a connected number in the answer message of the call flow.&lt;br /&gt;
&lt;br /&gt;
Routing script example:&lt;br /&gt;
    bridge = params[ :bridge ]&lt;br /&gt;
    bridge [ :connected_number ] = &amp;quot;3335577&amp;quot;&lt;br /&gt;
    bridge [ :connected_number_noa ] = :national_number&lt;br /&gt;
    bridge [ :connected_number_npi ] = :private&lt;br /&gt;
    bridge [ :connected_number_presentation ] = :allowed&lt;br /&gt;
    bridge [ :connected_number_screening ] = :pass&lt;br /&gt;
&lt;br /&gt;
== Terminating calls ==&lt;br /&gt;
In release 2.8, it is now possible to terminate a call through the routing scripts. The [[#Reason values|reason code]] must be specified in &amp;lt;code&amp;gt;params[:bridge][:reason]&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;:terminate&amp;lt;/code&amp;gt; hash must be created and copied into &amp;lt;code&amp;gt;params&amp;lt;/code&amp;gt;:&lt;br /&gt;
  terminate = {}&lt;br /&gt;
  params[:terminate] = terminate&lt;br /&gt;
The following fields can then be set in &amp;lt;code&amp;gt;:terminate&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;:sip_header&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:contacts&amp;lt;/code&amp;gt; # list of contacts as described in the [[#Redirection|redirection]] section&lt;br /&gt;
* &amp;lt;code&amp;gt;:isup_raw&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:isup_raw_variant&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_noa&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_npi&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_presentation&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_reason&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_counter&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:redirecting_number_indicator&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_noa&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_npi&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_presentation&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_reason&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;:original_called_number_counter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reason values  ==&lt;br /&gt;
&lt;br /&gt;
Check here for Termination Reason Cause codes:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Termination_cause_codes|Termination Reason Cause codes]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example to refuse an incoming call leg.&lt;br /&gt;
  raise RoutingException, :no_route&lt;br /&gt;
&lt;br /&gt;
Reason cause strings available inside routing scripts:&lt;br /&gt;
&lt;br /&gt;
List of Q.850 reason causes:&lt;br /&gt;
  :unallocated_number&lt;br /&gt;
  :no_route_to_network&lt;br /&gt;
  :no_route_to_destination&lt;br /&gt;
  :send_special_tone&lt;br /&gt;
  :misdialled_trunk_prefix&lt;br /&gt;
  :channel_unacceptable&lt;br /&gt;
  :call_awarded_in_established_channel&lt;br /&gt;
  :preemption&lt;br /&gt;
  :reattempt&lt;br /&gt;
  :qor_ported_number&lt;br /&gt;
  :normal_call_clearing&lt;br /&gt;
  :user_busy&lt;br /&gt;
  :no_user_responding&lt;br /&gt;
  :no_answer_from_user&lt;br /&gt;
  :subscriber_absent&lt;br /&gt;
  :call_rejected&lt;br /&gt;
  :number_changed&lt;br /&gt;
  :redirection&lt;br /&gt;
  :exchange_routing_error&lt;br /&gt;
  :non_selected_user_clearing&lt;br /&gt;
  :destination_out_of_order&lt;br /&gt;
  :address_incomplete&lt;br /&gt;
  :facility_rejected&lt;br /&gt;
  :response_to_status_enquiry&lt;br /&gt;
  :normal_unspecified&lt;br /&gt;
  :no_circuit_available&lt;br /&gt;
  :network_out_of_order&lt;br /&gt;
  :frame_mode_out_of_service&lt;br /&gt;
  :frame_mode_connection_operational&lt;br /&gt;
  :temporary_failure&lt;br /&gt;
  :switching_equipment_congestion&lt;br /&gt;
  :access_information_discarded&lt;br /&gt;
  :requested_circuit_not_available&lt;br /&gt;
  :precedence_call_blocked&lt;br /&gt;
  :resource_unavailable&lt;br /&gt;
  :quality_of_service_not_available&lt;br /&gt;
  :requested_facility_not_subscribed&lt;br /&gt;
  :outgoing_calls_barred&lt;br /&gt;
  :outgoing_calls_barred_within_cug&lt;br /&gt;
  :incoming_calls_barred&lt;br /&gt;
  :incoming_calls_barred_within_cug&lt;br /&gt;
  :bearer_cap_not_authorized&lt;br /&gt;
  :bearer_cap_not_available&lt;br /&gt;
  :inconsistency_access_info&lt;br /&gt;
  :service_not_available&lt;br /&gt;
  :bearer_cap_not_implemented&lt;br /&gt;
  :channel_type_not_implemented&lt;br /&gt;
  :requested_facility_not_implemented&lt;br /&gt;
  :only_restricted_digital_info&lt;br /&gt;
  :service_not_implemented&lt;br /&gt;
  :invalid_call_reference&lt;br /&gt;
  :channel_does_not_exist&lt;br /&gt;
  :call_identity_does_not_exist&lt;br /&gt;
  :call_identity_in_use&lt;br /&gt;
  :no_call_suspended&lt;br /&gt;
  :call_has_been_cleared&lt;br /&gt;
  :user_not_member_of_cug&lt;br /&gt;
  :incompatible_destination&lt;br /&gt;
  :non_existant_cug&lt;br /&gt;
  :invalid_transit_network&lt;br /&gt;
  :invalid_message_unspecified&lt;br /&gt;
  :mandatory_ie_missing&lt;br /&gt;
  :message_type_non_existent&lt;br /&gt;
  :message_not_compatible_with_call_state&lt;br /&gt;
  :ie_non_existent&lt;br /&gt;
  :invalid_ie_content&lt;br /&gt;
  :msg_not_compatible_with_call_state&lt;br /&gt;
  :recovery_on_timer_expiry&lt;br /&gt;
  :parameter_non_existent_passed_on&lt;br /&gt;
  :message_with_non_recognized_parameters_discarded&lt;br /&gt;
  :protocol_error&lt;br /&gt;
  :interworking_unspecified&lt;br /&gt;
&lt;br /&gt;
List of toolpack reason causes:&lt;br /&gt;
&lt;br /&gt;
  :toolpack_normal                       or :normal&lt;br /&gt;
  :toolpack_resource_error               or :resource_error&lt;br /&gt;
  :toolpack_timeout                      or :timeout&lt;br /&gt;
  :toolpack_no_route                     or :no_route&lt;br /&gt;
  :toolpack_call_collision               or :call_collision&lt;br /&gt;
  :toolpack_sync_drop                    or :sync_drop&lt;br /&gt;
  :toolpack_signaling_error              or :signaling_error&lt;br /&gt;
  :toolpack_locally_rejected             or :locally_rejected&lt;br /&gt;
  :toolpack_interface_not_available      or :interface_not_available&lt;br /&gt;
  :toolpack_reset_in_progress            or :reset_in_progress&lt;br /&gt;
  :toolpack_adapter_reject               or :adapter_reject&lt;br /&gt;
  :toolpack_missing_or_invalid_ie        or :missing_or_invalid_ie&lt;br /&gt;
  :toolpack_incoming_only                or :incoming_only&lt;br /&gt;
  :toolpack_system_configuration_changed or :system_configuration_changed&lt;br /&gt;
  :toolpack_resource_no_more_available   or :resource_no_more_available&lt;br /&gt;
  :toolpack_incompatible_media           or :incompatible_media&lt;br /&gt;
  :toolpack_resource_allocation_failed   or :resource_allocation_failed&lt;br /&gt;
  :toolpack_data_path_not_available      or :data_path_not_available&lt;br /&gt;
  :toolpack_local_congestion             or :local_congestion&lt;br /&gt;
  :toolpack_authorization_required       or :authorization_required&lt;br /&gt;
  :toolpack_call_divert_is_not_allowed   or :call_divert_is_not_allowed&lt;br /&gt;
&lt;br /&gt;
List of SIP reason causes:&amp;lt;br/&amp;gt;&lt;br /&gt;
Reason causes starting with a digit must use the following syntax (can't use : as prefix).&lt;br /&gt;
&lt;br /&gt;
  '300_multiple_choices'&lt;br /&gt;
  '301_moved_permanently'&lt;br /&gt;
  '302_moved_temporarily'&lt;br /&gt;
  '305_use_proxy'&lt;br /&gt;
  '380_alternative_service'&lt;br /&gt;
  '400_bad_request'&lt;br /&gt;
  '401_unauthorized'&lt;br /&gt;
  '402_payment_required'&lt;br /&gt;
  '403_forbidden'&lt;br /&gt;
  '404_not_found'&lt;br /&gt;
  '405_method_not_allowed'&lt;br /&gt;
  '406_not_acceptable'&lt;br /&gt;
  '407_proxy_authentication_required'&lt;br /&gt;
  '408_request_timeout'&lt;br /&gt;
  '409_conflict'&lt;br /&gt;
  '410_gone'&lt;br /&gt;
  '413_request_entity_too_large'&lt;br /&gt;
  '414_request_URI_too_long'&lt;br /&gt;
  '415_unsupported_media'&lt;br /&gt;
  '416_unsupported_URI_scheme'&lt;br /&gt;
  '420_bad_extension'&lt;br /&gt;
  '421_extension_required'&lt;br /&gt;
  '422_session_timer_too_small'&lt;br /&gt;
  '423_interval_too_brief'&lt;br /&gt;
  '429_referrer_identity_error'&lt;br /&gt;
  '480_temporary_unavailable'&lt;br /&gt;
  '481_call_or_transaction_does_not_exist'&lt;br /&gt;
  '482_loop_detected'&lt;br /&gt;
  '483_too_many_hops'&lt;br /&gt;
  '484_address_incomplete'&lt;br /&gt;
  '485_ambiguous'&lt;br /&gt;
  '486_busy_here'&lt;br /&gt;
  '487_request_terminated'&lt;br /&gt;
  '488_not_acceptable_here'&lt;br /&gt;
  '489_bad_event'&lt;br /&gt;
  '491_retry_after'&lt;br /&gt;
  '500_server_internal_error'&lt;br /&gt;
  '501_not_implemented'&lt;br /&gt;
  '502_bad_gateway'&lt;br /&gt;
  '503_service_unavailable'&lt;br /&gt;
  '504_server_timeout'&lt;br /&gt;
  '505_version_unsupported'&lt;br /&gt;
  '513_message_too_large'&lt;br /&gt;
  '600_busy_everywhere'&lt;br /&gt;
  '603_decline'&lt;br /&gt;
  '604_not_exist_anywhere'&lt;br /&gt;
  '606_not_acceptable'&lt;br /&gt;
&lt;br /&gt;
== Nap status  ==&lt;br /&gt;
&lt;br /&gt;
All the status fields of the NAPs are provided for use by the routing scripts. See the nap status provider for more details on which fields are available in the CEngineStatTransNap.hpp file. &lt;br /&gt;
&lt;br /&gt;
'''Notice:''' These values may change between major release. &lt;br /&gt;
&lt;br /&gt;
  Routing script call attribute name    Description&lt;br /&gt;
  --------------------------------------------------------------------------------------------&lt;br /&gt;
  &amp;quot;name&amp;quot;                                NAP name.&lt;br /&gt;
  &amp;quot;signaling_type&amp;quot;                      Signaling type (SS7, ISDN, CASR2, SIP)&lt;br /&gt;
  &amp;quot;profile&amp;quot;                             Profile name.&lt;br /&gt;
  &amp;quot;sip_destination_ip&amp;quot;                  Destination IP address.&lt;br /&gt;
  &amp;quot;sip_destination_port&amp;quot;                Destination IP port.&lt;br /&gt;
  &amp;quot;sip_transport_type&amp;quot;                  SIP transport type (:udp, :tcp, or :tls) (Toolpack 3.1 and more)&lt;br /&gt;
  &amp;quot;inst_incoming_call_cnt&amp;quot;              Instantaneous Count of incoming calls.&lt;br /&gt;
  &amp;quot;inst_outgoing_call_cnt&amp;quot;              Instantaneous Count of outgoing calls.&lt;br /&gt;
  &amp;quot;available_cnt&amp;quot;                       Number of available circuits or channels.&lt;br /&gt;
  &amp;quot;unavailable_cnt&amp;quot;                     Number of unavailable circuits or channels.&lt;br /&gt;
  &amp;quot;availability_percent&amp;quot;                Percentage of available circuits or channels.&lt;br /&gt;
  &amp;quot;usage_percent&amp;quot;                       Percentage of used circuits or channels.&lt;br /&gt;
  &amp;quot;unused_shared_percent&amp;quot;               Percentage of used circuits or channels of this NAP available to make new calls with (taking into account shared with other NAPs)&lt;br /&gt;
  &amp;quot;total_incoming_call_cnt&amp;quot;             Total Count of incoming calls.&lt;br /&gt;
  &amp;quot;global_asr_percent&amp;quot;                  Global calculated ASR percentage.&lt;br /&gt;
  &amp;quot;total_outgoing_call_cnt&amp;quot;             Total Count of outgoing calls.&lt;br /&gt;
  &amp;quot;last_24h_asr_percent&amp;quot;                Last 24 hours calculated ASR percentage.&lt;br /&gt;
  &amp;quot;last_24h_outgoing_call_cnt&amp;quot;          Last 24 hours outgoing calls.&lt;br /&gt;
  &amp;quot;current_hour_asr_percent&amp;quot;            Current hour calculated ASR percentage.&lt;br /&gt;
  &amp;quot;current_hour_outgoing_call_cnt&amp;quot;      Current hour outgoing calls.&lt;br /&gt;
  &amp;quot;last_hour_asr_percent&amp;quot;               Last hour calculated ASR percentage.&lt;br /&gt;
  &amp;quot;last_hour_outgoing_call_cnt&amp;quot;         Last hour outgoing calls.&lt;br /&gt;
  &amp;quot;poll_remote_proxy&amp;quot;                   Remote proxy polling enabled&lt;br /&gt;
  &amp;quot;is_available&amp;quot;                        Remote proxy actually available or not&lt;br /&gt;
  &amp;quot;time_since_polling&amp;quot;                  Time since the last availibility polling&lt;br /&gt;
  &amp;quot;time_available_seconds&amp;quot;              Number of seconds since the NAP is available&lt;br /&gt;
  &amp;quot;time_unavailable_seconds&amp;quot;            Number of seconds since the NAP is unavailable&lt;br /&gt;
  &amp;quot;register_to_proxy&amp;quot;                   Register to proxy enabled&lt;br /&gt;
  &amp;quot;registered&amp;quot;                          Actually registered or not&lt;br /&gt;
  &amp;quot;time_since_refresh&amp;quot;                  Time since the last refresh&lt;br /&gt;
  &amp;quot;time_registered_seconds&amp;quot;             Number of seconds since the NAP is registered&lt;br /&gt;
  &amp;quot;time_not_registered_seconds&amp;quot;         Number of seconds since the NAP is not registered&lt;br /&gt;
  &amp;quot;asr_stats_incoming_struct&amp;quot;           Detailed Answer-Seizure Rate incoming statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;global_asr_percent&amp;quot;                Global calculated ASR percentage.&lt;br /&gt;
    &amp;quot;total_call_cnt&amp;quot;                    Total count of calls.&lt;br /&gt;
    &amp;quot;total_accepted_call_cnt&amp;quot;           Total count of accepted calls (not dropped due to congestion or rate-limiting).&lt;br /&gt;
    &amp;quot;total_answered_call_cnt&amp;quot;           Total count of answered calls.&lt;br /&gt;
    &amp;quot;last_24h_asr_percent&amp;quot;              Last 24 hours calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_24h_call_cnt&amp;quot;                 Last 24 hours count of calls.&lt;br /&gt;
    &amp;quot;current_hour_asr_percent&amp;quot;          Current hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;current_hour_call_cnt&amp;quot;             Current hour count of calls.&lt;br /&gt;
    &amp;quot;last_hour_asr_percent&amp;quot;             Last hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_hour_call_cnt&amp;quot;                Last hour count of calls.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;asr_stats_outgoing_struct&amp;quot;           Detailed Answer-Seizure Rate outgoing statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;global_asr_percent&amp;quot;                Global calculated ASR percentage.&lt;br /&gt;
    &amp;quot;total_call_cnt&amp;quot;                    Total count of calls.&lt;br /&gt;
    &amp;quot;total_accepted_call_cnt&amp;quot;           Total count of accepted calls (not dropped due to congestion or rate-limiting).&lt;br /&gt;
    &amp;quot;total_answered_call_cnt&amp;quot;           Total count of answered calls.&lt;br /&gt;
    &amp;quot;last_24h_asr_percent&amp;quot;              Last 24 hours calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_24h_call_cnt&amp;quot;                 Last 24 hours count of calls.&lt;br /&gt;
    &amp;quot;current_hour_asr_percent&amp;quot;          Current hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;current_hour_call_cnt&amp;quot;             Current hour count of calls.&lt;br /&gt;
    &amp;quot;last_hour_asr_percent&amp;quot;             Last hour calculated ASR percentage.&lt;br /&gt;
    &amp;quot;last_hour_call_cnt&amp;quot;                Last hour count of calls.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;mos_struct&amp;quot;                          Detailed Mean Opinion Score statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;last_24h_ingress&amp;quot;                  Last 24 hours calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_24h_egress&amp;quot;                   Last 24 hours calculated MOS for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_ingress&amp;quot;              Current hour calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_egress&amp;quot;               Current hour calculated MOS for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_ingress&amp;quot;                 Last hour calculated MOS for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_egress&amp;quot;                  Last hour calculated MOS for outgoing RTP packets.&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;network_quality_struct&amp;quot;              Detailed network quality statistics.&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;last_24h_ingress&amp;quot;                  Last 24 hours network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_24h_egress&amp;quot;                   Last 24 hours network quality percentage for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_ingress&amp;quot;              Current hour network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;current_hour_egress&amp;quot;               Current hour network quality percentage for outgoing RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_ingress&amp;quot;                 Last hour network quality percentage for incoming RTP packets.&lt;br /&gt;
    &amp;quot;last_hour_egress&amp;quot;                  Last hour network quality percentage for outgoing RTP packets.&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; If the nap status is part of a substructure, the substructure will be a hash containing all subfield elements. &lt;br /&gt;
&lt;br /&gt;
Example to access the signaling type and the number of incoming call count for the NAP of the current call:&lt;br /&gt;
&lt;br /&gt;
   incoming_nap = params[:naps][ params[:call][ :nap ].to_sym]&lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP parameters=&amp;quot; + incoming_nap.inspect &lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP signaling type=&amp;quot; + incoming_nap[:signaling_type].inspect &lt;br /&gt;
   log_trace 4,&amp;quot;Incoming NAP call cnt=&amp;quot; + incoming_nap[:asr_stats_incoming_struct][:total_call_cnt].inspect &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; It is also possible to add dynamic nap attributes in the web portal. These can be referenced by their name.&lt;br /&gt;
&lt;br /&gt;
== Telephony Services ==&lt;br /&gt;
In release 2.10 and the above, telephony services (CNAM Request) can be manage from the routing engine in the following format:&lt;br /&gt;
&lt;br /&gt;
  params[:telephony_services].each do |service|  -&amp;gt; Array of telephony services&lt;br /&gt;
    service[:name]                               -&amp;gt; Customer telephony service name&lt;br /&gt;
    service[:type]                               -&amp;gt; For now only &amp;quot;CNAM Request&amp;quot;&lt;br /&gt;
    service[:enabled]                            -&amp;gt; Indicate if the service is enabled (true) or not (false)&lt;br /&gt;
                                                    (Only the telephony service define in the profile associated to the NAP is enabled)&lt;br /&gt;
                                                    (The others telephony services define in others profiles are disabled)&lt;br /&gt;
                                                    (If we are in the case where we return in the routing script with a response, it is important to set :enabled to false in order to avoid repeating the same query)&lt;br /&gt;
    serviceParams = service[:params]&lt;br /&gt;
    serviceParams[:return_to_script]             -&amp;gt; Indicates to Gateway if we must return to the routing script after receiving the CNAM response&lt;br /&gt;
                                                    (It is important to set back to false this field to avoid an infinite loop)&lt;br /&gt;
    serviceQuery = service[:query]&lt;br /&gt;
    serviceQuery[:phone]                         -&amp;gt; 10 digits of calling number from the incoming call to send to the CNAM server&lt;br /&gt;
    serviceQuery[:timeout]                       -&amp;gt; Timeout in millisecond to wait a CNAM response from CNAM server&lt;br /&gt;
                                                    (Default value from profile configuration)&lt;br /&gt;
    serviceResponse = service[:response]&lt;br /&gt;
    serviceResponse[:success]                    -&amp;gt; Indicates if we received a good CNAM response from the CNAM Server (Only present if :return_to_script is set to true)&lt;br /&gt;
    serviceResponse[:caller_name]                -&amp;gt; The caller name received in the CNAM response from the CNAM Server (Only present if :return_to_script is set to true)&lt;br /&gt;
&lt;br /&gt;
== Custom user context ==&lt;br /&gt;
The routing script may '''save per-call information within the call context''', that will be available if routing is called again later during the call flow.&lt;br /&gt;
&lt;br /&gt;
Cases where routing is called multiple time for the same call are:&lt;br /&gt;
- Call transfer requests&lt;br /&gt;
- SIP redirect requests&lt;br /&gt;
- Radius Authorization result&lt;br /&gt;
- Announcement server with digit collection&lt;br /&gt;
&lt;br /&gt;
The routing script can save a recursive hash of attributes here:&lt;br /&gt;
  params[:user_context]&lt;br /&gt;
&lt;br /&gt;
For example&lt;br /&gt;
  params[:user_context] = { &amp;quot;SomeKey&amp;quot; =&amp;gt; &amp;quot;Some value I want to retrieve upon next routing for this call&amp;quot;, &amp;quot;OtherVal&amp;quot; =&amp;gt; { &amp;quot;subkey&amp;quot; =&amp;gt; &amp;quot;subval&amp;quot; } }&lt;br /&gt;
&lt;br /&gt;
Upon first call to routing script, params[:user_context] will be nil.&lt;br /&gt;
Upon subsequent calls to routing script, it will contain whatever the script had stored upon previous call (or nil if it was not set)&lt;br /&gt;
&lt;br /&gt;
Note: This feature is available starting from release 2.9.85, 2.10.31 and 3.0.15 (in respective branches 2.9, 2.10 or 3.0)&lt;br /&gt;
&lt;br /&gt;
== Routing Script Tests ==&lt;br /&gt;
The Web portal features a tool for Testing Scripts. The user must enter parameters to simulate the incoming call and after pressing the Test button, will output selected routes and numbers.  You do not need to activate the new routes, or the new scripts to use this test tool: It can be used to test the routing scripts and routing table before activating it.&lt;br /&gt;
This is available in the Routing Scripts section of the Web portal.&lt;br /&gt;
&lt;br /&gt;
=== Test parameters ===&lt;br /&gt;
==== @call_params  ====&lt;br /&gt;
&lt;br /&gt;
That variable should contain a hash of call parameters that will be passed to the routing script. This is equivalent to the incoming call parameters. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== @nap_list  ====&lt;br /&gt;
&lt;br /&gt;
A list of the hash containing the nap statuses. This is equivalent to the nap statuses at the time the call is to be routed. &lt;br /&gt;
&lt;br /&gt;
'''The nap list is hashed by the nap names in UPPERCASE.''' It is important to consider this when creating new dynamic route or nap attributes that may nap names that will be used to fetch a status. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== @params  ====&lt;br /&gt;
&lt;br /&gt;
A hash of hashes containing parameters. This hash contains bridge parameters and other kind of parameter groups may be added in the future. &lt;br /&gt;
&lt;br /&gt;
  @params = {&lt;br /&gt;
     :bridge =&amp;gt; {:announcement_tone, &amp;quot;announcement.wav&amp;quot;},&lt;br /&gt;
     :contacts =&amp;gt; {&lt;br /&gt;
       :index=&amp;gt;&amp;quot;1&amp;quot;,&lt;br /&gt;
       :list=&amp;gt;[&lt;br /&gt;
          {:called_number=&amp;gt;&amp;quot;6660&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;&amp;quot;,&lt;br /&gt;
           :raw_data=&amp;gt;&amp;quot;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;},&lt;br /&gt;
          {:called_number=&amp;gt;&amp;quot;6661&amp;quot;, :priority=&amp;gt;&amp;quot;1000&amp;quot;, :is_number_ported=&amp;gt;&amp;quot;0&amp;quot;, :sip_uri=&amp;gt;&amp;quot;sip:6661@192.168.215.127&amp;quot;, &lt;br /&gt;
           :raw_data=&amp;gt;&amp;quot;&amp;lt;sip:6661@192.168.215.127&amp;gt;&amp;quot;, :expiration=&amp;gt;&amp;quot;3600&amp;quot;}&lt;br /&gt;
       ],&lt;br /&gt;
       :source_indexes=&amp;gt;&amp;quot;nil,0&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Back to [[Routing script tutorial|Routing Script Tutorial]].&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Tmedia_Routing</id>
		<title>Tmedia Routing</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Tmedia_Routing"/>
				<updated>2019-03-28T18:49:03Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* Filter Scripts examples: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Static routing table  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Gateway_Static_Routes.png|Static Routes]]&lt;br /&gt;
&lt;br /&gt;
=== Basic route matching ===&lt;br /&gt;
The static routing table uses parameters from the incoming call to locate a route and then make a routing decision. These parameters are called incoming call attributes. Three parameters are verified:&amp;lt;br&amp;gt; &lt;br /&gt;
A route will match an incoming call if all the route matching parameters are met.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Multiple routes may be a match for a call.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following criteria are available for basic route matching:&lt;br /&gt;
*Called number &lt;br /&gt;
*Calling number &lt;br /&gt;
*Incoming Network Access Point (NAP)&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number matching ====&lt;br /&gt;
Calling / called number matching works as follows:&lt;br /&gt;
*'''Field can be empty: '''this means any number will match &lt;br /&gt;
*'''Field can be a specific number: '''this means the exact number must match &lt;br /&gt;
*'''Field can be a regular expression match:'''&lt;br /&gt;
*'''Field can be a sip user and sip host:''' such as user@sip_host:sip_port&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Number Routing filter example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^1?450[0-9]{7}$/&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match an optional 1, followed by 450, then 7 digits&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; SIP user/host routing example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. 5551212@abc.com&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match exactly 5551212 for sip host abc.com only &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NAP matching ====&lt;br /&gt;
The Network Access Point can be SS7, ISDN, CAS or SIP.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic (per-route) call attributes remapping ===&lt;br /&gt;
Once the route(s) have been chosen, some call parameters can be modified using the parameters of the route: &lt;br /&gt;
==== Outgoing call parameters remapping ====&lt;br /&gt;
*'''Remapped Called Number:''' New called number used on the outgoing calls &lt;br /&gt;
*'''Remapped Calling Number: '''New calling number used on the outgoing calls &lt;br /&gt;
*'''Remapped NAP:''' determines on which Network Access Point (NAP)&amp;amp;nbsp;the outgoing calls are sent. &lt;br /&gt;
*'''Outgoing call remapped Profile: '''Select the profile to use with the outgoing call when this route is used, otherwise NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Source call leg parameters remapping ====&lt;br /&gt;
Some parameters of the source call leg can also be modified:&lt;br /&gt;
*'''Source call remapped Profile: '''Select the profile to use with the source call leg when this route is used, otherwise the NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number remapping options ====&lt;br /&gt;
Calling / called number remapping works as follows:&lt;br /&gt;
*'''Field can be empty:''' In this case, the called/calling numbers from the incoming call are used for the outgoing call. &lt;br /&gt;
*'''Field can be a specific number:''' This number will be used as called (or calling) number for the outgoing call.&lt;br /&gt;
*'''Field can be a regular expression:''' Allows building the outgoing call's calling/called number through matching/replacement of incoming calling/called number. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; For example, post routing translation (remap)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^450([0-9]*)$/\514\2&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This regular expression replaces 450 with 514&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For a complete example, refer to: [[Toolpack: How to Use RegEx in Remapped Called and Calling Number Mask|How To Use Regular Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Multiple routes matching ===&lt;br /&gt;
The remapping parameters above (both for incoming and outgoing calls) are independent for each route.&amp;lt;br&amp;gt;&lt;br /&gt;
This allows different routes to use different NAPs, and remap the calling/called numbers differently.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ordering the routes ====&lt;br /&gt;
When multiple routes match the incoming call, the default routing script (simple_routing) will order by priority and weight.&amp;lt;br&amp;gt;&lt;br /&gt;
* Note: older routing scripts did not have priority routing enabled by default, you may need to manually update your routing scripts to enable priority routing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each route has a &amp;quot;priority&amp;quot; attribute, and a &amp;quot;weight&amp;quot; attribute. All matching routes for a given call will be ordered by priority.&amp;lt;br&amp;gt;&lt;br /&gt;
Load-sharing (based on each route's &amp;quot;weight&amp;quot;) will be applied if multiple matching routes have the same priority.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's also possible to prioritize matching routes using others algorithms, by customizing routing scripts.&lt;br /&gt;
A few examples:&lt;br /&gt;
* Round robin&lt;br /&gt;
* Least cost&lt;br /&gt;
* Per period of the day&lt;br /&gt;
&lt;br /&gt;
==== Route retry ====&lt;br /&gt;
If multiple routes match for a call, call retry may be done on subsequent routes upon failure making outgoing call on a route. For more information about route retry, refer to the following page: [[Route_retry|Route Retry]].&lt;br /&gt;
&lt;br /&gt;
=== Routes limitation ===&lt;br /&gt;
&amp;lt;u&amp;gt;Up to 2000 routes&amp;lt;/u&amp;gt; can be entered in the static routing table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: When the number of routes becomes large, this may be a sign that more advanced routing should be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 For information about label route handling, refer to [[Tmedia_Routing#Label_routing|Label Routing]] or contact [[Support:Contacting_TelcoBridges_technical_support|TelcoBridges Support]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting / importing routes ===&lt;br /&gt;
You can import or export the static routing table using the web portal. Go to: &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Export Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Import Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; This is the default configuration of the Media Gateway&lt;br /&gt;
&lt;br /&gt;
== Standard Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Standard scripts are used to modify the behavior of the static routing.&amp;amp;nbsp; It allows for the prioritization of routes, load sharing amongst multiple endpoints, or the modification of some call parameters. It can be enabled on any system in just a few steps. The following is a list of Scripts supported today:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''Simple routing (simple_routing.rb):''' Script used for the static routing table, and supports priority and weight routing per route or NAP.&lt;br /&gt;
*'''Priority routing (priority_and_weight_load_balancer.rb):''' This script routes calls according to a priority setting of matching routes. Each route has its own priority setting (if not, taken from the outgoing call's NAP priority). The [:priority] field column needs to be added in the routes and NAPs page. A smaller [:priority] value has more priority. If more than 1 route matches, the route with the lowest NAP priority will be selected first. Routes with the same priority will be randomly ordered using the &amp;quot;weight&amp;quot; column so load is distributed among routes with same priority. &lt;br /&gt;
*'''ASR routing (asr_routing.rb):''' This script routes calls according to the ASR values of the destination naps. This kind of routing will try to improve overall system ASR by always using the best NAPs. It will also improve client perception by cleanly dropping calls that would almost certainly fail anyway. &lt;br /&gt;
*'''Nature of Address and Numbering plan indicator remapping (noa_npi_remap.rb): '''Enables the modification of the NOA and NPI values on outgoing calls. &lt;br /&gt;
*'''Least Cost Routing (least_cost_routing.rb):''' This script routes calls according to the cost values (which may depend on the time) of the routes. This is useful for cases when a route's popularity (cost) depends on the time of the day. This is done by adding different columns to the static routing tables (for example [:cost_0_6]) and filling them up with values for each route.&lt;br /&gt;
&lt;br /&gt;
Learn how to setup Standard Scripts in your gateway by following these steps: [[How to Setup Standard Scripts|How to Setup Standard Scripts]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other standard routing scripts implement Filters and are covered in the next section.&lt;br /&gt;
&lt;br /&gt;
== Filters  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Adds functionality to standard scripts. Filters can be added to any standard script in a few steps. For example, you may want to remove the '1' prefix for uniformed routing, select the SIP Request URI to route the call instead of the called number, and more. &lt;br /&gt;
&lt;br /&gt;
=== Types of filters ===&lt;br /&gt;
The following type of filters can be attached to a routing script, and they are applied in the following order&lt;br /&gt;
# before_filter  -&amp;gt; Analyze/modify the call attributes before other filters are applied&lt;br /&gt;
# route_match    -&amp;gt; Eliminates routes based on some matching criteria&lt;br /&gt;
# order_route    -&amp;gt; Change the order of matching routes&lt;br /&gt;
# after_filter   -&amp;gt; Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created&lt;br /&gt;
# route_remap    -&amp;gt; Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes&lt;br /&gt;
# after_remap    -&amp;gt; Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
==== Before filter (before_filter) ====&lt;br /&gt;
* Adds pre-processing on incoming parameters before other filters are applied&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attributes before other filters process the call&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  before_filter :method =&amp;gt; :my_custom_before_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :call]      Hash of call attributes of the incoming call to route.&lt;br /&gt;
    #                        Can be modified. Will affect subsequent filters, and routing output.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route match (route_match) ====&lt;br /&gt;
Eliminates routes based on some matching criteria.&lt;br /&gt;
&lt;br /&gt;
* Generally simply matching a call attribute with a route attribute.&lt;br /&gt;
* Any route with attribute not matching the corresponding call attribute is eliminated. &lt;br /&gt;
* A route with empty attribute is considered matching any call&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Match the call attribute :called with the route attribute with same name:&lt;br /&gt;
  route_match :call_field_name =&amp;gt; :called&lt;br /&gt;
* Match the call attribute :private_address with the route attribute :calling &lt;br /&gt;
  route_match :call_field_name =&amp;gt; :private_address , call_field_name =&amp;gt; :calling&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_match :method =&amp;gt; :my_custom_matching, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_matching( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  # Must return true if route matches, false otherwise&lt;br /&gt;
  def my_custom_matching( route, call, naps )&lt;br /&gt;
    # route contains the route to match.&lt;br /&gt;
    # call contains the incoming call attributes to match with the route.&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Order route (order_route) ====&lt;br /&gt;
Change the order of matching routes based on a given route attribute.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  order_route :route_field_name =&amp;gt; :priority&lt;br /&gt;
&lt;br /&gt;
==== After filter (after_filter) ====&lt;br /&gt;
* Filter that is applied after matching routes have been selected and ordered.&lt;br /&gt;
* Can modify the incoming call attributes before the outgoing calls are created.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_filter :method =&amp;gt; :my_custom_after_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_after_filter above for details about params&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route remap (route_remap) ====&lt;br /&gt;
* Called once per matching route.&lt;br /&gt;
* Perform per-route remapping of some call attributes, based on per-route attributes.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Remap the call attribute :called with the route attribute :remapped_called&lt;br /&gt;
  route_remap :call_field_name =&amp;gt; :called, :route_field_name =&amp;gt; :remapped_called&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_remap :method =&amp;gt; :my_custom_remap, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_remap( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per matching route for a given incoming call&lt;br /&gt;
  def my_custom_remap( route, caf_call, naps, call )&lt;br /&gt;
    # route contains the route to apply remapping for&lt;br /&gt;
    # caf_call should be ignored (legacy)&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    # call contains the outgoing call attributes that can be remapped.&lt;br /&gt;
&lt;br /&gt;
    return call&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== After remap (after_remap) ====&lt;br /&gt;
* Last filters to be applied.&lt;br /&gt;
* Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes.&lt;br /&gt;
* Can modify the outgoing calls.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_remap_filter :method =&amp;gt; :my_custom_after_remap_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_remap_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_remap_filter( params )&lt;br /&gt;
    #  - params[ :out_calls] Array of all outgoing call to be created (corresponding to each matching route).&lt;br /&gt;
    #                        Can be modified to customize each outgoing call attempt.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
=== Filter Scripts examples:  ===&lt;br /&gt;
&lt;br /&gt;
*'''priority_and_weight_load_balancer.rb:''' After filter that will reorder routes by priority and weight (load sharing per weight for routes with the same priority)&lt;br /&gt;
*'''forward_sip_domain.rb:''' Route remap filter that will, per route, control forwarding of sip domain of various SIP headers (forward domains, else replace by local IP / proxy IP)&lt;br /&gt;
*'''sip_header_params.rb:''' After remap filter that will add specified parameters to specified SIP headers&lt;br /&gt;
*'''Black and White listing (black_white_listing.rb):''' With this script, any called or calling number prefix can be blacklisted or whitelisted. This script can be assigned globally, or per NAP. It reads a .csv file which has the called and calling number list. See [[Adding White or Black listing to Routing Script]]&lt;br /&gt;
*'''lawful_intercept.rb:''' Script that will identify some calls to perform lawful interception on (by calling/called number matching from a .csv file)&lt;br /&gt;
&lt;br /&gt;
Learn how to add a Filter to normal scripts: [[How to Setup Filters|How to setup Filters]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Label routing&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts&lt;br /&gt;
Gateway -&amp;amp;gt; FileDb&lt;br /&gt;
Gateway -&amp;amp;gt; Routesets &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Label routing was created because in some cases, regular expressions cannot be used on the called number to define a route. &lt;br /&gt;
&lt;br /&gt;
Problem: Having thousands of destination numbers (N), and possibly one route per number per Network Provider (M), resulting in N*M routes&amp;lt;br&amp;gt;Solution: Create labels for each groups of numbers (L) and let the system determine the route, resulting in L*M routes, where L &amp;amp;lt; N &lt;br /&gt;
&lt;br /&gt;
A Label is a virtual group of destination numbers. This virtual group has a list of numbers assigned to it in a CSV file.&amp;lt;br&amp;gt;This process does the routing in 2 stages:&amp;lt;br&amp;gt;1st stage - Find a Label: Find longest prefix match entry for the called number. This leads to only one destination Label. This is the Digitmap file.&amp;lt;br&amp;gt;2nd stage - Find the NAPs serving a Label: All routes tied to this Label are eligible for routing the call. This is the routeset definition file. &lt;br /&gt;
&lt;br /&gt;
What are the advantages compared to static routing?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Can have thousands of numbers &lt;br /&gt;
*It uses a non linear search algorithms; therefore, there is no overhead to having a large amount of numbers. Label routing was tested with 5 million entries.&lt;br /&gt;
*Variables can be added to the routeset definition file to use other filter scripts and have even more flexibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Example usage:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*NPA-NXX routing &lt;br /&gt;
*Blacklisting &lt;br /&gt;
*Tandem switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
See here for complete details: [[Routeset Routing|Label routing]] and [[Adding_Label_Routing_to_any_Routing_Script|Adding Label Routing to any Routing Script]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Custom Routing Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Customers can create their own routing scripts using a Scriptable Routing Engine based on Ruby. These scripts can be imported and exported from the Web portal.&amp;lt;br&amp;gt;These scripts can run complex routing algorithms and post routing translation, as well as other advanced functions. It is also possible to modify standard Scripts, or filters, to satisfy more complex scenarios&amp;lt;br&amp;gt;The functions have control over many call parameters such as:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Calling &lt;br /&gt;
*Called &lt;br /&gt;
*Nature of Address &lt;br /&gt;
*Calling Presentation &lt;br /&gt;
*Calling Screening &lt;br /&gt;
*Redirecting Number &lt;br /&gt;
*Original Called Number, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The complete list is in the [[Routing script tutorial:Mini Development Guide|Routing Script Tutorial]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Custom routing script are kept on software upgrades. Versionning of routing scripts needs to be handled by the operator of the unit. The new scripts (with the same names, but a new version) can be manually replaced directly in the routing script page.&amp;lt;br&amp;gt;It is possible to test routing scripts directly from the web portal before activating them in a live system.&amp;lt;br&amp;gt;For complete details, refer to [[Scriptable Routing Engine|Scriptable Routing Engine]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Playing prompts&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request for prompts playback at various states of the call. See  [[Routing_script_tutorial:Mini_Development_Guide#Playing_prompts_announcements_or_tones|Playing prompts announcements or tones]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Recording calls&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request the recording of incoming and/or outgoing call legs to audio files. See  [[Routing_script_tutorial:Mini_Development_Guide#Recording_call_legs|Recording Calls]].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Route retry&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
The routing engine returns all matching routes to the system. The TMG-CONTROL then generates an outgoing call using the first route in the list. If the call fails, the TMG-CONTROL may or may not generate another call, according to the error code received. &lt;br /&gt;
&lt;br /&gt;
The route retry will proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Service unavailable &lt;br /&gt;
*Circuit not available &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
The route retry will not proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*User busy &lt;br /&gt;
*Unallocated number &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You can modify the route-retry sequence (continue or discontinue) to handle unsuccessful routes. For more information, refer to the NAP profile. For more details see the route retry page.&amp;lt;br&amp;gt;These parameters can be modified here:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Profiles -&amp;amp;gt; default [Edit] -&amp;amp;gt; Edit Reason Cause mapping &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Route retry is enabled by default. Timers and conditions on route retry can be adjusted from the configuration:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Configurations -&amp;amp;gt; Advanced &amp;lt;/pre&amp;gt; &lt;br /&gt;
NOTE: The route-retry feature is available for other types of routing as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For more details, see the [[Route retry|Route Retry]] page&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;br /&gt;
&lt;br /&gt;
== Related actions ==&lt;br /&gt;
'''Refer to the appropriate Toolpack release:'''&lt;br /&gt;
&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_D|Call Routes Settings v3.0]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_C|Call Routes Settings v2.10]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_B|Call Routes Settings v2.9]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_A|Call Routes Settings v2.8]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;other versions&amp;quot; data-expandtext=&amp;quot;Click here for other versions&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.7#Routes|Web Portal v2.7: Routes Configuration]]&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.6#Routes|Web Portal v2.6: Routes Configuration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Tmedia_Routing</id>
		<title>Tmedia Routing</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Tmedia_Routing"/>
				<updated>2019-03-28T18:42:59Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* Filters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Static routing table  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Gateway_Static_Routes.png|Static Routes]]&lt;br /&gt;
&lt;br /&gt;
=== Basic route matching ===&lt;br /&gt;
The static routing table uses parameters from the incoming call to locate a route and then make a routing decision. These parameters are called incoming call attributes. Three parameters are verified:&amp;lt;br&amp;gt; &lt;br /&gt;
A route will match an incoming call if all the route matching parameters are met.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Multiple routes may be a match for a call.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following criteria are available for basic route matching:&lt;br /&gt;
*Called number &lt;br /&gt;
*Calling number &lt;br /&gt;
*Incoming Network Access Point (NAP)&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number matching ====&lt;br /&gt;
Calling / called number matching works as follows:&lt;br /&gt;
*'''Field can be empty: '''this means any number will match &lt;br /&gt;
*'''Field can be a specific number: '''this means the exact number must match &lt;br /&gt;
*'''Field can be a regular expression match:'''&lt;br /&gt;
*'''Field can be a sip user and sip host:''' such as user@sip_host:sip_port&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Number Routing filter example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^1?450[0-9]{7}$/&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match an optional 1, followed by 450, then 7 digits&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; SIP user/host routing example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. 5551212@abc.com&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match exactly 5551212 for sip host abc.com only &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NAP matching ====&lt;br /&gt;
The Network Access Point can be SS7, ISDN, CAS or SIP.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic (per-route) call attributes remapping ===&lt;br /&gt;
Once the route(s) have been chosen, some call parameters can be modified using the parameters of the route: &lt;br /&gt;
==== Outgoing call parameters remapping ====&lt;br /&gt;
*'''Remapped Called Number:''' New called number used on the outgoing calls &lt;br /&gt;
*'''Remapped Calling Number: '''New calling number used on the outgoing calls &lt;br /&gt;
*'''Remapped NAP:''' determines on which Network Access Point (NAP)&amp;amp;nbsp;the outgoing calls are sent. &lt;br /&gt;
*'''Outgoing call remapped Profile: '''Select the profile to use with the outgoing call when this route is used, otherwise NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Source call leg parameters remapping ====&lt;br /&gt;
Some parameters of the source call leg can also be modified:&lt;br /&gt;
*'''Source call remapped Profile: '''Select the profile to use with the source call leg when this route is used, otherwise the NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number remapping options ====&lt;br /&gt;
Calling / called number remapping works as follows:&lt;br /&gt;
*'''Field can be empty:''' In this case, the called/calling numbers from the incoming call are used for the outgoing call. &lt;br /&gt;
*'''Field can be a specific number:''' This number will be used as called (or calling) number for the outgoing call.&lt;br /&gt;
*'''Field can be a regular expression:''' Allows building the outgoing call's calling/called number through matching/replacement of incoming calling/called number. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; For example, post routing translation (remap)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^450([0-9]*)$/\514\2&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This regular expression replaces 450 with 514&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For a complete example, refer to: [[Toolpack: How to Use RegEx in Remapped Called and Calling Number Mask|How To Use Regular Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Multiple routes matching ===&lt;br /&gt;
The remapping parameters above (both for incoming and outgoing calls) are independent for each route.&amp;lt;br&amp;gt;&lt;br /&gt;
This allows different routes to use different NAPs, and remap the calling/called numbers differently.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ordering the routes ====&lt;br /&gt;
When multiple routes match the incoming call, the default routing script (simple_routing) will order by priority and weight.&amp;lt;br&amp;gt;&lt;br /&gt;
* Note: older routing scripts did not have priority routing enabled by default, you may need to manually update your routing scripts to enable priority routing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each route has a &amp;quot;priority&amp;quot; attribute, and a &amp;quot;weight&amp;quot; attribute. All matching routes for a given call will be ordered by priority.&amp;lt;br&amp;gt;&lt;br /&gt;
Load-sharing (based on each route's &amp;quot;weight&amp;quot;) will be applied if multiple matching routes have the same priority.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's also possible to prioritize matching routes using others algorithms, by customizing routing scripts.&lt;br /&gt;
A few examples:&lt;br /&gt;
* Round robin&lt;br /&gt;
* Least cost&lt;br /&gt;
* Per period of the day&lt;br /&gt;
&lt;br /&gt;
==== Route retry ====&lt;br /&gt;
If multiple routes match for a call, call retry may be done on subsequent routes upon failure making outgoing call on a route. For more information about route retry, refer to the following page: [[Route_retry|Route Retry]].&lt;br /&gt;
&lt;br /&gt;
=== Routes limitation ===&lt;br /&gt;
&amp;lt;u&amp;gt;Up to 2000 routes&amp;lt;/u&amp;gt; can be entered in the static routing table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: When the number of routes becomes large, this may be a sign that more advanced routing should be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 For information about label route handling, refer to [[Tmedia_Routing#Label_routing|Label Routing]] or contact [[Support:Contacting_TelcoBridges_technical_support|TelcoBridges Support]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting / importing routes ===&lt;br /&gt;
You can import or export the static routing table using the web portal. Go to: &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Export Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Import Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; This is the default configuration of the Media Gateway&lt;br /&gt;
&lt;br /&gt;
== Standard Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Standard scripts are used to modify the behavior of the static routing.&amp;amp;nbsp; It allows for the prioritization of routes, load sharing amongst multiple endpoints, or the modification of some call parameters. It can be enabled on any system in just a few steps. The following is a list of Scripts supported today:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''Simple routing (simple_routing.rb):''' Script used for the static routing table, and supports priority and weight routing per route or NAP.&lt;br /&gt;
*'''Priority routing (priority_and_weight_load_balancer.rb):''' This script routes calls according to a priority setting of matching routes. Each route has its own priority setting (if not, taken from the outgoing call's NAP priority). The [:priority] field column needs to be added in the routes and NAPs page. A smaller [:priority] value has more priority. If more than 1 route matches, the route with the lowest NAP priority will be selected first. Routes with the same priority will be randomly ordered using the &amp;quot;weight&amp;quot; column so load is distributed among routes with same priority. &lt;br /&gt;
*'''ASR routing (asr_routing.rb):''' This script routes calls according to the ASR values of the destination naps. This kind of routing will try to improve overall system ASR by always using the best NAPs. It will also improve client perception by cleanly dropping calls that would almost certainly fail anyway. &lt;br /&gt;
*'''Nature of Address and Numbering plan indicator remapping (noa_npi_remap.rb): '''Enables the modification of the NOA and NPI values on outgoing calls. &lt;br /&gt;
*'''Least Cost Routing (least_cost_routing.rb):''' This script routes calls according to the cost values (which may depend on the time) of the routes. This is useful for cases when a route's popularity (cost) depends on the time of the day. This is done by adding different columns to the static routing tables (for example [:cost_0_6]) and filling them up with values for each route.&lt;br /&gt;
&lt;br /&gt;
Learn how to setup Standard Scripts in your gateway by following these steps: [[How to Setup Standard Scripts|How to Setup Standard Scripts]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other standard routing scripts implement Filters and are covered in the next section.&lt;br /&gt;
&lt;br /&gt;
== Filters  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Adds functionality to standard scripts. Filters can be added to any standard script in a few steps. For example, you may want to remove the '1' prefix for uniformed routing, select the SIP Request URI to route the call instead of the called number, and more. &lt;br /&gt;
&lt;br /&gt;
=== Types of filters ===&lt;br /&gt;
The following type of filters can be attached to a routing script, and they are applied in the following order&lt;br /&gt;
# before_filter  -&amp;gt; Analyze/modify the call attributes before other filters are applied&lt;br /&gt;
# route_match    -&amp;gt; Eliminates routes based on some matching criteria&lt;br /&gt;
# order_route    -&amp;gt; Change the order of matching routes&lt;br /&gt;
# after_filter   -&amp;gt; Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created&lt;br /&gt;
# route_remap    -&amp;gt; Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes&lt;br /&gt;
# after_remap    -&amp;gt; Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
==== Before filter (before_filter) ====&lt;br /&gt;
* Adds pre-processing on incoming parameters before other filters are applied&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attributes before other filters process the call&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  before_filter :method =&amp;gt; :my_custom_before_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :call]      Hash of call attributes of the incoming call to route.&lt;br /&gt;
    #                        Can be modified. Will affect subsequent filters, and routing output.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route match (route_match) ====&lt;br /&gt;
Eliminates routes based on some matching criteria.&lt;br /&gt;
&lt;br /&gt;
* Generally simply matching a call attribute with a route attribute.&lt;br /&gt;
* Any route with attribute not matching the corresponding call attribute is eliminated. &lt;br /&gt;
* A route with empty attribute is considered matching any call&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Match the call attribute :called with the route attribute with same name:&lt;br /&gt;
  route_match :call_field_name =&amp;gt; :called&lt;br /&gt;
* Match the call attribute :private_address with the route attribute :calling &lt;br /&gt;
  route_match :call_field_name =&amp;gt; :private_address , call_field_name =&amp;gt; :calling&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_match :method =&amp;gt; :my_custom_matching, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_matching( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  # Must return true if route matches, false otherwise&lt;br /&gt;
  def my_custom_matching( route, call, naps )&lt;br /&gt;
    # route contains the route to match.&lt;br /&gt;
    # call contains the incoming call attributes to match with the route.&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Order route (order_route) ====&lt;br /&gt;
Change the order of matching routes based on a given route attribute.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  order_route :route_field_name =&amp;gt; :priority&lt;br /&gt;
&lt;br /&gt;
==== After filter (after_filter) ====&lt;br /&gt;
* Filter that is applied after matching routes have been selected and ordered.&lt;br /&gt;
* Can modify the incoming call attributes before the outgoing calls are created.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_filter :method =&amp;gt; :my_custom_after_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_after_filter above for details about params&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route remap (route_remap) ====&lt;br /&gt;
* Called once per matching route.&lt;br /&gt;
* Perform per-route remapping of some call attributes, based on per-route attributes.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Remap the call attribute :called with the route attribute :remapped_called&lt;br /&gt;
  route_remap :call_field_name =&amp;gt; :called, :route_field_name =&amp;gt; :remapped_called&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_remap :method =&amp;gt; :my_custom_remap, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_remap( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per matching route for a given incoming call&lt;br /&gt;
  def my_custom_remap( route, caf_call, naps, call )&lt;br /&gt;
    # route contains the route to apply remapping for&lt;br /&gt;
    # caf_call should be ignored (legacy)&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    # call contains the outgoing call attributes that can be remapped.&lt;br /&gt;
&lt;br /&gt;
    return call&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== After remap (after_remap) ====&lt;br /&gt;
* Last filters to be applied.&lt;br /&gt;
* Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes.&lt;br /&gt;
* Can modify the outgoing calls.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_remap_filter :method =&amp;gt; :my_custom_after_remap_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_remap_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_remap_filter( params )&lt;br /&gt;
    #  - params[ :out_calls] Array of all outgoing call to be created (corresponding to each matching route).&lt;br /&gt;
    #                        Can be modified to customize each outgoing call attempt.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
=== Filter Scripts examples:  ===&lt;br /&gt;
&lt;br /&gt;
*'''Request-URI routing (ruri.rb):''' Will route the call on SIP RURI instead of the to: field &lt;br /&gt;
*'''Modify the Nature of Address (noa_npi_remap.rb):''' We can use this to change the NOA to national or international &lt;br /&gt;
*'''Remove Loop (FilterRemoveLoop.rb): '''Will prevent calls from being routed back to the sender &lt;br /&gt;
*'''Load sharing on NAP groups or on route groups (nap_group_weight_retry_with_overload.rb):''' This is a powerful script that allows for a regrouping of NAPs of the same kind, distributes loads among them, and prioritizes one group versus another.&amp;amp;nbsp; Alternatively, you can do the same on routes. You need to add two columns to the NAPs (or the routes), one called &amp;quot;group&amp;quot; and one called &amp;quot;weight&amp;quot;. Groups of lower value will have a higher priority (group=0 has more priority than group=10). The calls will be distributed according to the weight value. To have an equal number of calls on each destination, use the same weight value (weight=10). See [[Adding Load Sharing to Routing Script|Adding Load Sharing to Routing Script]]&amp;lt;br&amp;gt; &lt;br /&gt;
*'''Black and White listing (black_white_listing.rb):''' With this script, any called or calling number prefix can be blacklisted or whitelisted. This script can be assigned globally, or per NAP. It reads a .csv file which has the called and calling number list. See [[Adding White or Black listing to Routing Script]]&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Learn how to add a Filter to normal scripts: [[How to Setup Filters|How to setup Filters]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Label routing&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts&lt;br /&gt;
Gateway -&amp;amp;gt; FileDb&lt;br /&gt;
Gateway -&amp;amp;gt; Routesets &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Label routing was created because in some cases, regular expressions cannot be used on the called number to define a route. &lt;br /&gt;
&lt;br /&gt;
Problem: Having thousands of destination numbers (N), and possibly one route per number per Network Provider (M), resulting in N*M routes&amp;lt;br&amp;gt;Solution: Create labels for each groups of numbers (L) and let the system determine the route, resulting in L*M routes, where L &amp;amp;lt; N &lt;br /&gt;
&lt;br /&gt;
A Label is a virtual group of destination numbers. This virtual group has a list of numbers assigned to it in a CSV file.&amp;lt;br&amp;gt;This process does the routing in 2 stages:&amp;lt;br&amp;gt;1st stage - Find a Label: Find longest prefix match entry for the called number. This leads to only one destination Label. This is the Digitmap file.&amp;lt;br&amp;gt;2nd stage - Find the NAPs serving a Label: All routes tied to this Label are eligible for routing the call. This is the routeset definition file. &lt;br /&gt;
&lt;br /&gt;
What are the advantages compared to static routing?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Can have thousands of numbers &lt;br /&gt;
*It uses a non linear search algorithms; therefore, there is no overhead to having a large amount of numbers. Label routing was tested with 5 million entries.&lt;br /&gt;
*Variables can be added to the routeset definition file to use other filter scripts and have even more flexibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Example usage:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*NPA-NXX routing &lt;br /&gt;
*Blacklisting &lt;br /&gt;
*Tandem switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
See here for complete details: [[Routeset Routing|Label routing]] and [[Adding_Label_Routing_to_any_Routing_Script|Adding Label Routing to any Routing Script]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Custom Routing Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Customers can create their own routing scripts using a Scriptable Routing Engine based on Ruby. These scripts can be imported and exported from the Web portal.&amp;lt;br&amp;gt;These scripts can run complex routing algorithms and post routing translation, as well as other advanced functions. It is also possible to modify standard Scripts, or filters, to satisfy more complex scenarios&amp;lt;br&amp;gt;The functions have control over many call parameters such as:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Calling &lt;br /&gt;
*Called &lt;br /&gt;
*Nature of Address &lt;br /&gt;
*Calling Presentation &lt;br /&gt;
*Calling Screening &lt;br /&gt;
*Redirecting Number &lt;br /&gt;
*Original Called Number, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The complete list is in the [[Routing script tutorial:Mini Development Guide|Routing Script Tutorial]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Custom routing script are kept on software upgrades. Versionning of routing scripts needs to be handled by the operator of the unit. The new scripts (with the same names, but a new version) can be manually replaced directly in the routing script page.&amp;lt;br&amp;gt;It is possible to test routing scripts directly from the web portal before activating them in a live system.&amp;lt;br&amp;gt;For complete details, refer to [[Scriptable Routing Engine|Scriptable Routing Engine]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Playing prompts&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request for prompts playback at various states of the call. See  [[Routing_script_tutorial:Mini_Development_Guide#Playing_prompts_announcements_or_tones|Playing prompts announcements or tones]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Recording calls&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request the recording of incoming and/or outgoing call legs to audio files. See  [[Routing_script_tutorial:Mini_Development_Guide#Recording_call_legs|Recording Calls]].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Route retry&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
The routing engine returns all matching routes to the system. The TMG-CONTROL then generates an outgoing call using the first route in the list. If the call fails, the TMG-CONTROL may or may not generate another call, according to the error code received. &lt;br /&gt;
&lt;br /&gt;
The route retry will proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Service unavailable &lt;br /&gt;
*Circuit not available &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
The route retry will not proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*User busy &lt;br /&gt;
*Unallocated number &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You can modify the route-retry sequence (continue or discontinue) to handle unsuccessful routes. For more information, refer to the NAP profile. For more details see the route retry page.&amp;lt;br&amp;gt;These parameters can be modified here:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Profiles -&amp;amp;gt; default [Edit] -&amp;amp;gt; Edit Reason Cause mapping &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Route retry is enabled by default. Timers and conditions on route retry can be adjusted from the configuration:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Configurations -&amp;amp;gt; Advanced &amp;lt;/pre&amp;gt; &lt;br /&gt;
NOTE: The route-retry feature is available for other types of routing as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For more details, see the [[Route retry|Route Retry]] page&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;br /&gt;
&lt;br /&gt;
== Related actions ==&lt;br /&gt;
'''Refer to the appropriate Toolpack release:'''&lt;br /&gt;
&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_D|Call Routes Settings v3.0]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_C|Call Routes Settings v2.10]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_B|Call Routes Settings v2.9]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_A|Call Routes Settings v2.8]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;other versions&amp;quot; data-expandtext=&amp;quot;Click here for other versions&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.7#Routes|Web Portal v2.7: Routes Configuration]]&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.6#Routes|Web Portal v2.6: Routes Configuration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Tmedia_Routing</id>
		<title>Tmedia Routing</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Tmedia_Routing"/>
				<updated>2019-03-28T18:37:21Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* Route remap (route_remap) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Static routing table  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Gateway_Static_Routes.png|Static Routes]]&lt;br /&gt;
&lt;br /&gt;
=== Basic route matching ===&lt;br /&gt;
The static routing table uses parameters from the incoming call to locate a route and then make a routing decision. These parameters are called incoming call attributes. Three parameters are verified:&amp;lt;br&amp;gt; &lt;br /&gt;
A route will match an incoming call if all the route matching parameters are met.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Multiple routes may be a match for a call.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following criteria are available for basic route matching:&lt;br /&gt;
*Called number &lt;br /&gt;
*Calling number &lt;br /&gt;
*Incoming Network Access Point (NAP)&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number matching ====&lt;br /&gt;
Calling / called number matching works as follows:&lt;br /&gt;
*'''Field can be empty: '''this means any number will match &lt;br /&gt;
*'''Field can be a specific number: '''this means the exact number must match &lt;br /&gt;
*'''Field can be a regular expression match:'''&lt;br /&gt;
*'''Field can be a sip user and sip host:''' such as user@sip_host:sip_port&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Number Routing filter example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^1?450[0-9]{7}$/&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match an optional 1, followed by 450, then 7 digits&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; SIP user/host routing example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. 5551212@abc.com&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match exactly 5551212 for sip host abc.com only &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NAP matching ====&lt;br /&gt;
The Network Access Point can be SS7, ISDN, CAS or SIP.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic (per-route) call attributes remapping ===&lt;br /&gt;
Once the route(s) have been chosen, some call parameters can be modified using the parameters of the route: &lt;br /&gt;
==== Outgoing call parameters remapping ====&lt;br /&gt;
*'''Remapped Called Number:''' New called number used on the outgoing calls &lt;br /&gt;
*'''Remapped Calling Number: '''New calling number used on the outgoing calls &lt;br /&gt;
*'''Remapped NAP:''' determines on which Network Access Point (NAP)&amp;amp;nbsp;the outgoing calls are sent. &lt;br /&gt;
*'''Outgoing call remapped Profile: '''Select the profile to use with the outgoing call when this route is used, otherwise NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Source call leg parameters remapping ====&lt;br /&gt;
Some parameters of the source call leg can also be modified:&lt;br /&gt;
*'''Source call remapped Profile: '''Select the profile to use with the source call leg when this route is used, otherwise the NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number remapping options ====&lt;br /&gt;
Calling / called number remapping works as follows:&lt;br /&gt;
*'''Field can be empty:''' In this case, the called/calling numbers from the incoming call are used for the outgoing call. &lt;br /&gt;
*'''Field can be a specific number:''' This number will be used as called (or calling) number for the outgoing call.&lt;br /&gt;
*'''Field can be a regular expression:''' Allows building the outgoing call's calling/called number through matching/replacement of incoming calling/called number. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; For example, post routing translation (remap)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^450([0-9]*)$/\514\2&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This regular expression replaces 450 with 514&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For a complete example, refer to: [[Toolpack: How to Use RegEx in Remapped Called and Calling Number Mask|How To Use Regular Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Multiple routes matching ===&lt;br /&gt;
The remapping parameters above (both for incoming and outgoing calls) are independent for each route.&amp;lt;br&amp;gt;&lt;br /&gt;
This allows different routes to use different NAPs, and remap the calling/called numbers differently.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ordering the routes ====&lt;br /&gt;
When multiple routes match the incoming call, the default routing script (simple_routing) will order by priority and weight.&amp;lt;br&amp;gt;&lt;br /&gt;
* Note: older routing scripts did not have priority routing enabled by default, you may need to manually update your routing scripts to enable priority routing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each route has a &amp;quot;priority&amp;quot; attribute, and a &amp;quot;weight&amp;quot; attribute. All matching routes for a given call will be ordered by priority.&amp;lt;br&amp;gt;&lt;br /&gt;
Load-sharing (based on each route's &amp;quot;weight&amp;quot;) will be applied if multiple matching routes have the same priority.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's also possible to prioritize matching routes using others algorithms, by customizing routing scripts.&lt;br /&gt;
A few examples:&lt;br /&gt;
* Round robin&lt;br /&gt;
* Least cost&lt;br /&gt;
* Per period of the day&lt;br /&gt;
&lt;br /&gt;
==== Route retry ====&lt;br /&gt;
If multiple routes match for a call, call retry may be done on subsequent routes upon failure making outgoing call on a route. For more information about route retry, refer to the following page: [[Route_retry|Route Retry]].&lt;br /&gt;
&lt;br /&gt;
=== Routes limitation ===&lt;br /&gt;
&amp;lt;u&amp;gt;Up to 2000 routes&amp;lt;/u&amp;gt; can be entered in the static routing table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: When the number of routes becomes large, this may be a sign that more advanced routing should be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 For information about label route handling, refer to [[Tmedia_Routing#Label_routing|Label Routing]] or contact [[Support:Contacting_TelcoBridges_technical_support|TelcoBridges Support]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting / importing routes ===&lt;br /&gt;
You can import or export the static routing table using the web portal. Go to: &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Export Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Import Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; This is the default configuration of the Media Gateway&lt;br /&gt;
&lt;br /&gt;
== Standard Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Standard scripts are used to modify the behavior of the static routing.&amp;amp;nbsp; It allows for the prioritization of routes, load sharing amongst multiple endpoints, or the modification of some call parameters. It can be enabled on any system in just a few steps. The following is a list of Scripts supported today:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''Simple routing (simple_routing.rb):''' Script used for the static routing table, and supports priority and weight routing per route or NAP.&lt;br /&gt;
*'''Priority routing (priority_and_weight_load_balancer.rb):''' This script routes calls according to a priority setting of matching routes. Each route has its own priority setting (if not, taken from the outgoing call's NAP priority). The [:priority] field column needs to be added in the routes and NAPs page. A smaller [:priority] value has more priority. If more than 1 route matches, the route with the lowest NAP priority will be selected first. Routes with the same priority will be randomly ordered using the &amp;quot;weight&amp;quot; column so load is distributed among routes with same priority. &lt;br /&gt;
*'''ASR routing (asr_routing.rb):''' This script routes calls according to the ASR values of the destination naps. This kind of routing will try to improve overall system ASR by always using the best NAPs. It will also improve client perception by cleanly dropping calls that would almost certainly fail anyway. &lt;br /&gt;
*'''Nature of Address and Numbering plan indicator remapping (noa_npi_remap.rb): '''Enables the modification of the NOA and NPI values on outgoing calls. &lt;br /&gt;
*'''Least Cost Routing (least_cost_routing.rb):''' This script routes calls according to the cost values (which may depend on the time) of the routes. This is useful for cases when a route's popularity (cost) depends on the time of the day. This is done by adding different columns to the static routing tables (for example [:cost_0_6]) and filling them up with values for each route.&lt;br /&gt;
&lt;br /&gt;
Learn how to setup Standard Scripts in your gateway by following these steps: [[How to Setup Standard Scripts|How to Setup Standard Scripts]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other standard routing scripts implement Filters and are covered in the next section.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Filters&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Adds functionality to standard scripts. Filters can be added to any standard script in a few steps. For example, you may want to remove the '1' prefix for uniformed routing, select the SIP Request URI to route the call instead of the called number, and more. &lt;br /&gt;
&lt;br /&gt;
=== Types of filters ===&lt;br /&gt;
The following type of filters can be attached to a routing script, and they are applied in the following order&lt;br /&gt;
# before_filter  -&amp;gt; Analyze/modify the call attributes before other filters are applied&lt;br /&gt;
# route_match    -&amp;gt; Eliminates routes based on some matching criteria&lt;br /&gt;
# order_route    -&amp;gt; Change the order of matching routes&lt;br /&gt;
# after_filter   -&amp;gt; Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created&lt;br /&gt;
# route_remap    -&amp;gt; Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes&lt;br /&gt;
# after_remap    -&amp;gt; Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
==== Before filter (before_filter) ====&lt;br /&gt;
* Adds pre-processing on incoming parameters before other filters are applied&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attributes before other filters process the call&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  before_filter :method =&amp;gt; :my_custom_before_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :call]      Hash of call attributes of the incoming call to route.&lt;br /&gt;
    #                        Can be modified. Will affect subsequent filters, and routing output.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route match (route_match) ====&lt;br /&gt;
Eliminates routes based on some matching criteria.&lt;br /&gt;
&lt;br /&gt;
* Generally simply matching a call attribute with a route attribute.&lt;br /&gt;
* Any route with attribute not matching the corresponding call attribute is eliminated. &lt;br /&gt;
* A route with empty attribute is considered matching any call&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Match the call attribute :called with the route attribute with same name:&lt;br /&gt;
  route_match :call_field_name =&amp;gt; :called&lt;br /&gt;
* Match the call attribute :private_address with the route attribute :calling &lt;br /&gt;
  route_match :call_field_name =&amp;gt; :private_address , call_field_name =&amp;gt; :calling&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_match :method =&amp;gt; :my_custom_matching, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_matching( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  # Must return true if route matches, false otherwise&lt;br /&gt;
  def my_custom_matching( route, call, naps )&lt;br /&gt;
    # route contains the route to match.&lt;br /&gt;
    # call contains the incoming call attributes to match with the route.&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Order route (order_route) ====&lt;br /&gt;
Change the order of matching routes based on a given route attribute.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  order_route :route_field_name =&amp;gt; :priority&lt;br /&gt;
&lt;br /&gt;
==== After filter (after_filter) ====&lt;br /&gt;
* Filter that is applied after matching routes have been selected and ordered.&lt;br /&gt;
* Can modify the incoming call attributes before the outgoing calls are created.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_filter :method =&amp;gt; :my_custom_after_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_after_filter above for details about params&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route remap (route_remap) ====&lt;br /&gt;
* Called once per matching route.&lt;br /&gt;
* Perform per-route remapping of some call attributes, based on per-route attributes.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Remap the call attribute :called with the route attribute :remapped_called&lt;br /&gt;
  route_remap :call_field_name =&amp;gt; :called, :route_field_name =&amp;gt; :remapped_called&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_remap :method =&amp;gt; :my_custom_remap, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_remap( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per matching route for a given incoming call&lt;br /&gt;
  def my_custom_remap( route, caf_call, naps, call )&lt;br /&gt;
    # route contains the route to apply remapping for&lt;br /&gt;
    # caf_call should be ignored (legacy)&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    # call contains the outgoing call attributes that can be remapped.&lt;br /&gt;
&lt;br /&gt;
    return call&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== After remap (after_remap) ====&lt;br /&gt;
* Last filters to be applied.&lt;br /&gt;
* Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes.&lt;br /&gt;
* Can modify the outgoing calls.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_remap_filter :method =&amp;gt; :my_custom_after_remap_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_remap_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_remap_filter( params )&lt;br /&gt;
    #  - params[ :out_calls] Array of all outgoing call to be created (corresponding to each matching route).&lt;br /&gt;
    #                        Can be modified to customize each outgoing call attempt.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
=== Filter Scripts examples:  ===&lt;br /&gt;
&lt;br /&gt;
*'''Request-URI routing (ruri.rb):''' Will route the call on SIP RURI instead of the to: field &lt;br /&gt;
*'''Modify the Nature of Address (noa_npi_remap.rb):''' We can use this to change the NOA to national or international &lt;br /&gt;
*'''Remove Loop (FilterRemoveLoop.rb): '''Will prevent calls from being routed back to the sender &lt;br /&gt;
*'''Load sharing on NAP groups or on route groups (nap_group_weight_retry_with_overload.rb):''' This is a powerful script that allows for a regrouping of NAPs of the same kind, distributes loads among them, and prioritizes one group versus another.&amp;amp;nbsp; Alternatively, you can do the same on routes. You need to add two columns to the NAPs (or the routes), one called &amp;quot;group&amp;quot; and one called &amp;quot;weight&amp;quot;. Groups of lower value will have a higher priority (group=0 has more priority than group=10). The calls will be distributed according to the weight value. To have an equal number of calls on each destination, use the same weight value (weight=10). See [[Adding Load Sharing to Routing Script|Adding Load Sharing to Routing Script]]&amp;lt;br&amp;gt; &lt;br /&gt;
*'''Black and White listing (black_white_listing.rb):''' With this script, any called or calling number prefix can be blacklisted or whitelisted. This script can be assigned globally, or per NAP. It reads a .csv file which has the called and calling number list. See [[Adding White or Black listing to Routing Script]]&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Learn how to add a Filter to normal scripts: [[How to Setup Filters|How to setup Filters]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Label routing&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts&lt;br /&gt;
Gateway -&amp;amp;gt; FileDb&lt;br /&gt;
Gateway -&amp;amp;gt; Routesets &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Label routing was created because in some cases, regular expressions cannot be used on the called number to define a route. &lt;br /&gt;
&lt;br /&gt;
Problem: Having thousands of destination numbers (N), and possibly one route per number per Network Provider (M), resulting in N*M routes&amp;lt;br&amp;gt;Solution: Create labels for each groups of numbers (L) and let the system determine the route, resulting in L*M routes, where L &amp;amp;lt; N &lt;br /&gt;
&lt;br /&gt;
A Label is a virtual group of destination numbers. This virtual group has a list of numbers assigned to it in a CSV file.&amp;lt;br&amp;gt;This process does the routing in 2 stages:&amp;lt;br&amp;gt;1st stage - Find a Label: Find longest prefix match entry for the called number. This leads to only one destination Label. This is the Digitmap file.&amp;lt;br&amp;gt;2nd stage - Find the NAPs serving a Label: All routes tied to this Label are eligible for routing the call. This is the routeset definition file. &lt;br /&gt;
&lt;br /&gt;
What are the advantages compared to static routing?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Can have thousands of numbers &lt;br /&gt;
*It uses a non linear search algorithms; therefore, there is no overhead to having a large amount of numbers. Label routing was tested with 5 million entries.&lt;br /&gt;
*Variables can be added to the routeset definition file to use other filter scripts and have even more flexibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Example usage:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*NPA-NXX routing &lt;br /&gt;
*Blacklisting &lt;br /&gt;
*Tandem switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
See here for complete details: [[Routeset Routing|Label routing]] and [[Adding_Label_Routing_to_any_Routing_Script|Adding Label Routing to any Routing Script]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Custom Routing Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Customers can create their own routing scripts using a Scriptable Routing Engine based on Ruby. These scripts can be imported and exported from the Web portal.&amp;lt;br&amp;gt;These scripts can run complex routing algorithms and post routing translation, as well as other advanced functions. It is also possible to modify standard Scripts, or filters, to satisfy more complex scenarios&amp;lt;br&amp;gt;The functions have control over many call parameters such as:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Calling &lt;br /&gt;
*Called &lt;br /&gt;
*Nature of Address &lt;br /&gt;
*Calling Presentation &lt;br /&gt;
*Calling Screening &lt;br /&gt;
*Redirecting Number &lt;br /&gt;
*Original Called Number, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The complete list is in the [[Routing script tutorial:Mini Development Guide|Routing Script Tutorial]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Custom routing script are kept on software upgrades. Versionning of routing scripts needs to be handled by the operator of the unit. The new scripts (with the same names, but a new version) can be manually replaced directly in the routing script page.&amp;lt;br&amp;gt;It is possible to test routing scripts directly from the web portal before activating them in a live system.&amp;lt;br&amp;gt;For complete details, refer to [[Scriptable Routing Engine|Scriptable Routing Engine]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Playing prompts&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request for prompts playback at various states of the call. See  [[Routing_script_tutorial:Mini_Development_Guide#Playing_prompts_announcements_or_tones|Playing prompts announcements or tones]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Recording calls&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request the recording of incoming and/or outgoing call legs to audio files. See  [[Routing_script_tutorial:Mini_Development_Guide#Recording_call_legs|Recording Calls]].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Route retry&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
The routing engine returns all matching routes to the system. The TMG-CONTROL then generates an outgoing call using the first route in the list. If the call fails, the TMG-CONTROL may or may not generate another call, according to the error code received. &lt;br /&gt;
&lt;br /&gt;
The route retry will proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Service unavailable &lt;br /&gt;
*Circuit not available &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
The route retry will not proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*User busy &lt;br /&gt;
*Unallocated number &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You can modify the route-retry sequence (continue or discontinue) to handle unsuccessful routes. For more information, refer to the NAP profile. For more details see the route retry page.&amp;lt;br&amp;gt;These parameters can be modified here:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Profiles -&amp;amp;gt; default [Edit] -&amp;amp;gt; Edit Reason Cause mapping &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Route retry is enabled by default. Timers and conditions on route retry can be adjusted from the configuration:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Configurations -&amp;amp;gt; Advanced &amp;lt;/pre&amp;gt; &lt;br /&gt;
NOTE: The route-retry feature is available for other types of routing as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For more details, see the [[Route retry|Route Retry]] page&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;br /&gt;
&lt;br /&gt;
== Related actions ==&lt;br /&gt;
'''Refer to the appropriate Toolpack release:'''&lt;br /&gt;
&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_D|Call Routes Settings v3.0]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_C|Call Routes Settings v2.10]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_B|Call Routes Settings v2.9]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_A|Call Routes Settings v2.8]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;other versions&amp;quot; data-expandtext=&amp;quot;Click here for other versions&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.7#Routes|Web Portal v2.7: Routes Configuration]]&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.6#Routes|Web Portal v2.6: Routes Configuration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Tmedia_Routing</id>
		<title>Tmedia Routing</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Tmedia_Routing"/>
				<updated>2019-03-28T18:35:16Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* After remap (after_remap) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Static routing table  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Gateway_Static_Routes.png|Static Routes]]&lt;br /&gt;
&lt;br /&gt;
=== Basic route matching ===&lt;br /&gt;
The static routing table uses parameters from the incoming call to locate a route and then make a routing decision. These parameters are called incoming call attributes. Three parameters are verified:&amp;lt;br&amp;gt; &lt;br /&gt;
A route will match an incoming call if all the route matching parameters are met.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Multiple routes may be a match for a call.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following criteria are available for basic route matching:&lt;br /&gt;
*Called number &lt;br /&gt;
*Calling number &lt;br /&gt;
*Incoming Network Access Point (NAP)&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number matching ====&lt;br /&gt;
Calling / called number matching works as follows:&lt;br /&gt;
*'''Field can be empty: '''this means any number will match &lt;br /&gt;
*'''Field can be a specific number: '''this means the exact number must match &lt;br /&gt;
*'''Field can be a regular expression match:'''&lt;br /&gt;
*'''Field can be a sip user and sip host:''' such as user@sip_host:sip_port&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Number Routing filter example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^1?450[0-9]{7}$/&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match an optional 1, followed by 450, then 7 digits&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; SIP user/host routing example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. 5551212@abc.com&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match exactly 5551212 for sip host abc.com only &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NAP matching ====&lt;br /&gt;
The Network Access Point can be SS7, ISDN, CAS or SIP.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic (per-route) call attributes remapping ===&lt;br /&gt;
Once the route(s) have been chosen, some call parameters can be modified using the parameters of the route: &lt;br /&gt;
==== Outgoing call parameters remapping ====&lt;br /&gt;
*'''Remapped Called Number:''' New called number used on the outgoing calls &lt;br /&gt;
*'''Remapped Calling Number: '''New calling number used on the outgoing calls &lt;br /&gt;
*'''Remapped NAP:''' determines on which Network Access Point (NAP)&amp;amp;nbsp;the outgoing calls are sent. &lt;br /&gt;
*'''Outgoing call remapped Profile: '''Select the profile to use with the outgoing call when this route is used, otherwise NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Source call leg parameters remapping ====&lt;br /&gt;
Some parameters of the source call leg can also be modified:&lt;br /&gt;
*'''Source call remapped Profile: '''Select the profile to use with the source call leg when this route is used, otherwise the NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number remapping options ====&lt;br /&gt;
Calling / called number remapping works as follows:&lt;br /&gt;
*'''Field can be empty:''' In this case, the called/calling numbers from the incoming call are used for the outgoing call. &lt;br /&gt;
*'''Field can be a specific number:''' This number will be used as called (or calling) number for the outgoing call.&lt;br /&gt;
*'''Field can be a regular expression:''' Allows building the outgoing call's calling/called number through matching/replacement of incoming calling/called number. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; For example, post routing translation (remap)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^450([0-9]*)$/\514\2&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This regular expression replaces 450 with 514&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For a complete example, refer to: [[Toolpack: How to Use RegEx in Remapped Called and Calling Number Mask|How To Use Regular Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Multiple routes matching ===&lt;br /&gt;
The remapping parameters above (both for incoming and outgoing calls) are independent for each route.&amp;lt;br&amp;gt;&lt;br /&gt;
This allows different routes to use different NAPs, and remap the calling/called numbers differently.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ordering the routes ====&lt;br /&gt;
When multiple routes match the incoming call, the default routing script (simple_routing) will order by priority and weight.&amp;lt;br&amp;gt;&lt;br /&gt;
* Note: older routing scripts did not have priority routing enabled by default, you may need to manually update your routing scripts to enable priority routing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each route has a &amp;quot;priority&amp;quot; attribute, and a &amp;quot;weight&amp;quot; attribute. All matching routes for a given call will be ordered by priority.&amp;lt;br&amp;gt;&lt;br /&gt;
Load-sharing (based on each route's &amp;quot;weight&amp;quot;) will be applied if multiple matching routes have the same priority.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's also possible to prioritize matching routes using others algorithms, by customizing routing scripts.&lt;br /&gt;
A few examples:&lt;br /&gt;
* Round robin&lt;br /&gt;
* Least cost&lt;br /&gt;
* Per period of the day&lt;br /&gt;
&lt;br /&gt;
==== Route retry ====&lt;br /&gt;
If multiple routes match for a call, call retry may be done on subsequent routes upon failure making outgoing call on a route. For more information about route retry, refer to the following page: [[Route_retry|Route Retry]].&lt;br /&gt;
&lt;br /&gt;
=== Routes limitation ===&lt;br /&gt;
&amp;lt;u&amp;gt;Up to 2000 routes&amp;lt;/u&amp;gt; can be entered in the static routing table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: When the number of routes becomes large, this may be a sign that more advanced routing should be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 For information about label route handling, refer to [[Tmedia_Routing#Label_routing|Label Routing]] or contact [[Support:Contacting_TelcoBridges_technical_support|TelcoBridges Support]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting / importing routes ===&lt;br /&gt;
You can import or export the static routing table using the web portal. Go to: &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Export Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Import Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; This is the default configuration of the Media Gateway&lt;br /&gt;
&lt;br /&gt;
== Standard Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Standard scripts are used to modify the behavior of the static routing.&amp;amp;nbsp; It allows for the prioritization of routes, load sharing amongst multiple endpoints, or the modification of some call parameters. It can be enabled on any system in just a few steps. The following is a list of Scripts supported today:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''Simple routing (simple_routing.rb):''' Script used for the static routing table, and supports priority and weight routing per route or NAP.&lt;br /&gt;
*'''Priority routing (priority_and_weight_load_balancer.rb):''' This script routes calls according to a priority setting of matching routes. Each route has its own priority setting (if not, taken from the outgoing call's NAP priority). The [:priority] field column needs to be added in the routes and NAPs page. A smaller [:priority] value has more priority. If more than 1 route matches, the route with the lowest NAP priority will be selected first. Routes with the same priority will be randomly ordered using the &amp;quot;weight&amp;quot; column so load is distributed among routes with same priority. &lt;br /&gt;
*'''ASR routing (asr_routing.rb):''' This script routes calls according to the ASR values of the destination naps. This kind of routing will try to improve overall system ASR by always using the best NAPs. It will also improve client perception by cleanly dropping calls that would almost certainly fail anyway. &lt;br /&gt;
*'''Nature of Address and Numbering plan indicator remapping (noa_npi_remap.rb): '''Enables the modification of the NOA and NPI values on outgoing calls. &lt;br /&gt;
*'''Least Cost Routing (least_cost_routing.rb):''' This script routes calls according to the cost values (which may depend on the time) of the routes. This is useful for cases when a route's popularity (cost) depends on the time of the day. This is done by adding different columns to the static routing tables (for example [:cost_0_6]) and filling them up with values for each route.&lt;br /&gt;
&lt;br /&gt;
Learn how to setup Standard Scripts in your gateway by following these steps: [[How to Setup Standard Scripts|How to Setup Standard Scripts]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other standard routing scripts implement Filters and are covered in the next section.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Filters&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Adds functionality to standard scripts. Filters can be added to any standard script in a few steps. For example, you may want to remove the '1' prefix for uniformed routing, select the SIP Request URI to route the call instead of the called number, and more. &lt;br /&gt;
&lt;br /&gt;
=== Types of filters ===&lt;br /&gt;
The following type of filters can be attached to a routing script, and they are applied in the following order&lt;br /&gt;
# before_filter  -&amp;gt; Analyze/modify the call attributes before other filters are applied&lt;br /&gt;
# route_match    -&amp;gt; Eliminates routes based on some matching criteria&lt;br /&gt;
# order_route    -&amp;gt; Change the order of matching routes&lt;br /&gt;
# after_filter   -&amp;gt; Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created&lt;br /&gt;
# route_remap    -&amp;gt; Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes&lt;br /&gt;
# after_remap    -&amp;gt; Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
==== Before filter (before_filter) ====&lt;br /&gt;
* Adds pre-processing on incoming parameters before other filters are applied&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attributes before other filters process the call&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  before_filter :method =&amp;gt; :my_custom_before_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :call]      Hash of call attributes of the incoming call to route.&lt;br /&gt;
    #                        Can be modified. Will affect subsequent filters, and routing output.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route match (route_match) ====&lt;br /&gt;
Eliminates routes based on some matching criteria.&lt;br /&gt;
&lt;br /&gt;
* Generally simply matching a call attribute with a route attribute.&lt;br /&gt;
* Any route with attribute not matching the corresponding call attribute is eliminated. &lt;br /&gt;
* A route with empty attribute is considered matching any call&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Match the call attribute :called with the route attribute with same name:&lt;br /&gt;
  route_match :call_field_name =&amp;gt; :called&lt;br /&gt;
* Match the call attribute :private_address with the route attribute :calling &lt;br /&gt;
  route_match :call_field_name =&amp;gt; :private_address , call_field_name =&amp;gt; :calling&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_match :method =&amp;gt; :my_custom_matching, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_matching( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  # Must return true if route matches, false otherwise&lt;br /&gt;
  def my_custom_matching( route, call, naps )&lt;br /&gt;
    # route contains the route to match.&lt;br /&gt;
    # call contains the incoming call attributes to match with the route.&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Order route (order_route) ====&lt;br /&gt;
Change the order of matching routes based on a given route attribute.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  order_route :route_field_name =&amp;gt; :priority&lt;br /&gt;
&lt;br /&gt;
==== After filter (after_filter) ====&lt;br /&gt;
* Filter that is applied after matching routes have been selected and ordered.&lt;br /&gt;
* Can modify the incoming call attributes before the outgoing calls are created.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_filter :method =&amp;gt; :my_custom_after_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_after_filter above for details about params&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route remap (route_remap) ====&lt;br /&gt;
Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes.&lt;br /&gt;
&lt;br /&gt;
==== After remap (after_remap) ====&lt;br /&gt;
* Last filters to be applied.&lt;br /&gt;
* Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes.&lt;br /&gt;
* Can modify the outgoing calls.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_remap_filter :method =&amp;gt; :my_custom_after_remap_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_remap_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_remap_filter( params )&lt;br /&gt;
    #  - params[ :out_calls] Array of all outgoing call to be created (corresponding to each matching route).&lt;br /&gt;
    #                        Can be modified to customize each outgoing call attempt.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
=== Filter Scripts examples:  ===&lt;br /&gt;
&lt;br /&gt;
*'''Request-URI routing (ruri.rb):''' Will route the call on SIP RURI instead of the to: field &lt;br /&gt;
*'''Modify the Nature of Address (noa_npi_remap.rb):''' We can use this to change the NOA to national or international &lt;br /&gt;
*'''Remove Loop (FilterRemoveLoop.rb): '''Will prevent calls from being routed back to the sender &lt;br /&gt;
*'''Load sharing on NAP groups or on route groups (nap_group_weight_retry_with_overload.rb):''' This is a powerful script that allows for a regrouping of NAPs of the same kind, distributes loads among them, and prioritizes one group versus another.&amp;amp;nbsp; Alternatively, you can do the same on routes. You need to add two columns to the NAPs (or the routes), one called &amp;quot;group&amp;quot; and one called &amp;quot;weight&amp;quot;. Groups of lower value will have a higher priority (group=0 has more priority than group=10). The calls will be distributed according to the weight value. To have an equal number of calls on each destination, use the same weight value (weight=10). See [[Adding Load Sharing to Routing Script|Adding Load Sharing to Routing Script]]&amp;lt;br&amp;gt; &lt;br /&gt;
*'''Black and White listing (black_white_listing.rb):''' With this script, any called or calling number prefix can be blacklisted or whitelisted. This script can be assigned globally, or per NAP. It reads a .csv file which has the called and calling number list. See [[Adding White or Black listing to Routing Script]]&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Learn how to add a Filter to normal scripts: [[How to Setup Filters|How to setup Filters]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Label routing&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts&lt;br /&gt;
Gateway -&amp;amp;gt; FileDb&lt;br /&gt;
Gateway -&amp;amp;gt; Routesets &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Label routing was created because in some cases, regular expressions cannot be used on the called number to define a route. &lt;br /&gt;
&lt;br /&gt;
Problem: Having thousands of destination numbers (N), and possibly one route per number per Network Provider (M), resulting in N*M routes&amp;lt;br&amp;gt;Solution: Create labels for each groups of numbers (L) and let the system determine the route, resulting in L*M routes, where L &amp;amp;lt; N &lt;br /&gt;
&lt;br /&gt;
A Label is a virtual group of destination numbers. This virtual group has a list of numbers assigned to it in a CSV file.&amp;lt;br&amp;gt;This process does the routing in 2 stages:&amp;lt;br&amp;gt;1st stage - Find a Label: Find longest prefix match entry for the called number. This leads to only one destination Label. This is the Digitmap file.&amp;lt;br&amp;gt;2nd stage - Find the NAPs serving a Label: All routes tied to this Label are eligible for routing the call. This is the routeset definition file. &lt;br /&gt;
&lt;br /&gt;
What are the advantages compared to static routing?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Can have thousands of numbers &lt;br /&gt;
*It uses a non linear search algorithms; therefore, there is no overhead to having a large amount of numbers. Label routing was tested with 5 million entries.&lt;br /&gt;
*Variables can be added to the routeset definition file to use other filter scripts and have even more flexibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Example usage:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*NPA-NXX routing &lt;br /&gt;
*Blacklisting &lt;br /&gt;
*Tandem switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
See here for complete details: [[Routeset Routing|Label routing]] and [[Adding_Label_Routing_to_any_Routing_Script|Adding Label Routing to any Routing Script]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Custom Routing Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Customers can create their own routing scripts using a Scriptable Routing Engine based on Ruby. These scripts can be imported and exported from the Web portal.&amp;lt;br&amp;gt;These scripts can run complex routing algorithms and post routing translation, as well as other advanced functions. It is also possible to modify standard Scripts, or filters, to satisfy more complex scenarios&amp;lt;br&amp;gt;The functions have control over many call parameters such as:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Calling &lt;br /&gt;
*Called &lt;br /&gt;
*Nature of Address &lt;br /&gt;
*Calling Presentation &lt;br /&gt;
*Calling Screening &lt;br /&gt;
*Redirecting Number &lt;br /&gt;
*Original Called Number, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The complete list is in the [[Routing script tutorial:Mini Development Guide|Routing Script Tutorial]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Custom routing script are kept on software upgrades. Versionning of routing scripts needs to be handled by the operator of the unit. The new scripts (with the same names, but a new version) can be manually replaced directly in the routing script page.&amp;lt;br&amp;gt;It is possible to test routing scripts directly from the web portal before activating them in a live system.&amp;lt;br&amp;gt;For complete details, refer to [[Scriptable Routing Engine|Scriptable Routing Engine]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Playing prompts&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request for prompts playback at various states of the call. See  [[Routing_script_tutorial:Mini_Development_Guide#Playing_prompts_announcements_or_tones|Playing prompts announcements or tones]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Recording calls&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request the recording of incoming and/or outgoing call legs to audio files. See  [[Routing_script_tutorial:Mini_Development_Guide#Recording_call_legs|Recording Calls]].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Route retry&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
The routing engine returns all matching routes to the system. The TMG-CONTROL then generates an outgoing call using the first route in the list. If the call fails, the TMG-CONTROL may or may not generate another call, according to the error code received. &lt;br /&gt;
&lt;br /&gt;
The route retry will proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Service unavailable &lt;br /&gt;
*Circuit not available &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
The route retry will not proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*User busy &lt;br /&gt;
*Unallocated number &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You can modify the route-retry sequence (continue or discontinue) to handle unsuccessful routes. For more information, refer to the NAP profile. For more details see the route retry page.&amp;lt;br&amp;gt;These parameters can be modified here:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Profiles -&amp;amp;gt; default [Edit] -&amp;amp;gt; Edit Reason Cause mapping &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Route retry is enabled by default. Timers and conditions on route retry can be adjusted from the configuration:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Configurations -&amp;amp;gt; Advanced &amp;lt;/pre&amp;gt; &lt;br /&gt;
NOTE: The route-retry feature is available for other types of routing as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For more details, see the [[Route retry|Route Retry]] page&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;br /&gt;
&lt;br /&gt;
== Related actions ==&lt;br /&gt;
'''Refer to the appropriate Toolpack release:'''&lt;br /&gt;
&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_D|Call Routes Settings v3.0]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_C|Call Routes Settings v2.10]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_B|Call Routes Settings v2.9]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_A|Call Routes Settings v2.8]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;other versions&amp;quot; data-expandtext=&amp;quot;Click here for other versions&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.7#Routes|Web Portal v2.7: Routes Configuration]]&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.6#Routes|Web Portal v2.6: Routes Configuration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Tmedia_Routing</id>
		<title>Tmedia Routing</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Tmedia_Routing"/>
				<updated>2019-03-28T18:34:59Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* After filter (after_filter) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Static routing table  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Gateway_Static_Routes.png|Static Routes]]&lt;br /&gt;
&lt;br /&gt;
=== Basic route matching ===&lt;br /&gt;
The static routing table uses parameters from the incoming call to locate a route and then make a routing decision. These parameters are called incoming call attributes. Three parameters are verified:&amp;lt;br&amp;gt; &lt;br /&gt;
A route will match an incoming call if all the route matching parameters are met.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Multiple routes may be a match for a call.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following criteria are available for basic route matching:&lt;br /&gt;
*Called number &lt;br /&gt;
*Calling number &lt;br /&gt;
*Incoming Network Access Point (NAP)&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number matching ====&lt;br /&gt;
Calling / called number matching works as follows:&lt;br /&gt;
*'''Field can be empty: '''this means any number will match &lt;br /&gt;
*'''Field can be a specific number: '''this means the exact number must match &lt;br /&gt;
*'''Field can be a regular expression match:'''&lt;br /&gt;
*'''Field can be a sip user and sip host:''' such as user@sip_host:sip_port&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Number Routing filter example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^1?450[0-9]{7}$/&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match an optional 1, followed by 450, then 7 digits&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; SIP user/host routing example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. 5551212@abc.com&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match exactly 5551212 for sip host abc.com only &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NAP matching ====&lt;br /&gt;
The Network Access Point can be SS7, ISDN, CAS or SIP.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic (per-route) call attributes remapping ===&lt;br /&gt;
Once the route(s) have been chosen, some call parameters can be modified using the parameters of the route: &lt;br /&gt;
==== Outgoing call parameters remapping ====&lt;br /&gt;
*'''Remapped Called Number:''' New called number used on the outgoing calls &lt;br /&gt;
*'''Remapped Calling Number: '''New calling number used on the outgoing calls &lt;br /&gt;
*'''Remapped NAP:''' determines on which Network Access Point (NAP)&amp;amp;nbsp;the outgoing calls are sent. &lt;br /&gt;
*'''Outgoing call remapped Profile: '''Select the profile to use with the outgoing call when this route is used, otherwise NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Source call leg parameters remapping ====&lt;br /&gt;
Some parameters of the source call leg can also be modified:&lt;br /&gt;
*'''Source call remapped Profile: '''Select the profile to use with the source call leg when this route is used, otherwise the NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number remapping options ====&lt;br /&gt;
Calling / called number remapping works as follows:&lt;br /&gt;
*'''Field can be empty:''' In this case, the called/calling numbers from the incoming call are used for the outgoing call. &lt;br /&gt;
*'''Field can be a specific number:''' This number will be used as called (or calling) number for the outgoing call.&lt;br /&gt;
*'''Field can be a regular expression:''' Allows building the outgoing call's calling/called number through matching/replacement of incoming calling/called number. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; For example, post routing translation (remap)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^450([0-9]*)$/\514\2&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This regular expression replaces 450 with 514&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For a complete example, refer to: [[Toolpack: How to Use RegEx in Remapped Called and Calling Number Mask|How To Use Regular Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Multiple routes matching ===&lt;br /&gt;
The remapping parameters above (both for incoming and outgoing calls) are independent for each route.&amp;lt;br&amp;gt;&lt;br /&gt;
This allows different routes to use different NAPs, and remap the calling/called numbers differently.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ordering the routes ====&lt;br /&gt;
When multiple routes match the incoming call, the default routing script (simple_routing) will order by priority and weight.&amp;lt;br&amp;gt;&lt;br /&gt;
* Note: older routing scripts did not have priority routing enabled by default, you may need to manually update your routing scripts to enable priority routing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each route has a &amp;quot;priority&amp;quot; attribute, and a &amp;quot;weight&amp;quot; attribute. All matching routes for a given call will be ordered by priority.&amp;lt;br&amp;gt;&lt;br /&gt;
Load-sharing (based on each route's &amp;quot;weight&amp;quot;) will be applied if multiple matching routes have the same priority.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's also possible to prioritize matching routes using others algorithms, by customizing routing scripts.&lt;br /&gt;
A few examples:&lt;br /&gt;
* Round robin&lt;br /&gt;
* Least cost&lt;br /&gt;
* Per period of the day&lt;br /&gt;
&lt;br /&gt;
==== Route retry ====&lt;br /&gt;
If multiple routes match for a call, call retry may be done on subsequent routes upon failure making outgoing call on a route. For more information about route retry, refer to the following page: [[Route_retry|Route Retry]].&lt;br /&gt;
&lt;br /&gt;
=== Routes limitation ===&lt;br /&gt;
&amp;lt;u&amp;gt;Up to 2000 routes&amp;lt;/u&amp;gt; can be entered in the static routing table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: When the number of routes becomes large, this may be a sign that more advanced routing should be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 For information about label route handling, refer to [[Tmedia_Routing#Label_routing|Label Routing]] or contact [[Support:Contacting_TelcoBridges_technical_support|TelcoBridges Support]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting / importing routes ===&lt;br /&gt;
You can import or export the static routing table using the web portal. Go to: &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Export Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Import Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; This is the default configuration of the Media Gateway&lt;br /&gt;
&lt;br /&gt;
== Standard Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Standard scripts are used to modify the behavior of the static routing.&amp;amp;nbsp; It allows for the prioritization of routes, load sharing amongst multiple endpoints, or the modification of some call parameters. It can be enabled on any system in just a few steps. The following is a list of Scripts supported today:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''Simple routing (simple_routing.rb):''' Script used for the static routing table, and supports priority and weight routing per route or NAP.&lt;br /&gt;
*'''Priority routing (priority_and_weight_load_balancer.rb):''' This script routes calls according to a priority setting of matching routes. Each route has its own priority setting (if not, taken from the outgoing call's NAP priority). The [:priority] field column needs to be added in the routes and NAPs page. A smaller [:priority] value has more priority. If more than 1 route matches, the route with the lowest NAP priority will be selected first. Routes with the same priority will be randomly ordered using the &amp;quot;weight&amp;quot; column so load is distributed among routes with same priority. &lt;br /&gt;
*'''ASR routing (asr_routing.rb):''' This script routes calls according to the ASR values of the destination naps. This kind of routing will try to improve overall system ASR by always using the best NAPs. It will also improve client perception by cleanly dropping calls that would almost certainly fail anyway. &lt;br /&gt;
*'''Nature of Address and Numbering plan indicator remapping (noa_npi_remap.rb): '''Enables the modification of the NOA and NPI values on outgoing calls. &lt;br /&gt;
*'''Least Cost Routing (least_cost_routing.rb):''' This script routes calls according to the cost values (which may depend on the time) of the routes. This is useful for cases when a route's popularity (cost) depends on the time of the day. This is done by adding different columns to the static routing tables (for example [:cost_0_6]) and filling them up with values for each route.&lt;br /&gt;
&lt;br /&gt;
Learn how to setup Standard Scripts in your gateway by following these steps: [[How to Setup Standard Scripts|How to Setup Standard Scripts]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other standard routing scripts implement Filters and are covered in the next section.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Filters&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Adds functionality to standard scripts. Filters can be added to any standard script in a few steps. For example, you may want to remove the '1' prefix for uniformed routing, select the SIP Request URI to route the call instead of the called number, and more. &lt;br /&gt;
&lt;br /&gt;
=== Types of filters ===&lt;br /&gt;
The following type of filters can be attached to a routing script, and they are applied in the following order&lt;br /&gt;
# before_filter  -&amp;gt; Analyze/modify the call attributes before other filters are applied&lt;br /&gt;
# route_match    -&amp;gt; Eliminates routes based on some matching criteria&lt;br /&gt;
# order_route    -&amp;gt; Change the order of matching routes&lt;br /&gt;
# after_filter   -&amp;gt; Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created&lt;br /&gt;
# route_remap    -&amp;gt; Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes&lt;br /&gt;
# after_remap    -&amp;gt; Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
==== Before filter (before_filter) ====&lt;br /&gt;
* Adds pre-processing on incoming parameters before other filters are applied&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attributes before other filters process the call&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  before_filter :method =&amp;gt; :my_custom_before_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :call]      Hash of call attributes of the incoming call to route.&lt;br /&gt;
    #                        Can be modified. Will affect subsequent filters, and routing output.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route match (route_match) ====&lt;br /&gt;
Eliminates routes based on some matching criteria.&lt;br /&gt;
&lt;br /&gt;
* Generally simply matching a call attribute with a route attribute.&lt;br /&gt;
* Any route with attribute not matching the corresponding call attribute is eliminated. &lt;br /&gt;
* A route with empty attribute is considered matching any call&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Match the call attribute :called with the route attribute with same name:&lt;br /&gt;
  route_match :call_field_name =&amp;gt; :called&lt;br /&gt;
* Match the call attribute :private_address with the route attribute :calling &lt;br /&gt;
  route_match :call_field_name =&amp;gt; :private_address , call_field_name =&amp;gt; :calling&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_match :method =&amp;gt; :my_custom_matching, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_matching( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  # Must return true if route matches, false otherwise&lt;br /&gt;
  def my_custom_matching( route, call, naps )&lt;br /&gt;
    # route contains the route to match.&lt;br /&gt;
    # call contains the incoming call attributes to match with the route.&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Order route (order_route) ====&lt;br /&gt;
Change the order of matching routes based on a given route attribute.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  order_route :route_field_name =&amp;gt; :priority&lt;br /&gt;
&lt;br /&gt;
==== After filter (after_filter) ====&lt;br /&gt;
* Filter that is applied after matching routes have been selected and ordered.&lt;br /&gt;
* Can modify the incoming call attributes before the outgoing calls are created.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_filter :method =&amp;gt; :my_custom_after_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_after_filter above for details about params&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route remap (route_remap) ====&lt;br /&gt;
Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes.&lt;br /&gt;
&lt;br /&gt;
==== After remap (after_remap) ====&lt;br /&gt;
* Last filters to be applied.&lt;br /&gt;
* Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes.&lt;br /&gt;
* Can modify the outgoing calls.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_remap_filter :method =&amp;gt; :my_custom_after_remap_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_remap_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_remap_filter( params )&lt;br /&gt;
    #  - params[ :out_calls] Array of all outgoing call to be created (corresponding to each matching route).&lt;br /&gt;
    #                        Can be modified to customize each outgoing call attempt.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
=== Filter Scripts examples:  ===&lt;br /&gt;
&lt;br /&gt;
*'''Request-URI routing (ruri.rb):''' Will route the call on SIP RURI instead of the to: field &lt;br /&gt;
*'''Modify the Nature of Address (noa_npi_remap.rb):''' We can use this to change the NOA to national or international &lt;br /&gt;
*'''Remove Loop (FilterRemoveLoop.rb): '''Will prevent calls from being routed back to the sender &lt;br /&gt;
*'''Load sharing on NAP groups or on route groups (nap_group_weight_retry_with_overload.rb):''' This is a powerful script that allows for a regrouping of NAPs of the same kind, distributes loads among them, and prioritizes one group versus another.&amp;amp;nbsp; Alternatively, you can do the same on routes. You need to add two columns to the NAPs (or the routes), one called &amp;quot;group&amp;quot; and one called &amp;quot;weight&amp;quot;. Groups of lower value will have a higher priority (group=0 has more priority than group=10). The calls will be distributed according to the weight value. To have an equal number of calls on each destination, use the same weight value (weight=10). See [[Adding Load Sharing to Routing Script|Adding Load Sharing to Routing Script]]&amp;lt;br&amp;gt; &lt;br /&gt;
*'''Black and White listing (black_white_listing.rb):''' With this script, any called or calling number prefix can be blacklisted or whitelisted. This script can be assigned globally, or per NAP. It reads a .csv file which has the called and calling number list. See [[Adding White or Black listing to Routing Script]]&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Learn how to add a Filter to normal scripts: [[How to Setup Filters|How to setup Filters]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Label routing&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts&lt;br /&gt;
Gateway -&amp;amp;gt; FileDb&lt;br /&gt;
Gateway -&amp;amp;gt; Routesets &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Label routing was created because in some cases, regular expressions cannot be used on the called number to define a route. &lt;br /&gt;
&lt;br /&gt;
Problem: Having thousands of destination numbers (N), and possibly one route per number per Network Provider (M), resulting in N*M routes&amp;lt;br&amp;gt;Solution: Create labels for each groups of numbers (L) and let the system determine the route, resulting in L*M routes, where L &amp;amp;lt; N &lt;br /&gt;
&lt;br /&gt;
A Label is a virtual group of destination numbers. This virtual group has a list of numbers assigned to it in a CSV file.&amp;lt;br&amp;gt;This process does the routing in 2 stages:&amp;lt;br&amp;gt;1st stage - Find a Label: Find longest prefix match entry for the called number. This leads to only one destination Label. This is the Digitmap file.&amp;lt;br&amp;gt;2nd stage - Find the NAPs serving a Label: All routes tied to this Label are eligible for routing the call. This is the routeset definition file. &lt;br /&gt;
&lt;br /&gt;
What are the advantages compared to static routing?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Can have thousands of numbers &lt;br /&gt;
*It uses a non linear search algorithms; therefore, there is no overhead to having a large amount of numbers. Label routing was tested with 5 million entries.&lt;br /&gt;
*Variables can be added to the routeset definition file to use other filter scripts and have even more flexibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Example usage:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*NPA-NXX routing &lt;br /&gt;
*Blacklisting &lt;br /&gt;
*Tandem switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
See here for complete details: [[Routeset Routing|Label routing]] and [[Adding_Label_Routing_to_any_Routing_Script|Adding Label Routing to any Routing Script]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Custom Routing Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Customers can create their own routing scripts using a Scriptable Routing Engine based on Ruby. These scripts can be imported and exported from the Web portal.&amp;lt;br&amp;gt;These scripts can run complex routing algorithms and post routing translation, as well as other advanced functions. It is also possible to modify standard Scripts, or filters, to satisfy more complex scenarios&amp;lt;br&amp;gt;The functions have control over many call parameters such as:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Calling &lt;br /&gt;
*Called &lt;br /&gt;
*Nature of Address &lt;br /&gt;
*Calling Presentation &lt;br /&gt;
*Calling Screening &lt;br /&gt;
*Redirecting Number &lt;br /&gt;
*Original Called Number, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The complete list is in the [[Routing script tutorial:Mini Development Guide|Routing Script Tutorial]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Custom routing script are kept on software upgrades. Versionning of routing scripts needs to be handled by the operator of the unit. The new scripts (with the same names, but a new version) can be manually replaced directly in the routing script page.&amp;lt;br&amp;gt;It is possible to test routing scripts directly from the web portal before activating them in a live system.&amp;lt;br&amp;gt;For complete details, refer to [[Scriptable Routing Engine|Scriptable Routing Engine]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Playing prompts&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request for prompts playback at various states of the call. See  [[Routing_script_tutorial:Mini_Development_Guide#Playing_prompts_announcements_or_tones|Playing prompts announcements or tones]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Recording calls&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request the recording of incoming and/or outgoing call legs to audio files. See  [[Routing_script_tutorial:Mini_Development_Guide#Recording_call_legs|Recording Calls]].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Route retry&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
The routing engine returns all matching routes to the system. The TMG-CONTROL then generates an outgoing call using the first route in the list. If the call fails, the TMG-CONTROL may or may not generate another call, according to the error code received. &lt;br /&gt;
&lt;br /&gt;
The route retry will proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Service unavailable &lt;br /&gt;
*Circuit not available &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
The route retry will not proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*User busy &lt;br /&gt;
*Unallocated number &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You can modify the route-retry sequence (continue or discontinue) to handle unsuccessful routes. For more information, refer to the NAP profile. For more details see the route retry page.&amp;lt;br&amp;gt;These parameters can be modified here:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Profiles -&amp;amp;gt; default [Edit] -&amp;amp;gt; Edit Reason Cause mapping &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Route retry is enabled by default. Timers and conditions on route retry can be adjusted from the configuration:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Configurations -&amp;amp;gt; Advanced &amp;lt;/pre&amp;gt; &lt;br /&gt;
NOTE: The route-retry feature is available for other types of routing as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For more details, see the [[Route retry|Route Retry]] page&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;br /&gt;
&lt;br /&gt;
== Related actions ==&lt;br /&gt;
'''Refer to the appropriate Toolpack release:'''&lt;br /&gt;
&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_D|Call Routes Settings v3.0]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_C|Call Routes Settings v2.10]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_B|Call Routes Settings v2.9]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_A|Call Routes Settings v2.8]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;other versions&amp;quot; data-expandtext=&amp;quot;Click here for other versions&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.7#Routes|Web Portal v2.7: Routes Configuration]]&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.6#Routes|Web Portal v2.6: Routes Configuration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Tmedia_Routing</id>
		<title>Tmedia Routing</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Tmedia_Routing"/>
				<updated>2019-03-28T18:34:44Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* Before filter (before_filter) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Static routing table  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Gateway_Static_Routes.png|Static Routes]]&lt;br /&gt;
&lt;br /&gt;
=== Basic route matching ===&lt;br /&gt;
The static routing table uses parameters from the incoming call to locate a route and then make a routing decision. These parameters are called incoming call attributes. Three parameters are verified:&amp;lt;br&amp;gt; &lt;br /&gt;
A route will match an incoming call if all the route matching parameters are met.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Multiple routes may be a match for a call.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following criteria are available for basic route matching:&lt;br /&gt;
*Called number &lt;br /&gt;
*Calling number &lt;br /&gt;
*Incoming Network Access Point (NAP)&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number matching ====&lt;br /&gt;
Calling / called number matching works as follows:&lt;br /&gt;
*'''Field can be empty: '''this means any number will match &lt;br /&gt;
*'''Field can be a specific number: '''this means the exact number must match &lt;br /&gt;
*'''Field can be a regular expression match:'''&lt;br /&gt;
*'''Field can be a sip user and sip host:''' such as user@sip_host:sip_port&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Number Routing filter example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^1?450[0-9]{7}$/&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match an optional 1, followed by 450, then 7 digits&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; SIP user/host routing example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. 5551212@abc.com&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match exactly 5551212 for sip host abc.com only &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NAP matching ====&lt;br /&gt;
The Network Access Point can be SS7, ISDN, CAS or SIP.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic (per-route) call attributes remapping ===&lt;br /&gt;
Once the route(s) have been chosen, some call parameters can be modified using the parameters of the route: &lt;br /&gt;
==== Outgoing call parameters remapping ====&lt;br /&gt;
*'''Remapped Called Number:''' New called number used on the outgoing calls &lt;br /&gt;
*'''Remapped Calling Number: '''New calling number used on the outgoing calls &lt;br /&gt;
*'''Remapped NAP:''' determines on which Network Access Point (NAP)&amp;amp;nbsp;the outgoing calls are sent. &lt;br /&gt;
*'''Outgoing call remapped Profile: '''Select the profile to use with the outgoing call when this route is used, otherwise NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Source call leg parameters remapping ====&lt;br /&gt;
Some parameters of the source call leg can also be modified:&lt;br /&gt;
*'''Source call remapped Profile: '''Select the profile to use with the source call leg when this route is used, otherwise the NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number remapping options ====&lt;br /&gt;
Calling / called number remapping works as follows:&lt;br /&gt;
*'''Field can be empty:''' In this case, the called/calling numbers from the incoming call are used for the outgoing call. &lt;br /&gt;
*'''Field can be a specific number:''' This number will be used as called (or calling) number for the outgoing call.&lt;br /&gt;
*'''Field can be a regular expression:''' Allows building the outgoing call's calling/called number through matching/replacement of incoming calling/called number. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; For example, post routing translation (remap)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^450([0-9]*)$/\514\2&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This regular expression replaces 450 with 514&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For a complete example, refer to: [[Toolpack: How to Use RegEx in Remapped Called and Calling Number Mask|How To Use Regular Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Multiple routes matching ===&lt;br /&gt;
The remapping parameters above (both for incoming and outgoing calls) are independent for each route.&amp;lt;br&amp;gt;&lt;br /&gt;
This allows different routes to use different NAPs, and remap the calling/called numbers differently.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ordering the routes ====&lt;br /&gt;
When multiple routes match the incoming call, the default routing script (simple_routing) will order by priority and weight.&amp;lt;br&amp;gt;&lt;br /&gt;
* Note: older routing scripts did not have priority routing enabled by default, you may need to manually update your routing scripts to enable priority routing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each route has a &amp;quot;priority&amp;quot; attribute, and a &amp;quot;weight&amp;quot; attribute. All matching routes for a given call will be ordered by priority.&amp;lt;br&amp;gt;&lt;br /&gt;
Load-sharing (based on each route's &amp;quot;weight&amp;quot;) will be applied if multiple matching routes have the same priority.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's also possible to prioritize matching routes using others algorithms, by customizing routing scripts.&lt;br /&gt;
A few examples:&lt;br /&gt;
* Round robin&lt;br /&gt;
* Least cost&lt;br /&gt;
* Per period of the day&lt;br /&gt;
&lt;br /&gt;
==== Route retry ====&lt;br /&gt;
If multiple routes match for a call, call retry may be done on subsequent routes upon failure making outgoing call on a route. For more information about route retry, refer to the following page: [[Route_retry|Route Retry]].&lt;br /&gt;
&lt;br /&gt;
=== Routes limitation ===&lt;br /&gt;
&amp;lt;u&amp;gt;Up to 2000 routes&amp;lt;/u&amp;gt; can be entered in the static routing table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: When the number of routes becomes large, this may be a sign that more advanced routing should be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 For information about label route handling, refer to [[Tmedia_Routing#Label_routing|Label Routing]] or contact [[Support:Contacting_TelcoBridges_technical_support|TelcoBridges Support]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting / importing routes ===&lt;br /&gt;
You can import or export the static routing table using the web portal. Go to: &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Export Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Import Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; This is the default configuration of the Media Gateway&lt;br /&gt;
&lt;br /&gt;
== Standard Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Standard scripts are used to modify the behavior of the static routing.&amp;amp;nbsp; It allows for the prioritization of routes, load sharing amongst multiple endpoints, or the modification of some call parameters. It can be enabled on any system in just a few steps. The following is a list of Scripts supported today:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''Simple routing (simple_routing.rb):''' Script used for the static routing table, and supports priority and weight routing per route or NAP.&lt;br /&gt;
*'''Priority routing (priority_and_weight_load_balancer.rb):''' This script routes calls according to a priority setting of matching routes. Each route has its own priority setting (if not, taken from the outgoing call's NAP priority). The [:priority] field column needs to be added in the routes and NAPs page. A smaller [:priority] value has more priority. If more than 1 route matches, the route with the lowest NAP priority will be selected first. Routes with the same priority will be randomly ordered using the &amp;quot;weight&amp;quot; column so load is distributed among routes with same priority. &lt;br /&gt;
*'''ASR routing (asr_routing.rb):''' This script routes calls according to the ASR values of the destination naps. This kind of routing will try to improve overall system ASR by always using the best NAPs. It will also improve client perception by cleanly dropping calls that would almost certainly fail anyway. &lt;br /&gt;
*'''Nature of Address and Numbering plan indicator remapping (noa_npi_remap.rb): '''Enables the modification of the NOA and NPI values on outgoing calls. &lt;br /&gt;
*'''Least Cost Routing (least_cost_routing.rb):''' This script routes calls according to the cost values (which may depend on the time) of the routes. This is useful for cases when a route's popularity (cost) depends on the time of the day. This is done by adding different columns to the static routing tables (for example [:cost_0_6]) and filling them up with values for each route.&lt;br /&gt;
&lt;br /&gt;
Learn how to setup Standard Scripts in your gateway by following these steps: [[How to Setup Standard Scripts|How to Setup Standard Scripts]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other standard routing scripts implement Filters and are covered in the next section.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Filters&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Adds functionality to standard scripts. Filters can be added to any standard script in a few steps. For example, you may want to remove the '1' prefix for uniformed routing, select the SIP Request URI to route the call instead of the called number, and more. &lt;br /&gt;
&lt;br /&gt;
=== Types of filters ===&lt;br /&gt;
The following type of filters can be attached to a routing script, and they are applied in the following order&lt;br /&gt;
# before_filter  -&amp;gt; Analyze/modify the call attributes before other filters are applied&lt;br /&gt;
# route_match    -&amp;gt; Eliminates routes based on some matching criteria&lt;br /&gt;
# order_route    -&amp;gt; Change the order of matching routes&lt;br /&gt;
# after_filter   -&amp;gt; Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created&lt;br /&gt;
# route_remap    -&amp;gt; Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes&lt;br /&gt;
# after_remap    -&amp;gt; Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
==== Before filter (before_filter) ====&lt;br /&gt;
* Adds pre-processing on incoming parameters before other filters are applied&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attributes before other filters process the call&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  before_filter :method =&amp;gt; :my_custom_before_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :call]      Hash of call attributes of the incoming call to route.&lt;br /&gt;
    #                        Can be modified. Will affect subsequent filters, and routing output.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
&lt;br /&gt;
    return params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route match (route_match) ====&lt;br /&gt;
Eliminates routes based on some matching criteria.&lt;br /&gt;
&lt;br /&gt;
* Generally simply matching a call attribute with a route attribute.&lt;br /&gt;
* Any route with attribute not matching the corresponding call attribute is eliminated. &lt;br /&gt;
* A route with empty attribute is considered matching any call&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Match the call attribute :called with the route attribute with same name:&lt;br /&gt;
  route_match :call_field_name =&amp;gt; :called&lt;br /&gt;
* Match the call attribute :private_address with the route attribute :calling &lt;br /&gt;
  route_match :call_field_name =&amp;gt; :private_address , call_field_name =&amp;gt; :calling&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_match :method =&amp;gt; :my_custom_matching, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_matching( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  # Must return true if route matches, false otherwise&lt;br /&gt;
  def my_custom_matching( route, call, naps )&lt;br /&gt;
    # route contains the route to match.&lt;br /&gt;
    # call contains the incoming call attributes to match with the route.&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Order route (order_route) ====&lt;br /&gt;
Change the order of matching routes based on a given route attribute.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  order_route :route_field_name =&amp;gt; :priority&lt;br /&gt;
&lt;br /&gt;
==== After filter (after_filter) ====&lt;br /&gt;
* Filter that is applied after matching routes have been selected and ordered.&lt;br /&gt;
* Can modify the incoming call attributes before the outgoing calls are created.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_filter :method =&amp;gt; :my_custom_after_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_after_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route remap (route_remap) ====&lt;br /&gt;
Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes.&lt;br /&gt;
&lt;br /&gt;
==== After remap (after_remap) ====&lt;br /&gt;
* Last filters to be applied.&lt;br /&gt;
* Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes.&lt;br /&gt;
* Can modify the outgoing calls.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_remap_filter :method =&amp;gt; :my_custom_after_remap_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_remap_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_remap_filter( params )&lt;br /&gt;
    #  - params[ :out_calls] Array of all outgoing call to be created (corresponding to each matching route).&lt;br /&gt;
    #                        Can be modified to customize each outgoing call attempt.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
=== Filter Scripts examples:  ===&lt;br /&gt;
&lt;br /&gt;
*'''Request-URI routing (ruri.rb):''' Will route the call on SIP RURI instead of the to: field &lt;br /&gt;
*'''Modify the Nature of Address (noa_npi_remap.rb):''' We can use this to change the NOA to national or international &lt;br /&gt;
*'''Remove Loop (FilterRemoveLoop.rb): '''Will prevent calls from being routed back to the sender &lt;br /&gt;
*'''Load sharing on NAP groups or on route groups (nap_group_weight_retry_with_overload.rb):''' This is a powerful script that allows for a regrouping of NAPs of the same kind, distributes loads among them, and prioritizes one group versus another.&amp;amp;nbsp; Alternatively, you can do the same on routes. You need to add two columns to the NAPs (or the routes), one called &amp;quot;group&amp;quot; and one called &amp;quot;weight&amp;quot;. Groups of lower value will have a higher priority (group=0 has more priority than group=10). The calls will be distributed according to the weight value. To have an equal number of calls on each destination, use the same weight value (weight=10). See [[Adding Load Sharing to Routing Script|Adding Load Sharing to Routing Script]]&amp;lt;br&amp;gt; &lt;br /&gt;
*'''Black and White listing (black_white_listing.rb):''' With this script, any called or calling number prefix can be blacklisted or whitelisted. This script can be assigned globally, or per NAP. It reads a .csv file which has the called and calling number list. See [[Adding White or Black listing to Routing Script]]&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Learn how to add a Filter to normal scripts: [[How to Setup Filters|How to setup Filters]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Label routing&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts&lt;br /&gt;
Gateway -&amp;amp;gt; FileDb&lt;br /&gt;
Gateway -&amp;amp;gt; Routesets &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Label routing was created because in some cases, regular expressions cannot be used on the called number to define a route. &lt;br /&gt;
&lt;br /&gt;
Problem: Having thousands of destination numbers (N), and possibly one route per number per Network Provider (M), resulting in N*M routes&amp;lt;br&amp;gt;Solution: Create labels for each groups of numbers (L) and let the system determine the route, resulting in L*M routes, where L &amp;amp;lt; N &lt;br /&gt;
&lt;br /&gt;
A Label is a virtual group of destination numbers. This virtual group has a list of numbers assigned to it in a CSV file.&amp;lt;br&amp;gt;This process does the routing in 2 stages:&amp;lt;br&amp;gt;1st stage - Find a Label: Find longest prefix match entry for the called number. This leads to only one destination Label. This is the Digitmap file.&amp;lt;br&amp;gt;2nd stage - Find the NAPs serving a Label: All routes tied to this Label are eligible for routing the call. This is the routeset definition file. &lt;br /&gt;
&lt;br /&gt;
What are the advantages compared to static routing?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Can have thousands of numbers &lt;br /&gt;
*It uses a non linear search algorithms; therefore, there is no overhead to having a large amount of numbers. Label routing was tested with 5 million entries.&lt;br /&gt;
*Variables can be added to the routeset definition file to use other filter scripts and have even more flexibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Example usage:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*NPA-NXX routing &lt;br /&gt;
*Blacklisting &lt;br /&gt;
*Tandem switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
See here for complete details: [[Routeset Routing|Label routing]] and [[Adding_Label_Routing_to_any_Routing_Script|Adding Label Routing to any Routing Script]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Custom Routing Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Customers can create their own routing scripts using a Scriptable Routing Engine based on Ruby. These scripts can be imported and exported from the Web portal.&amp;lt;br&amp;gt;These scripts can run complex routing algorithms and post routing translation, as well as other advanced functions. It is also possible to modify standard Scripts, or filters, to satisfy more complex scenarios&amp;lt;br&amp;gt;The functions have control over many call parameters such as:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Calling &lt;br /&gt;
*Called &lt;br /&gt;
*Nature of Address &lt;br /&gt;
*Calling Presentation &lt;br /&gt;
*Calling Screening &lt;br /&gt;
*Redirecting Number &lt;br /&gt;
*Original Called Number, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The complete list is in the [[Routing script tutorial:Mini Development Guide|Routing Script Tutorial]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Custom routing script are kept on software upgrades. Versionning of routing scripts needs to be handled by the operator of the unit. The new scripts (with the same names, but a new version) can be manually replaced directly in the routing script page.&amp;lt;br&amp;gt;It is possible to test routing scripts directly from the web portal before activating them in a live system.&amp;lt;br&amp;gt;For complete details, refer to [[Scriptable Routing Engine|Scriptable Routing Engine]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Playing prompts&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request for prompts playback at various states of the call. See  [[Routing_script_tutorial:Mini_Development_Guide#Playing_prompts_announcements_or_tones|Playing prompts announcements or tones]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Recording calls&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request the recording of incoming and/or outgoing call legs to audio files. See  [[Routing_script_tutorial:Mini_Development_Guide#Recording_call_legs|Recording Calls]].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Route retry&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
The routing engine returns all matching routes to the system. The TMG-CONTROL then generates an outgoing call using the first route in the list. If the call fails, the TMG-CONTROL may or may not generate another call, according to the error code received. &lt;br /&gt;
&lt;br /&gt;
The route retry will proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Service unavailable &lt;br /&gt;
*Circuit not available &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
The route retry will not proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*User busy &lt;br /&gt;
*Unallocated number &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You can modify the route-retry sequence (continue or discontinue) to handle unsuccessful routes. For more information, refer to the NAP profile. For more details see the route retry page.&amp;lt;br&amp;gt;These parameters can be modified here:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Profiles -&amp;amp;gt; default [Edit] -&amp;amp;gt; Edit Reason Cause mapping &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Route retry is enabled by default. Timers and conditions on route retry can be adjusted from the configuration:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Configurations -&amp;amp;gt; Advanced &amp;lt;/pre&amp;gt; &lt;br /&gt;
NOTE: The route-retry feature is available for other types of routing as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For more details, see the [[Route retry|Route Retry]] page&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;br /&gt;
&lt;br /&gt;
== Related actions ==&lt;br /&gt;
'''Refer to the appropriate Toolpack release:'''&lt;br /&gt;
&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_D|Call Routes Settings v3.0]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_C|Call Routes Settings v2.10]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_B|Call Routes Settings v2.9]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_A|Call Routes Settings v2.8]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;other versions&amp;quot; data-expandtext=&amp;quot;Click here for other versions&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.7#Routes|Web Portal v2.7: Routes Configuration]]&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.6#Routes|Web Portal v2.6: Routes Configuration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Tmedia_Routing</id>
		<title>Tmedia Routing</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Tmedia_Routing"/>
				<updated>2019-03-28T18:32:05Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* After remap (after_remap) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Static routing table  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Gateway_Static_Routes.png|Static Routes]]&lt;br /&gt;
&lt;br /&gt;
=== Basic route matching ===&lt;br /&gt;
The static routing table uses parameters from the incoming call to locate a route and then make a routing decision. These parameters are called incoming call attributes. Three parameters are verified:&amp;lt;br&amp;gt; &lt;br /&gt;
A route will match an incoming call if all the route matching parameters are met.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Multiple routes may be a match for a call.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following criteria are available for basic route matching:&lt;br /&gt;
*Called number &lt;br /&gt;
*Calling number &lt;br /&gt;
*Incoming Network Access Point (NAP)&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number matching ====&lt;br /&gt;
Calling / called number matching works as follows:&lt;br /&gt;
*'''Field can be empty: '''this means any number will match &lt;br /&gt;
*'''Field can be a specific number: '''this means the exact number must match &lt;br /&gt;
*'''Field can be a regular expression match:'''&lt;br /&gt;
*'''Field can be a sip user and sip host:''' such as user@sip_host:sip_port&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Number Routing filter example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^1?450[0-9]{7}$/&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match an optional 1, followed by 450, then 7 digits&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; SIP user/host routing example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. 5551212@abc.com&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match exactly 5551212 for sip host abc.com only &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NAP matching ====&lt;br /&gt;
The Network Access Point can be SS7, ISDN, CAS or SIP.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic (per-route) call attributes remapping ===&lt;br /&gt;
Once the route(s) have been chosen, some call parameters can be modified using the parameters of the route: &lt;br /&gt;
==== Outgoing call parameters remapping ====&lt;br /&gt;
*'''Remapped Called Number:''' New called number used on the outgoing calls &lt;br /&gt;
*'''Remapped Calling Number: '''New calling number used on the outgoing calls &lt;br /&gt;
*'''Remapped NAP:''' determines on which Network Access Point (NAP)&amp;amp;nbsp;the outgoing calls are sent. &lt;br /&gt;
*'''Outgoing call remapped Profile: '''Select the profile to use with the outgoing call when this route is used, otherwise NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Source call leg parameters remapping ====&lt;br /&gt;
Some parameters of the source call leg can also be modified:&lt;br /&gt;
*'''Source call remapped Profile: '''Select the profile to use with the source call leg when this route is used, otherwise the NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number remapping options ====&lt;br /&gt;
Calling / called number remapping works as follows:&lt;br /&gt;
*'''Field can be empty:''' In this case, the called/calling numbers from the incoming call are used for the outgoing call. &lt;br /&gt;
*'''Field can be a specific number:''' This number will be used as called (or calling) number for the outgoing call.&lt;br /&gt;
*'''Field can be a regular expression:''' Allows building the outgoing call's calling/called number through matching/replacement of incoming calling/called number. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; For example, post routing translation (remap)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^450([0-9]*)$/\514\2&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This regular expression replaces 450 with 514&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For a complete example, refer to: [[Toolpack: How to Use RegEx in Remapped Called and Calling Number Mask|How To Use Regular Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Multiple routes matching ===&lt;br /&gt;
The remapping parameters above (both for incoming and outgoing calls) are independent for each route.&amp;lt;br&amp;gt;&lt;br /&gt;
This allows different routes to use different NAPs, and remap the calling/called numbers differently.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ordering the routes ====&lt;br /&gt;
When multiple routes match the incoming call, the default routing script (simple_routing) will order by priority and weight.&amp;lt;br&amp;gt;&lt;br /&gt;
* Note: older routing scripts did not have priority routing enabled by default, you may need to manually update your routing scripts to enable priority routing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each route has a &amp;quot;priority&amp;quot; attribute, and a &amp;quot;weight&amp;quot; attribute. All matching routes for a given call will be ordered by priority.&amp;lt;br&amp;gt;&lt;br /&gt;
Load-sharing (based on each route's &amp;quot;weight&amp;quot;) will be applied if multiple matching routes have the same priority.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's also possible to prioritize matching routes using others algorithms, by customizing routing scripts.&lt;br /&gt;
A few examples:&lt;br /&gt;
* Round robin&lt;br /&gt;
* Least cost&lt;br /&gt;
* Per period of the day&lt;br /&gt;
&lt;br /&gt;
==== Route retry ====&lt;br /&gt;
If multiple routes match for a call, call retry may be done on subsequent routes upon failure making outgoing call on a route. For more information about route retry, refer to the following page: [[Route_retry|Route Retry]].&lt;br /&gt;
&lt;br /&gt;
=== Routes limitation ===&lt;br /&gt;
&amp;lt;u&amp;gt;Up to 2000 routes&amp;lt;/u&amp;gt; can be entered in the static routing table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: When the number of routes becomes large, this may be a sign that more advanced routing should be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 For information about label route handling, refer to [[Tmedia_Routing#Label_routing|Label Routing]] or contact [[Support:Contacting_TelcoBridges_technical_support|TelcoBridges Support]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting / importing routes ===&lt;br /&gt;
You can import or export the static routing table using the web portal. Go to: &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Export Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Import Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; This is the default configuration of the Media Gateway&lt;br /&gt;
&lt;br /&gt;
== Standard Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Standard scripts are used to modify the behavior of the static routing.&amp;amp;nbsp; It allows for the prioritization of routes, load sharing amongst multiple endpoints, or the modification of some call parameters. It can be enabled on any system in just a few steps. The following is a list of Scripts supported today:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''Simple routing (simple_routing.rb):''' Script used for the static routing table, and supports priority and weight routing per route or NAP.&lt;br /&gt;
*'''Priority routing (priority_and_weight_load_balancer.rb):''' This script routes calls according to a priority setting of matching routes. Each route has its own priority setting (if not, taken from the outgoing call's NAP priority). The [:priority] field column needs to be added in the routes and NAPs page. A smaller [:priority] value has more priority. If more than 1 route matches, the route with the lowest NAP priority will be selected first. Routes with the same priority will be randomly ordered using the &amp;quot;weight&amp;quot; column so load is distributed among routes with same priority. &lt;br /&gt;
*'''ASR routing (asr_routing.rb):''' This script routes calls according to the ASR values of the destination naps. This kind of routing will try to improve overall system ASR by always using the best NAPs. It will also improve client perception by cleanly dropping calls that would almost certainly fail anyway. &lt;br /&gt;
*'''Nature of Address and Numbering plan indicator remapping (noa_npi_remap.rb): '''Enables the modification of the NOA and NPI values on outgoing calls. &lt;br /&gt;
*'''Least Cost Routing (least_cost_routing.rb):''' This script routes calls according to the cost values (which may depend on the time) of the routes. This is useful for cases when a route's popularity (cost) depends on the time of the day. This is done by adding different columns to the static routing tables (for example [:cost_0_6]) and filling them up with values for each route.&lt;br /&gt;
&lt;br /&gt;
Learn how to setup Standard Scripts in your gateway by following these steps: [[How to Setup Standard Scripts|How to Setup Standard Scripts]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other standard routing scripts implement Filters and are covered in the next section.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Filters&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Adds functionality to standard scripts. Filters can be added to any standard script in a few steps. For example, you may want to remove the '1' prefix for uniformed routing, select the SIP Request URI to route the call instead of the called number, and more. &lt;br /&gt;
&lt;br /&gt;
=== Types of filters ===&lt;br /&gt;
The following type of filters can be attached to a routing script, and they are applied in the following order&lt;br /&gt;
# before_filter  -&amp;gt; Analyze/modify the call attributes before other filters are applied&lt;br /&gt;
# route_match    -&amp;gt; Eliminates routes based on some matching criteria&lt;br /&gt;
# order_route    -&amp;gt; Change the order of matching routes&lt;br /&gt;
# after_filter   -&amp;gt; Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created&lt;br /&gt;
# route_remap    -&amp;gt; Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes&lt;br /&gt;
# after_remap    -&amp;gt; Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
==== Before filter (before_filter) ====&lt;br /&gt;
* Adds pre-processing on incoming parameters before other filters are applied&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attributes before other filters process the call&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  before_filter :method =&amp;gt; :my_custom_before_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :call]      Hash of call attributes of the incoming call to route.&lt;br /&gt;
    #                        Can be modified. Will affect subsequent filters, and routing output.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route match (route_match) ====&lt;br /&gt;
Eliminates routes based on some matching criteria.&lt;br /&gt;
&lt;br /&gt;
* Generally simply matching a call attribute with a route attribute.&lt;br /&gt;
* Any route with attribute not matching the corresponding call attribute is eliminated. &lt;br /&gt;
* A route with empty attribute is considered matching any call&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Match the call attribute :called with the route attribute with same name:&lt;br /&gt;
  route_match :call_field_name =&amp;gt; :called&lt;br /&gt;
* Match the call attribute :private_address with the route attribute :calling &lt;br /&gt;
  route_match :call_field_name =&amp;gt; :private_address , call_field_name =&amp;gt; :calling&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_match :method =&amp;gt; :my_custom_matching, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_matching( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  # Must return true if route matches, false otherwise&lt;br /&gt;
  def my_custom_matching( route, call, naps )&lt;br /&gt;
    # route contains the route to match.&lt;br /&gt;
    # call contains the incoming call attributes to match with the route.&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Order route (order_route) ====&lt;br /&gt;
Change the order of matching routes based on a given route attribute.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  order_route :route_field_name =&amp;gt; :priority&lt;br /&gt;
&lt;br /&gt;
==== After filter (after_filter) ====&lt;br /&gt;
* Filter that is applied after matching routes have been selected and ordered.&lt;br /&gt;
* Can modify the incoming call attributes before the outgoing calls are created.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_filter :method =&amp;gt; :my_custom_after_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_after_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route remap (route_remap) ====&lt;br /&gt;
Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes.&lt;br /&gt;
&lt;br /&gt;
==== After remap (after_remap) ====&lt;br /&gt;
* Last filters to be applied.&lt;br /&gt;
* Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes.&lt;br /&gt;
* Can modify the outgoing calls.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_remap_filter :method =&amp;gt; :my_custom_after_remap_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_remap_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_remap_filter( params )&lt;br /&gt;
    #  - params[ :out_calls] Array of all outgoing call to be created (corresponding to each matching route).&lt;br /&gt;
    #                        Can be modified to customize each outgoing call attempt.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
=== Filter Scripts examples:  ===&lt;br /&gt;
&lt;br /&gt;
*'''Request-URI routing (ruri.rb):''' Will route the call on SIP RURI instead of the to: field &lt;br /&gt;
*'''Modify the Nature of Address (noa_npi_remap.rb):''' We can use this to change the NOA to national or international &lt;br /&gt;
*'''Remove Loop (FilterRemoveLoop.rb): '''Will prevent calls from being routed back to the sender &lt;br /&gt;
*'''Load sharing on NAP groups or on route groups (nap_group_weight_retry_with_overload.rb):''' This is a powerful script that allows for a regrouping of NAPs of the same kind, distributes loads among them, and prioritizes one group versus another.&amp;amp;nbsp; Alternatively, you can do the same on routes. You need to add two columns to the NAPs (or the routes), one called &amp;quot;group&amp;quot; and one called &amp;quot;weight&amp;quot;. Groups of lower value will have a higher priority (group=0 has more priority than group=10). The calls will be distributed according to the weight value. To have an equal number of calls on each destination, use the same weight value (weight=10). See [[Adding Load Sharing to Routing Script|Adding Load Sharing to Routing Script]]&amp;lt;br&amp;gt; &lt;br /&gt;
*'''Black and White listing (black_white_listing.rb):''' With this script, any called or calling number prefix can be blacklisted or whitelisted. This script can be assigned globally, or per NAP. It reads a .csv file which has the called and calling number list. See [[Adding White or Black listing to Routing Script]]&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Learn how to add a Filter to normal scripts: [[How to Setup Filters|How to setup Filters]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Label routing&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts&lt;br /&gt;
Gateway -&amp;amp;gt; FileDb&lt;br /&gt;
Gateway -&amp;amp;gt; Routesets &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Label routing was created because in some cases, regular expressions cannot be used on the called number to define a route. &lt;br /&gt;
&lt;br /&gt;
Problem: Having thousands of destination numbers (N), and possibly one route per number per Network Provider (M), resulting in N*M routes&amp;lt;br&amp;gt;Solution: Create labels for each groups of numbers (L) and let the system determine the route, resulting in L*M routes, where L &amp;amp;lt; N &lt;br /&gt;
&lt;br /&gt;
A Label is a virtual group of destination numbers. This virtual group has a list of numbers assigned to it in a CSV file.&amp;lt;br&amp;gt;This process does the routing in 2 stages:&amp;lt;br&amp;gt;1st stage - Find a Label: Find longest prefix match entry for the called number. This leads to only one destination Label. This is the Digitmap file.&amp;lt;br&amp;gt;2nd stage - Find the NAPs serving a Label: All routes tied to this Label are eligible for routing the call. This is the routeset definition file. &lt;br /&gt;
&lt;br /&gt;
What are the advantages compared to static routing?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Can have thousands of numbers &lt;br /&gt;
*It uses a non linear search algorithms; therefore, there is no overhead to having a large amount of numbers. Label routing was tested with 5 million entries.&lt;br /&gt;
*Variables can be added to the routeset definition file to use other filter scripts and have even more flexibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Example usage:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*NPA-NXX routing &lt;br /&gt;
*Blacklisting &lt;br /&gt;
*Tandem switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
See here for complete details: [[Routeset Routing|Label routing]] and [[Adding_Label_Routing_to_any_Routing_Script|Adding Label Routing to any Routing Script]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Custom Routing Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Customers can create their own routing scripts using a Scriptable Routing Engine based on Ruby. These scripts can be imported and exported from the Web portal.&amp;lt;br&amp;gt;These scripts can run complex routing algorithms and post routing translation, as well as other advanced functions. It is also possible to modify standard Scripts, or filters, to satisfy more complex scenarios&amp;lt;br&amp;gt;The functions have control over many call parameters such as:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Calling &lt;br /&gt;
*Called &lt;br /&gt;
*Nature of Address &lt;br /&gt;
*Calling Presentation &lt;br /&gt;
*Calling Screening &lt;br /&gt;
*Redirecting Number &lt;br /&gt;
*Original Called Number, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The complete list is in the [[Routing script tutorial:Mini Development Guide|Routing Script Tutorial]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Custom routing script are kept on software upgrades. Versionning of routing scripts needs to be handled by the operator of the unit. The new scripts (with the same names, but a new version) can be manually replaced directly in the routing script page.&amp;lt;br&amp;gt;It is possible to test routing scripts directly from the web portal before activating them in a live system.&amp;lt;br&amp;gt;For complete details, refer to [[Scriptable Routing Engine|Scriptable Routing Engine]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Playing prompts&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request for prompts playback at various states of the call. See  [[Routing_script_tutorial:Mini_Development_Guide#Playing_prompts_announcements_or_tones|Playing prompts announcements or tones]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Recording calls&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request the recording of incoming and/or outgoing call legs to audio files. See  [[Routing_script_tutorial:Mini_Development_Guide#Recording_call_legs|Recording Calls]].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Route retry&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
The routing engine returns all matching routes to the system. The TMG-CONTROL then generates an outgoing call using the first route in the list. If the call fails, the TMG-CONTROL may or may not generate another call, according to the error code received. &lt;br /&gt;
&lt;br /&gt;
The route retry will proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Service unavailable &lt;br /&gt;
*Circuit not available &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
The route retry will not proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*User busy &lt;br /&gt;
*Unallocated number &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You can modify the route-retry sequence (continue or discontinue) to handle unsuccessful routes. For more information, refer to the NAP profile. For more details see the route retry page.&amp;lt;br&amp;gt;These parameters can be modified here:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Profiles -&amp;amp;gt; default [Edit] -&amp;amp;gt; Edit Reason Cause mapping &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Route retry is enabled by default. Timers and conditions on route retry can be adjusted from the configuration:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Configurations -&amp;amp;gt; Advanced &amp;lt;/pre&amp;gt; &lt;br /&gt;
NOTE: The route-retry feature is available for other types of routing as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For more details, see the [[Route retry|Route Retry]] page&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;br /&gt;
&lt;br /&gt;
== Related actions ==&lt;br /&gt;
'''Refer to the appropriate Toolpack release:'''&lt;br /&gt;
&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_D|Call Routes Settings v3.0]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_C|Call Routes Settings v2.10]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_B|Call Routes Settings v2.9]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_A|Call Routes Settings v2.8]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;other versions&amp;quot; data-expandtext=&amp;quot;Click here for other versions&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.7#Routes|Web Portal v2.7: Routes Configuration]]&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.6#Routes|Web Portal v2.6: Routes Configuration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Tmedia_Routing</id>
		<title>Tmedia Routing</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Tmedia_Routing"/>
				<updated>2019-03-28T18:31:09Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* Before filter (before_filter) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Static routing table  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Gateway_Static_Routes.png|Static Routes]]&lt;br /&gt;
&lt;br /&gt;
=== Basic route matching ===&lt;br /&gt;
The static routing table uses parameters from the incoming call to locate a route and then make a routing decision. These parameters are called incoming call attributes. Three parameters are verified:&amp;lt;br&amp;gt; &lt;br /&gt;
A route will match an incoming call if all the route matching parameters are met.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Multiple routes may be a match for a call.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following criteria are available for basic route matching:&lt;br /&gt;
*Called number &lt;br /&gt;
*Calling number &lt;br /&gt;
*Incoming Network Access Point (NAP)&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number matching ====&lt;br /&gt;
Calling / called number matching works as follows:&lt;br /&gt;
*'''Field can be empty: '''this means any number will match &lt;br /&gt;
*'''Field can be a specific number: '''this means the exact number must match &lt;br /&gt;
*'''Field can be a regular expression match:'''&lt;br /&gt;
*'''Field can be a sip user and sip host:''' such as user@sip_host:sip_port&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Number Routing filter example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^1?450[0-9]{7}$/&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match an optional 1, followed by 450, then 7 digits&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; SIP user/host routing example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. 5551212@abc.com&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match exactly 5551212 for sip host abc.com only &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NAP matching ====&lt;br /&gt;
The Network Access Point can be SS7, ISDN, CAS or SIP.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic (per-route) call attributes remapping ===&lt;br /&gt;
Once the route(s) have been chosen, some call parameters can be modified using the parameters of the route: &lt;br /&gt;
==== Outgoing call parameters remapping ====&lt;br /&gt;
*'''Remapped Called Number:''' New called number used on the outgoing calls &lt;br /&gt;
*'''Remapped Calling Number: '''New calling number used on the outgoing calls &lt;br /&gt;
*'''Remapped NAP:''' determines on which Network Access Point (NAP)&amp;amp;nbsp;the outgoing calls are sent. &lt;br /&gt;
*'''Outgoing call remapped Profile: '''Select the profile to use with the outgoing call when this route is used, otherwise NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Source call leg parameters remapping ====&lt;br /&gt;
Some parameters of the source call leg can also be modified:&lt;br /&gt;
*'''Source call remapped Profile: '''Select the profile to use with the source call leg when this route is used, otherwise the NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number remapping options ====&lt;br /&gt;
Calling / called number remapping works as follows:&lt;br /&gt;
*'''Field can be empty:''' In this case, the called/calling numbers from the incoming call are used for the outgoing call. &lt;br /&gt;
*'''Field can be a specific number:''' This number will be used as called (or calling) number for the outgoing call.&lt;br /&gt;
*'''Field can be a regular expression:''' Allows building the outgoing call's calling/called number through matching/replacement of incoming calling/called number. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; For example, post routing translation (remap)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^450([0-9]*)$/\514\2&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This regular expression replaces 450 with 514&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For a complete example, refer to: [[Toolpack: How to Use RegEx in Remapped Called and Calling Number Mask|How To Use Regular Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Multiple routes matching ===&lt;br /&gt;
The remapping parameters above (both for incoming and outgoing calls) are independent for each route.&amp;lt;br&amp;gt;&lt;br /&gt;
This allows different routes to use different NAPs, and remap the calling/called numbers differently.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ordering the routes ====&lt;br /&gt;
When multiple routes match the incoming call, the default routing script (simple_routing) will order by priority and weight.&amp;lt;br&amp;gt;&lt;br /&gt;
* Note: older routing scripts did not have priority routing enabled by default, you may need to manually update your routing scripts to enable priority routing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each route has a &amp;quot;priority&amp;quot; attribute, and a &amp;quot;weight&amp;quot; attribute. All matching routes for a given call will be ordered by priority.&amp;lt;br&amp;gt;&lt;br /&gt;
Load-sharing (based on each route's &amp;quot;weight&amp;quot;) will be applied if multiple matching routes have the same priority.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's also possible to prioritize matching routes using others algorithms, by customizing routing scripts.&lt;br /&gt;
A few examples:&lt;br /&gt;
* Round robin&lt;br /&gt;
* Least cost&lt;br /&gt;
* Per period of the day&lt;br /&gt;
&lt;br /&gt;
==== Route retry ====&lt;br /&gt;
If multiple routes match for a call, call retry may be done on subsequent routes upon failure making outgoing call on a route. For more information about route retry, refer to the following page: [[Route_retry|Route Retry]].&lt;br /&gt;
&lt;br /&gt;
=== Routes limitation ===&lt;br /&gt;
&amp;lt;u&amp;gt;Up to 2000 routes&amp;lt;/u&amp;gt; can be entered in the static routing table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: When the number of routes becomes large, this may be a sign that more advanced routing should be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 For information about label route handling, refer to [[Tmedia_Routing#Label_routing|Label Routing]] or contact [[Support:Contacting_TelcoBridges_technical_support|TelcoBridges Support]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting / importing routes ===&lt;br /&gt;
You can import or export the static routing table using the web portal. Go to: &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Export Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Import Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; This is the default configuration of the Media Gateway&lt;br /&gt;
&lt;br /&gt;
== Standard Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Standard scripts are used to modify the behavior of the static routing.&amp;amp;nbsp; It allows for the prioritization of routes, load sharing amongst multiple endpoints, or the modification of some call parameters. It can be enabled on any system in just a few steps. The following is a list of Scripts supported today:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''Simple routing (simple_routing.rb):''' Script used for the static routing table, and supports priority and weight routing per route or NAP.&lt;br /&gt;
*'''Priority routing (priority_and_weight_load_balancer.rb):''' This script routes calls according to a priority setting of matching routes. Each route has its own priority setting (if not, taken from the outgoing call's NAP priority). The [:priority] field column needs to be added in the routes and NAPs page. A smaller [:priority] value has more priority. If more than 1 route matches, the route with the lowest NAP priority will be selected first. Routes with the same priority will be randomly ordered using the &amp;quot;weight&amp;quot; column so load is distributed among routes with same priority. &lt;br /&gt;
*'''ASR routing (asr_routing.rb):''' This script routes calls according to the ASR values of the destination naps. This kind of routing will try to improve overall system ASR by always using the best NAPs. It will also improve client perception by cleanly dropping calls that would almost certainly fail anyway. &lt;br /&gt;
*'''Nature of Address and Numbering plan indicator remapping (noa_npi_remap.rb): '''Enables the modification of the NOA and NPI values on outgoing calls. &lt;br /&gt;
*'''Least Cost Routing (least_cost_routing.rb):''' This script routes calls according to the cost values (which may depend on the time) of the routes. This is useful for cases when a route's popularity (cost) depends on the time of the day. This is done by adding different columns to the static routing tables (for example [:cost_0_6]) and filling them up with values for each route.&lt;br /&gt;
&lt;br /&gt;
Learn how to setup Standard Scripts in your gateway by following these steps: [[How to Setup Standard Scripts|How to Setup Standard Scripts]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other standard routing scripts implement Filters and are covered in the next section.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Filters&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Adds functionality to standard scripts. Filters can be added to any standard script in a few steps. For example, you may want to remove the '1' prefix for uniformed routing, select the SIP Request URI to route the call instead of the called number, and more. &lt;br /&gt;
&lt;br /&gt;
=== Types of filters ===&lt;br /&gt;
The following type of filters can be attached to a routing script, and they are applied in the following order&lt;br /&gt;
# before_filter  -&amp;gt; Analyze/modify the call attributes before other filters are applied&lt;br /&gt;
# route_match    -&amp;gt; Eliminates routes based on some matching criteria&lt;br /&gt;
# order_route    -&amp;gt; Change the order of matching routes&lt;br /&gt;
# after_filter   -&amp;gt; Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created&lt;br /&gt;
# route_remap    -&amp;gt; Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes&lt;br /&gt;
# after_remap    -&amp;gt; Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
==== Before filter (before_filter) ====&lt;br /&gt;
* Adds pre-processing on incoming parameters before other filters are applied&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attributes before other filters process the call&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  before_filter :method =&amp;gt; :my_custom_before_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :call]      Hash of call attributes of the incoming call to route.&lt;br /&gt;
    #                        Can be modified. Will affect subsequent filters, and routing output.&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route match (route_match) ====&lt;br /&gt;
Eliminates routes based on some matching criteria.&lt;br /&gt;
&lt;br /&gt;
* Generally simply matching a call attribute with a route attribute.&lt;br /&gt;
* Any route with attribute not matching the corresponding call attribute is eliminated. &lt;br /&gt;
* A route with empty attribute is considered matching any call&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Match the call attribute :called with the route attribute with same name:&lt;br /&gt;
  route_match :call_field_name =&amp;gt; :called&lt;br /&gt;
* Match the call attribute :private_address with the route attribute :calling &lt;br /&gt;
  route_match :call_field_name =&amp;gt; :private_address , call_field_name =&amp;gt; :calling&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_match :method =&amp;gt; :my_custom_matching, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_matching( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  # Must return true if route matches, false otherwise&lt;br /&gt;
  def my_custom_matching( route, call, naps )&lt;br /&gt;
    # route contains the route to match.&lt;br /&gt;
    # call contains the incoming call attributes to match with the route.&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Order route (order_route) ====&lt;br /&gt;
Change the order of matching routes based on a given route attribute.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  order_route :route_field_name =&amp;gt; :priority&lt;br /&gt;
&lt;br /&gt;
==== After filter (after_filter) ====&lt;br /&gt;
* Filter that is applied after matching routes have been selected and ordered.&lt;br /&gt;
* Can modify the incoming call attributes before the outgoing calls are created.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_filter :method =&amp;gt; :my_custom_after_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_after_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route remap (route_remap) ====&lt;br /&gt;
Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes.&lt;br /&gt;
&lt;br /&gt;
==== After remap (after_remap) ====&lt;br /&gt;
Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
=== Filter Scripts examples:  ===&lt;br /&gt;
&lt;br /&gt;
*'''Request-URI routing (ruri.rb):''' Will route the call on SIP RURI instead of the to: field &lt;br /&gt;
*'''Modify the Nature of Address (noa_npi_remap.rb):''' We can use this to change the NOA to national or international &lt;br /&gt;
*'''Remove Loop (FilterRemoveLoop.rb): '''Will prevent calls from being routed back to the sender &lt;br /&gt;
*'''Load sharing on NAP groups or on route groups (nap_group_weight_retry_with_overload.rb):''' This is a powerful script that allows for a regrouping of NAPs of the same kind, distributes loads among them, and prioritizes one group versus another.&amp;amp;nbsp; Alternatively, you can do the same on routes. You need to add two columns to the NAPs (or the routes), one called &amp;quot;group&amp;quot; and one called &amp;quot;weight&amp;quot;. Groups of lower value will have a higher priority (group=0 has more priority than group=10). The calls will be distributed according to the weight value. To have an equal number of calls on each destination, use the same weight value (weight=10). See [[Adding Load Sharing to Routing Script|Adding Load Sharing to Routing Script]]&amp;lt;br&amp;gt; &lt;br /&gt;
*'''Black and White listing (black_white_listing.rb):''' With this script, any called or calling number prefix can be blacklisted or whitelisted. This script can be assigned globally, or per NAP. It reads a .csv file which has the called and calling number list. See [[Adding White or Black listing to Routing Script]]&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Learn how to add a Filter to normal scripts: [[How to Setup Filters|How to setup Filters]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Label routing&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts&lt;br /&gt;
Gateway -&amp;amp;gt; FileDb&lt;br /&gt;
Gateway -&amp;amp;gt; Routesets &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Label routing was created because in some cases, regular expressions cannot be used on the called number to define a route. &lt;br /&gt;
&lt;br /&gt;
Problem: Having thousands of destination numbers (N), and possibly one route per number per Network Provider (M), resulting in N*M routes&amp;lt;br&amp;gt;Solution: Create labels for each groups of numbers (L) and let the system determine the route, resulting in L*M routes, where L &amp;amp;lt; N &lt;br /&gt;
&lt;br /&gt;
A Label is a virtual group of destination numbers. This virtual group has a list of numbers assigned to it in a CSV file.&amp;lt;br&amp;gt;This process does the routing in 2 stages:&amp;lt;br&amp;gt;1st stage - Find a Label: Find longest prefix match entry for the called number. This leads to only one destination Label. This is the Digitmap file.&amp;lt;br&amp;gt;2nd stage - Find the NAPs serving a Label: All routes tied to this Label are eligible for routing the call. This is the routeset definition file. &lt;br /&gt;
&lt;br /&gt;
What are the advantages compared to static routing?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Can have thousands of numbers &lt;br /&gt;
*It uses a non linear search algorithms; therefore, there is no overhead to having a large amount of numbers. Label routing was tested with 5 million entries.&lt;br /&gt;
*Variables can be added to the routeset definition file to use other filter scripts and have even more flexibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Example usage:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*NPA-NXX routing &lt;br /&gt;
*Blacklisting &lt;br /&gt;
*Tandem switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
See here for complete details: [[Routeset Routing|Label routing]] and [[Adding_Label_Routing_to_any_Routing_Script|Adding Label Routing to any Routing Script]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Custom Routing Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Customers can create their own routing scripts using a Scriptable Routing Engine based on Ruby. These scripts can be imported and exported from the Web portal.&amp;lt;br&amp;gt;These scripts can run complex routing algorithms and post routing translation, as well as other advanced functions. It is also possible to modify standard Scripts, or filters, to satisfy more complex scenarios&amp;lt;br&amp;gt;The functions have control over many call parameters such as:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Calling &lt;br /&gt;
*Called &lt;br /&gt;
*Nature of Address &lt;br /&gt;
*Calling Presentation &lt;br /&gt;
*Calling Screening &lt;br /&gt;
*Redirecting Number &lt;br /&gt;
*Original Called Number, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The complete list is in the [[Routing script tutorial:Mini Development Guide|Routing Script Tutorial]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Custom routing script are kept on software upgrades. Versionning of routing scripts needs to be handled by the operator of the unit. The new scripts (with the same names, but a new version) can be manually replaced directly in the routing script page.&amp;lt;br&amp;gt;It is possible to test routing scripts directly from the web portal before activating them in a live system.&amp;lt;br&amp;gt;For complete details, refer to [[Scriptable Routing Engine|Scriptable Routing Engine]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Playing prompts&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request for prompts playback at various states of the call. See  [[Routing_script_tutorial:Mini_Development_Guide#Playing_prompts_announcements_or_tones|Playing prompts announcements or tones]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Recording calls&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request the recording of incoming and/or outgoing call legs to audio files. See  [[Routing_script_tutorial:Mini_Development_Guide#Recording_call_legs|Recording Calls]].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Route retry&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
The routing engine returns all matching routes to the system. The TMG-CONTROL then generates an outgoing call using the first route in the list. If the call fails, the TMG-CONTROL may or may not generate another call, according to the error code received. &lt;br /&gt;
&lt;br /&gt;
The route retry will proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Service unavailable &lt;br /&gt;
*Circuit not available &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
The route retry will not proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*User busy &lt;br /&gt;
*Unallocated number &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You can modify the route-retry sequence (continue or discontinue) to handle unsuccessful routes. For more information, refer to the NAP profile. For more details see the route retry page.&amp;lt;br&amp;gt;These parameters can be modified here:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Profiles -&amp;amp;gt; default [Edit] -&amp;amp;gt; Edit Reason Cause mapping &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Route retry is enabled by default. Timers and conditions on route retry can be adjusted from the configuration:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Configurations -&amp;amp;gt; Advanced &amp;lt;/pre&amp;gt; &lt;br /&gt;
NOTE: The route-retry feature is available for other types of routing as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For more details, see the [[Route retry|Route Retry]] page&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;br /&gt;
&lt;br /&gt;
== Related actions ==&lt;br /&gt;
'''Refer to the appropriate Toolpack release:'''&lt;br /&gt;
&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_D|Call Routes Settings v3.0]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_C|Call Routes Settings v2.10]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_B|Call Routes Settings v2.9]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_A|Call Routes Settings v2.8]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;other versions&amp;quot; data-expandtext=&amp;quot;Click here for other versions&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.7#Routes|Web Portal v2.7: Routes Configuration]]&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.6#Routes|Web Portal v2.6: Routes Configuration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Tmedia_Routing</id>
		<title>Tmedia Routing</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Tmedia_Routing"/>
				<updated>2019-03-28T18:28:24Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* After filter (after_filter) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Static routing table  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Gateway_Static_Routes.png|Static Routes]]&lt;br /&gt;
&lt;br /&gt;
=== Basic route matching ===&lt;br /&gt;
The static routing table uses parameters from the incoming call to locate a route and then make a routing decision. These parameters are called incoming call attributes. Three parameters are verified:&amp;lt;br&amp;gt; &lt;br /&gt;
A route will match an incoming call if all the route matching parameters are met.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Multiple routes may be a match for a call.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following criteria are available for basic route matching:&lt;br /&gt;
*Called number &lt;br /&gt;
*Calling number &lt;br /&gt;
*Incoming Network Access Point (NAP)&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number matching ====&lt;br /&gt;
Calling / called number matching works as follows:&lt;br /&gt;
*'''Field can be empty: '''this means any number will match &lt;br /&gt;
*'''Field can be a specific number: '''this means the exact number must match &lt;br /&gt;
*'''Field can be a regular expression match:'''&lt;br /&gt;
*'''Field can be a sip user and sip host:''' such as user@sip_host:sip_port&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Number Routing filter example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^1?450[0-9]{7}$/&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match an optional 1, followed by 450, then 7 digits&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; SIP user/host routing example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. 5551212@abc.com&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match exactly 5551212 for sip host abc.com only &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NAP matching ====&lt;br /&gt;
The Network Access Point can be SS7, ISDN, CAS or SIP.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic (per-route) call attributes remapping ===&lt;br /&gt;
Once the route(s) have been chosen, some call parameters can be modified using the parameters of the route: &lt;br /&gt;
==== Outgoing call parameters remapping ====&lt;br /&gt;
*'''Remapped Called Number:''' New called number used on the outgoing calls &lt;br /&gt;
*'''Remapped Calling Number: '''New calling number used on the outgoing calls &lt;br /&gt;
*'''Remapped NAP:''' determines on which Network Access Point (NAP)&amp;amp;nbsp;the outgoing calls are sent. &lt;br /&gt;
*'''Outgoing call remapped Profile: '''Select the profile to use with the outgoing call when this route is used, otherwise NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Source call leg parameters remapping ====&lt;br /&gt;
Some parameters of the source call leg can also be modified:&lt;br /&gt;
*'''Source call remapped Profile: '''Select the profile to use with the source call leg when this route is used, otherwise the NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number remapping options ====&lt;br /&gt;
Calling / called number remapping works as follows:&lt;br /&gt;
*'''Field can be empty:''' In this case, the called/calling numbers from the incoming call are used for the outgoing call. &lt;br /&gt;
*'''Field can be a specific number:''' This number will be used as called (or calling) number for the outgoing call.&lt;br /&gt;
*'''Field can be a regular expression:''' Allows building the outgoing call's calling/called number through matching/replacement of incoming calling/called number. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; For example, post routing translation (remap)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^450([0-9]*)$/\514\2&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This regular expression replaces 450 with 514&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For a complete example, refer to: [[Toolpack: How to Use RegEx in Remapped Called and Calling Number Mask|How To Use Regular Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Multiple routes matching ===&lt;br /&gt;
The remapping parameters above (both for incoming and outgoing calls) are independent for each route.&amp;lt;br&amp;gt;&lt;br /&gt;
This allows different routes to use different NAPs, and remap the calling/called numbers differently.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ordering the routes ====&lt;br /&gt;
When multiple routes match the incoming call, the default routing script (simple_routing) will order by priority and weight.&amp;lt;br&amp;gt;&lt;br /&gt;
* Note: older routing scripts did not have priority routing enabled by default, you may need to manually update your routing scripts to enable priority routing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each route has a &amp;quot;priority&amp;quot; attribute, and a &amp;quot;weight&amp;quot; attribute. All matching routes for a given call will be ordered by priority.&amp;lt;br&amp;gt;&lt;br /&gt;
Load-sharing (based on each route's &amp;quot;weight&amp;quot;) will be applied if multiple matching routes have the same priority.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's also possible to prioritize matching routes using others algorithms, by customizing routing scripts.&lt;br /&gt;
A few examples:&lt;br /&gt;
* Round robin&lt;br /&gt;
* Least cost&lt;br /&gt;
* Per period of the day&lt;br /&gt;
&lt;br /&gt;
==== Route retry ====&lt;br /&gt;
If multiple routes match for a call, call retry may be done on subsequent routes upon failure making outgoing call on a route. For more information about route retry, refer to the following page: [[Route_retry|Route Retry]].&lt;br /&gt;
&lt;br /&gt;
=== Routes limitation ===&lt;br /&gt;
&amp;lt;u&amp;gt;Up to 2000 routes&amp;lt;/u&amp;gt; can be entered in the static routing table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: When the number of routes becomes large, this may be a sign that more advanced routing should be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 For information about label route handling, refer to [[Tmedia_Routing#Label_routing|Label Routing]] or contact [[Support:Contacting_TelcoBridges_technical_support|TelcoBridges Support]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting / importing routes ===&lt;br /&gt;
You can import or export the static routing table using the web portal. Go to: &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Export Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Import Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; This is the default configuration of the Media Gateway&lt;br /&gt;
&lt;br /&gt;
== Standard Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Standard scripts are used to modify the behavior of the static routing.&amp;amp;nbsp; It allows for the prioritization of routes, load sharing amongst multiple endpoints, or the modification of some call parameters. It can be enabled on any system in just a few steps. The following is a list of Scripts supported today:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''Simple routing (simple_routing.rb):''' Script used for the static routing table, and supports priority and weight routing per route or NAP.&lt;br /&gt;
*'''Priority routing (priority_and_weight_load_balancer.rb):''' This script routes calls according to a priority setting of matching routes. Each route has its own priority setting (if not, taken from the outgoing call's NAP priority). The [:priority] field column needs to be added in the routes and NAPs page. A smaller [:priority] value has more priority. If more than 1 route matches, the route with the lowest NAP priority will be selected first. Routes with the same priority will be randomly ordered using the &amp;quot;weight&amp;quot; column so load is distributed among routes with same priority. &lt;br /&gt;
*'''ASR routing (asr_routing.rb):''' This script routes calls according to the ASR values of the destination naps. This kind of routing will try to improve overall system ASR by always using the best NAPs. It will also improve client perception by cleanly dropping calls that would almost certainly fail anyway. &lt;br /&gt;
*'''Nature of Address and Numbering plan indicator remapping (noa_npi_remap.rb): '''Enables the modification of the NOA and NPI values on outgoing calls. &lt;br /&gt;
*'''Least Cost Routing (least_cost_routing.rb):''' This script routes calls according to the cost values (which may depend on the time) of the routes. This is useful for cases when a route's popularity (cost) depends on the time of the day. This is done by adding different columns to the static routing tables (for example [:cost_0_6]) and filling them up with values for each route.&lt;br /&gt;
&lt;br /&gt;
Learn how to setup Standard Scripts in your gateway by following these steps: [[How to Setup Standard Scripts|How to Setup Standard Scripts]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other standard routing scripts implement Filters and are covered in the next section.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Filters&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Adds functionality to standard scripts. Filters can be added to any standard script in a few steps. For example, you may want to remove the '1' prefix for uniformed routing, select the SIP Request URI to route the call instead of the called number, and more. &lt;br /&gt;
&lt;br /&gt;
=== Types of filters ===&lt;br /&gt;
The following type of filters can be attached to a routing script, and they are applied in the following order&lt;br /&gt;
# before_filter  -&amp;gt; Analyze/modify the call attributes before other filters are applied&lt;br /&gt;
# route_match    -&amp;gt; Eliminates routes based on some matching criteria&lt;br /&gt;
# order_route    -&amp;gt; Change the order of matching routes&lt;br /&gt;
# after_filter   -&amp;gt; Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created&lt;br /&gt;
# route_remap    -&amp;gt; Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes&lt;br /&gt;
# after_remap    -&amp;gt; Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
==== Before filter (before_filter) ====&lt;br /&gt;
* Adds pre-processing on incoming parameters before other filters are applied&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attributes before other filters process the call&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  before_filter :method =&amp;gt; :my_custom_before_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :call]      All attributes of the incoming call to route.&lt;br /&gt;
    #                        Can be modified. Will affect subsequent filters, and routing output.&lt;br /&gt;
    #  - params[ :routes ]   All routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     All NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route match (route_match) ====&lt;br /&gt;
Eliminates routes based on some matching criteria.&lt;br /&gt;
&lt;br /&gt;
* Generally simply matching a call attribute with a route attribute.&lt;br /&gt;
* Any route with attribute not matching the corresponding call attribute is eliminated. &lt;br /&gt;
* A route with empty attribute is considered matching any call&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Match the call attribute :called with the route attribute with same name:&lt;br /&gt;
  route_match :call_field_name =&amp;gt; :called&lt;br /&gt;
* Match the call attribute :private_address with the route attribute :calling &lt;br /&gt;
  route_match :call_field_name =&amp;gt; :private_address , call_field_name =&amp;gt; :calling&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_match :method =&amp;gt; :my_custom_matching, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_matching( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  # Must return true if route matches, false otherwise&lt;br /&gt;
  def my_custom_matching( route, call, naps )&lt;br /&gt;
    # route contains the route to match.&lt;br /&gt;
    # call contains the incoming call attributes to match with the route.&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Order route (order_route) ====&lt;br /&gt;
Change the order of matching routes based on a given route attribute.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  order_route :route_field_name =&amp;gt; :priority&lt;br /&gt;
&lt;br /&gt;
==== After filter (after_filter) ====&lt;br /&gt;
* Filter that is applied after matching routes have been selected and ordered.&lt;br /&gt;
* Can modify the incoming call attributes before the outgoing calls are created.&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attribute&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  after_filter :method =&amp;gt; :my_custom_after_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_before_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_after_filter( params )&lt;br /&gt;
    # See init_my_custom_after_filter above for details about params&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route remap (route_remap) ====&lt;br /&gt;
Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes.&lt;br /&gt;
&lt;br /&gt;
==== After remap (after_remap) ====&lt;br /&gt;
Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
=== Filter Scripts examples:  ===&lt;br /&gt;
&lt;br /&gt;
*'''Request-URI routing (ruri.rb):''' Will route the call on SIP RURI instead of the to: field &lt;br /&gt;
*'''Modify the Nature of Address (noa_npi_remap.rb):''' We can use this to change the NOA to national or international &lt;br /&gt;
*'''Remove Loop (FilterRemoveLoop.rb): '''Will prevent calls from being routed back to the sender &lt;br /&gt;
*'''Load sharing on NAP groups or on route groups (nap_group_weight_retry_with_overload.rb):''' This is a powerful script that allows for a regrouping of NAPs of the same kind, distributes loads among them, and prioritizes one group versus another.&amp;amp;nbsp; Alternatively, you can do the same on routes. You need to add two columns to the NAPs (or the routes), one called &amp;quot;group&amp;quot; and one called &amp;quot;weight&amp;quot;. Groups of lower value will have a higher priority (group=0 has more priority than group=10). The calls will be distributed according to the weight value. To have an equal number of calls on each destination, use the same weight value (weight=10). See [[Adding Load Sharing to Routing Script|Adding Load Sharing to Routing Script]]&amp;lt;br&amp;gt; &lt;br /&gt;
*'''Black and White listing (black_white_listing.rb):''' With this script, any called or calling number prefix can be blacklisted or whitelisted. This script can be assigned globally, or per NAP. It reads a .csv file which has the called and calling number list. See [[Adding White or Black listing to Routing Script]]&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Learn how to add a Filter to normal scripts: [[How to Setup Filters|How to setup Filters]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Label routing&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts&lt;br /&gt;
Gateway -&amp;amp;gt; FileDb&lt;br /&gt;
Gateway -&amp;amp;gt; Routesets &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Label routing was created because in some cases, regular expressions cannot be used on the called number to define a route. &lt;br /&gt;
&lt;br /&gt;
Problem: Having thousands of destination numbers (N), and possibly one route per number per Network Provider (M), resulting in N*M routes&amp;lt;br&amp;gt;Solution: Create labels for each groups of numbers (L) and let the system determine the route, resulting in L*M routes, where L &amp;amp;lt; N &lt;br /&gt;
&lt;br /&gt;
A Label is a virtual group of destination numbers. This virtual group has a list of numbers assigned to it in a CSV file.&amp;lt;br&amp;gt;This process does the routing in 2 stages:&amp;lt;br&amp;gt;1st stage - Find a Label: Find longest prefix match entry for the called number. This leads to only one destination Label. This is the Digitmap file.&amp;lt;br&amp;gt;2nd stage - Find the NAPs serving a Label: All routes tied to this Label are eligible for routing the call. This is the routeset definition file. &lt;br /&gt;
&lt;br /&gt;
What are the advantages compared to static routing?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Can have thousands of numbers &lt;br /&gt;
*It uses a non linear search algorithms; therefore, there is no overhead to having a large amount of numbers. Label routing was tested with 5 million entries.&lt;br /&gt;
*Variables can be added to the routeset definition file to use other filter scripts and have even more flexibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Example usage:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*NPA-NXX routing &lt;br /&gt;
*Blacklisting &lt;br /&gt;
*Tandem switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
See here for complete details: [[Routeset Routing|Label routing]] and [[Adding_Label_Routing_to_any_Routing_Script|Adding Label Routing to any Routing Script]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Custom Routing Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Customers can create their own routing scripts using a Scriptable Routing Engine based on Ruby. These scripts can be imported and exported from the Web portal.&amp;lt;br&amp;gt;These scripts can run complex routing algorithms and post routing translation, as well as other advanced functions. It is also possible to modify standard Scripts, or filters, to satisfy more complex scenarios&amp;lt;br&amp;gt;The functions have control over many call parameters such as:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Calling &lt;br /&gt;
*Called &lt;br /&gt;
*Nature of Address &lt;br /&gt;
*Calling Presentation &lt;br /&gt;
*Calling Screening &lt;br /&gt;
*Redirecting Number &lt;br /&gt;
*Original Called Number, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The complete list is in the [[Routing script tutorial:Mini Development Guide|Routing Script Tutorial]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Custom routing script are kept on software upgrades. Versionning of routing scripts needs to be handled by the operator of the unit. The new scripts (with the same names, but a new version) can be manually replaced directly in the routing script page.&amp;lt;br&amp;gt;It is possible to test routing scripts directly from the web portal before activating them in a live system.&amp;lt;br&amp;gt;For complete details, refer to [[Scriptable Routing Engine|Scriptable Routing Engine]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Playing prompts&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request for prompts playback at various states of the call. See  [[Routing_script_tutorial:Mini_Development_Guide#Playing_prompts_announcements_or_tones|Playing prompts announcements or tones]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Recording calls&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request the recording of incoming and/or outgoing call legs to audio files. See  [[Routing_script_tutorial:Mini_Development_Guide#Recording_call_legs|Recording Calls]].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Route retry&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
The routing engine returns all matching routes to the system. The TMG-CONTROL then generates an outgoing call using the first route in the list. If the call fails, the TMG-CONTROL may or may not generate another call, according to the error code received. &lt;br /&gt;
&lt;br /&gt;
The route retry will proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Service unavailable &lt;br /&gt;
*Circuit not available &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
The route retry will not proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*User busy &lt;br /&gt;
*Unallocated number &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You can modify the route-retry sequence (continue or discontinue) to handle unsuccessful routes. For more information, refer to the NAP profile. For more details see the route retry page.&amp;lt;br&amp;gt;These parameters can be modified here:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Profiles -&amp;amp;gt; default [Edit] -&amp;amp;gt; Edit Reason Cause mapping &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Route retry is enabled by default. Timers and conditions on route retry can be adjusted from the configuration:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Configurations -&amp;amp;gt; Advanced &amp;lt;/pre&amp;gt; &lt;br /&gt;
NOTE: The route-retry feature is available for other types of routing as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For more details, see the [[Route retry|Route Retry]] page&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;br /&gt;
&lt;br /&gt;
== Related actions ==&lt;br /&gt;
'''Refer to the appropriate Toolpack release:'''&lt;br /&gt;
&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_D|Call Routes Settings v3.0]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_C|Call Routes Settings v2.10]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_B|Call Routes Settings v2.9]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_A|Call Routes Settings v2.8]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;other versions&amp;quot; data-expandtext=&amp;quot;Click here for other versions&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.7#Routes|Web Portal v2.7: Routes Configuration]]&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.6#Routes|Web Portal v2.6: Routes Configuration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Tmedia_Routing</id>
		<title>Tmedia Routing</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Tmedia_Routing"/>
				<updated>2019-03-28T18:18:27Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* Order route (order_route) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Static routing table  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Gateway_Static_Routes.png|Static Routes]]&lt;br /&gt;
&lt;br /&gt;
=== Basic route matching ===&lt;br /&gt;
The static routing table uses parameters from the incoming call to locate a route and then make a routing decision. These parameters are called incoming call attributes. Three parameters are verified:&amp;lt;br&amp;gt; &lt;br /&gt;
A route will match an incoming call if all the route matching parameters are met.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Multiple routes may be a match for a call.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following criteria are available for basic route matching:&lt;br /&gt;
*Called number &lt;br /&gt;
*Calling number &lt;br /&gt;
*Incoming Network Access Point (NAP)&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number matching ====&lt;br /&gt;
Calling / called number matching works as follows:&lt;br /&gt;
*'''Field can be empty: '''this means any number will match &lt;br /&gt;
*'''Field can be a specific number: '''this means the exact number must match &lt;br /&gt;
*'''Field can be a regular expression match:'''&lt;br /&gt;
*'''Field can be a sip user and sip host:''' such as user@sip_host:sip_port&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Number Routing filter example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^1?450[0-9]{7}$/&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match an optional 1, followed by 450, then 7 digits&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; SIP user/host routing example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. 5551212@abc.com&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match exactly 5551212 for sip host abc.com only &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NAP matching ====&lt;br /&gt;
The Network Access Point can be SS7, ISDN, CAS or SIP.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic (per-route) call attributes remapping ===&lt;br /&gt;
Once the route(s) have been chosen, some call parameters can be modified using the parameters of the route: &lt;br /&gt;
==== Outgoing call parameters remapping ====&lt;br /&gt;
*'''Remapped Called Number:''' New called number used on the outgoing calls &lt;br /&gt;
*'''Remapped Calling Number: '''New calling number used on the outgoing calls &lt;br /&gt;
*'''Remapped NAP:''' determines on which Network Access Point (NAP)&amp;amp;nbsp;the outgoing calls are sent. &lt;br /&gt;
*'''Outgoing call remapped Profile: '''Select the profile to use with the outgoing call when this route is used, otherwise NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Source call leg parameters remapping ====&lt;br /&gt;
Some parameters of the source call leg can also be modified:&lt;br /&gt;
*'''Source call remapped Profile: '''Select the profile to use with the source call leg when this route is used, otherwise the NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number remapping options ====&lt;br /&gt;
Calling / called number remapping works as follows:&lt;br /&gt;
*'''Field can be empty:''' In this case, the called/calling numbers from the incoming call are used for the outgoing call. &lt;br /&gt;
*'''Field can be a specific number:''' This number will be used as called (or calling) number for the outgoing call.&lt;br /&gt;
*'''Field can be a regular expression:''' Allows building the outgoing call's calling/called number through matching/replacement of incoming calling/called number. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; For example, post routing translation (remap)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^450([0-9]*)$/\514\2&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This regular expression replaces 450 with 514&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For a complete example, refer to: [[Toolpack: How to Use RegEx in Remapped Called and Calling Number Mask|How To Use Regular Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Multiple routes matching ===&lt;br /&gt;
The remapping parameters above (both for incoming and outgoing calls) are independent for each route.&amp;lt;br&amp;gt;&lt;br /&gt;
This allows different routes to use different NAPs, and remap the calling/called numbers differently.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ordering the routes ====&lt;br /&gt;
When multiple routes match the incoming call, the default routing script (simple_routing) will order by priority and weight.&amp;lt;br&amp;gt;&lt;br /&gt;
* Note: older routing scripts did not have priority routing enabled by default, you may need to manually update your routing scripts to enable priority routing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each route has a &amp;quot;priority&amp;quot; attribute, and a &amp;quot;weight&amp;quot; attribute. All matching routes for a given call will be ordered by priority.&amp;lt;br&amp;gt;&lt;br /&gt;
Load-sharing (based on each route's &amp;quot;weight&amp;quot;) will be applied if multiple matching routes have the same priority.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's also possible to prioritize matching routes using others algorithms, by customizing routing scripts.&lt;br /&gt;
A few examples:&lt;br /&gt;
* Round robin&lt;br /&gt;
* Least cost&lt;br /&gt;
* Per period of the day&lt;br /&gt;
&lt;br /&gt;
==== Route retry ====&lt;br /&gt;
If multiple routes match for a call, call retry may be done on subsequent routes upon failure making outgoing call on a route. For more information about route retry, refer to the following page: [[Route_retry|Route Retry]].&lt;br /&gt;
&lt;br /&gt;
=== Routes limitation ===&lt;br /&gt;
&amp;lt;u&amp;gt;Up to 2000 routes&amp;lt;/u&amp;gt; can be entered in the static routing table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: When the number of routes becomes large, this may be a sign that more advanced routing should be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 For information about label route handling, refer to [[Tmedia_Routing#Label_routing|Label Routing]] or contact [[Support:Contacting_TelcoBridges_technical_support|TelcoBridges Support]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting / importing routes ===&lt;br /&gt;
You can import or export the static routing table using the web portal. Go to: &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Export Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Import Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; This is the default configuration of the Media Gateway&lt;br /&gt;
&lt;br /&gt;
== Standard Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Standard scripts are used to modify the behavior of the static routing.&amp;amp;nbsp; It allows for the prioritization of routes, load sharing amongst multiple endpoints, or the modification of some call parameters. It can be enabled on any system in just a few steps. The following is a list of Scripts supported today:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''Simple routing (simple_routing.rb):''' Script used for the static routing table, and supports priority and weight routing per route or NAP.&lt;br /&gt;
*'''Priority routing (priority_and_weight_load_balancer.rb):''' This script routes calls according to a priority setting of matching routes. Each route has its own priority setting (if not, taken from the outgoing call's NAP priority). The [:priority] field column needs to be added in the routes and NAPs page. A smaller [:priority] value has more priority. If more than 1 route matches, the route with the lowest NAP priority will be selected first. Routes with the same priority will be randomly ordered using the &amp;quot;weight&amp;quot; column so load is distributed among routes with same priority. &lt;br /&gt;
*'''ASR routing (asr_routing.rb):''' This script routes calls according to the ASR values of the destination naps. This kind of routing will try to improve overall system ASR by always using the best NAPs. It will also improve client perception by cleanly dropping calls that would almost certainly fail anyway. &lt;br /&gt;
*'''Nature of Address and Numbering plan indicator remapping (noa_npi_remap.rb): '''Enables the modification of the NOA and NPI values on outgoing calls. &lt;br /&gt;
*'''Least Cost Routing (least_cost_routing.rb):''' This script routes calls according to the cost values (which may depend on the time) of the routes. This is useful for cases when a route's popularity (cost) depends on the time of the day. This is done by adding different columns to the static routing tables (for example [:cost_0_6]) and filling them up with values for each route.&lt;br /&gt;
&lt;br /&gt;
Learn how to setup Standard Scripts in your gateway by following these steps: [[How to Setup Standard Scripts|How to Setup Standard Scripts]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other standard routing scripts implement Filters and are covered in the next section.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Filters&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Adds functionality to standard scripts. Filters can be added to any standard script in a few steps. For example, you may want to remove the '1' prefix for uniformed routing, select the SIP Request URI to route the call instead of the called number, and more. &lt;br /&gt;
&lt;br /&gt;
=== Types of filters ===&lt;br /&gt;
The following type of filters can be attached to a routing script, and they are applied in the following order&lt;br /&gt;
# before_filter  -&amp;gt; Analyze/modify the call attributes before other filters are applied&lt;br /&gt;
# route_match    -&amp;gt; Eliminates routes based on some matching criteria&lt;br /&gt;
# order_route    -&amp;gt; Change the order of matching routes&lt;br /&gt;
# after_filter   -&amp;gt; Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created&lt;br /&gt;
# route_remap    -&amp;gt; Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes&lt;br /&gt;
# after_remap    -&amp;gt; Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
==== Before filter (before_filter) ====&lt;br /&gt;
* Adds pre-processing on incoming parameters before other filters are applied&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attributes before other filters process the call&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  before_filter :method =&amp;gt; :my_custom_before_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :call]      All attributes of the incoming call to route.&lt;br /&gt;
    #                        Can be modified. Will affect subsequent filters, and routing output.&lt;br /&gt;
    #  - params[ :routes ]   All routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     All NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route match (route_match) ====&lt;br /&gt;
Eliminates routes based on some matching criteria.&lt;br /&gt;
&lt;br /&gt;
* Generally simply matching a call attribute with a route attribute.&lt;br /&gt;
* Any route with attribute not matching the corresponding call attribute is eliminated. &lt;br /&gt;
* A route with empty attribute is considered matching any call&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Match the call attribute :called with the route attribute with same name:&lt;br /&gt;
  route_match :call_field_name =&amp;gt; :called&lt;br /&gt;
* Match the call attribute :private_address with the route attribute :calling &lt;br /&gt;
  route_match :call_field_name =&amp;gt; :private_address , call_field_name =&amp;gt; :calling&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_match :method =&amp;gt; :my_custom_matching, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_matching( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  # Must return true if route matches, false otherwise&lt;br /&gt;
  def my_custom_matching( route, call, naps )&lt;br /&gt;
    # route contains the route to match.&lt;br /&gt;
    # call contains the incoming call attributes to match with the route.&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Order route (order_route) ====&lt;br /&gt;
Change the order of matching routes based on a given route attribute.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  order_route :route_field_name =&amp;gt; :priority&lt;br /&gt;
&lt;br /&gt;
==== After filter (after_filter) ====&lt;br /&gt;
Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created.&lt;br /&gt;
&lt;br /&gt;
==== Route remap (route_remap) ====&lt;br /&gt;
Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes.&lt;br /&gt;
&lt;br /&gt;
==== After remap (after_remap) ====&lt;br /&gt;
Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
=== Filter Scripts examples:  ===&lt;br /&gt;
&lt;br /&gt;
*'''Request-URI routing (ruri.rb):''' Will route the call on SIP RURI instead of the to: field &lt;br /&gt;
*'''Modify the Nature of Address (noa_npi_remap.rb):''' We can use this to change the NOA to national or international &lt;br /&gt;
*'''Remove Loop (FilterRemoveLoop.rb): '''Will prevent calls from being routed back to the sender &lt;br /&gt;
*'''Load sharing on NAP groups or on route groups (nap_group_weight_retry_with_overload.rb):''' This is a powerful script that allows for a regrouping of NAPs of the same kind, distributes loads among them, and prioritizes one group versus another.&amp;amp;nbsp; Alternatively, you can do the same on routes. You need to add two columns to the NAPs (or the routes), one called &amp;quot;group&amp;quot; and one called &amp;quot;weight&amp;quot;. Groups of lower value will have a higher priority (group=0 has more priority than group=10). The calls will be distributed according to the weight value. To have an equal number of calls on each destination, use the same weight value (weight=10). See [[Adding Load Sharing to Routing Script|Adding Load Sharing to Routing Script]]&amp;lt;br&amp;gt; &lt;br /&gt;
*'''Black and White listing (black_white_listing.rb):''' With this script, any called or calling number prefix can be blacklisted or whitelisted. This script can be assigned globally, or per NAP. It reads a .csv file which has the called and calling number list. See [[Adding White or Black listing to Routing Script]]&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Learn how to add a Filter to normal scripts: [[How to Setup Filters|How to setup Filters]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Label routing&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts&lt;br /&gt;
Gateway -&amp;amp;gt; FileDb&lt;br /&gt;
Gateway -&amp;amp;gt; Routesets &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Label routing was created because in some cases, regular expressions cannot be used on the called number to define a route. &lt;br /&gt;
&lt;br /&gt;
Problem: Having thousands of destination numbers (N), and possibly one route per number per Network Provider (M), resulting in N*M routes&amp;lt;br&amp;gt;Solution: Create labels for each groups of numbers (L) and let the system determine the route, resulting in L*M routes, where L &amp;amp;lt; N &lt;br /&gt;
&lt;br /&gt;
A Label is a virtual group of destination numbers. This virtual group has a list of numbers assigned to it in a CSV file.&amp;lt;br&amp;gt;This process does the routing in 2 stages:&amp;lt;br&amp;gt;1st stage - Find a Label: Find longest prefix match entry for the called number. This leads to only one destination Label. This is the Digitmap file.&amp;lt;br&amp;gt;2nd stage - Find the NAPs serving a Label: All routes tied to this Label are eligible for routing the call. This is the routeset definition file. &lt;br /&gt;
&lt;br /&gt;
What are the advantages compared to static routing?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Can have thousands of numbers &lt;br /&gt;
*It uses a non linear search algorithms; therefore, there is no overhead to having a large amount of numbers. Label routing was tested with 5 million entries.&lt;br /&gt;
*Variables can be added to the routeset definition file to use other filter scripts and have even more flexibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Example usage:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*NPA-NXX routing &lt;br /&gt;
*Blacklisting &lt;br /&gt;
*Tandem switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
See here for complete details: [[Routeset Routing|Label routing]] and [[Adding_Label_Routing_to_any_Routing_Script|Adding Label Routing to any Routing Script]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Custom Routing Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Customers can create their own routing scripts using a Scriptable Routing Engine based on Ruby. These scripts can be imported and exported from the Web portal.&amp;lt;br&amp;gt;These scripts can run complex routing algorithms and post routing translation, as well as other advanced functions. It is also possible to modify standard Scripts, or filters, to satisfy more complex scenarios&amp;lt;br&amp;gt;The functions have control over many call parameters such as:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Calling &lt;br /&gt;
*Called &lt;br /&gt;
*Nature of Address &lt;br /&gt;
*Calling Presentation &lt;br /&gt;
*Calling Screening &lt;br /&gt;
*Redirecting Number &lt;br /&gt;
*Original Called Number, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The complete list is in the [[Routing script tutorial:Mini Development Guide|Routing Script Tutorial]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Custom routing script are kept on software upgrades. Versionning of routing scripts needs to be handled by the operator of the unit. The new scripts (with the same names, but a new version) can be manually replaced directly in the routing script page.&amp;lt;br&amp;gt;It is possible to test routing scripts directly from the web portal before activating them in a live system.&amp;lt;br&amp;gt;For complete details, refer to [[Scriptable Routing Engine|Scriptable Routing Engine]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Playing prompts&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request for prompts playback at various states of the call. See  [[Routing_script_tutorial:Mini_Development_Guide#Playing_prompts_announcements_or_tones|Playing prompts announcements or tones]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Recording calls&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request the recording of incoming and/or outgoing call legs to audio files. See  [[Routing_script_tutorial:Mini_Development_Guide#Recording_call_legs|Recording Calls]].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Route retry&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
The routing engine returns all matching routes to the system. The TMG-CONTROL then generates an outgoing call using the first route in the list. If the call fails, the TMG-CONTROL may or may not generate another call, according to the error code received. &lt;br /&gt;
&lt;br /&gt;
The route retry will proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Service unavailable &lt;br /&gt;
*Circuit not available &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
The route retry will not proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*User busy &lt;br /&gt;
*Unallocated number &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You can modify the route-retry sequence (continue or discontinue) to handle unsuccessful routes. For more information, refer to the NAP profile. For more details see the route retry page.&amp;lt;br&amp;gt;These parameters can be modified here:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Profiles -&amp;amp;gt; default [Edit] -&amp;amp;gt; Edit Reason Cause mapping &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Route retry is enabled by default. Timers and conditions on route retry can be adjusted from the configuration:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Configurations -&amp;amp;gt; Advanced &amp;lt;/pre&amp;gt; &lt;br /&gt;
NOTE: The route-retry feature is available for other types of routing as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For more details, see the [[Route retry|Route Retry]] page&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;br /&gt;
&lt;br /&gt;
== Related actions ==&lt;br /&gt;
'''Refer to the appropriate Toolpack release:'''&lt;br /&gt;
&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_D|Call Routes Settings v3.0]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_C|Call Routes Settings v2.10]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_B|Call Routes Settings v2.9]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_A|Call Routes Settings v2.8]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;other versions&amp;quot; data-expandtext=&amp;quot;Click here for other versions&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.7#Routes|Web Portal v2.7: Routes Configuration]]&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.6#Routes|Web Portal v2.6: Routes Configuration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Tmedia_Routing</id>
		<title>Tmedia Routing</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Tmedia_Routing"/>
				<updated>2019-03-28T18:15:44Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* Types of filters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Static routing table  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Gateway_Static_Routes.png|Static Routes]]&lt;br /&gt;
&lt;br /&gt;
=== Basic route matching ===&lt;br /&gt;
The static routing table uses parameters from the incoming call to locate a route and then make a routing decision. These parameters are called incoming call attributes. Three parameters are verified:&amp;lt;br&amp;gt; &lt;br /&gt;
A route will match an incoming call if all the route matching parameters are met.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Multiple routes may be a match for a call.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following criteria are available for basic route matching:&lt;br /&gt;
*Called number &lt;br /&gt;
*Calling number &lt;br /&gt;
*Incoming Network Access Point (NAP)&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number matching ====&lt;br /&gt;
Calling / called number matching works as follows:&lt;br /&gt;
*'''Field can be empty: '''this means any number will match &lt;br /&gt;
*'''Field can be a specific number: '''this means the exact number must match &lt;br /&gt;
*'''Field can be a regular expression match:'''&lt;br /&gt;
*'''Field can be a sip user and sip host:''' such as user@sip_host:sip_port&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Number Routing filter example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^1?450[0-9]{7}$/&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match an optional 1, followed by 450, then 7 digits&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; SIP user/host routing example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. 5551212@abc.com&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match exactly 5551212 for sip host abc.com only &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NAP matching ====&lt;br /&gt;
The Network Access Point can be SS7, ISDN, CAS or SIP.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic (per-route) call attributes remapping ===&lt;br /&gt;
Once the route(s) have been chosen, some call parameters can be modified using the parameters of the route: &lt;br /&gt;
==== Outgoing call parameters remapping ====&lt;br /&gt;
*'''Remapped Called Number:''' New called number used on the outgoing calls &lt;br /&gt;
*'''Remapped Calling Number: '''New calling number used on the outgoing calls &lt;br /&gt;
*'''Remapped NAP:''' determines on which Network Access Point (NAP)&amp;amp;nbsp;the outgoing calls are sent. &lt;br /&gt;
*'''Outgoing call remapped Profile: '''Select the profile to use with the outgoing call when this route is used, otherwise NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Source call leg parameters remapping ====&lt;br /&gt;
Some parameters of the source call leg can also be modified:&lt;br /&gt;
*'''Source call remapped Profile: '''Select the profile to use with the source call leg when this route is used, otherwise the NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number remapping options ====&lt;br /&gt;
Calling / called number remapping works as follows:&lt;br /&gt;
*'''Field can be empty:''' In this case, the called/calling numbers from the incoming call are used for the outgoing call. &lt;br /&gt;
*'''Field can be a specific number:''' This number will be used as called (or calling) number for the outgoing call.&lt;br /&gt;
*'''Field can be a regular expression:''' Allows building the outgoing call's calling/called number through matching/replacement of incoming calling/called number. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; For example, post routing translation (remap)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^450([0-9]*)$/\514\2&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This regular expression replaces 450 with 514&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For a complete example, refer to: [[Toolpack: How to Use RegEx in Remapped Called and Calling Number Mask|How To Use Regular Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Multiple routes matching ===&lt;br /&gt;
The remapping parameters above (both for incoming and outgoing calls) are independent for each route.&amp;lt;br&amp;gt;&lt;br /&gt;
This allows different routes to use different NAPs, and remap the calling/called numbers differently.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ordering the routes ====&lt;br /&gt;
When multiple routes match the incoming call, the default routing script (simple_routing) will order by priority and weight.&amp;lt;br&amp;gt;&lt;br /&gt;
* Note: older routing scripts did not have priority routing enabled by default, you may need to manually update your routing scripts to enable priority routing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each route has a &amp;quot;priority&amp;quot; attribute, and a &amp;quot;weight&amp;quot; attribute. All matching routes for a given call will be ordered by priority.&amp;lt;br&amp;gt;&lt;br /&gt;
Load-sharing (based on each route's &amp;quot;weight&amp;quot;) will be applied if multiple matching routes have the same priority.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's also possible to prioritize matching routes using others algorithms, by customizing routing scripts.&lt;br /&gt;
A few examples:&lt;br /&gt;
* Round robin&lt;br /&gt;
* Least cost&lt;br /&gt;
* Per period of the day&lt;br /&gt;
&lt;br /&gt;
==== Route retry ====&lt;br /&gt;
If multiple routes match for a call, call retry may be done on subsequent routes upon failure making outgoing call on a route. For more information about route retry, refer to the following page: [[Route_retry|Route Retry]].&lt;br /&gt;
&lt;br /&gt;
=== Routes limitation ===&lt;br /&gt;
&amp;lt;u&amp;gt;Up to 2000 routes&amp;lt;/u&amp;gt; can be entered in the static routing table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: When the number of routes becomes large, this may be a sign that more advanced routing should be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 For information about label route handling, refer to [[Tmedia_Routing#Label_routing|Label Routing]] or contact [[Support:Contacting_TelcoBridges_technical_support|TelcoBridges Support]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting / importing routes ===&lt;br /&gt;
You can import or export the static routing table using the web portal. Go to: &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Export Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Import Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; This is the default configuration of the Media Gateway&lt;br /&gt;
&lt;br /&gt;
== Standard Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Standard scripts are used to modify the behavior of the static routing.&amp;amp;nbsp; It allows for the prioritization of routes, load sharing amongst multiple endpoints, or the modification of some call parameters. It can be enabled on any system in just a few steps. The following is a list of Scripts supported today:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''Simple routing (simple_routing.rb):''' Script used for the static routing table, and supports priority and weight routing per route or NAP.&lt;br /&gt;
*'''Priority routing (priority_and_weight_load_balancer.rb):''' This script routes calls according to a priority setting of matching routes. Each route has its own priority setting (if not, taken from the outgoing call's NAP priority). The [:priority] field column needs to be added in the routes and NAPs page. A smaller [:priority] value has more priority. If more than 1 route matches, the route with the lowest NAP priority will be selected first. Routes with the same priority will be randomly ordered using the &amp;quot;weight&amp;quot; column so load is distributed among routes with same priority. &lt;br /&gt;
*'''ASR routing (asr_routing.rb):''' This script routes calls according to the ASR values of the destination naps. This kind of routing will try to improve overall system ASR by always using the best NAPs. It will also improve client perception by cleanly dropping calls that would almost certainly fail anyway. &lt;br /&gt;
*'''Nature of Address and Numbering plan indicator remapping (noa_npi_remap.rb): '''Enables the modification of the NOA and NPI values on outgoing calls. &lt;br /&gt;
*'''Least Cost Routing (least_cost_routing.rb):''' This script routes calls according to the cost values (which may depend on the time) of the routes. This is useful for cases when a route's popularity (cost) depends on the time of the day. This is done by adding different columns to the static routing tables (for example [:cost_0_6]) and filling them up with values for each route.&lt;br /&gt;
&lt;br /&gt;
Learn how to setup Standard Scripts in your gateway by following these steps: [[How to Setup Standard Scripts|How to Setup Standard Scripts]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other standard routing scripts implement Filters and are covered in the next section.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Filters&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Adds functionality to standard scripts. Filters can be added to any standard script in a few steps. For example, you may want to remove the '1' prefix for uniformed routing, select the SIP Request URI to route the call instead of the called number, and more. &lt;br /&gt;
&lt;br /&gt;
=== Types of filters ===&lt;br /&gt;
The following type of filters can be attached to a routing script, and they are applied in the following order&lt;br /&gt;
# before_filter  -&amp;gt; Analyze/modify the call attributes before other filters are applied&lt;br /&gt;
# route_match    -&amp;gt; Eliminates routes based on some matching criteria&lt;br /&gt;
# order_route    -&amp;gt; Change the order of matching routes&lt;br /&gt;
# after_filter   -&amp;gt; Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created&lt;br /&gt;
# route_remap    -&amp;gt; Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes&lt;br /&gt;
# after_remap    -&amp;gt; Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
==== Before filter (before_filter) ====&lt;br /&gt;
* Adds pre-processing on incoming parameters before other filters are applied&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attributes before other filters process the call&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  before_filter :method =&amp;gt; :my_custom_before_filter, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :routes ]   Array of all routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
    #  - params[ :naps ]     Array of all NAPs in the configuration and their attributes.&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def my_custom_before_filter( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :call]      All attributes of the incoming call to route.&lt;br /&gt;
    #                        Can be modified. Will affect subsequent filters, and routing output.&lt;br /&gt;
    #  - params[ :routes ]   All routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     All NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route match (route_match) ====&lt;br /&gt;
Eliminates routes based on some matching criteria.&lt;br /&gt;
&lt;br /&gt;
* Generally simply matching a call attribute with a route attribute.&lt;br /&gt;
* Any route with attribute not matching the corresponding call attribute is eliminated. &lt;br /&gt;
* A route with empty attribute is considered matching any call&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Match the call attribute :called with the route attribute with same name:&lt;br /&gt;
  route_match :call_field_name =&amp;gt; :called&lt;br /&gt;
* Match the call attribute :private_address with the route attribute :calling &lt;br /&gt;
  route_match :call_field_name =&amp;gt; :private_address , call_field_name =&amp;gt; :calling&lt;br /&gt;
&lt;br /&gt;
Custom methods can be attached.&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  route_match :method =&amp;gt; :my_custom_matching, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_matching( params )&lt;br /&gt;
    # (See init_my_custom_before_filter above for description of params)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  # Must return true if route matches, false otherwise&lt;br /&gt;
  def my_custom_matching( route, call, naps )&lt;br /&gt;
    # route contains the route to match.&lt;br /&gt;
    # call contains the incoming call attributes to match with the route.&lt;br /&gt;
    # naps contains an array of all NAPs and their attributes.&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Order route (order_route) ====&lt;br /&gt;
Change the order of matching routes.&lt;br /&gt;
&lt;br /&gt;
==== After filter (after_filter) ====&lt;br /&gt;
Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created.&lt;br /&gt;
&lt;br /&gt;
==== Route remap (route_remap) ====&lt;br /&gt;
Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes.&lt;br /&gt;
&lt;br /&gt;
==== After remap (after_remap) ====&lt;br /&gt;
Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
=== Filter Scripts examples:  ===&lt;br /&gt;
&lt;br /&gt;
*'''Request-URI routing (ruri.rb):''' Will route the call on SIP RURI instead of the to: field &lt;br /&gt;
*'''Modify the Nature of Address (noa_npi_remap.rb):''' We can use this to change the NOA to national or international &lt;br /&gt;
*'''Remove Loop (FilterRemoveLoop.rb): '''Will prevent calls from being routed back to the sender &lt;br /&gt;
*'''Load sharing on NAP groups or on route groups (nap_group_weight_retry_with_overload.rb):''' This is a powerful script that allows for a regrouping of NAPs of the same kind, distributes loads among them, and prioritizes one group versus another.&amp;amp;nbsp; Alternatively, you can do the same on routes. You need to add two columns to the NAPs (or the routes), one called &amp;quot;group&amp;quot; and one called &amp;quot;weight&amp;quot;. Groups of lower value will have a higher priority (group=0 has more priority than group=10). The calls will be distributed according to the weight value. To have an equal number of calls on each destination, use the same weight value (weight=10). See [[Adding Load Sharing to Routing Script|Adding Load Sharing to Routing Script]]&amp;lt;br&amp;gt; &lt;br /&gt;
*'''Black and White listing (black_white_listing.rb):''' With this script, any called or calling number prefix can be blacklisted or whitelisted. This script can be assigned globally, or per NAP. It reads a .csv file which has the called and calling number list. See [[Adding White or Black listing to Routing Script]]&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Learn how to add a Filter to normal scripts: [[How to Setup Filters|How to setup Filters]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Label routing&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts&lt;br /&gt;
Gateway -&amp;amp;gt; FileDb&lt;br /&gt;
Gateway -&amp;amp;gt; Routesets &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Label routing was created because in some cases, regular expressions cannot be used on the called number to define a route. &lt;br /&gt;
&lt;br /&gt;
Problem: Having thousands of destination numbers (N), and possibly one route per number per Network Provider (M), resulting in N*M routes&amp;lt;br&amp;gt;Solution: Create labels for each groups of numbers (L) and let the system determine the route, resulting in L*M routes, where L &amp;amp;lt; N &lt;br /&gt;
&lt;br /&gt;
A Label is a virtual group of destination numbers. This virtual group has a list of numbers assigned to it in a CSV file.&amp;lt;br&amp;gt;This process does the routing in 2 stages:&amp;lt;br&amp;gt;1st stage - Find a Label: Find longest prefix match entry for the called number. This leads to only one destination Label. This is the Digitmap file.&amp;lt;br&amp;gt;2nd stage - Find the NAPs serving a Label: All routes tied to this Label are eligible for routing the call. This is the routeset definition file. &lt;br /&gt;
&lt;br /&gt;
What are the advantages compared to static routing?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Can have thousands of numbers &lt;br /&gt;
*It uses a non linear search algorithms; therefore, there is no overhead to having a large amount of numbers. Label routing was tested with 5 million entries.&lt;br /&gt;
*Variables can be added to the routeset definition file to use other filter scripts and have even more flexibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Example usage:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*NPA-NXX routing &lt;br /&gt;
*Blacklisting &lt;br /&gt;
*Tandem switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
See here for complete details: [[Routeset Routing|Label routing]] and [[Adding_Label_Routing_to_any_Routing_Script|Adding Label Routing to any Routing Script]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Custom Routing Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Customers can create their own routing scripts using a Scriptable Routing Engine based on Ruby. These scripts can be imported and exported from the Web portal.&amp;lt;br&amp;gt;These scripts can run complex routing algorithms and post routing translation, as well as other advanced functions. It is also possible to modify standard Scripts, or filters, to satisfy more complex scenarios&amp;lt;br&amp;gt;The functions have control over many call parameters such as:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Calling &lt;br /&gt;
*Called &lt;br /&gt;
*Nature of Address &lt;br /&gt;
*Calling Presentation &lt;br /&gt;
*Calling Screening &lt;br /&gt;
*Redirecting Number &lt;br /&gt;
*Original Called Number, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The complete list is in the [[Routing script tutorial:Mini Development Guide|Routing Script Tutorial]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Custom routing script are kept on software upgrades. Versionning of routing scripts needs to be handled by the operator of the unit. The new scripts (with the same names, but a new version) can be manually replaced directly in the routing script page.&amp;lt;br&amp;gt;It is possible to test routing scripts directly from the web portal before activating them in a live system.&amp;lt;br&amp;gt;For complete details, refer to [[Scriptable Routing Engine|Scriptable Routing Engine]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Playing prompts&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request for prompts playback at various states of the call. See  [[Routing_script_tutorial:Mini_Development_Guide#Playing_prompts_announcements_or_tones|Playing prompts announcements or tones]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Recording calls&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request the recording of incoming and/or outgoing call legs to audio files. See  [[Routing_script_tutorial:Mini_Development_Guide#Recording_call_legs|Recording Calls]].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Route retry&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
The routing engine returns all matching routes to the system. The TMG-CONTROL then generates an outgoing call using the first route in the list. If the call fails, the TMG-CONTROL may or may not generate another call, according to the error code received. &lt;br /&gt;
&lt;br /&gt;
The route retry will proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Service unavailable &lt;br /&gt;
*Circuit not available &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
The route retry will not proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*User busy &lt;br /&gt;
*Unallocated number &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You can modify the route-retry sequence (continue or discontinue) to handle unsuccessful routes. For more information, refer to the NAP profile. For more details see the route retry page.&amp;lt;br&amp;gt;These parameters can be modified here:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Profiles -&amp;amp;gt; default [Edit] -&amp;amp;gt; Edit Reason Cause mapping &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Route retry is enabled by default. Timers and conditions on route retry can be adjusted from the configuration:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Configurations -&amp;amp;gt; Advanced &amp;lt;/pre&amp;gt; &lt;br /&gt;
NOTE: The route-retry feature is available for other types of routing as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For more details, see the [[Route retry|Route Retry]] page&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;br /&gt;
&lt;br /&gt;
== Related actions ==&lt;br /&gt;
'''Refer to the appropriate Toolpack release:'''&lt;br /&gt;
&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_D|Call Routes Settings v3.0]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_C|Call Routes Settings v2.10]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_B|Call Routes Settings v2.9]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_A|Call Routes Settings v2.8]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;other versions&amp;quot; data-expandtext=&amp;quot;Click here for other versions&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.7#Routes|Web Portal v2.7: Routes Configuration]]&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.6#Routes|Web Portal v2.6: Routes Configuration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Tmedia_Routing</id>
		<title>Tmedia Routing</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Tmedia_Routing"/>
				<updated>2019-03-28T18:05:35Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* Types of filters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Static routing table  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Gateway_Static_Routes.png|Static Routes]]&lt;br /&gt;
&lt;br /&gt;
=== Basic route matching ===&lt;br /&gt;
The static routing table uses parameters from the incoming call to locate a route and then make a routing decision. These parameters are called incoming call attributes. Three parameters are verified:&amp;lt;br&amp;gt; &lt;br /&gt;
A route will match an incoming call if all the route matching parameters are met.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Multiple routes may be a match for a call.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following criteria are available for basic route matching:&lt;br /&gt;
*Called number &lt;br /&gt;
*Calling number &lt;br /&gt;
*Incoming Network Access Point (NAP)&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number matching ====&lt;br /&gt;
Calling / called number matching works as follows:&lt;br /&gt;
*'''Field can be empty: '''this means any number will match &lt;br /&gt;
*'''Field can be a specific number: '''this means the exact number must match &lt;br /&gt;
*'''Field can be a regular expression match:'''&lt;br /&gt;
*'''Field can be a sip user and sip host:''' such as user@sip_host:sip_port&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Number Routing filter example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^1?450[0-9]{7}$/&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match an optional 1, followed by 450, then 7 digits&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; SIP user/host routing example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. 5551212@abc.com&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match exactly 5551212 for sip host abc.com only &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NAP matching ====&lt;br /&gt;
The Network Access Point can be SS7, ISDN, CAS or SIP.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic (per-route) call attributes remapping ===&lt;br /&gt;
Once the route(s) have been chosen, some call parameters can be modified using the parameters of the route: &lt;br /&gt;
==== Outgoing call parameters remapping ====&lt;br /&gt;
*'''Remapped Called Number:''' New called number used on the outgoing calls &lt;br /&gt;
*'''Remapped Calling Number: '''New calling number used on the outgoing calls &lt;br /&gt;
*'''Remapped NAP:''' determines on which Network Access Point (NAP)&amp;amp;nbsp;the outgoing calls are sent. &lt;br /&gt;
*'''Outgoing call remapped Profile: '''Select the profile to use with the outgoing call when this route is used, otherwise NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Source call leg parameters remapping ====&lt;br /&gt;
Some parameters of the source call leg can also be modified:&lt;br /&gt;
*'''Source call remapped Profile: '''Select the profile to use with the source call leg when this route is used, otherwise the NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number remapping options ====&lt;br /&gt;
Calling / called number remapping works as follows:&lt;br /&gt;
*'''Field can be empty:''' In this case, the called/calling numbers from the incoming call are used for the outgoing call. &lt;br /&gt;
*'''Field can be a specific number:''' This number will be used as called (or calling) number for the outgoing call.&lt;br /&gt;
*'''Field can be a regular expression:''' Allows building the outgoing call's calling/called number through matching/replacement of incoming calling/called number. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; For example, post routing translation (remap)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^450([0-9]*)$/\514\2&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This regular expression replaces 450 with 514&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For a complete example, refer to: [[Toolpack: How to Use RegEx in Remapped Called and Calling Number Mask|How To Use Regular Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Multiple routes matching ===&lt;br /&gt;
The remapping parameters above (both for incoming and outgoing calls) are independent for each route.&amp;lt;br&amp;gt;&lt;br /&gt;
This allows different routes to use different NAPs, and remap the calling/called numbers differently.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ordering the routes ====&lt;br /&gt;
When multiple routes match the incoming call, the default routing script (simple_routing) will order by priority and weight.&amp;lt;br&amp;gt;&lt;br /&gt;
* Note: older routing scripts did not have priority routing enabled by default, you may need to manually update your routing scripts to enable priority routing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each route has a &amp;quot;priority&amp;quot; attribute, and a &amp;quot;weight&amp;quot; attribute. All matching routes for a given call will be ordered by priority.&amp;lt;br&amp;gt;&lt;br /&gt;
Load-sharing (based on each route's &amp;quot;weight&amp;quot;) will be applied if multiple matching routes have the same priority.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's also possible to prioritize matching routes using others algorithms, by customizing routing scripts.&lt;br /&gt;
A few examples:&lt;br /&gt;
* Round robin&lt;br /&gt;
* Least cost&lt;br /&gt;
* Per period of the day&lt;br /&gt;
&lt;br /&gt;
==== Route retry ====&lt;br /&gt;
If multiple routes match for a call, call retry may be done on subsequent routes upon failure making outgoing call on a route. For more information about route retry, refer to the following page: [[Route_retry|Route Retry]].&lt;br /&gt;
&lt;br /&gt;
=== Routes limitation ===&lt;br /&gt;
&amp;lt;u&amp;gt;Up to 2000 routes&amp;lt;/u&amp;gt; can be entered in the static routing table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: When the number of routes becomes large, this may be a sign that more advanced routing should be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 For information about label route handling, refer to [[Tmedia_Routing#Label_routing|Label Routing]] or contact [[Support:Contacting_TelcoBridges_technical_support|TelcoBridges Support]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting / importing routes ===&lt;br /&gt;
You can import or export the static routing table using the web portal. Go to: &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Export Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Import Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; This is the default configuration of the Media Gateway&lt;br /&gt;
&lt;br /&gt;
== Standard Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Standard scripts are used to modify the behavior of the static routing.&amp;amp;nbsp; It allows for the prioritization of routes, load sharing amongst multiple endpoints, or the modification of some call parameters. It can be enabled on any system in just a few steps. The following is a list of Scripts supported today:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''Simple routing (simple_routing.rb):''' Script used for the static routing table, and supports priority and weight routing per route or NAP.&lt;br /&gt;
*'''Priority routing (priority_and_weight_load_balancer.rb):''' This script routes calls according to a priority setting of matching routes. Each route has its own priority setting (if not, taken from the outgoing call's NAP priority). The [:priority] field column needs to be added in the routes and NAPs page. A smaller [:priority] value has more priority. If more than 1 route matches, the route with the lowest NAP priority will be selected first. Routes with the same priority will be randomly ordered using the &amp;quot;weight&amp;quot; column so load is distributed among routes with same priority. &lt;br /&gt;
*'''ASR routing (asr_routing.rb):''' This script routes calls according to the ASR values of the destination naps. This kind of routing will try to improve overall system ASR by always using the best NAPs. It will also improve client perception by cleanly dropping calls that would almost certainly fail anyway. &lt;br /&gt;
*'''Nature of Address and Numbering plan indicator remapping (noa_npi_remap.rb): '''Enables the modification of the NOA and NPI values on outgoing calls. &lt;br /&gt;
*'''Least Cost Routing (least_cost_routing.rb):''' This script routes calls according to the cost values (which may depend on the time) of the routes. This is useful for cases when a route's popularity (cost) depends on the time of the day. This is done by adding different columns to the static routing tables (for example [:cost_0_6]) and filling them up with values for each route.&lt;br /&gt;
&lt;br /&gt;
Learn how to setup Standard Scripts in your gateway by following these steps: [[How to Setup Standard Scripts|How to Setup Standard Scripts]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other standard routing scripts implement Filters and are covered in the next section.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Filters&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Adds functionality to standard scripts. Filters can be added to any standard script in a few steps. For example, you may want to remove the '1' prefix for uniformed routing, select the SIP Request URI to route the call instead of the called number, and more. &lt;br /&gt;
&lt;br /&gt;
=== Types of filters ===&lt;br /&gt;
The following type of filters can be attached to a routing script, and they are applied in the following order&lt;br /&gt;
# before_filter  -&amp;gt; Analyze/modify the call attributes before other filters are applied&lt;br /&gt;
# route_match    -&amp;gt; Eliminates routes based on some matching criteria&lt;br /&gt;
# order_route    -&amp;gt; Change the order of matching routes&lt;br /&gt;
# after_filter   -&amp;gt; Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created&lt;br /&gt;
# route_remap    -&amp;gt; Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes&lt;br /&gt;
# after_remap    -&amp;gt; Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
==== Before filter (before_filter) ====&lt;br /&gt;
* Adds pre-processing on incoming parameters before other filters are applied&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attributes before other filters process the call&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  before_filter :method =&amp;gt; :my_custom_method, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_method( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :routes ]   All routes in your configuration with all their attributes&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
    #  - params[ :naps ]     All NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def init_my_custom_method( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :call]      All attributes of the incoming call to route.&lt;br /&gt;
    #                        Can be modified. Will affect subsequent filters, and routing output.&lt;br /&gt;
    #  - params[ :routes ]   All routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     All NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Route match (route_match) ====&lt;br /&gt;
Eliminates routes based on some matching criteria.&lt;br /&gt;
&lt;br /&gt;
==== Order route (order_route) ====&lt;br /&gt;
Change the order of matching routes.&lt;br /&gt;
&lt;br /&gt;
==== After filter (after_filter) ====&lt;br /&gt;
Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created.&lt;br /&gt;
&lt;br /&gt;
==== Route remap (route_remap) ====&lt;br /&gt;
Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes.&lt;br /&gt;
&lt;br /&gt;
==== After remap (after_remap) ====&lt;br /&gt;
Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
=== Filter Scripts examples:  ===&lt;br /&gt;
&lt;br /&gt;
*'''Request-URI routing (ruri.rb):''' Will route the call on SIP RURI instead of the to: field &lt;br /&gt;
*'''Modify the Nature of Address (noa_npi_remap.rb):''' We can use this to change the NOA to national or international &lt;br /&gt;
*'''Remove Loop (FilterRemoveLoop.rb): '''Will prevent calls from being routed back to the sender &lt;br /&gt;
*'''Load sharing on NAP groups or on route groups (nap_group_weight_retry_with_overload.rb):''' This is a powerful script that allows for a regrouping of NAPs of the same kind, distributes loads among them, and prioritizes one group versus another.&amp;amp;nbsp; Alternatively, you can do the same on routes. You need to add two columns to the NAPs (or the routes), one called &amp;quot;group&amp;quot; and one called &amp;quot;weight&amp;quot;. Groups of lower value will have a higher priority (group=0 has more priority than group=10). The calls will be distributed according to the weight value. To have an equal number of calls on each destination, use the same weight value (weight=10). See [[Adding Load Sharing to Routing Script|Adding Load Sharing to Routing Script]]&amp;lt;br&amp;gt; &lt;br /&gt;
*'''Black and White listing (black_white_listing.rb):''' With this script, any called or calling number prefix can be blacklisted or whitelisted. This script can be assigned globally, or per NAP. It reads a .csv file which has the called and calling number list. See [[Adding White or Black listing to Routing Script]]&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Learn how to add a Filter to normal scripts: [[How to Setup Filters|How to setup Filters]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Label routing&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts&lt;br /&gt;
Gateway -&amp;amp;gt; FileDb&lt;br /&gt;
Gateway -&amp;amp;gt; Routesets &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Label routing was created because in some cases, regular expressions cannot be used on the called number to define a route. &lt;br /&gt;
&lt;br /&gt;
Problem: Having thousands of destination numbers (N), and possibly one route per number per Network Provider (M), resulting in N*M routes&amp;lt;br&amp;gt;Solution: Create labels for each groups of numbers (L) and let the system determine the route, resulting in L*M routes, where L &amp;amp;lt; N &lt;br /&gt;
&lt;br /&gt;
A Label is a virtual group of destination numbers. This virtual group has a list of numbers assigned to it in a CSV file.&amp;lt;br&amp;gt;This process does the routing in 2 stages:&amp;lt;br&amp;gt;1st stage - Find a Label: Find longest prefix match entry for the called number. This leads to only one destination Label. This is the Digitmap file.&amp;lt;br&amp;gt;2nd stage - Find the NAPs serving a Label: All routes tied to this Label are eligible for routing the call. This is the routeset definition file. &lt;br /&gt;
&lt;br /&gt;
What are the advantages compared to static routing?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Can have thousands of numbers &lt;br /&gt;
*It uses a non linear search algorithms; therefore, there is no overhead to having a large amount of numbers. Label routing was tested with 5 million entries.&lt;br /&gt;
*Variables can be added to the routeset definition file to use other filter scripts and have even more flexibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Example usage:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*NPA-NXX routing &lt;br /&gt;
*Blacklisting &lt;br /&gt;
*Tandem switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
See here for complete details: [[Routeset Routing|Label routing]] and [[Adding_Label_Routing_to_any_Routing_Script|Adding Label Routing to any Routing Script]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Custom Routing Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Customers can create their own routing scripts using a Scriptable Routing Engine based on Ruby. These scripts can be imported and exported from the Web portal.&amp;lt;br&amp;gt;These scripts can run complex routing algorithms and post routing translation, as well as other advanced functions. It is also possible to modify standard Scripts, or filters, to satisfy more complex scenarios&amp;lt;br&amp;gt;The functions have control over many call parameters such as:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Calling &lt;br /&gt;
*Called &lt;br /&gt;
*Nature of Address &lt;br /&gt;
*Calling Presentation &lt;br /&gt;
*Calling Screening &lt;br /&gt;
*Redirecting Number &lt;br /&gt;
*Original Called Number, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The complete list is in the [[Routing script tutorial:Mini Development Guide|Routing Script Tutorial]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Custom routing script are kept on software upgrades. Versionning of routing scripts needs to be handled by the operator of the unit. The new scripts (with the same names, but a new version) can be manually replaced directly in the routing script page.&amp;lt;br&amp;gt;It is possible to test routing scripts directly from the web portal before activating them in a live system.&amp;lt;br&amp;gt;For complete details, refer to [[Scriptable Routing Engine|Scriptable Routing Engine]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Playing prompts&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request for prompts playback at various states of the call. See  [[Routing_script_tutorial:Mini_Development_Guide#Playing_prompts_announcements_or_tones|Playing prompts announcements or tones]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Recording calls&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request the recording of incoming and/or outgoing call legs to audio files. See  [[Routing_script_tutorial:Mini_Development_Guide#Recording_call_legs|Recording Calls]].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Route retry&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
The routing engine returns all matching routes to the system. The TMG-CONTROL then generates an outgoing call using the first route in the list. If the call fails, the TMG-CONTROL may or may not generate another call, according to the error code received. &lt;br /&gt;
&lt;br /&gt;
The route retry will proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Service unavailable &lt;br /&gt;
*Circuit not available &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
The route retry will not proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*User busy &lt;br /&gt;
*Unallocated number &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You can modify the route-retry sequence (continue or discontinue) to handle unsuccessful routes. For more information, refer to the NAP profile. For more details see the route retry page.&amp;lt;br&amp;gt;These parameters can be modified here:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Profiles -&amp;amp;gt; default [Edit] -&amp;amp;gt; Edit Reason Cause mapping &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Route retry is enabled by default. Timers and conditions on route retry can be adjusted from the configuration:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Configurations -&amp;amp;gt; Advanced &amp;lt;/pre&amp;gt; &lt;br /&gt;
NOTE: The route-retry feature is available for other types of routing as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For more details, see the [[Route retry|Route Retry]] page&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;br /&gt;
&lt;br /&gt;
== Related actions ==&lt;br /&gt;
'''Refer to the appropriate Toolpack release:'''&lt;br /&gt;
&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_D|Call Routes Settings v3.0]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_C|Call Routes Settings v2.10]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_B|Call Routes Settings v2.9]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_A|Call Routes Settings v2.8]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;other versions&amp;quot; data-expandtext=&amp;quot;Click here for other versions&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.7#Routes|Web Portal v2.7: Routes Configuration]]&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.6#Routes|Web Portal v2.6: Routes Configuration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Tmedia_Routing</id>
		<title>Tmedia Routing</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Tmedia_Routing"/>
				<updated>2019-03-28T18:04:03Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: Added summary of types of filters&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Static routing table  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Gateway_Static_Routes.png|Static Routes]]&lt;br /&gt;
&lt;br /&gt;
=== Basic route matching ===&lt;br /&gt;
The static routing table uses parameters from the incoming call to locate a route and then make a routing decision. These parameters are called incoming call attributes. Three parameters are verified:&amp;lt;br&amp;gt; &lt;br /&gt;
A route will match an incoming call if all the route matching parameters are met.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Multiple routes may be a match for a call.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following criteria are available for basic route matching:&lt;br /&gt;
*Called number &lt;br /&gt;
*Calling number &lt;br /&gt;
*Incoming Network Access Point (NAP)&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number matching ====&lt;br /&gt;
Calling / called number matching works as follows:&lt;br /&gt;
*'''Field can be empty: '''this means any number will match &lt;br /&gt;
*'''Field can be a specific number: '''this means the exact number must match &lt;br /&gt;
*'''Field can be a regular expression match:'''&lt;br /&gt;
*'''Field can be a sip user and sip host:''' such as user@sip_host:sip_port&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Number Routing filter example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^1?450[0-9]{7}$/&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match an optional 1, followed by 450, then 7 digits&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; SIP user/host routing example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. 5551212@abc.com&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match exactly 5551212 for sip host abc.com only &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NAP matching ====&lt;br /&gt;
The Network Access Point can be SS7, ISDN, CAS or SIP.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic (per-route) call attributes remapping ===&lt;br /&gt;
Once the route(s) have been chosen, some call parameters can be modified using the parameters of the route: &lt;br /&gt;
==== Outgoing call parameters remapping ====&lt;br /&gt;
*'''Remapped Called Number:''' New called number used on the outgoing calls &lt;br /&gt;
*'''Remapped Calling Number: '''New calling number used on the outgoing calls &lt;br /&gt;
*'''Remapped NAP:''' determines on which Network Access Point (NAP)&amp;amp;nbsp;the outgoing calls are sent. &lt;br /&gt;
*'''Outgoing call remapped Profile: '''Select the profile to use with the outgoing call when this route is used, otherwise NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Source call leg parameters remapping ====&lt;br /&gt;
Some parameters of the source call leg can also be modified:&lt;br /&gt;
*'''Source call remapped Profile: '''Select the profile to use with the source call leg when this route is used, otherwise the NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number remapping options ====&lt;br /&gt;
Calling / called number remapping works as follows:&lt;br /&gt;
*'''Field can be empty:''' In this case, the called/calling numbers from the incoming call are used for the outgoing call. &lt;br /&gt;
*'''Field can be a specific number:''' This number will be used as called (or calling) number for the outgoing call.&lt;br /&gt;
*'''Field can be a regular expression:''' Allows building the outgoing call's calling/called number through matching/replacement of incoming calling/called number. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; For example, post routing translation (remap)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^450([0-9]*)$/\514\2&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This regular expression replaces 450 with 514&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For a complete example, refer to: [[Toolpack: How to Use RegEx in Remapped Called and Calling Number Mask|How To Use Regular Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Multiple routes matching ===&lt;br /&gt;
The remapping parameters above (both for incoming and outgoing calls) are independent for each route.&amp;lt;br&amp;gt;&lt;br /&gt;
This allows different routes to use different NAPs, and remap the calling/called numbers differently.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ordering the routes ====&lt;br /&gt;
When multiple routes match the incoming call, the default routing script (simple_routing) will order by priority and weight.&amp;lt;br&amp;gt;&lt;br /&gt;
* Note: older routing scripts did not have priority routing enabled by default, you may need to manually update your routing scripts to enable priority routing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each route has a &amp;quot;priority&amp;quot; attribute, and a &amp;quot;weight&amp;quot; attribute. All matching routes for a given call will be ordered by priority.&amp;lt;br&amp;gt;&lt;br /&gt;
Load-sharing (based on each route's &amp;quot;weight&amp;quot;) will be applied if multiple matching routes have the same priority.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's also possible to prioritize matching routes using others algorithms, by customizing routing scripts.&lt;br /&gt;
A few examples:&lt;br /&gt;
* Round robin&lt;br /&gt;
* Least cost&lt;br /&gt;
* Per period of the day&lt;br /&gt;
&lt;br /&gt;
==== Route retry ====&lt;br /&gt;
If multiple routes match for a call, call retry may be done on subsequent routes upon failure making outgoing call on a route. For more information about route retry, refer to the following page: [[Route_retry|Route Retry]].&lt;br /&gt;
&lt;br /&gt;
=== Routes limitation ===&lt;br /&gt;
&amp;lt;u&amp;gt;Up to 2000 routes&amp;lt;/u&amp;gt; can be entered in the static routing table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: When the number of routes becomes large, this may be a sign that more advanced routing should be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 For information about label route handling, refer to [[Tmedia_Routing#Label_routing|Label Routing]] or contact [[Support:Contacting_TelcoBridges_technical_support|TelcoBridges Support]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting / importing routes ===&lt;br /&gt;
You can import or export the static routing table using the web portal. Go to: &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Export Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Import Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; This is the default configuration of the Media Gateway&lt;br /&gt;
&lt;br /&gt;
== Standard Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Standard scripts are used to modify the behavior of the static routing.&amp;amp;nbsp; It allows for the prioritization of routes, load sharing amongst multiple endpoints, or the modification of some call parameters. It can be enabled on any system in just a few steps. The following is a list of Scripts supported today:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''Simple routing (simple_routing.rb):''' Script used for the static routing table, and supports priority and weight routing per route or NAP.&lt;br /&gt;
*'''Priority routing (priority_and_weight_load_balancer.rb):''' This script routes calls according to a priority setting of matching routes. Each route has its own priority setting (if not, taken from the outgoing call's NAP priority). The [:priority] field column needs to be added in the routes and NAPs page. A smaller [:priority] value has more priority. If more than 1 route matches, the route with the lowest NAP priority will be selected first. Routes with the same priority will be randomly ordered using the &amp;quot;weight&amp;quot; column so load is distributed among routes with same priority. &lt;br /&gt;
*'''ASR routing (asr_routing.rb):''' This script routes calls according to the ASR values of the destination naps. This kind of routing will try to improve overall system ASR by always using the best NAPs. It will also improve client perception by cleanly dropping calls that would almost certainly fail anyway. &lt;br /&gt;
*'''Nature of Address and Numbering plan indicator remapping (noa_npi_remap.rb): '''Enables the modification of the NOA and NPI values on outgoing calls. &lt;br /&gt;
*'''Least Cost Routing (least_cost_routing.rb):''' This script routes calls according to the cost values (which may depend on the time) of the routes. This is useful for cases when a route's popularity (cost) depends on the time of the day. This is done by adding different columns to the static routing tables (for example [:cost_0_6]) and filling them up with values for each route.&lt;br /&gt;
&lt;br /&gt;
Learn how to setup Standard Scripts in your gateway by following these steps: [[How to Setup Standard Scripts|How to Setup Standard Scripts]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other standard routing scripts implement Filters and are covered in the next section.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Filters&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Adds functionality to standard scripts. Filters can be added to any standard script in a few steps. For example, you may want to remove the '1' prefix for uniformed routing, select the SIP Request URI to route the call instead of the called number, and more. &lt;br /&gt;
&lt;br /&gt;
=== Types of filters ===&lt;br /&gt;
The following type of filters can be attached to a routing script, and they are applied in the following order&lt;br /&gt;
# before_filter  -&amp;gt; Analyze/modify the call attributes before other filters are applied&lt;br /&gt;
# route_match    -&amp;gt; Eliminates routes based on some matching criteria&lt;br /&gt;
# order_route    -&amp;gt; Change the order of matching routes&lt;br /&gt;
# after_filter   -&amp;gt; Filters that are applied after matching routes have been selected and ordered. Can modify the incoming call attributes before the outgoing calls are created&lt;br /&gt;
# route_remap    -&amp;gt; Called once per matching route. Perform per-route remapping of some call attributes, based on per-route attributes&lt;br /&gt;
# after_remap    -&amp;gt; Last filters to be applied. Called once, but has access to list of matching routes, and list of &amp;quot;outgoing call&amp;quot; attributes. Can modify the outgoing calls.&lt;br /&gt;
&lt;br /&gt;
==== Before filter (before_filter) ====&lt;br /&gt;
* Adds pre-processing on incoming parameters before other filters are applied&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attributes before other filters process the call&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  before_filter :method =&amp;gt; :my_custom_method, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_method( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :routes ]   All routes in your configuration with all their attributes&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
    #  - params[ :naps ]     All NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def init_my_custom_method( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :call]      All attributes of the incoming call to route.&lt;br /&gt;
    #                        Can be modified. Will affect subsequent filters, and routing output.&lt;br /&gt;
    #  - params[ :routes ]   All routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     All NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== After filter (after_filter) ====&lt;br /&gt;
*'''After filter: '''Adds post-processing on outgoing parameters&lt;br /&gt;
&lt;br /&gt;
=== Filter Scripts examples:  ===&lt;br /&gt;
&lt;br /&gt;
*'''Request-URI routing (ruri.rb):''' Will route the call on SIP RURI instead of the to: field &lt;br /&gt;
*'''Modify the Nature of Address (noa_npi_remap.rb):''' We can use this to change the NOA to national or international &lt;br /&gt;
*'''Remove Loop (FilterRemoveLoop.rb): '''Will prevent calls from being routed back to the sender &lt;br /&gt;
*'''Load sharing on NAP groups or on route groups (nap_group_weight_retry_with_overload.rb):''' This is a powerful script that allows for a regrouping of NAPs of the same kind, distributes loads among them, and prioritizes one group versus another.&amp;amp;nbsp; Alternatively, you can do the same on routes. You need to add two columns to the NAPs (or the routes), one called &amp;quot;group&amp;quot; and one called &amp;quot;weight&amp;quot;. Groups of lower value will have a higher priority (group=0 has more priority than group=10). The calls will be distributed according to the weight value. To have an equal number of calls on each destination, use the same weight value (weight=10). See [[Adding Load Sharing to Routing Script|Adding Load Sharing to Routing Script]]&amp;lt;br&amp;gt; &lt;br /&gt;
*'''Black and White listing (black_white_listing.rb):''' With this script, any called or calling number prefix can be blacklisted or whitelisted. This script can be assigned globally, or per NAP. It reads a .csv file which has the called and calling number list. See [[Adding White or Black listing to Routing Script]]&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Learn how to add a Filter to normal scripts: [[How to Setup Filters|How to setup Filters]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Label routing&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts&lt;br /&gt;
Gateway -&amp;amp;gt; FileDb&lt;br /&gt;
Gateway -&amp;amp;gt; Routesets &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Label routing was created because in some cases, regular expressions cannot be used on the called number to define a route. &lt;br /&gt;
&lt;br /&gt;
Problem: Having thousands of destination numbers (N), and possibly one route per number per Network Provider (M), resulting in N*M routes&amp;lt;br&amp;gt;Solution: Create labels for each groups of numbers (L) and let the system determine the route, resulting in L*M routes, where L &amp;amp;lt; N &lt;br /&gt;
&lt;br /&gt;
A Label is a virtual group of destination numbers. This virtual group has a list of numbers assigned to it in a CSV file.&amp;lt;br&amp;gt;This process does the routing in 2 stages:&amp;lt;br&amp;gt;1st stage - Find a Label: Find longest prefix match entry for the called number. This leads to only one destination Label. This is the Digitmap file.&amp;lt;br&amp;gt;2nd stage - Find the NAPs serving a Label: All routes tied to this Label are eligible for routing the call. This is the routeset definition file. &lt;br /&gt;
&lt;br /&gt;
What are the advantages compared to static routing?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Can have thousands of numbers &lt;br /&gt;
*It uses a non linear search algorithms; therefore, there is no overhead to having a large amount of numbers. Label routing was tested with 5 million entries.&lt;br /&gt;
*Variables can be added to the routeset definition file to use other filter scripts and have even more flexibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Example usage:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*NPA-NXX routing &lt;br /&gt;
*Blacklisting &lt;br /&gt;
*Tandem switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
See here for complete details: [[Routeset Routing|Label routing]] and [[Adding_Label_Routing_to_any_Routing_Script|Adding Label Routing to any Routing Script]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Custom Routing Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Customers can create their own routing scripts using a Scriptable Routing Engine based on Ruby. These scripts can be imported and exported from the Web portal.&amp;lt;br&amp;gt;These scripts can run complex routing algorithms and post routing translation, as well as other advanced functions. It is also possible to modify standard Scripts, or filters, to satisfy more complex scenarios&amp;lt;br&amp;gt;The functions have control over many call parameters such as:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Calling &lt;br /&gt;
*Called &lt;br /&gt;
*Nature of Address &lt;br /&gt;
*Calling Presentation &lt;br /&gt;
*Calling Screening &lt;br /&gt;
*Redirecting Number &lt;br /&gt;
*Original Called Number, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The complete list is in the [[Routing script tutorial:Mini Development Guide|Routing Script Tutorial]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Custom routing script are kept on software upgrades. Versionning of routing scripts needs to be handled by the operator of the unit. The new scripts (with the same names, but a new version) can be manually replaced directly in the routing script page.&amp;lt;br&amp;gt;It is possible to test routing scripts directly from the web portal before activating them in a live system.&amp;lt;br&amp;gt;For complete details, refer to [[Scriptable Routing Engine|Scriptable Routing Engine]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Playing prompts&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request for prompts playback at various states of the call. See  [[Routing_script_tutorial:Mini_Development_Guide#Playing_prompts_announcements_or_tones|Playing prompts announcements or tones]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Recording calls&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request the recording of incoming and/or outgoing call legs to audio files. See  [[Routing_script_tutorial:Mini_Development_Guide#Recording_call_legs|Recording Calls]].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Route retry&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
The routing engine returns all matching routes to the system. The TMG-CONTROL then generates an outgoing call using the first route in the list. If the call fails, the TMG-CONTROL may or may not generate another call, according to the error code received. &lt;br /&gt;
&lt;br /&gt;
The route retry will proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Service unavailable &lt;br /&gt;
*Circuit not available &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
The route retry will not proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*User busy &lt;br /&gt;
*Unallocated number &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You can modify the route-retry sequence (continue or discontinue) to handle unsuccessful routes. For more information, refer to the NAP profile. For more details see the route retry page.&amp;lt;br&amp;gt;These parameters can be modified here:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Profiles -&amp;amp;gt; default [Edit] -&amp;amp;gt; Edit Reason Cause mapping &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Route retry is enabled by default. Timers and conditions on route retry can be adjusted from the configuration:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Configurations -&amp;amp;gt; Advanced &amp;lt;/pre&amp;gt; &lt;br /&gt;
NOTE: The route-retry feature is available for other types of routing as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For more details, see the [[Route retry|Route Retry]] page&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;br /&gt;
&lt;br /&gt;
== Related actions ==&lt;br /&gt;
'''Refer to the appropriate Toolpack release:'''&lt;br /&gt;
&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_D|Call Routes Settings v3.0]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_C|Call Routes Settings v2.10]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_B|Call Routes Settings v2.9]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_A|Call Routes Settings v2.8]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;other versions&amp;quot; data-expandtext=&amp;quot;Click here for other versions&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.7#Routes|Web Portal v2.7: Routes Configuration]]&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.6#Routes|Web Portal v2.6: Routes Configuration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Tmedia_Routing</id>
		<title>Tmedia Routing</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Tmedia_Routing"/>
				<updated>2019-03-28T17:58:58Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: Started to improve documentation about routing scripts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Static routing table  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Gateway_Static_Routes.png|Static Routes]]&lt;br /&gt;
&lt;br /&gt;
=== Basic route matching ===&lt;br /&gt;
The static routing table uses parameters from the incoming call to locate a route and then make a routing decision. These parameters are called incoming call attributes. Three parameters are verified:&amp;lt;br&amp;gt; &lt;br /&gt;
A route will match an incoming call if all the route matching parameters are met.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Multiple routes may be a match for a call.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following criteria are available for basic route matching:&lt;br /&gt;
*Called number &lt;br /&gt;
*Calling number &lt;br /&gt;
*Incoming Network Access Point (NAP)&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number matching ====&lt;br /&gt;
Calling / called number matching works as follows:&lt;br /&gt;
*'''Field can be empty: '''this means any number will match &lt;br /&gt;
*'''Field can be a specific number: '''this means the exact number must match &lt;br /&gt;
*'''Field can be a regular expression match:'''&lt;br /&gt;
*'''Field can be a sip user and sip host:''' such as user@sip_host:sip_port&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Number Routing filter example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^1?450[0-9]{7}$/&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match an optional 1, followed by 450, then 7 digits&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; SIP user/host routing example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. 5551212@abc.com&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This number must match exactly 5551212 for sip host abc.com only &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NAP matching ====&lt;br /&gt;
The Network Access Point can be SS7, ISDN, CAS or SIP.&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basic (per-route) call attributes remapping ===&lt;br /&gt;
Once the route(s) have been chosen, some call parameters can be modified using the parameters of the route: &lt;br /&gt;
==== Outgoing call parameters remapping ====&lt;br /&gt;
*'''Remapped Called Number:''' New called number used on the outgoing calls &lt;br /&gt;
*'''Remapped Calling Number: '''New calling number used on the outgoing calls &lt;br /&gt;
*'''Remapped NAP:''' determines on which Network Access Point (NAP)&amp;amp;nbsp;the outgoing calls are sent. &lt;br /&gt;
*'''Outgoing call remapped Profile: '''Select the profile to use with the outgoing call when this route is used, otherwise NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Source call leg parameters remapping ====&lt;br /&gt;
Some parameters of the source call leg can also be modified:&lt;br /&gt;
*'''Source call remapped Profile: '''Select the profile to use with the source call leg when this route is used, otherwise the NAP's default profile is used.&lt;br /&gt;
&lt;br /&gt;
==== Calling / called number remapping options ====&lt;br /&gt;
Calling / called number remapping works as follows:&lt;br /&gt;
*'''Field can be empty:''' In this case, the called/calling numbers from the incoming call are used for the outgoing call. &lt;br /&gt;
*'''Field can be a specific number:''' This number will be used as called (or calling) number for the outgoing call.&lt;br /&gt;
*'''Field can be a regular expression:''' Allows building the outgoing call's calling/called number through matching/replacement of incoming calling/called number. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; For example, post routing translation (remap)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Ex. /^450([0-9]*)$/\514\2&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; This regular expression replaces 450 with 514&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For a complete example, refer to: [[Toolpack: How to Use RegEx in Remapped Called and Calling Number Mask|How To Use Regular Expressions]]&lt;br /&gt;
&lt;br /&gt;
=== Multiple routes matching ===&lt;br /&gt;
The remapping parameters above (both for incoming and outgoing calls) are independent for each route.&amp;lt;br&amp;gt;&lt;br /&gt;
This allows different routes to use different NAPs, and remap the calling/called numbers differently.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ordering the routes ====&lt;br /&gt;
When multiple routes match the incoming call, the default routing script (simple_routing) will order by priority and weight.&amp;lt;br&amp;gt;&lt;br /&gt;
* Note: older routing scripts did not have priority routing enabled by default, you may need to manually update your routing scripts to enable priority routing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each route has a &amp;quot;priority&amp;quot; attribute, and a &amp;quot;weight&amp;quot; attribute. All matching routes for a given call will be ordered by priority.&amp;lt;br&amp;gt;&lt;br /&gt;
Load-sharing (based on each route's &amp;quot;weight&amp;quot;) will be applied if multiple matching routes have the same priority.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's also possible to prioritize matching routes using others algorithms, by customizing routing scripts.&lt;br /&gt;
A few examples:&lt;br /&gt;
* Round robin&lt;br /&gt;
* Least cost&lt;br /&gt;
* Per period of the day&lt;br /&gt;
&lt;br /&gt;
==== Route retry ====&lt;br /&gt;
If multiple routes match for a call, call retry may be done on subsequent routes upon failure making outgoing call on a route. For more information about route retry, refer to the following page: [[Route_retry|Route Retry]].&lt;br /&gt;
&lt;br /&gt;
=== Routes limitation ===&lt;br /&gt;
&amp;lt;u&amp;gt;Up to 2000 routes&amp;lt;/u&amp;gt; can be entered in the static routing table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: When the number of routes becomes large, this may be a sign that more advanced routing should be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 For information about label route handling, refer to [[Tmedia_Routing#Label_routing|Label Routing]] or contact [[Support:Contacting_TelcoBridges_technical_support|TelcoBridges Support]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting / importing routes ===&lt;br /&gt;
You can import or export the static routing table using the web portal. Go to: &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Export Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routes -&amp;amp;gt; Route table actions -&amp;amp;gt; Import Static Routes &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; This is the default configuration of the Media Gateway&lt;br /&gt;
&lt;br /&gt;
== Standard Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Standard scripts are used to modify the behavior of the static routing.&amp;amp;nbsp; It allows for the prioritization of routes, load sharing amongst multiple endpoints, or the modification of some call parameters. It can be enabled on any system in just a few steps. The following is a list of Scripts supported today:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*'''Simple routing (simple_routing.rb):''' Script used for the static routing table, and supports priority and weight routing per route or NAP.&lt;br /&gt;
*'''Priority routing (priority_and_weight_load_balancer.rb):''' This script routes calls according to a priority setting of matching routes. Each route has its own priority setting (if not, taken from the outgoing call's NAP priority). The [:priority] field column needs to be added in the routes and NAPs page. A smaller [:priority] value has more priority. If more than 1 route matches, the route with the lowest NAP priority will be selected first. Routes with the same priority will be randomly ordered using the &amp;quot;weight&amp;quot; column so load is distributed among routes with same priority. &lt;br /&gt;
*'''ASR routing (asr_routing.rb):''' This script routes calls according to the ASR values of the destination naps. This kind of routing will try to improve overall system ASR by always using the best NAPs. It will also improve client perception by cleanly dropping calls that would almost certainly fail anyway. &lt;br /&gt;
*'''Nature of Address and Numbering plan indicator remapping (noa_npi_remap.rb): '''Enables the modification of the NOA and NPI values on outgoing calls. &lt;br /&gt;
*'''Least Cost Routing (least_cost_routing.rb):''' This script routes calls according to the cost values (which may depend on the time) of the routes. This is useful for cases when a route's popularity (cost) depends on the time of the day. This is done by adding different columns to the static routing tables (for example [:cost_0_6]) and filling them up with values for each route.&lt;br /&gt;
&lt;br /&gt;
Learn how to setup Standard Scripts in your gateway by following these steps: [[How to Setup Standard Scripts|How to Setup Standard Scripts]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other standard routing scripts implement Filters and are covered in the next section.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Filters&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Adds functionality to standard scripts. Filters can be added to any standard script in a few steps. For example, you may want to remove the '1' prefix for uniformed routing, select the SIP Request URI to route the call instead of the called number, and more. &lt;br /&gt;
&lt;br /&gt;
=== Types of filters ===&lt;br /&gt;
&lt;br /&gt;
==== Before filter (before_filter) ====&lt;br /&gt;
* Adds pre-processing on incoming parameters before other filters are applied&lt;br /&gt;
* Calls a user-defined method that can modify incoming call's attributes before other filters process the call&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
In the main script, attach the filter:&lt;br /&gt;
  before_filter :method =&amp;gt; :my_custom_method, :my_param =&amp;gt; &amp;quot;some value&amp;quot;&lt;br /&gt;
In another script file, define the following methods:&lt;br /&gt;
  # Called once when the configuration is applied&lt;br /&gt;
  # Used to prepare the filter, process routes, NAPs, etc.&lt;br /&gt;
  def init_my_custom_method( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :routes ]   All routes in your configuration with all their attributes&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
    #  - params[ :naps ]     All NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified, though this function may clone them to another array if necessary.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # Called once per incoming call&lt;br /&gt;
  def init_my_custom_method( params )&lt;br /&gt;
    # params contains:&lt;br /&gt;
    #  - The parameters you passed when attached this filter in your main script&lt;br /&gt;
    #  - params[ :call]      All attributes of the incoming call to route.&lt;br /&gt;
    #                        Can be modified. Will affect subsequent filters, and routing output.&lt;br /&gt;
    #  - params[ :routes ]   All routes in your configuration with all their attributes.&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
    #  - params[ :naps ]     All NAPs in the configuration and their attributes&lt;br /&gt;
    #                        Cannot be modified.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
*'''After filter: '''Adds post-processing on outgoing parameters&lt;br /&gt;
&lt;br /&gt;
=== Filter Scripts examples:  ===&lt;br /&gt;
&lt;br /&gt;
*'''Request-URI routing (ruri.rb):''' Will route the call on SIP RURI instead of the to: field &lt;br /&gt;
*'''Modify the Nature of Address (noa_npi_remap.rb):''' We can use this to change the NOA to national or international &lt;br /&gt;
*'''Remove Loop (FilterRemoveLoop.rb): '''Will prevent calls from being routed back to the sender &lt;br /&gt;
*'''Load sharing on NAP groups or on route groups (nap_group_weight_retry_with_overload.rb):''' This is a powerful script that allows for a regrouping of NAPs of the same kind, distributes loads among them, and prioritizes one group versus another.&amp;amp;nbsp; Alternatively, you can do the same on routes. You need to add two columns to the NAPs (or the routes), one called &amp;quot;group&amp;quot; and one called &amp;quot;weight&amp;quot;. Groups of lower value will have a higher priority (group=0 has more priority than group=10). The calls will be distributed according to the weight value. To have an equal number of calls on each destination, use the same weight value (weight=10). See [[Adding Load Sharing to Routing Script|Adding Load Sharing to Routing Script]]&amp;lt;br&amp;gt; &lt;br /&gt;
*'''Black and White listing (black_white_listing.rb):''' With this script, any called or calling number prefix can be blacklisted or whitelisted. This script can be assigned globally, or per NAP. It reads a .csv file which has the called and calling number list. See [[Adding White or Black listing to Routing Script]]&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Learn how to add a Filter to normal scripts: [[How to Setup Filters|How to setup Filters]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Label routing&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts&lt;br /&gt;
Gateway -&amp;amp;gt; FileDb&lt;br /&gt;
Gateway -&amp;amp;gt; Routesets &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Label routing was created because in some cases, regular expressions cannot be used on the called number to define a route. &lt;br /&gt;
&lt;br /&gt;
Problem: Having thousands of destination numbers (N), and possibly one route per number per Network Provider (M), resulting in N*M routes&amp;lt;br&amp;gt;Solution: Create labels for each groups of numbers (L) and let the system determine the route, resulting in L*M routes, where L &amp;amp;lt; N &lt;br /&gt;
&lt;br /&gt;
A Label is a virtual group of destination numbers. This virtual group has a list of numbers assigned to it in a CSV file.&amp;lt;br&amp;gt;This process does the routing in 2 stages:&amp;lt;br&amp;gt;1st stage - Find a Label: Find longest prefix match entry for the called number. This leads to only one destination Label. This is the Digitmap file.&amp;lt;br&amp;gt;2nd stage - Find the NAPs serving a Label: All routes tied to this Label are eligible for routing the call. This is the routeset definition file. &lt;br /&gt;
&lt;br /&gt;
What are the advantages compared to static routing?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Can have thousands of numbers &lt;br /&gt;
*It uses a non linear search algorithms; therefore, there is no overhead to having a large amount of numbers. Label routing was tested with 5 million entries.&lt;br /&gt;
*Variables can be added to the routeset definition file to use other filter scripts and have even more flexibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Example usage:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*NPA-NXX routing &lt;br /&gt;
*Blacklisting &lt;br /&gt;
*Tandem switch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
See here for complete details: [[Routeset Routing|Label routing]] and [[Adding_Label_Routing_to_any_Routing_Script|Adding Label Routing to any Routing Script]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Custom Routing Scripts&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Routing scripts &amp;lt;/pre&amp;gt; &lt;br /&gt;
Customers can create their own routing scripts using a Scriptable Routing Engine based on Ruby. These scripts can be imported and exported from the Web portal.&amp;lt;br&amp;gt;These scripts can run complex routing algorithms and post routing translation, as well as other advanced functions. It is also possible to modify standard Scripts, or filters, to satisfy more complex scenarios&amp;lt;br&amp;gt;The functions have control over many call parameters such as:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Calling &lt;br /&gt;
*Called &lt;br /&gt;
*Nature of Address &lt;br /&gt;
*Calling Presentation &lt;br /&gt;
*Calling Screening &lt;br /&gt;
*Redirecting Number &lt;br /&gt;
*Original Called Number, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The complete list is in the [[Routing script tutorial:Mini Development Guide|Routing Script Tutorial]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Custom routing script are kept on software upgrades. Versionning of routing scripts needs to be handled by the operator of the unit. The new scripts (with the same names, but a new version) can be manually replaced directly in the routing script page.&amp;lt;br&amp;gt;It is possible to test routing scripts directly from the web portal before activating them in a live system.&amp;lt;br&amp;gt;For complete details, refer to [[Scriptable Routing Engine|Scriptable Routing Engine]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Playing prompts&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request for prompts playback at various states of the call. See  [[Routing_script_tutorial:Mini_Development_Guide#Playing_prompts_announcements_or_tones|Playing prompts announcements or tones]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;br&amp;gt;Recording calls&amp;lt;br&amp;gt;  ===&lt;br /&gt;
You can use routing scripts to request the recording of incoming and/or outgoing call legs to audio files. See  [[Routing_script_tutorial:Mini_Development_Guide#Recording_call_legs|Recording Calls]].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br&amp;gt;Route retry&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
The routing engine returns all matching routes to the system. The TMG-CONTROL then generates an outgoing call using the first route in the list. If the call fails, the TMG-CONTROL may or may not generate another call, according to the error code received. &lt;br /&gt;
&lt;br /&gt;
The route retry will proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Service unavailable &lt;br /&gt;
*Circuit not available &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
The route retry will not proceed with another route, if the return code is:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*User busy &lt;br /&gt;
*Unallocated number &lt;br /&gt;
*and more...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You can modify the route-retry sequence (continue or discontinue) to handle unsuccessful routes. For more information, refer to the NAP profile. For more details see the route retry page.&amp;lt;br&amp;gt;These parameters can be modified here:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Profiles -&amp;amp;gt; default [Edit] -&amp;amp;gt; Edit Reason Cause mapping &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Route retry is enabled by default. Timers and conditions on route retry can be adjusted from the configuration:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;Gateway -&amp;amp;gt; Configurations -&amp;amp;gt; Advanced &amp;lt;/pre&amp;gt; &lt;br /&gt;
NOTE: The route-retry feature is available for other types of routing as well. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For more details, see the [[Route retry|Route Retry]] page&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Tmedia_Features]]&lt;br /&gt;
&lt;br /&gt;
== Related actions ==&lt;br /&gt;
'''Refer to the appropriate Toolpack release:'''&lt;br /&gt;
&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_D|Call Routes Settings v3.0]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_C|Call Routes Settings v2.10]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_B|Call Routes Settings v2.9]]&lt;br /&gt;
*[[Toolpack:Call_Routes_Settings_A|Call Routes Settings v2.8]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;other versions&amp;quot; data-expandtext=&amp;quot;Click here for other versions&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.7#Routes|Web Portal v2.7: Routes Configuration]]&lt;br /&gt;
*[[Web_Portal_Tutorial_Guide_v2.6#Routes|Web Portal v2.6: Routes Configuration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Toolpack:Certificates</id>
		<title>Toolpack:Certificates</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Toolpack:Certificates"/>
				<updated>2019-03-14T15:05:12Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides useful shell commands and instructions to create and manipulate certificates with FreeSBC.&lt;br /&gt;
&lt;br /&gt;
== Installing a custom private key and local certificate on FreeSBC ==&lt;br /&gt;
&lt;br /&gt;
[[Create_A_SIP_Certificate_A#Upload_local_certificates_.28optional.29|See documentation here]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use FreeSBC (or Linux) shell to manipulate certificates ==&lt;br /&gt;
You can use FreeSBC's shell (or most Linux hosts' shell as long as OpenSSL is installed) to create and view private keys, certificates and CSRs (certificate signing requests).&lt;br /&gt;
&lt;br /&gt;
=== Create new private key ===&lt;br /&gt;
  openssl genrsa -des3 -out MY_PRIVATE_KEY.pem 2048&lt;br /&gt;
  &lt;br /&gt;
You will be prompted to enter a passphrase:&lt;br /&gt;
  Generating RSA private key, 2048 bit long modulus&lt;br /&gt;
  .....................+++&lt;br /&gt;
  ..............................+++&lt;br /&gt;
  e is 65537 (0x10001)&lt;br /&gt;
  Enter pass phrase for MY_PRIVATE_KEY.pem:&lt;br /&gt;
  Verifying - Enter pass phrase for MY_PRIVATE_KEY.pem:&lt;br /&gt;
&lt;br /&gt;
Resulting file:&lt;br /&gt;
  -rw-r--r-- 1 root root 1704 Mar 14 09:15 MY_PRIVATE_KEY.key&lt;br /&gt;
&lt;br /&gt;
=== Create a self-signed certificate from a private key ===&lt;br /&gt;
  openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout MY_PRIVATE_KEY.key -out MY_CERTIFICATE.crt&lt;br /&gt;
&lt;br /&gt;
You will be prompted for some questions for certificate contents:&lt;br /&gt;
  Generating a 2048 bit RSA private key&lt;br /&gt;
  .........................................................+++&lt;br /&gt;
  ........................................................................................................................................................................................+++&lt;br /&gt;
  writing new private key to 'MY_PRIVATE_KEY.key'&lt;br /&gt;
  -----&lt;br /&gt;
  You are about to be asked to enter information that will be incorporated&lt;br /&gt;
  into your certificate request.&lt;br /&gt;
  What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
  There are quite a few fields but you can leave some blank&lt;br /&gt;
  For some fields there will be a default value,&lt;br /&gt;
  If you enter '.', the field will be left blank.&lt;br /&gt;
  -----&lt;br /&gt;
  Country Name (2 letter code) [XX]:CA&lt;br /&gt;
  State or Province Name (full name) []:Quebec&lt;br /&gt;
  Locality Name (eg, city) [Default City]:Boucherville&lt;br /&gt;
  Organization Name (eg, company) [Default Company Ltd]:TelcoBridges&lt;br /&gt;
  Organizational Unit Name (eg, section) []:&lt;br /&gt;
  Common Name (eg, your name or your server's hostname) []:MyFreeSBC&lt;br /&gt;
  Email Address []:support@telcobridges.com&lt;br /&gt;
  &lt;br /&gt;
Resulting files:&lt;br /&gt;
  -rw-r--r-- 1 root root 1415 Mar 14 09:15 MY_CERTIFICATE.crt&lt;br /&gt;
  -rw-r--r-- 1 root root 1751 Mar 14 09:14 MY_PRIVATE_KEY.pem&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
=== Create a CSR (certificate signing request) from a private key ===&lt;br /&gt;
  openssl req -key MY_PRIVATE_KEY.key -new -out MY_CSR.csr&lt;br /&gt;
You will be prompted for some questions for certificate contents:&lt;br /&gt;
  You are about to be asked to enter information that will be incorporated&lt;br /&gt;
  into your certificate request.&lt;br /&gt;
  What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
  There are quite a few fields but you can leave some blank&lt;br /&gt;
  For some fields there will be a default value,&lt;br /&gt;
  If you enter '.', the field will be left blank.&lt;br /&gt;
  -----&lt;br /&gt;
  Country Name (2 letter code) [XX]:CA&lt;br /&gt;
  State or Province Name (full name) []:Quebec&lt;br /&gt;
  Locality Name (eg, city) [Default City]:Boucherville&lt;br /&gt;
  Organization Name (eg, company) [Default Company Ltd]:TelcoBridges&lt;br /&gt;
  Organizational Unit Name (eg, section) []:&lt;br /&gt;
  Common Name (eg, your name or your server's hostname) []:MyFreeSBC&lt;br /&gt;
  Email Address []:support@telcobridges.com&lt;br /&gt;
  &lt;br /&gt;
  Please enter the following 'extra' attributes&lt;br /&gt;
  to be sent with your certificate request&lt;br /&gt;
  A challenge password []:my_password&lt;br /&gt;
  An optional company name []:TelcoBridges&lt;br /&gt;
&lt;br /&gt;
Resulting files:&lt;br /&gt;
  -rw-r--r-- 1 root root 1127 Mar 14 09:20 MY_CSR.csr&lt;br /&gt;
&lt;br /&gt;
=== View a certificate contents ===&lt;br /&gt;
  openssl x509 -noout -text -in MY_CERTIFICATE.crt&lt;br /&gt;
&lt;br /&gt;
Resulting output:&lt;br /&gt;
  Certificate:&lt;br /&gt;
      Data:&lt;br /&gt;
          Version: 3 (0x2)&lt;br /&gt;
          Serial Number:&lt;br /&gt;
              f3:fc:c5:72:ea:a9:50:a6&lt;br /&gt;
      Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
          Issuer: C=CA, ST=Quebec, L=Boucherville, O=TelcoBridges, CN=MyFreeSBC/emailAddress=support@telcobridges.com&lt;br /&gt;
          Validity&lt;br /&gt;
              Not Before: Mar 14 13:15:53 2019 GMT&lt;br /&gt;
              Not After : Mar 13 13:15:53 2020 GMT&lt;br /&gt;
          Subject: C=CA, ST=Quebec, L=Boucherville, O=TelcoBridges, CN=MyFreeSBC/emailAddress=support@telcobridges.com&lt;br /&gt;
          Subject Public Key Info:&lt;br /&gt;
              Public Key Algorithm: rsaEncryption&lt;br /&gt;
                  Public-Key: (2048 bit)&lt;br /&gt;
                  Modulus:&lt;br /&gt;
                      00:dc:38:85:9f:75:ce:cf:7c:3b:60:20:11:d1:47:&lt;br /&gt;
                      00:39:6e:10:5c:3b:72:6e:26:09:70:7a:df:14:b3:&lt;br /&gt;
                      f4:60:fb:0d:73:69:a9:4c:4f:a0:34:12:83:1a:9b:&lt;br /&gt;
                      ce:f0:61:59:bd:f1:fb:a3:cb:84:be:a5:3b:86:e5:&lt;br /&gt;
                      e0:66:82:53:fd:69:c3:f1:cf:85:73:2d:30:a9:a5:&lt;br /&gt;
                      82:4e:e2:0f:20:de:88:9d:7a:42:d3:19:7b:09:08:&lt;br /&gt;
                      68:75:c4:36:46:23:f2:c6:05:49:e6:79:06:ce:f8:&lt;br /&gt;
                      9f:66:11:ad:e3:41:6c:f5:cb:df:3a:a4:77:a3:b3:&lt;br /&gt;
                      9b:55:f4:fc:5a:5a:c1:ae:c5:5d:0b:de:b1:1a:bc:&lt;br /&gt;
                      3d:02:b9:0c:5d:d8:57:33:66:b2:a8:c0:c2:74:16:&lt;br /&gt;
                      20:32:63:0f:8b:8f:aa:f4:aa:bc:8a:12:1b:54:e1:&lt;br /&gt;
                      87:c7:10:79:ea:1d:f3:e2:4b:b3:b5:70:d5:ec:27:&lt;br /&gt;
                      24:d3:f2:37:20:7e:f7:2c:69:21:63:50:4a:fe:a2:&lt;br /&gt;
                      98:4f:bc:c8:4b:3c:74:68:95:8e:0a:0b:42:39:d3:&lt;br /&gt;
                      cb:88:1d:55:c1:e1:61:f3:b0:64:42:6f:ec:c5:6f:&lt;br /&gt;
                      8f:f8:1c:a8:d9:5b:fc:d7:54:91:3b:0a:c4:1a:82:&lt;br /&gt;
                      d1:96:11:ca:16:b8:44:f0:48:3a:1e:e4:78:d0:14:&lt;br /&gt;
                      f5:1d&lt;br /&gt;
                  Exponent: 65537 (0x10001)&lt;br /&gt;
          X509v3 extensions:&lt;br /&gt;
              X509v3 Subject Key Identifier:&lt;br /&gt;
                  9C:DA:43:3C:BC:E6:B1:8B:E7:B4:1C:AB:39:14:66:72:F5:C2:D6:25&lt;br /&gt;
              X509v3 Authority Key Identifier:&lt;br /&gt;
                  keyid:9C:DA:43:3C:BC:E6:B1:8B:E7:B4:1C:AB:39:14:66:72:F5:C2:D6:25&lt;br /&gt;
  &lt;br /&gt;
              X509v3 Basic Constraints:&lt;br /&gt;
                  CA:TRUE&lt;br /&gt;
      Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
           4c:96:41:e8:ff:d8:79:e0:db:22:ec:a2:10:1b:c0:88:f3:83:&lt;br /&gt;
           60:b1:2d:91:06:15:a4:96:4a:9a:fb:3c:39:a4:48:04:a9:55:&lt;br /&gt;
           1b:b5:c2:c8:08:e0:70:d7:03:c5:e1:1d:f7:0c:3d:38:49:aa:&lt;br /&gt;
           9b:85:1f:d2:6b:61:f5:10:9a:c7:0a:ff:34:a4:e9:d5:0b:cd:&lt;br /&gt;
           2a:90:84:07:ac:74:7f:d9:e1:dd:33:dd:ae:8c:5a:61:ec:20:&lt;br /&gt;
           d3:6e:7c:e5:be:46:94:b4:bc:da:54:80:12:28:5b:12:80:a1:&lt;br /&gt;
           ad:86:6a:f9:dc:1f:f8:a5:cb:ab:2a:30:5d:f8:19:9f:e8:82:&lt;br /&gt;
           9b:32:b7:cc:d5:f9:7d:3b:35:51:8b:a5:39:e3:71:84:37:09:&lt;br /&gt;
           20:e0:d9:6c:6f:37:76:49:3a:01:ea:ce:8b:71:74:fe:29:2c:&lt;br /&gt;
           84:3d:3b:9e:6c:50:64:53:36:90:6e:49:ce:40:fd:80:c7:25:&lt;br /&gt;
           31:d5:49:42:0f:c7:37:9a:9e:99:6b:37:3e:9a:71:a7:a2:87:&lt;br /&gt;
           19:1d:a3:44:48:b8:c3:65:c1:55:b2:0c:57:e8:0f:a6:f2:a5:&lt;br /&gt;
           b4:d3:50:04:fe:fd:86:2c:c2:0a:c2:20:aa:81:26:48:34:3a:&lt;br /&gt;
           3d:a6:2e:1b:eb:d7:b9:f1:a2:ad:7a:42:37:81:63:02:ac:3b:&lt;br /&gt;
           e6:01:6b:10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== View a certificate signing request (CSR) ===&lt;br /&gt;
  openssl req -text -noout -verify -in MY_CSR.csr&lt;br /&gt;
&lt;br /&gt;
Resulting output:&lt;br /&gt;
  verify OK&lt;br /&gt;
  Certificate Request:&lt;br /&gt;
      Data:&lt;br /&gt;
          Version: 0 (0x0)&lt;br /&gt;
          Subject: C=CA, ST=Quebec, L=Boucherville, O=TelcoBridges, CN=MyFreeSBC/emailAddress=support@telcobridges.com&lt;br /&gt;
          Subject Public Key Info:&lt;br /&gt;
              Public Key Algorithm: rsaEncryption&lt;br /&gt;
                  Public-Key: (2048 bit)&lt;br /&gt;
                  Modulus:&lt;br /&gt;
                      00:dc:38:85:9f:75:ce:cf:7c:3b:60:20:11:d1:47:&lt;br /&gt;
                      00:39:6e:10:5c:3b:72:6e:26:09:70:7a:df:14:b3:&lt;br /&gt;
                      f4:60:fb:0d:73:69:a9:4c:4f:a0:34:12:83:1a:9b:&lt;br /&gt;
                      ce:f0:61:59:bd:f1:fb:a3:cb:84:be:a5:3b:86:e5:&lt;br /&gt;
                      e0:66:82:53:fd:69:c3:f1:cf:85:73:2d:30:a9:a5:&lt;br /&gt;
                      82:4e:e2:0f:20:de:88:9d:7a:42:d3:19:7b:09:08:&lt;br /&gt;
                      68:75:c4:36:46:23:f2:c6:05:49:e6:79:06:ce:f8:&lt;br /&gt;
                      9f:66:11:ad:e3:41:6c:f5:cb:df:3a:a4:77:a3:b3:&lt;br /&gt;
                      9b:55:f4:fc:5a:5a:c1:ae:c5:5d:0b:de:b1:1a:bc:&lt;br /&gt;
                      3d:02:b9:0c:5d:d8:57:33:66:b2:a8:c0:c2:74:16:&lt;br /&gt;
                      20:32:63:0f:8b:8f:aa:f4:aa:bc:8a:12:1b:54:e1:&lt;br /&gt;
                      87:c7:10:79:ea:1d:f3:e2:4b:b3:b5:70:d5:ec:27:&lt;br /&gt;
                      24:d3:f2:37:20:7e:f7:2c:69:21:63:50:4a:fe:a2:&lt;br /&gt;
                      98:4f:bc:c8:4b:3c:74:68:95:8e:0a:0b:42:39:d3:&lt;br /&gt;
                      cb:88:1d:55:c1:e1:61:f3:b0:64:42:6f:ec:c5:6f:&lt;br /&gt;
                      8f:f8:1c:a8:d9:5b:fc:d7:54:91:3b:0a:c4:1a:82:&lt;br /&gt;
                      d1:96:11:ca:16:b8:44:f0:48:3a:1e:e4:78:d0:14:&lt;br /&gt;
                      f5:1d&lt;br /&gt;
                  Exponent: 65537 (0x10001)&lt;br /&gt;
          Attributes:&lt;br /&gt;
              challengePassword        :my_password&lt;br /&gt;
              unstructuredName         :TelcoBridges&lt;br /&gt;
      Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
           85:98:17:25:45:42:f6:44:f0:51:ca:42:32:92:e6:0e:a6:9d:&lt;br /&gt;
           59:73:1c:82:c6:9b:c1:b7:17:00:77:f3:42:52:86:d6:08:a8:&lt;br /&gt;
           30:99:02:41:c6:c2:22:b2:98:b9:f7:83:b9:b0:ab:5b:59:95:&lt;br /&gt;
           9c:32:3b:9b:15:1c:4c:90:d1:bb:cf:fb:85:c4:5d:df:df:9e:&lt;br /&gt;
           18:1b:f8:5b:b5:68:60:0f:d8:c6:5d:29:0c:54:b3:63:88:0c:&lt;br /&gt;
           05:59:34:ad:c0:11:5b:e9:fb:e8:8c:c1:b5:5f:83:60:78:05:&lt;br /&gt;
           b7:7e:66:d7:1a:59:5a:2e:b3:9c:c2:38:68:29:bf:44:51:da:&lt;br /&gt;
           c9:2b:c3:f1:47:3c:d4:ce:4a:b2:8f:7d:6a:72:46:13:a8:97:&lt;br /&gt;
           18:7e:bf:b0:33:14:ee:61:ed:94:c6:c0:19:92:14:2d:a0:8c:&lt;br /&gt;
           b1:a2:c1:61:40:62:90:7c:64:09:52:ec:b6:fd:cb:fe:56:3f:&lt;br /&gt;
           6e:de:e3:38:93:ee:e4:26:33:59:6c:3f:4f:36:87:de:96:4d:&lt;br /&gt;
           c4:bd:ce:35:b2:79:16:38:f5:84:c8:ce:4a:27:11:6b:4b:0d:&lt;br /&gt;
           9b:9f:dd:63:87:ca:23:12:8c:64:3b:c7:f0:46:e8:bd:e0:e7:&lt;br /&gt;
           35:9d:b9:fb:aa:60:e2:48:8f:9b:6b:fb:69:2f:a5:7c:94:5a:&lt;br /&gt;
           70:4d:a6:d1&lt;br /&gt;
  &lt;br /&gt;
=== Check that a certificate and a CSR match the private key ===&lt;br /&gt;
  openssl x509 -noout -modulus -in MY_CERTIFICATE.crt | openssl md5&lt;br /&gt;
  openssl rsa -noout -modulus -in MY_PRIVATE_KEY.key | openssl md5&lt;br /&gt;
  openssl req -noout -modulus -in MY_CSR.csr | openssl md5&lt;br /&gt;
&lt;br /&gt;
All 3 commands should display the same MD5 hash:&lt;br /&gt;
  (stdin)= 41c46eddc15580673fe4adb8f5255634&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Toolpack:Certificates</id>
		<title>Toolpack:Certificates</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Toolpack:Certificates"/>
				<updated>2019-03-14T15:04:07Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: Created page with &amp;quot;This page provides useful shell commands and instructions to create and manipulate certificates with FreeSBC.  == Installing a custom private key and local certificate on Free...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides useful shell commands and instructions to create and manipulate certificates with FreeSBC.&lt;br /&gt;
&lt;br /&gt;
== Installing a custom private key and local certificate on FreeSBC ==&lt;br /&gt;
&lt;br /&gt;
[[Toolpack:Tsbc_TLS_Profiles#Upload_local_certificates_.28optional.29|See documentation here]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use FreeSBC (or Linux) shell to manipulate certificates ==&lt;br /&gt;
You can use FreeSBC's shell (or most Linux hosts' shell as long as OpenSSL is installed) to create and view private keys, certificates and CSRs (certificate signing requests).&lt;br /&gt;
&lt;br /&gt;
=== Create new private key ===&lt;br /&gt;
  openssl genrsa -des3 -out MY_PRIVATE_KEY.pem 2048&lt;br /&gt;
  &lt;br /&gt;
You will be prompted to enter a passphrase:&lt;br /&gt;
  Generating RSA private key, 2048 bit long modulus&lt;br /&gt;
  .....................+++&lt;br /&gt;
  ..............................+++&lt;br /&gt;
  e is 65537 (0x10001)&lt;br /&gt;
  Enter pass phrase for MY_PRIVATE_KEY.pem:&lt;br /&gt;
  Verifying - Enter pass phrase for MY_PRIVATE_KEY.pem:&lt;br /&gt;
&lt;br /&gt;
Resulting file:&lt;br /&gt;
  -rw-r--r-- 1 root root 1704 Mar 14 09:15 MY_PRIVATE_KEY.key&lt;br /&gt;
&lt;br /&gt;
=== Create a self-signed certificate from a private key ===&lt;br /&gt;
  openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout MY_PRIVATE_KEY.key -out MY_CERTIFICATE.crt&lt;br /&gt;
&lt;br /&gt;
You will be prompted for some questions for certificate contents:&lt;br /&gt;
  Generating a 2048 bit RSA private key&lt;br /&gt;
  .........................................................+++&lt;br /&gt;
  ........................................................................................................................................................................................+++&lt;br /&gt;
  writing new private key to 'MY_PRIVATE_KEY.key'&lt;br /&gt;
  -----&lt;br /&gt;
  You are about to be asked to enter information that will be incorporated&lt;br /&gt;
  into your certificate request.&lt;br /&gt;
  What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
  There are quite a few fields but you can leave some blank&lt;br /&gt;
  For some fields there will be a default value,&lt;br /&gt;
  If you enter '.', the field will be left blank.&lt;br /&gt;
  -----&lt;br /&gt;
  Country Name (2 letter code) [XX]:CA&lt;br /&gt;
  State or Province Name (full name) []:Quebec&lt;br /&gt;
  Locality Name (eg, city) [Default City]:Boucherville&lt;br /&gt;
  Organization Name (eg, company) [Default Company Ltd]:TelcoBridges&lt;br /&gt;
  Organizational Unit Name (eg, section) []:&lt;br /&gt;
  Common Name (eg, your name or your server's hostname) []:MyFreeSBC&lt;br /&gt;
  Email Address []:support@telcobridges.com&lt;br /&gt;
  &lt;br /&gt;
Resulting files:&lt;br /&gt;
  -rw-r--r-- 1 root root 1415 Mar 14 09:15 MY_CERTIFICATE.crt&lt;br /&gt;
  -rw-r--r-- 1 root root 1751 Mar 14 09:14 MY_PRIVATE_KEY.pem&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
=== Create a CSR (certificate signing request) from a private key ===&lt;br /&gt;
  openssl req -key MY_PRIVATE_KEY.key -new -out MY_CSR.csr&lt;br /&gt;
You will be prompted for some questions for certificate contents:&lt;br /&gt;
  You are about to be asked to enter information that will be incorporated&lt;br /&gt;
  into your certificate request.&lt;br /&gt;
  What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
  There are quite a few fields but you can leave some blank&lt;br /&gt;
  For some fields there will be a default value,&lt;br /&gt;
  If you enter '.', the field will be left blank.&lt;br /&gt;
  -----&lt;br /&gt;
  Country Name (2 letter code) [XX]:CA&lt;br /&gt;
  State or Province Name (full name) []:Quebec&lt;br /&gt;
  Locality Name (eg, city) [Default City]:Boucherville&lt;br /&gt;
  Organization Name (eg, company) [Default Company Ltd]:TelcoBridges&lt;br /&gt;
  Organizational Unit Name (eg, section) []:&lt;br /&gt;
  Common Name (eg, your name or your server's hostname) []:MyFreeSBC&lt;br /&gt;
  Email Address []:support@telcobridges.com&lt;br /&gt;
  &lt;br /&gt;
  Please enter the following 'extra' attributes&lt;br /&gt;
  to be sent with your certificate request&lt;br /&gt;
  A challenge password []:my_password&lt;br /&gt;
  An optional company name []:TelcoBridges&lt;br /&gt;
&lt;br /&gt;
Resulting files:&lt;br /&gt;
  -rw-r--r-- 1 root root 1127 Mar 14 09:20 MY_CSR.csr&lt;br /&gt;
&lt;br /&gt;
=== View a certificate contents ===&lt;br /&gt;
  openssl x509 -noout -text -in MY_CERTIFICATE.crt&lt;br /&gt;
&lt;br /&gt;
Resulting output:&lt;br /&gt;
  Certificate:&lt;br /&gt;
      Data:&lt;br /&gt;
          Version: 3 (0x2)&lt;br /&gt;
          Serial Number:&lt;br /&gt;
              f3:fc:c5:72:ea:a9:50:a6&lt;br /&gt;
      Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
          Issuer: C=CA, ST=Quebec, L=Boucherville, O=TelcoBridges, CN=MyFreeSBC/emailAddress=support@telcobridges.com&lt;br /&gt;
          Validity&lt;br /&gt;
              Not Before: Mar 14 13:15:53 2019 GMT&lt;br /&gt;
              Not After : Mar 13 13:15:53 2020 GMT&lt;br /&gt;
          Subject: C=CA, ST=Quebec, L=Boucherville, O=TelcoBridges, CN=MyFreeSBC/emailAddress=support@telcobridges.com&lt;br /&gt;
          Subject Public Key Info:&lt;br /&gt;
              Public Key Algorithm: rsaEncryption&lt;br /&gt;
                  Public-Key: (2048 bit)&lt;br /&gt;
                  Modulus:&lt;br /&gt;
                      00:dc:38:85:9f:75:ce:cf:7c:3b:60:20:11:d1:47:&lt;br /&gt;
                      00:39:6e:10:5c:3b:72:6e:26:09:70:7a:df:14:b3:&lt;br /&gt;
                      f4:60:fb:0d:73:69:a9:4c:4f:a0:34:12:83:1a:9b:&lt;br /&gt;
                      ce:f0:61:59:bd:f1:fb:a3:cb:84:be:a5:3b:86:e5:&lt;br /&gt;
                      e0:66:82:53:fd:69:c3:f1:cf:85:73:2d:30:a9:a5:&lt;br /&gt;
                      82:4e:e2:0f:20:de:88:9d:7a:42:d3:19:7b:09:08:&lt;br /&gt;
                      68:75:c4:36:46:23:f2:c6:05:49:e6:79:06:ce:f8:&lt;br /&gt;
                      9f:66:11:ad:e3:41:6c:f5:cb:df:3a:a4:77:a3:b3:&lt;br /&gt;
                      9b:55:f4:fc:5a:5a:c1:ae:c5:5d:0b:de:b1:1a:bc:&lt;br /&gt;
                      3d:02:b9:0c:5d:d8:57:33:66:b2:a8:c0:c2:74:16:&lt;br /&gt;
                      20:32:63:0f:8b:8f:aa:f4:aa:bc:8a:12:1b:54:e1:&lt;br /&gt;
                      87:c7:10:79:ea:1d:f3:e2:4b:b3:b5:70:d5:ec:27:&lt;br /&gt;
                      24:d3:f2:37:20:7e:f7:2c:69:21:63:50:4a:fe:a2:&lt;br /&gt;
                      98:4f:bc:c8:4b:3c:74:68:95:8e:0a:0b:42:39:d3:&lt;br /&gt;
                      cb:88:1d:55:c1:e1:61:f3:b0:64:42:6f:ec:c5:6f:&lt;br /&gt;
                      8f:f8:1c:a8:d9:5b:fc:d7:54:91:3b:0a:c4:1a:82:&lt;br /&gt;
                      d1:96:11:ca:16:b8:44:f0:48:3a:1e:e4:78:d0:14:&lt;br /&gt;
                      f5:1d&lt;br /&gt;
                  Exponent: 65537 (0x10001)&lt;br /&gt;
          X509v3 extensions:&lt;br /&gt;
              X509v3 Subject Key Identifier:&lt;br /&gt;
                  9C:DA:43:3C:BC:E6:B1:8B:E7:B4:1C:AB:39:14:66:72:F5:C2:D6:25&lt;br /&gt;
              X509v3 Authority Key Identifier:&lt;br /&gt;
                  keyid:9C:DA:43:3C:BC:E6:B1:8B:E7:B4:1C:AB:39:14:66:72:F5:C2:D6:25&lt;br /&gt;
  &lt;br /&gt;
              X509v3 Basic Constraints:&lt;br /&gt;
                  CA:TRUE&lt;br /&gt;
      Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
           4c:96:41:e8:ff:d8:79:e0:db:22:ec:a2:10:1b:c0:88:f3:83:&lt;br /&gt;
           60:b1:2d:91:06:15:a4:96:4a:9a:fb:3c:39:a4:48:04:a9:55:&lt;br /&gt;
           1b:b5:c2:c8:08:e0:70:d7:03:c5:e1:1d:f7:0c:3d:38:49:aa:&lt;br /&gt;
           9b:85:1f:d2:6b:61:f5:10:9a:c7:0a:ff:34:a4:e9:d5:0b:cd:&lt;br /&gt;
           2a:90:84:07:ac:74:7f:d9:e1:dd:33:dd:ae:8c:5a:61:ec:20:&lt;br /&gt;
           d3:6e:7c:e5:be:46:94:b4:bc:da:54:80:12:28:5b:12:80:a1:&lt;br /&gt;
           ad:86:6a:f9:dc:1f:f8:a5:cb:ab:2a:30:5d:f8:19:9f:e8:82:&lt;br /&gt;
           9b:32:b7:cc:d5:f9:7d:3b:35:51:8b:a5:39:e3:71:84:37:09:&lt;br /&gt;
           20:e0:d9:6c:6f:37:76:49:3a:01:ea:ce:8b:71:74:fe:29:2c:&lt;br /&gt;
           84:3d:3b:9e:6c:50:64:53:36:90:6e:49:ce:40:fd:80:c7:25:&lt;br /&gt;
           31:d5:49:42:0f:c7:37:9a:9e:99:6b:37:3e:9a:71:a7:a2:87:&lt;br /&gt;
           19:1d:a3:44:48:b8:c3:65:c1:55:b2:0c:57:e8:0f:a6:f2:a5:&lt;br /&gt;
           b4:d3:50:04:fe:fd:86:2c:c2:0a:c2:20:aa:81:26:48:34:3a:&lt;br /&gt;
           3d:a6:2e:1b:eb:d7:b9:f1:a2:ad:7a:42:37:81:63:02:ac:3b:&lt;br /&gt;
           e6:01:6b:10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== View a certificate signing request (CSR) ===&lt;br /&gt;
  openssl req -text -noout -verify -in MY_CSR.csr&lt;br /&gt;
&lt;br /&gt;
Resulting output:&lt;br /&gt;
  verify OK&lt;br /&gt;
  Certificate Request:&lt;br /&gt;
      Data:&lt;br /&gt;
          Version: 0 (0x0)&lt;br /&gt;
          Subject: C=CA, ST=Quebec, L=Boucherville, O=TelcoBridges, CN=MyFreeSBC/emailAddress=support@telcobridges.com&lt;br /&gt;
          Subject Public Key Info:&lt;br /&gt;
              Public Key Algorithm: rsaEncryption&lt;br /&gt;
                  Public-Key: (2048 bit)&lt;br /&gt;
                  Modulus:&lt;br /&gt;
                      00:dc:38:85:9f:75:ce:cf:7c:3b:60:20:11:d1:47:&lt;br /&gt;
                      00:39:6e:10:5c:3b:72:6e:26:09:70:7a:df:14:b3:&lt;br /&gt;
                      f4:60:fb:0d:73:69:a9:4c:4f:a0:34:12:83:1a:9b:&lt;br /&gt;
                      ce:f0:61:59:bd:f1:fb:a3:cb:84:be:a5:3b:86:e5:&lt;br /&gt;
                      e0:66:82:53:fd:69:c3:f1:cf:85:73:2d:30:a9:a5:&lt;br /&gt;
                      82:4e:e2:0f:20:de:88:9d:7a:42:d3:19:7b:09:08:&lt;br /&gt;
                      68:75:c4:36:46:23:f2:c6:05:49:e6:79:06:ce:f8:&lt;br /&gt;
                      9f:66:11:ad:e3:41:6c:f5:cb:df:3a:a4:77:a3:b3:&lt;br /&gt;
                      9b:55:f4:fc:5a:5a:c1:ae:c5:5d:0b:de:b1:1a:bc:&lt;br /&gt;
                      3d:02:b9:0c:5d:d8:57:33:66:b2:a8:c0:c2:74:16:&lt;br /&gt;
                      20:32:63:0f:8b:8f:aa:f4:aa:bc:8a:12:1b:54:e1:&lt;br /&gt;
                      87:c7:10:79:ea:1d:f3:e2:4b:b3:b5:70:d5:ec:27:&lt;br /&gt;
                      24:d3:f2:37:20:7e:f7:2c:69:21:63:50:4a:fe:a2:&lt;br /&gt;
                      98:4f:bc:c8:4b:3c:74:68:95:8e:0a:0b:42:39:d3:&lt;br /&gt;
                      cb:88:1d:55:c1:e1:61:f3:b0:64:42:6f:ec:c5:6f:&lt;br /&gt;
                      8f:f8:1c:a8:d9:5b:fc:d7:54:91:3b:0a:c4:1a:82:&lt;br /&gt;
                      d1:96:11:ca:16:b8:44:f0:48:3a:1e:e4:78:d0:14:&lt;br /&gt;
                      f5:1d&lt;br /&gt;
                  Exponent: 65537 (0x10001)&lt;br /&gt;
          Attributes:&lt;br /&gt;
              challengePassword        :my_password&lt;br /&gt;
              unstructuredName         :TelcoBridges&lt;br /&gt;
      Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;
           85:98:17:25:45:42:f6:44:f0:51:ca:42:32:92:e6:0e:a6:9d:&lt;br /&gt;
           59:73:1c:82:c6:9b:c1:b7:17:00:77:f3:42:52:86:d6:08:a8:&lt;br /&gt;
           30:99:02:41:c6:c2:22:b2:98:b9:f7:83:b9:b0:ab:5b:59:95:&lt;br /&gt;
           9c:32:3b:9b:15:1c:4c:90:d1:bb:cf:fb:85:c4:5d:df:df:9e:&lt;br /&gt;
           18:1b:f8:5b:b5:68:60:0f:d8:c6:5d:29:0c:54:b3:63:88:0c:&lt;br /&gt;
           05:59:34:ad:c0:11:5b:e9:fb:e8:8c:c1:b5:5f:83:60:78:05:&lt;br /&gt;
           b7:7e:66:d7:1a:59:5a:2e:b3:9c:c2:38:68:29:bf:44:51:da:&lt;br /&gt;
           c9:2b:c3:f1:47:3c:d4:ce:4a:b2:8f:7d:6a:72:46:13:a8:97:&lt;br /&gt;
           18:7e:bf:b0:33:14:ee:61:ed:94:c6:c0:19:92:14:2d:a0:8c:&lt;br /&gt;
           b1:a2:c1:61:40:62:90:7c:64:09:52:ec:b6:fd:cb:fe:56:3f:&lt;br /&gt;
           6e:de:e3:38:93:ee:e4:26:33:59:6c:3f:4f:36:87:de:96:4d:&lt;br /&gt;
           c4:bd:ce:35:b2:79:16:38:f5:84:c8:ce:4a:27:11:6b:4b:0d:&lt;br /&gt;
           9b:9f:dd:63:87:ca:23:12:8c:64:3b:c7:f0:46:e8:bd:e0:e7:&lt;br /&gt;
           35:9d:b9:fb:aa:60:e2:48:8f:9b:6b:fb:69:2f:a5:7c:94:5a:&lt;br /&gt;
           70:4d:a6:d1&lt;br /&gt;
  &lt;br /&gt;
=== Check that a certificate and a CSR match the private key ===&lt;br /&gt;
  openssl x509 -noout -modulus -in MY_CERTIFICATE.crt | openssl md5&lt;br /&gt;
  openssl rsa -noout -modulus -in MY_PRIVATE_KEY.key | openssl md5&lt;br /&gt;
  openssl req -noout -modulus -in MY_CSR.csr | openssl md5&lt;br /&gt;
&lt;br /&gt;
All 3 commands should display the same MD5 hash:&lt;br /&gt;
  (stdin)= 41c46eddc15580673fe4adb8f5255634&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles</id>
		<title>Toolpack:Tsbc TLS Profiles</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles"/>
				<updated>2019-03-11T18:41:33Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: Minor edits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Certificates are used to provide secure connections, like HTTPs (secure connection to the web portal) or [[FreeSBC]] secure SIP calls (SIP over TLS).&lt;br /&gt;
&lt;br /&gt;
This pages describes how to import certificates and group them into TLS profiles, which is the first step to configure secure SIP on [[FreeSBC]].&lt;br /&gt;
&lt;br /&gt;
These TLS profiles can later be used to create SIP Transport servers using TLS.&lt;br /&gt;
&lt;br /&gt;
== Configuring Certificates and TLS Profiles  ==&lt;br /&gt;
{{DISPLAYTITLE:Configuring Certificates and TLS Profiles}}&lt;br /&gt;
&lt;br /&gt;
'''''Applies to version(s): v3.1 and above'''''&lt;br /&gt;
&lt;br /&gt;
Multiple TLS profiles can be created in [[Toolpack]]. A TLS profile is a collection of certificates and other settings that define the behavior of TLS connections. Multiple TLS profiles can be used to expose different certificates and options to different TLS connections in [[Toolpack]], though one TLS profile is generally enough.&lt;br /&gt;
&lt;br /&gt;
== Upload trusted certificates ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_0.png|150px]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New Certificate ''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_1.png|250px]]&lt;br /&gt;
&lt;br /&gt;
=== Configure certificate parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Select &amp;quot;Trusted&amp;quot; certificate to import a remote party's certificate to trust&lt;br /&gt;
* Drag-and-drop (or copy-paste) the certificate's text content into the appropriate text box&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
== Upload local certificates (optional) ==&lt;br /&gt;
Toolpack already contains, by default, a unique self-signed certificate (unique per Toolpack system, shared for 1+1 hosts). This certificate is used for HTTPs, and can also be used for TLS.&lt;br /&gt;
&lt;br /&gt;
In case you want to use a custom local certificate (like an officially signed certificate for your domain name), proceed as follows:&lt;br /&gt;
* Repeat the same procedure as above (but using &amp;quot;Local&amp;quot; certificate type) to import the local certificate&lt;br /&gt;
* Use ssh (command-line or using tool like Filezilla) to upload the private key to the unit to following path. Use the '''same file''' name as the local certificate name previously used to import in the web portal (except file extension):&lt;br /&gt;
   /lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_3.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
  scp my_local_cert.key root@MyFreeSbcHostName:/lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
== Create TLS profile ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_0.png|150px]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New TLS Profile''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_1.png|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Configure TLS Profile parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Decide if client authentication is required (meaning that incoming connections require remote side to present a trusted certificate)&lt;br /&gt;
* Select a local certificate (either one imported earlier, or the &amp;quot;Default&amp;quot; certificate which is automatically generated by Toolpack and is also used for HTTPS)&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
* Select one or multiple &amp;quot;trusted&amp;quot; certificates, which correspond to remote equipment's certificates (or root certificates from which remote certificates are signed)&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_3.png|500px]]&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles</id>
		<title>Toolpack:Tsbc TLS Profiles</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles"/>
				<updated>2019-03-11T18:26:52Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Certificates are used to provide secure connections, like HTTPs (secure connection to thw web portal) or secure SIP calls (SIP over TLS).&lt;br /&gt;
This pages describes how to import certificates and group them into TLS profiles.&lt;br /&gt;
&lt;br /&gt;
These TLS profiles can later be used to create SIP Transport servers using TLS.&lt;br /&gt;
&lt;br /&gt;
== Configuring Certificates and TLS Profiles  ==&lt;br /&gt;
{{DISPLAYTITLE:Configuring Certificates and TLS Profiles}}&lt;br /&gt;
&lt;br /&gt;
'''''Applies to version(s): v3.1 and above'''''&lt;br /&gt;
&lt;br /&gt;
Multiple TLS profiles can be created in [[Toolpack]]. A TLS profile is a collection of certificates and other settings that define the behavior of TLS connections. Multiple TLS profiles can be used to expose different certificates and options to different TLS connections in [[Toolpack]], though one TLS profile is generally enough.&lt;br /&gt;
&lt;br /&gt;
== Upload trusted certificates ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_0.png|150px]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New Certificate ''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_1.png|250px]]&lt;br /&gt;
&lt;br /&gt;
=== Configure certificate parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Select &amp;quot;Trusted&amp;quot; certificate to import a remote party's certificate to trust&lt;br /&gt;
* Drag-and-drop (or copy-paste) the certificate's text content into the appropriate text box&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
== Upload local certificates (optional) ==&lt;br /&gt;
Toolpack already contains, by default, a unique self-signed certificate (unique per Toolpack system, shared for 1+1 hosts). This certificate is used for HTTPs, and can also be used for TLS.&lt;br /&gt;
&lt;br /&gt;
In case you want to use a custom local certificate (like an officially signed certificate for your domain name), proceed as follows:&lt;br /&gt;
* Repeat the same procedure as above (but using &amp;quot;Local&amp;quot; certificate type) to import the local certificate&lt;br /&gt;
* Use ssh (command-line or using tool like Filezilla) to upload the private key to the unit to following path. Use the '''same file''' name as the local certificate name previously used to import in the web portal (except file extension):&lt;br /&gt;
   /lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_3.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
  scp my_local_cert.key root@MyFreeSbcHostName:/lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
== Create TLS profile ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_0.png|150px]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New TLS Profile''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_1.png|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Configure TLS Profile parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Decide if client authentication is required (meaning that incoming connections require remote side to present a trusted certificate)&lt;br /&gt;
* Select a local certificate (either one imported earlier, or the &amp;quot;Default&amp;quot; certificate which is automatically generated by Toolpack and is also used for HTTPS)&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
* Select one or multiple &amp;quot;trusted&amp;quot; certificates, which correspond to remote equipment's certificates (or root certificates from which remote certificates are signed)&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_3.png|500px]]&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles</id>
		<title>Toolpack:Tsbc TLS Profiles</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles"/>
				<updated>2019-03-11T18:23:20Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* Upload local certificates (optional) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Certificates are used to provide secure connections, like HTTPs (secure connection to thw web portal) or secure SIP calls (SIP over TLS).&lt;br /&gt;
This pages describes how to import certificates and group them into TLS profiles.&lt;br /&gt;
&lt;br /&gt;
These TLS profiles can later be used to create SIP Transport servers using TLS.&lt;br /&gt;
&lt;br /&gt;
== Configuring Certificates and TLS Profiles  ==&lt;br /&gt;
{{DISPLAYTITLE:Configuring Certificates and TLS Profiles}}&lt;br /&gt;
&lt;br /&gt;
'''''Applies to version(s): v3.1 and above'''''&lt;br /&gt;
&lt;br /&gt;
Multiple TLS profiles can be created in [[Toolpack]]. A TLS profile is a collection of certificates and other settings that define the behavior of TLS connections. Multiple TLS profiles can be used to expose different certificates and options to different TLS connections in [[Toolpack]], though one TLS profile is generally enough.&lt;br /&gt;
&lt;br /&gt;
== Upload trusted certificates ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_0.png|150px]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New Certificate ''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_1.png|250px]]&lt;br /&gt;
&lt;br /&gt;
=== Configure certificate parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Select &amp;quot;Trusted&amp;quot; certificate to import a remote party's certificate to trust&lt;br /&gt;
* Drag-and-drop (or copy-paste) the certificate's text content into the appropriate text box&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
== Upload local certificates (optional) ==&lt;br /&gt;
Toolpack already contains a unique default certificate (unique per Toolpack system, shared for 1+1 hosts). This certificate is used for HTTPs, and can also be used for TLS.&lt;br /&gt;
&lt;br /&gt;
In case you want to use a custom local certificate, proceed as follows:&lt;br /&gt;
* Repeat the same procedure as above (but using &amp;quot;Local&amp;quot; certificate type) to import the local certificate&lt;br /&gt;
* Use ssh (command-line or using tool like Filezilla) to upload the private key to the unit to following path. Use the '''same file''' name as the local certificate name previously used to import in the web portal (except file extension):&lt;br /&gt;
   /lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_3.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
  scp my_local_cert.key root@MyFreeSbcHostName:/lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
== Create TLS profile ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_0.png|150px]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New TLS Profile''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_1.png|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Configure TLS Profile parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Decide if client authentication is required (meaning that incoming connections require remote side to present a trusted certificate)&lt;br /&gt;
* Select a local certificate (either one imported earlier, or the &amp;quot;Default&amp;quot; certificate which is automatically generated by Toolpack and is also used for HTTPS)&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
* Select one or multiple &amp;quot;trusted&amp;quot; certificates, which correspond to remote equipment's certificates (or root certificates from which remote certificates are signed)&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_3.png|500px]]&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles</id>
		<title>Toolpack:Tsbc TLS Profiles</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles"/>
				<updated>2019-03-11T17:52:53Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Certificates are used to provide secure connections, like HTTPs (secure connection to thw web portal) or secure SIP calls (SIP over TLS).&lt;br /&gt;
This pages describes how to import certificates and group them into TLS profiles.&lt;br /&gt;
&lt;br /&gt;
These TLS profiles can later be used to create SIP Transport servers using TLS.&lt;br /&gt;
&lt;br /&gt;
== Configuring Certificates and TLS Profiles  ==&lt;br /&gt;
{{DISPLAYTITLE:Configuring Certificates and TLS Profiles}}&lt;br /&gt;
&lt;br /&gt;
'''''Applies to version(s): v3.1 and above'''''&lt;br /&gt;
&lt;br /&gt;
Multiple TLS profiles can be created in [[Toolpack]]. A TLS profile is a collection of certificates and other settings that define the behavior of TLS connections. Multiple TLS profiles can be used to expose different certificates and options to different TLS connections in [[Toolpack]], though one TLS profile is generally enough.&lt;br /&gt;
&lt;br /&gt;
== Upload trusted certificates ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_0.png|150px]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New Certificate ''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_1.png|250px]]&lt;br /&gt;
&lt;br /&gt;
=== Configure certificate parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Select &amp;quot;Trusted&amp;quot; certificate to import a remote party's certificate to trust&lt;br /&gt;
* Drag-and-drop (or copy-paste) the certificate's text content into the appropriate text box&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
== Upload local certificates (optional) ==&lt;br /&gt;
Toolpack already contains a unique default certificate (unique per Toolpack system, shared for 1+1 hosts). This certificate is used for HTTPs, and can also be used for TLS.&lt;br /&gt;
&lt;br /&gt;
In case you want to use a custom local certificate, proceed as follows:&lt;br /&gt;
* Repeat the same procedure as above (but using &amp;quot;Local&amp;quot; certificate type) to import the local certificate&lt;br /&gt;
* Use ssh (command-line or using tool like Filezilla) to upload the private key to the unit to following path. Use the '''same file''' name as the local certificate name previously used to import in the web portal (except file extension):&lt;br /&gt;
   /lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
[[Image:ConfigureCertificates_3.png|500px]]&lt;br /&gt;
Then:&lt;br /&gt;
  scp my_local_cert.key root@MyFreeSbcHostName:/lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
== Create TLS profile ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_0.png|150px]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New TLS Profile''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_1.png|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Configure TLS Profile parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Decide if client authentication is required (meaning that incoming connections require remote side to present a trusted certificate)&lt;br /&gt;
* Select a local certificate (either one imported earlier, or the &amp;quot;Default&amp;quot; certificate which is automatically generated by Toolpack and is also used for HTTPS)&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
* Select one or multiple &amp;quot;trusted&amp;quot; certificates, which correspond to remote equipment's certificates (or root certificates from which remote certificates are signed)&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_3.png|500px]]&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles</id>
		<title>Toolpack:Tsbc TLS Profiles</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles"/>
				<updated>2019-03-11T17:51:38Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: Adjusted images width&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Configuring Certificates and TLS Profiles  ==&lt;br /&gt;
{{DISPLAYTITLE:Configuring Certificates and TLS Profiles}}&lt;br /&gt;
&lt;br /&gt;
'''''Applies to version(s): v3.1 and above'''''&lt;br /&gt;
&lt;br /&gt;
Multiple TLS profiles can be created in [[Toolpack]]. A TLS profile is a collection of certificates and other settings that define the behavior of TLS connections. Multiple TLS profiles can be used to expose different certificates and options to different TLS connections in [[Toolpack]], though one TLS profile is generally enough.&lt;br /&gt;
&lt;br /&gt;
== Upload trusted certificates ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_0.png|150px]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New Certificate ''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_1.png|250px]]&lt;br /&gt;
&lt;br /&gt;
=== Configure certificate parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Select &amp;quot;Trusted&amp;quot; certificate to import a remote party's certificate to trust&lt;br /&gt;
* Drag-and-drop (or copy-paste) the certificate's text content into the appropriate text box&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
== Upload local certificates (optional) ==&lt;br /&gt;
Toolpack already contains a unique default certificate (unique per Toolpack system, shared for 1+1 hosts). This certificate is used for HTTPs, and can also be used for TLS.&lt;br /&gt;
&lt;br /&gt;
In case you want to use a custom local certificate, proceed as follows:&lt;br /&gt;
* Repeat the same procedure as above (but using &amp;quot;Local&amp;quot; certificate type) to import the local certificate&lt;br /&gt;
* Use ssh (command-line or using tool like Filezilla) to upload the private key to the unit to following path. Use the '''same file''' name as the local certificate name previously used to import in the web portal (except file extension):&lt;br /&gt;
   /lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
[[Image:ConfigureCertificates_3.png|500px]]&lt;br /&gt;
Then:&lt;br /&gt;
  scp my_local_cert.key root@MyFreeSbcHostName:/lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
== Create TLS profile ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_0.png|150px]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New TLS Profile''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_1.png|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Configure TLS Profile parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Decide if client authentication is required (meaning that incoming connections require remote side to present a trusted certificate)&lt;br /&gt;
* Select a local certificate (either one imported earlier, or the &amp;quot;Default&amp;quot; certificate which is automatically generated by Toolpack and is also used for HTTPS)&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
* Select one or multiple &amp;quot;trusted&amp;quot; certificates, which correspond to remote equipment's certificates (or root certificates from which remote certificates are signed)&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_3.png|500px]]&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/File:ConfigureTlsProfile_3.png</id>
		<title>File:ConfigureTlsProfile 3.png</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/File:ConfigureTlsProfile_3.png"/>
				<updated>2019-03-11T17:47:33Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/File:ConfigureTlsProfile_2.png</id>
		<title>File:ConfigureTlsProfile 2.png</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/File:ConfigureTlsProfile_2.png"/>
				<updated>2019-03-11T17:47:25Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/File:ConfigureCertificates_3.png</id>
		<title>File:ConfigureCertificates 3.png</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/File:ConfigureCertificates_3.png"/>
				<updated>2019-03-11T17:43:26Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles</id>
		<title>Toolpack:Tsbc TLS Profiles</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles"/>
				<updated>2019-03-11T17:43:16Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Configuring Certificates and TLS Profiles  ==&lt;br /&gt;
{{DISPLAYTITLE:Configuring Certificates and TLS Profiles}}&lt;br /&gt;
&lt;br /&gt;
'''''Applies to version(s): v3.1 and above'''''&lt;br /&gt;
&lt;br /&gt;
Multiple TLS profiles can be created in [[Toolpack]]. A TLS profile is a collection of certificates and other settings that define the behavior of TLS connections. Multiple TLS profiles can be used to expose different certificates and options to different TLS connections in [[Toolpack]], though one TLS profile is generally enough.&lt;br /&gt;
&lt;br /&gt;
== Upload trusted certificates ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_0.png|150px]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New Certificate ''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Configure certificate parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Select &amp;quot;Trusted&amp;quot; certificate to import a remote party's certificate to trust&lt;br /&gt;
* Drag-and-drop (or copy-paste) the certificate's text content into the appropriate text box&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_2.png]]&lt;br /&gt;
&lt;br /&gt;
== Upload local certificates (optional) ==&lt;br /&gt;
Toolpack already contains a unique default certificate (unique per Toolpack system, shared for 1+1 hosts). This certificate is used for HTTPs, and can also be used for TLS.&lt;br /&gt;
&lt;br /&gt;
In case you want to use a custom local certificate, proceed as follows:&lt;br /&gt;
* Repeat the same procedure as above (but using &amp;quot;Local&amp;quot; certificate type) to import the local certificate&lt;br /&gt;
* Use ssh (command-line or using tool like Filezilla) to upload the private key to the unit to following path. Use the '''same file''' name as the local certificate name previously used to import in the web portal (except file extension):&lt;br /&gt;
   /lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
[[Image:ConfigureCertificates_3.png]]&lt;br /&gt;
Then:&lt;br /&gt;
  scp my_local_cert.key root@MyFreeSbcHostName:/lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
== Create TLS profile ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_0.png]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New TLS Profile''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Configure TLS Profile parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Decide if client authentication is required (meaning that incoming connections require remote side to present a trusted certificate)&lt;br /&gt;
* Select a local certificate (either one imported earlier, or the &amp;quot;Default&amp;quot; certificate which is automatically generated by Toolpack and is also used for HTTPS)&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
* Select one or multiple &amp;quot;trusted&amp;quot; certificates, which correspond to remote equipment's certificates (or root certificates from which remote certificates are signed)&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_2.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_3.png]]&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/File:ConfigureTlsProfile_1.png</id>
		<title>File:ConfigureTlsProfile 1.png</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/File:ConfigureTlsProfile_1.png"/>
				<updated>2019-03-11T17:40:33Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/File:ConfigureTlsProfile_0.png</id>
		<title>File:ConfigureTlsProfile 0.png</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/File:ConfigureTlsProfile_0.png"/>
				<updated>2019-03-11T17:40:25Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles</id>
		<title>Toolpack:Tsbc TLS Profiles</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles"/>
				<updated>2019-03-11T17:40:17Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Configuring Certificates and TLS Profiles  ==&lt;br /&gt;
{{DISPLAYTITLE:Configuring Certificates and TLS Profiles}}&lt;br /&gt;
&lt;br /&gt;
'''''Applies to version(s): v3.1 and above'''''&lt;br /&gt;
&lt;br /&gt;
Multiple TLS profiles can be created in [[Toolpack]]. A TLS profile is a collection of certificates and other settings that define the behavior of TLS connections. Multiple TLS profiles can be used to expose different certificates and options to different TLS connections in [[Toolpack]], though one TLS profile is generally enough.&lt;br /&gt;
&lt;br /&gt;
== Upload trusted certificates ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_0.png|150px]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New Certificate ''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Configure certificate parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Select &amp;quot;Trusted&amp;quot; certificate to import a remote party's certificate to trust&lt;br /&gt;
* Drag-and-drop (or copy-paste) the certificate's text content into the appropriate text box&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_2.png]]&lt;br /&gt;
&lt;br /&gt;
== Upload local certificates (optional) ==&lt;br /&gt;
Toolpack already contains a unique default certificate (unique per Toolpack system, shared for 1+1 hosts). This certificate is used for HTTPs, and can also be used for TLS.&lt;br /&gt;
&lt;br /&gt;
In case you want to use a custom local certificate, proceed as follows:&lt;br /&gt;
* Repeat the same procedure as above (but using &amp;quot;Local&amp;quot; certificate type) to import the local certificate&lt;br /&gt;
* Use ssh (command-line or using tool like Filezilla) to upload the private key to the unit to following path. Use the '''same file''' name as the local certificate name previously used to import in the web portal (except file extension):&lt;br /&gt;
   /lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  scp my_local_cert.key root@MyFreeSbcHostName:/lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
== Create TLS profile ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_0.png]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New TLS Profile''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Configure TLS Profile parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Decide if client authentication is required (meaning that incoming connections require remote side to present a trusted certificate)&lt;br /&gt;
* Select a local certificate (either one imported earlier, or the &amp;quot;Default&amp;quot; certificate which is automatically generated by Toolpack and is also used for HTTPS)&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
* Select one or multiple &amp;quot;trusted&amp;quot; certificates, which correspond to remote equipment's certificates (or root certificates from which remote certificates are signed)&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_2.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_3.png]]&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/File:ConfigureCertificates_2.png</id>
		<title>File:ConfigureCertificates 2.png</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/File:ConfigureCertificates_2.png"/>
				<updated>2019-03-11T17:38:40Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/File:ConfigureCertificates_1.png</id>
		<title>File:ConfigureCertificates 1.png</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/File:ConfigureCertificates_1.png"/>
				<updated>2019-03-11T17:36:44Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles</id>
		<title>Toolpack:Tsbc TLS Profiles</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles"/>
				<updated>2019-03-11T17:36:38Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Configuring Certificates and TLS Profiles  ==&lt;br /&gt;
{{DISPLAYTITLE:Configuring Certificates and TLS Profiles}}&lt;br /&gt;
&lt;br /&gt;
'''''Applies to version(s): v3.1 and above'''''&lt;br /&gt;
&lt;br /&gt;
Multiple TLS profiles can be created in [[Toolpack]]. A TLS profile is a collection of certificates and other settings that define the behavior of TLS connections. Multiple TLS profiles can be used to expose different certificates and options to different TLS connections in [[Toolpack]], though one TLS profile is generally enough.&lt;br /&gt;
&lt;br /&gt;
== Upload trusted certificates ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_0.png|150px]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New Certificate ''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Configure certificate parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Select &amp;quot;Trusted&amp;quot; certificate to import a remote party's certificate to trust&lt;br /&gt;
* Drag-and-drop (or copy-paste) the certificate's text content into the appropriate text box&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_2.png]]&lt;br /&gt;
&lt;br /&gt;
== Upload local certificates (optional) ==&lt;br /&gt;
Toolpack already contains a unique default certificate that is unique. This certificate is used for HTTPs, and can also be used for TLS.&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_3.png]]&lt;br /&gt;
&lt;br /&gt;
In case you want to use a custom local certificate, proceed as follows:&lt;br /&gt;
* Repeat the same procedure as above (but using &amp;quot;Local&amp;quot; certificate type) to import the local certificate&lt;br /&gt;
* Use ssh (command-line or using tool like Filezilla) to upload the private key to the unit to following path. Use the '''same file''' name as the local certificate name previously used to import in the web portal (except file extension):&lt;br /&gt;
   /lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  scp my_local_cert.key root@MyFreeSbcHostName:/lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
== Create TLS profile ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_0.png]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New TLS Profile''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Configure TLS Profile parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Decide if client authentication is required (meaning that incoming connections require remote side to present a trusted certificate)&lt;br /&gt;
* Select a local certificate (either one imported earlier, or the &amp;quot;Default&amp;quot; certificate which is automatically generated by Toolpack and is also used for HTTPS)&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
* Select one or multiple &amp;quot;trusted&amp;quot; certificates, which correspond to remote equipment's certificates (or root certificates from which remote certificates are signed)&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_2.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_3.png]]&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/File:ConfigureCertificates_0.png</id>
		<title>File:ConfigureCertificates 0.png</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/File:ConfigureCertificates_0.png"/>
				<updated>2019-03-11T17:32:14Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles</id>
		<title>Toolpack:Tsbc TLS Profiles</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles"/>
				<updated>2019-03-11T17:31:56Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Configuring Certificates and TLS Profiles  ==&lt;br /&gt;
{{DISPLAYTITLE:Configuring Certificates and TLS Profiles}}&lt;br /&gt;
&lt;br /&gt;
'''''Applies to version(s): v3.1 and above'''''&lt;br /&gt;
&lt;br /&gt;
Multiple TLS profiles can be created in [[Toolpack]]. A TLS profile is a collection of certificates and other settings that define the behavior of TLS connections. Multiple TLS profiles can be used to expose different certificates and options to different TLS connections in [[Toolpack]], though one TLS profile is generally enough.&lt;br /&gt;
&lt;br /&gt;
== Upload trusted certificates ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_0.png]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New Certificate ''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Configure certificate parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Select &amp;quot;Trusted&amp;quot; certificate to import a remote party's certificate to trust&lt;br /&gt;
* Drag-and-drop (or copy-paste) the certificate's text content into the appropriate text box&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_2.png]]&lt;br /&gt;
&lt;br /&gt;
== Upload local certificates (optional) ==&lt;br /&gt;
Toolpack already contains a unique default certificate that is unique. This certificate is used for HTTPs, and can also be used for TLS.&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_3.png]]&lt;br /&gt;
&lt;br /&gt;
In case you want to use a custom local certificate, proceed as follows:&lt;br /&gt;
* Repeat the same procedure as above (but using &amp;quot;Local&amp;quot; certificate type) to import the local certificate&lt;br /&gt;
* Use ssh (command-line or using tool like Filezilla) to upload the private key to the unit to following path. Use the '''same file''' name as the local certificate name previously used to import in the web portal (except file extension):&lt;br /&gt;
   /lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  scp my_local_cert.key root@MyFreeSbcHostName:/lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
== Create TLS profile ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_0.png]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New TLS Profile''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Configure TLS Profile parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Decide if client authentication is required (meaning that incoming connections require remote side to present a trusted certificate)&lt;br /&gt;
* Select a local certificate (either one imported earlier, or the &amp;quot;Default&amp;quot; certificate which is automatically generated by Toolpack and is also used for HTTPS)&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
* Select one or multiple &amp;quot;trusted&amp;quot; certificates, which correspond to remote equipment's certificates (or root certificates from which remote certificates are signed)&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_2.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_3.png]]&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles</id>
		<title>Toolpack:Tsbc TLS Profiles</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_TLS_Profiles"/>
				<updated>2019-03-11T17:31:27Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: Draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Configuring Certificates and TLS Profiles  ==&lt;br /&gt;
{{DISPLAYTITLE:Configuring Certificates and TLS Profiles}}&lt;br /&gt;
&lt;br /&gt;
'''''Applies to version(s): v3.1 and above'''''&lt;br /&gt;
&lt;br /&gt;
Multiple TLS profiles can be created in [[Toolpack]]. A TLS profile is a collection of certificates and other settings that define the behavior of TLS connections. Multiple TLS profiles can be used to expose different certificates and options to different TLS connections in [[Toolpack]], though one TLS profile is generally enough.&lt;br /&gt;
&lt;br /&gt;
== Upload trusted certificates ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_0.png]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New Certificate ''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Configure certificate parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Select &amp;quot;Trusted&amp;quot; certificate to import a remote party's certificate to trust&lt;br /&gt;
* Drag-and-drop (or copy-paste) the certificate's text content into the appropriate text box&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_2.png]]&lt;br /&gt;
&lt;br /&gt;
== Upload local certificates (optional) ==&lt;br /&gt;
Toolpack already contains a unique default certificate that is unique. This certificate is used for HTTPs, and can also be used for TLS.&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureCertificates_3.png]]&lt;br /&gt;
&lt;br /&gt;
In case you want to use a custom local certificate, proceed as follows:&lt;br /&gt;
* Repeat the same procedure as above (but using &amp;quot;Local&amp;quot; certificate type) to import the local certificate&lt;br /&gt;
* Use ssh (command-line or using tool like Filezilla) to upload the private key to the unit to following path. Use the '''same file''' name as the local certificate name previously used to import in the web portal (except file extension):&lt;br /&gt;
   /lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  scp my_local_cert.key root@MyFreeSbcHostName:/lib/tb/toolpack/pkg/ssl_certificate/&lt;br /&gt;
&lt;br /&gt;
== Create TLS profile ==&lt;br /&gt;
&lt;br /&gt;
=== Select '''Certificates''' from the navigation panel ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_0.png]]&lt;br /&gt;
&lt;br /&gt;
=== Click ''' Create New TLS Profile''' ===&lt;br /&gt;
&lt;br /&gt;
[[Image:ConfigureTlsProfile_1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Configure TLS Profile parameters ===&lt;br /&gt;
&lt;br /&gt;
* Give a name that is meaningful to you&lt;br /&gt;
* Decide if client authentication is required (meaning that incoming connections require remote side to present a trusted certificate)&lt;br /&gt;
* Select a local certificate (either one imported earlier, or the &amp;quot;Default&amp;quot; certificate which is automatically generated by Toolpack and is also used for HTTPS)&lt;br /&gt;
* Click &amp;quot;Create&amp;quot;&lt;br /&gt;
* Select one or multiple &amp;quot;trusted&amp;quot; certificates, which correspond to remote equipment's certificates (or root certificates from which remote certificates are signed)&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_Protocol_Stack_Settings_3.0</id>
		<title>Toolpack:Tsbc Protocol Stack Settings 3.0</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Toolpack:Tsbc_Protocol_Stack_Settings_3.0"/>
				<updated>2019-03-11T14:53:50Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: Added link to TLS profiles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:FreeSBC Web Portal 3.0: Protocol Stacks}}&lt;br /&gt;
&lt;br /&gt;
'''Applies to FreeSBC and Tmedia products'''&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
Prior to configuring SIP using TLS transport (secure SIP), certificates must be created, and a TLS profile must be created using these certificates.&lt;br /&gt;
&lt;br /&gt;
Please refer to the following documentation before proceeding with steps lower on this page:&lt;br /&gt;
* [[Tsbc_TLS_Profiles|Configure certificates and TLS profiles]]&lt;br /&gt;
&lt;br /&gt;
=Protocol Stacks=&lt;br /&gt;
&lt;br /&gt;
==SIP==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | (Step 1) &amp;lt;br&amp;gt;Configure IP port range&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | (Step 2) &amp;lt;br&amp;gt;Configure SIP Signaling&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | (Step 3) &amp;lt;br&amp;gt;Modify NAP profile&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | (Step 4a) &amp;lt;br&amp;gt;Configure Network Access Points (NAPs)&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | (Step 4b) &amp;lt;br&amp;gt;Configure Network Access Points (NAPs)&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Toolpack:Creating_an_IP_Port_Range_SBC A|Create an IP port range]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Toolpack:Creating_a_SIP_Stack_SBC A|Create a SIP stack]]&lt;br /&gt;
*[[Toolpack:Creating_a_SIP_Transport_Server_SBC A|Create a SIP transport server]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
*[[Toolpack:Modify_Profile_Sbc_A|Modify profile]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Toolpack:Allocating_a_SIP_Network_Access_Point_(NAP)_SBC A|Allocate a SIP NAP]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Toolpack:Allocating_a_SIP_Open_Network_Access_Point_(NAP)_SBC A|Allocate an open SIP NAP]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SIP Register===&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | (Step 1) &lt;br /&gt;
&amp;lt;br&amp;gt;Configure SIP Domain&lt;br /&gt;
! width=&amp;quot;250&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | (Step 2) &lt;br /&gt;
Configure SIP Register Filtering Rule (Optional)&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Toolpack:Creating_a_SIP_Domain_SBC A|Create a SIP domain]]&lt;br /&gt;
*[[Toolpack:Creating_a_SIP_Registrar_SBC A|Create a SIP registrar]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Toolpack:Creating_a_SIP_Register_Filtering_Rule_A|Create a filtering rule]]&lt;br /&gt;
*[[Toolpack:Creating_a_SIP_Register_Filtering_Rule_Condition_A|Add a filtering rule condition]]&lt;br /&gt;
*[[Toolpack:Creating_a_SIP_Register_Filtering_Rule_Action_A|Add a filtering rule action]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SIP Advanced Features===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;SIP-I SIP-T&amp;quot; data-expandtext=&amp;quot;SIP-I SIP-T&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | SIP-I SIP-T&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Enabling_SIP_I_SIP_T D|Enable SIP-I SIP-T]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;SIP Spiral&amp;quot; data-expandtext=&amp;quot;SIP Spiral&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | SIP Spiral&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Enabling_SIP_Spiral D|Enable SIP Spiral]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;NAT traversal&amp;quot; data-expandtext=&amp;quot;NAT traversal&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | Remote NAT Traversal&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Enabling_Remote_NAT_Traversal_C|Enable Remote NAT Traversal]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;DNS&amp;quot; data-expandtext=&amp;quot;DNS&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | DNS&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[Toolpack:Configuring_DNS_Parameters_C|Enable DNS]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SIP Service Affecting Parameters===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-collapsetext=&amp;quot;SIP Service Affecting Parameters&amp;quot; data-expandtext=&amp;quot;SIP Service Affecting Parameters&amp;quot; style=&amp;quot;width: 400px;&amp;quot;&amp;gt;&lt;br /&gt;
When modifying the following parameters, the SIP stack will be deallocated and reallocated, resulting in a loss of active calls. Be careful when changing these parameters:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Quirks'''&lt;br /&gt;
* All Parameters&lt;br /&gt;
'''Header Parameters'''&lt;br /&gt;
*Domain Name&lt;br /&gt;
*Add rPort&lt;br /&gt;
'''DNS Parameters'''&lt;br /&gt;
*Enabled&lt;br /&gt;
*Use Cache&lt;br /&gt;
*Cache Expire Time&lt;br /&gt;
*Address and Port&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Sbc_Tutorial_Guide_v3.1</id>
		<title>Sbc Tutorial Guide v3.1</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Sbc_Tutorial_Guide_v3.1"/>
				<updated>2019-03-11T14:53:03Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* Web Portal Categories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:FreeSBC 3.1 Web Portal Tutorial Guide}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
=Introduction=&lt;br /&gt;
The Web Portal Tutorial provides you with a scenario-based approach to configuring and monitoring the status of [[FreeSBC|FreeSbc]] systems, using the Web Portal configuration tool. Complete general installation configuration steps, before you begin configuring your specific application.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
[[FreeSBC|FreeSbc]] devices must be installed as described in their respective [[Product_Installation|installation guides]].&lt;br /&gt;
&lt;br /&gt;
==Web Portal Categories==&lt;br /&gt;
Web Portal configuration and status topics are grouped into the following major categories. It is recommended that you follow this order.&lt;br /&gt;
&lt;br /&gt;
*System [[Toolpack:Tsbc System Settings 3.1|(Configuration)]] [[Toolpack:Tsbc System Status 3.1|(Status)]]&lt;br /&gt;
**Host Role&lt;br /&gt;
**SBC&lt;br /&gt;
**Access and User Management&lt;br /&gt;
**Database Backup&lt;br /&gt;
**SNMP&lt;br /&gt;
**Configuration&lt;br /&gt;
**Minor Package Upgrade&lt;br /&gt;
**Software Licenses&lt;br /&gt;
**Statistics&lt;br /&gt;
**Audit Logs&lt;br /&gt;
&lt;br /&gt;
*IP Network [[Toolpack:Tsbc IP Network Settings 3.1|(Configuration)]] [[Toolpack:Tsbc_IP_Network_Status_3.1|(Status)]]&lt;br /&gt;
**IP Network&lt;br /&gt;
**NAT&lt;br /&gt;
**Transcoding Units&lt;br /&gt;
&lt;br /&gt;
*Protocol Stack [[Toolpack:Tsbc_Protocol_Stack_Settings_3.1|(Configuration)]] [[Toolpack:Tsbc_Protocol_Stack_Status_3.1|(Status)]]&lt;br /&gt;
**Certificates and TLS Profiles [[Toolpack:Tsbc_TLS_Profiles|(Configuration)]]&lt;br /&gt;
**SIP&lt;br /&gt;
**Calls&lt;br /&gt;
**NAP&lt;br /&gt;
&lt;br /&gt;
*CDR [[Toolpack:Tsbc_CDR_Settings_3.1|(Configuration)]] &lt;br /&gt;
**Text CDR&lt;br /&gt;
**RADIUS [[Toolpack:Tsbc_CDR_Status_3.1|(Status)]]&lt;br /&gt;
&lt;br /&gt;
*Fax [[Toolpack:Tsbc_Fax_Settings_3.1|(Configuration)]]&lt;br /&gt;
**FAX passthrough (silence suppression) &lt;br /&gt;
**FAX T.38&lt;br /&gt;
**FAX passthrough (NSE) &lt;br /&gt;
**FAX passthrough (VBD) &lt;br /&gt;
&lt;br /&gt;
*Call Route [[Toolpack:Tsbc_Call Routes_Settings_3.1|(Configuration)]]&lt;br /&gt;
**Static Route&lt;br /&gt;
**Routing Script&lt;br /&gt;
**Label Routing&lt;br /&gt;
**RADIUS Authorization and Authentication [[Toolpack:Tsbc_CDR_Status_3.1|(Status)]]&lt;br /&gt;
&lt;br /&gt;
*Lawful Intercept [[Toolpack:Tsbc Lawful Interception 3.1|(Configuration)]] [[(Status)]]&lt;br /&gt;
&lt;br /&gt;
*Troubleshooting [[Toolpack:Tsbc Troubleshooting 3.1|(Configuration)]]&lt;br /&gt;
**CallTrace&lt;br /&gt;
**Test Call&lt;br /&gt;
**Target Recording&lt;br /&gt;
**Ethernet Capture&lt;br /&gt;
&lt;br /&gt;
*Use Cases [[Toolpack:Tsbc Use_Cases A|(Configuration)]]&lt;br /&gt;
**IP Network&lt;br /&gt;
**Redirect&lt;br /&gt;
**Transcoding Unit&lt;br /&gt;
&lt;br /&gt;
[[category:Toolpack]]&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/Sbc_Tutorial_Guide_v3.1</id>
		<title>Sbc Tutorial Guide v3.1</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/Sbc_Tutorial_Guide_v3.1"/>
				<updated>2019-03-11T14:52:49Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: Added link to TLS profiles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:FreeSBC 3.1 Web Portal Tutorial Guide}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
=Introduction=&lt;br /&gt;
The Web Portal Tutorial provides you with a scenario-based approach to configuring and monitoring the status of [[FreeSBC|FreeSbc]] systems, using the Web Portal configuration tool. Complete general installation configuration steps, before you begin configuring your specific application.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
[[FreeSBC|FreeSbc]] devices must be installed as described in their respective [[Product_Installation|installation guides]].&lt;br /&gt;
&lt;br /&gt;
==Web Portal Categories==&lt;br /&gt;
Web Portal configuration and status topics are grouped into the following major categories. It is recommended that you follow this order.&lt;br /&gt;
&lt;br /&gt;
*System [[Toolpack:Tsbc System Settings 3.1|(Configuration)]] [[Toolpack:Tsbc System Status 3.1|(Status)]]&lt;br /&gt;
**Host Role&lt;br /&gt;
**SBC&lt;br /&gt;
**Access and User Management&lt;br /&gt;
**Database Backup&lt;br /&gt;
**SNMP&lt;br /&gt;
**Configuration&lt;br /&gt;
**Minor Package Upgrade&lt;br /&gt;
**Software Licenses&lt;br /&gt;
**Statistics&lt;br /&gt;
**Audit Logs&lt;br /&gt;
&lt;br /&gt;
*IP Network [[Toolpack:Tsbc IP Network Settings 3.1|(Configuration)]] [[Toolpack:Tsbc_IP_Network_Status_3.1|(Status)]]&lt;br /&gt;
**IP Network&lt;br /&gt;
**NAT&lt;br /&gt;
**Transcoding Units&lt;br /&gt;
&lt;br /&gt;
*Protocol Stack [[Toolpack:Tsbc_Protocol_Stack_Settings_3.1|(Configuration)]] [[Toolpack:Tsbc_Protocol_Stack_Status_3.1|(Status)]]&lt;br /&gt;
***Certificates and TLS Profiles [[Toolpack:Tsbc_TLS_Profiles|(Configuration)]]&lt;br /&gt;
**SIP&lt;br /&gt;
**Calls&lt;br /&gt;
**NAP&lt;br /&gt;
&lt;br /&gt;
*CDR [[Toolpack:Tsbc_CDR_Settings_3.1|(Configuration)]] &lt;br /&gt;
**Text CDR&lt;br /&gt;
**RADIUS [[Toolpack:Tsbc_CDR_Status_3.1|(Status)]]&lt;br /&gt;
&lt;br /&gt;
*Fax [[Toolpack:Tsbc_Fax_Settings_3.1|(Configuration)]]&lt;br /&gt;
**FAX passthrough (silence suppression) &lt;br /&gt;
**FAX T.38&lt;br /&gt;
**FAX passthrough (NSE) &lt;br /&gt;
**FAX passthrough (VBD) &lt;br /&gt;
&lt;br /&gt;
*Call Route [[Toolpack:Tsbc_Call Routes_Settings_3.1|(Configuration)]]&lt;br /&gt;
**Static Route&lt;br /&gt;
**Routing Script&lt;br /&gt;
**Label Routing&lt;br /&gt;
**RADIUS Authorization and Authentication [[Toolpack:Tsbc_CDR_Status_3.1|(Status)]]&lt;br /&gt;
&lt;br /&gt;
*Lawful Intercept [[Toolpack:Tsbc Lawful Interception 3.1|(Configuration)]] [[(Status)]]&lt;br /&gt;
&lt;br /&gt;
*Troubleshooting [[Toolpack:Tsbc Troubleshooting 3.1|(Configuration)]]&lt;br /&gt;
**CallTrace&lt;br /&gt;
**Test Call&lt;br /&gt;
**Target Recording&lt;br /&gt;
**Ethernet Capture&lt;br /&gt;
&lt;br /&gt;
*Use Cases [[Toolpack:Tsbc Use_Cases A|(Configuration)]]&lt;br /&gt;
**IP Network&lt;br /&gt;
**Redirect&lt;br /&gt;
**Transcoding Unit&lt;br /&gt;
&lt;br /&gt;
[[category:Toolpack]]&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/SIP</id>
		<title>SIP</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/SIP"/>
				<updated>2019-03-11T14:28:03Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: Added TLS RFCs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Session Initiation Protocol, more commonly known as SIP, is a signaling protocol for packet-based networks and is commonly used, along with H.323 to provide signaling for voice over IP (VoIP) communications. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TelcoBridges and SIP ==&lt;br /&gt;
&lt;br /&gt;
[[Toolpack]] provides support for signaling using the Session Initiation Protocol, more commonly known as SIP, for voice over IP (VoIP) communications. SIP may be used in conjunction with various [[Voice_codecs|voice codecs]] for the media component of a call. TelcoBridges [[Tmedia]] media gateways and [[Tdev]] development platforms support SIP signaling concurrently with [[SS7]], [[ISDN]] and other [[Signaling_protocols|signaling protocols]].&lt;br /&gt;
&lt;br /&gt;
SIP signaling stacks are configured for IP applications and for each [[Tmedia]] or [[Tdev]] unit requiring SIP signaling.&lt;br /&gt;
&lt;br /&gt;
Based upon your system requirements, you can configure a SIP stack to carry signaling traffic over multiple transport servers, which are IP endpoints comprised of: protocol type (UDP, TCP or TLS), port number and IP interface.&lt;br /&gt;
&lt;br /&gt;
A conceptual illustration is provided below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:SIP stack conceptual illustration.png|600px| ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While TelcoBridges media gateways can perform multiple simultaneous functions such as switching and transcoding as well as deliver value-added services such as [[IVR]] or conferencing, they can also be configured to perform a single function. In this case, it is possible to configure TelcoBridges media gateway to act as a [[SIP gateway]], or a [[FreeSBC|SBC]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== TelcoBridges' SIP Implementation ===&lt;br /&gt;
TelcoBridges' SIP implementation works on top of a couple of layers, including SIP and [[TUCL]]. In the following figure, grey boxes represent entities that need allocation on the TelcoBridges equipment. The TUCL layer is a transport layer used by SIP on our architecture. TUCL presents some advantages over a simple TCP/IP stack. For instance, it adds tracing facilities to any virtual interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:TB-SIP-Architecture.jpg|400px| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Supported SIP RFCs  ===&lt;br /&gt;
&lt;br /&gt;
TelcoBridges supports the following RFCs for SIP: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Specification &lt;br /&gt;
! TMedia SIP stack support &lt;br /&gt;
! Toolpack API Support &lt;br /&gt;
! Media Gateway Application Support&lt;br /&gt;
|-&lt;br /&gt;
| RFC 2327 Session Description Protocol &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 2833 RTP Payload for DTMF Digits, Telephony Tones and Telephony Signals &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 2976 SIP INFO Method &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial: For DTMF Tones exchange only&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3204 MIME media types for ISUP and QSIG Objects &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3261 Session Initiate Protocol &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3262 Reliability of Provisional Responses in the Session Initiation Protocol (SIP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3263 Session Initiation Protocol (SIP): Locating SIP Servers &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3264 An Offer/Answer Model with the Session Description Protocol (SDP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial ('Indicating capabilities' not supported)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3265 Session Initiation Protocol (SIP)-Specific Event Notification &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3311 The Session Initiation Protocol (SIP) UPDATE Method &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (Only For Session Timer Refresh) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial: For Session Timer Refresh and SDP reception following a SIP INVITE that had no body&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3323 A Privacy Mechanism for the Session Initiation Protocol (SIP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial&amp;lt;sup&amp;gt;'''1'''&amp;lt;sup&amp;gt; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial&amp;lt;sup&amp;gt;'''1'''&amp;lt;sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3325 Private Extensions to the Session Initiation Protocol (SIP) for Asserted Identity within Trusted Networks &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (No P-Preferred-Identity) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (No P-Preferred-Identity)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3326 The Reason Header Field for the Session Initiation Protocol (SIP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3372 Session Initiation Protocol for Telephones (SIP-T) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (no ISUP MIME bodies Encryption support)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (no ISUP MIME bodies Encryption support)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3389 Real-time Transport Protocol (RTP) Payload for Comfort Noise (CN) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3398 ISUP-SIP Mapping &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3515 Refer Method &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3551 RTP Profile for Audio and Video Conferences with Minimal Control&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (For supported audio codecs, single channel)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (For supported audio codecs, single channel)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3555 MIME Type Registration of RTP Payload Formats&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (For supported audio codecs)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (For supported audio codecs)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3578 Overlap &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (Conversion of ISUP Overlap Signalling into SIP en-bloc Signalling) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (Conversion of ISUP Overlap Signalling into SIP en-bloc Signalling)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3581 An Extension to the Session Initiation Protocol (SIP) for Symmetric Response Routing &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3665 Session Initiation Protocol (SIP) Basic Call Flow Examples &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial* &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial*&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3666 Public Switched Telephone Network (PSTN) Call Flows &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3764 enumservice registration for Session Initiation Protocol (SIP) Addresses-of-Record &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3891 &amp;quot;Replaces&amp;quot; Header &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3892 Referred-By Mechanism &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
| RFC 4028 Session Timers in the Session Initiation Protocol (SIP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 4694 Number Portability Parameters for the &amp;quot;tel&amp;quot; URI &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (relay of rn and npdi SIP&amp;amp;lt;-&amp;amp;gt;SS7)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 4733 RTP Payload for DTMF Digits, Telephony Tones and Telephony Signals &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 5246 - The Transport Layer Security (TLS) Protocol Version 1.2&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| RFC 5630 - The Use of the SIPS URI Scheme in the Session Initiation Protocol&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| RFC 5806 Diversion Indication in SIP &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Unconditional forward scenario&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
['''1'''] For more information please contact [[Support:Contacting TelcoBridges technical support|customer support]].&lt;br /&gt;
&lt;br /&gt;
== Maximum Capacity ==&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! !!Release !! SIP SAP !! SIP Transport Server !! SIP NAP&lt;br /&gt;
|- &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TMG800 &lt;br /&gt;
| 2.2-2.5 || 4 || 10 || 256&lt;br /&gt;
|-&lt;br /&gt;
| 2.6+     || 16 || 16 || 512&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TMG3200 &lt;br /&gt;
| 2.2-2.5 || 4 || 10 || 256&lt;br /&gt;
|-&lt;br /&gt;
| 2.6+     || 16 || 16 || 512&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TMG7800&lt;br /&gt;
| 2.2-2.5 || 64 &amp;lt;br/&amp;gt; (4/Tmedia) || 160&amp;lt;br/&amp;gt; (10/Tmedia) || 256&lt;br /&gt;
|-&lt;br /&gt;
| 2.6+     || 256&amp;lt;br/&amp;gt; (16/Tmedia) || 256&amp;lt;br/&amp;gt; (16/Tmedia) || 512&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Configuration  ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | FreeSBC&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | Tmedia/Tsig/Tdev&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
*[[Toolpack:Tsbc_Protocol_Stack_Settings_3.0|v3.0: SIP Signaling]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
*[[Toolpack:Protocol_Stack_Settings_D#SIP|v3.0: SIP Signaling]]&lt;br /&gt;
*[[Toolpack:Protocol_Stack_Settings_C#SIP|v2.10: SIP Signaling]]&lt;br /&gt;
*[[Toolpack:Protocol_Stack_Settings_B#SIP|v2.9: SIP Signaling]]&lt;br /&gt;
*[[Toolpack:Protocol_Stack_Settings_A#SIP|v2.8: SIP Signaling]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Session_Initiation_Protocol Wikipedia article]&lt;br /&gt;
*[http://www.sipforum.org/ SIP Forum]&lt;br /&gt;
*[[media:Tb640 sip user's guide.pdf|TelcoBridges SIP User’s Guide]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Glossary]]&lt;br /&gt;
[[Category:Revise on Major]]&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/SIP</id>
		<title>SIP</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/SIP"/>
				<updated>2019-03-11T13:32:00Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* TelcoBridges and SIP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Session Initiation Protocol, more commonly known as SIP, is a signaling protocol for packet-based networks and is commonly used, along with H.323 to provide signaling for voice over IP (VoIP) communications. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TelcoBridges and SIP ==&lt;br /&gt;
&lt;br /&gt;
[[Toolpack]] provides support for signaling using the Session Initiation Protocol, more commonly known as SIP, for voice over IP (VoIP) communications. SIP may be used in conjunction with various [[Voice_codecs|voice codecs]] for the media component of a call. TelcoBridges [[Tmedia]] media gateways and [[Tdev]] development platforms support SIP signaling concurrently with [[SS7]], [[ISDN]] and other [[Signaling_protocols|signaling protocols]].&lt;br /&gt;
&lt;br /&gt;
SIP signaling stacks are configured for IP applications and for each [[Tmedia]] or [[Tdev]] unit requiring SIP signaling.&lt;br /&gt;
&lt;br /&gt;
Based upon your system requirements, you can configure a SIP stack to carry signaling traffic over multiple transport servers, which are IP endpoints comprised of: protocol type (UDP, TCP or TLS), port number and IP interface.&lt;br /&gt;
&lt;br /&gt;
A conceptual illustration is provided below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:SIP stack conceptual illustration.png|600px| ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While TelcoBridges media gateways can perform multiple simultaneous functions such as switching and transcoding as well as deliver value-added services such as [[IVR]] or conferencing, they can also be configured to perform a single function. In this case, it is possible to configure TelcoBridges media gateway to act as a [[SIP gateway]], or a [[FreeSBC|SBC]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== TelcoBridges' SIP Implementation ===&lt;br /&gt;
TelcoBridges' SIP implementation works on top of a couple of layers, including SIP and [[TUCL]]. In the following figure, grey boxes represent entities that need allocation on the TelcoBridges equipment. The TUCL layer is a transport layer used by SIP on our architecture. TUCL presents some advantages over a simple TCP/IP stack. For instance, it adds tracing facilities to any virtual interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:TB-SIP-Architecture.jpg|400px| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Supported SIP RFCs  ===&lt;br /&gt;
&lt;br /&gt;
TelcoBridges supports the following RFCs for SIP: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Specification &lt;br /&gt;
! TMedia SIP stack support &lt;br /&gt;
! Toolpack API Support &lt;br /&gt;
! Media Gateway Application Support&lt;br /&gt;
|-&lt;br /&gt;
| RFC 2327 Session Description Protocol &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 2833 RTP Payload for DTMF Digits, Telephony Tones and Telephony Signals &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 2976 SIP INFO Method &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial: For DTMF Tones exchange only&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3204 MIME media types for ISUP and QSIG Objects &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3261 Session Initiate Protocol &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3262 Reliability of Provisional Responses in the Session Initiation Protocol (SIP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3263 Session Initiation Protocol (SIP): Locating SIP Servers &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3264 An Offer/Answer Model with the Session Description Protocol (SDP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial ('Indicating capabilities' not supported)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3265 Session Initiation Protocol (SIP)-Specific Event Notification &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3311 The Session Initiation Protocol (SIP) UPDATE Method &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (Only For Session Timer Refresh) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial: For Session Timer Refresh and SDP reception following a SIP INVITE that had no body&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3323 A Privacy Mechanism for the Session Initiation Protocol (SIP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial&amp;lt;sup&amp;gt;'''1'''&amp;lt;sup&amp;gt; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial&amp;lt;sup&amp;gt;'''1'''&amp;lt;sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3325 Private Extensions to the Session Initiation Protocol (SIP) for Asserted Identity within Trusted Networks &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (No P-Preferred-Identity) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (No P-Preferred-Identity)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3326 The Reason Header Field for the Session Initiation Protocol (SIP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3372 Session Initiation Protocol for Telephones (SIP-T) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (no ISUP MIME bodies Encryption support)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (no ISUP MIME bodies Encryption support)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3389 Real-time Transport Protocol (RTP) Payload for Comfort Noise (CN) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3398 ISUP-SIP Mapping &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3515 Refer Method &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3551 RTP Profile for Audio and Video Conferences with Minimal Control&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (For supported audio codecs, single channel)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (For supported audio codecs, single channel)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3555 MIME Type Registration of RTP Payload Formats&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (For supported audio codecs)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (For supported audio codecs)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3578 Overlap &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (Conversion of ISUP Overlap Signalling into SIP en-bloc Signalling) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (Conversion of ISUP Overlap Signalling into SIP en-bloc Signalling)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3581 An Extension to the Session Initiation Protocol (SIP) for Symmetric Response Routing &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3665 Session Initiation Protocol (SIP) Basic Call Flow Examples &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial* &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial*&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3666 Public Switched Telephone Network (PSTN) Call Flows &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3764 enumservice registration for Session Initiation Protocol (SIP) Addresses-of-Record &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3891 &amp;quot;Replaces&amp;quot; Header &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3892 Referred-By Mechanism &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
| RFC 4028 Session Timers in the Session Initiation Protocol (SIP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 4694 Number Portability Parameters for the &amp;quot;tel&amp;quot; URI &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (relay of rn and npdi SIP&amp;amp;lt;-&amp;amp;gt;SS7)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 4733 RTP Payload for DTMF Digits, Telephony Tones and Telephony Signals &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 5806 Diversion Indication in SIP &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Unconditional forward scenario&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
['''1'''] For more information please contact [[Support:Contacting TelcoBridges technical support|customer support]].&lt;br /&gt;
&lt;br /&gt;
== Maximum Capacity ==&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! !!Release !! SIP SAP !! SIP Transport Server !! SIP NAP&lt;br /&gt;
|- &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TMG800 &lt;br /&gt;
| 2.2-2.5 || 4 || 10 || 256&lt;br /&gt;
|-&lt;br /&gt;
| 2.6+     || 16 || 16 || 512&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TMG3200 &lt;br /&gt;
| 2.2-2.5 || 4 || 10 || 256&lt;br /&gt;
|-&lt;br /&gt;
| 2.6+     || 16 || 16 || 512&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TMG7800&lt;br /&gt;
| 2.2-2.5 || 64 &amp;lt;br/&amp;gt; (4/Tmedia) || 160&amp;lt;br/&amp;gt; (10/Tmedia) || 256&lt;br /&gt;
|-&lt;br /&gt;
| 2.6+     || 256&amp;lt;br/&amp;gt; (16/Tmedia) || 256&amp;lt;br/&amp;gt; (16/Tmedia) || 512&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Configuration  ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | FreeSBC&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | Tmedia/Tsig/Tdev&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
*[[Toolpack:Tsbc_Protocol_Stack_Settings_3.0|v3.0: SIP Signaling]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
*[[Toolpack:Protocol_Stack_Settings_D#SIP|v3.0: SIP Signaling]]&lt;br /&gt;
*[[Toolpack:Protocol_Stack_Settings_C#SIP|v2.10: SIP Signaling]]&lt;br /&gt;
*[[Toolpack:Protocol_Stack_Settings_B#SIP|v2.9: SIP Signaling]]&lt;br /&gt;
*[[Toolpack:Protocol_Stack_Settings_A#SIP|v2.8: SIP Signaling]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Session_Initiation_Protocol Wikipedia article]&lt;br /&gt;
*[http://www.sipforum.org/ SIP Forum]&lt;br /&gt;
*[[media:Tb640 sip user's guide.pdf|TelcoBridges SIP User’s Guide]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Glossary]]&lt;br /&gt;
[[Category:Revise on Major]]&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/File:SIP_stack_conceptual_illustration.png</id>
		<title>File:SIP stack conceptual illustration.png</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/File:SIP_stack_conceptual_illustration.png"/>
				<updated>2019-03-11T13:28:42Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/SIP</id>
		<title>SIP</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/SIP"/>
				<updated>2019-03-11T13:28:28Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: /* TelcoBridges and SIP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Session Initiation Protocol, more commonly known as SIP, is a signaling protocol for packet-based networks and is commonly used, along with H.323 to provide signaling for voice over IP (VoIP) communications. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TelcoBridges and SIP ==&lt;br /&gt;
&lt;br /&gt;
[[Toolpack]] provides support for signaling using the Session Initiation Protocol, more commonly known as SIP, for voice over IP (VoIP) communications. SIP may be used in conjunction with various [[Voice_codecs|voice codecs]] for the media component of a call. TelcoBridges [[Tmedia]] media gateways and [[Tdev]] development platforms support SIP signaling concurrently with [[SS7]], [[ISDN]] and other [[Signaling_protocols|signaling protocols]].&lt;br /&gt;
&lt;br /&gt;
SIP signaling stacks are configured for IP applications and for each [[Tmedia]] or [[Tdev]] unit requiring SIP signaling.&lt;br /&gt;
&lt;br /&gt;
Based upon your system requirements, you can configure a SIP stack to carry signaling traffic over multiple transport servers, which are IP endpoints comprised of: protocol type (UDP, TCP or TLS), port number and IP interface.&lt;br /&gt;
&lt;br /&gt;
A conceptual illustration is provided below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:SIP stack conceptual illustration.png| ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While TelcoBridges media gateways can perform multiple simultaneous functions such as switching and transcoding as well as deliver value-added services such as [[IVR]] or conferencing, they can also be configured to perform a single function. In this case, it is possible to configure TelcoBridges media gateway to act as a [[SIP gateway]], or a [[FreeSBC|SBC]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== TelcoBridges' SIP Implementation ===&lt;br /&gt;
TelcoBridges' SIP implementation works on top of a couple of layers, including SIP and [[TUCL]]. In the following figure, grey boxes represent entities that need allocation on the TelcoBridges equipment. The TUCL layer is a transport layer used by SIP on our architecture. TUCL presents some advantages over a simple TCP/IP stack. For instance, it adds tracing facilities to any virtual interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:TB-SIP-Architecture.jpg|400px| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Supported SIP RFCs  ===&lt;br /&gt;
&lt;br /&gt;
TelcoBridges supports the following RFCs for SIP: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Specification &lt;br /&gt;
! TMedia SIP stack support &lt;br /&gt;
! Toolpack API Support &lt;br /&gt;
! Media Gateway Application Support&lt;br /&gt;
|-&lt;br /&gt;
| RFC 2327 Session Description Protocol &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 2833 RTP Payload for DTMF Digits, Telephony Tones and Telephony Signals &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 2976 SIP INFO Method &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial: For DTMF Tones exchange only&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3204 MIME media types for ISUP and QSIG Objects &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3261 Session Initiate Protocol &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3262 Reliability of Provisional Responses in the Session Initiation Protocol (SIP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3263 Session Initiation Protocol (SIP): Locating SIP Servers &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3264 An Offer/Answer Model with the Session Description Protocol (SDP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial ('Indicating capabilities' not supported)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3265 Session Initiation Protocol (SIP)-Specific Event Notification &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3311 The Session Initiation Protocol (SIP) UPDATE Method &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (Only For Session Timer Refresh) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial: For Session Timer Refresh and SDP reception following a SIP INVITE that had no body&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3323 A Privacy Mechanism for the Session Initiation Protocol (SIP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial&amp;lt;sup&amp;gt;'''1'''&amp;lt;sup&amp;gt; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial&amp;lt;sup&amp;gt;'''1'''&amp;lt;sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3325 Private Extensions to the Session Initiation Protocol (SIP) for Asserted Identity within Trusted Networks &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (No P-Preferred-Identity) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (No P-Preferred-Identity)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3326 The Reason Header Field for the Session Initiation Protocol (SIP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3372 Session Initiation Protocol for Telephones (SIP-T) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (no ISUP MIME bodies Encryption support)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (no ISUP MIME bodies Encryption support)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3389 Real-time Transport Protocol (RTP) Payload for Comfort Noise (CN) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3398 ISUP-SIP Mapping &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3515 Refer Method &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3551 RTP Profile for Audio and Video Conferences with Minimal Control&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (For supported audio codecs, single channel)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (For supported audio codecs, single channel)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3555 MIME Type Registration of RTP Payload Formats&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (For supported audio codecs)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (For supported audio codecs)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3578 Overlap &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (Conversion of ISUP Overlap Signalling into SIP en-bloc Signalling) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (Conversion of ISUP Overlap Signalling into SIP en-bloc Signalling)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3581 An Extension to the Session Initiation Protocol (SIP) for Symmetric Response Routing &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3665 Session Initiation Protocol (SIP) Basic Call Flow Examples &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial* &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial*&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3666 Public Switched Telephone Network (PSTN) Call Flows &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3764 enumservice registration for Session Initiation Protocol (SIP) Addresses-of-Record &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3891 &amp;quot;Replaces&amp;quot; Header &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3892 Referred-By Mechanism &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
| RFC 4028 Session Timers in the Session Initiation Protocol (SIP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 4694 Number Portability Parameters for the &amp;quot;tel&amp;quot; URI &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (relay of rn and npdi SIP&amp;amp;lt;-&amp;amp;gt;SS7)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 4733 RTP Payload for DTMF Digits, Telephony Tones and Telephony Signals &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 5806 Diversion Indication in SIP &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Unconditional forward scenario&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
['''1'''] For more information please contact [[Support:Contacting TelcoBridges technical support|customer support]].&lt;br /&gt;
&lt;br /&gt;
== Maximum Capacity ==&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! !!Release !! SIP SAP !! SIP Transport Server !! SIP NAP&lt;br /&gt;
|- &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TMG800 &lt;br /&gt;
| 2.2-2.5 || 4 || 10 || 256&lt;br /&gt;
|-&lt;br /&gt;
| 2.6+     || 16 || 16 || 512&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TMG3200 &lt;br /&gt;
| 2.2-2.5 || 4 || 10 || 256&lt;br /&gt;
|-&lt;br /&gt;
| 2.6+     || 16 || 16 || 512&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TMG7800&lt;br /&gt;
| 2.2-2.5 || 64 &amp;lt;br/&amp;gt; (4/Tmedia) || 160&amp;lt;br/&amp;gt; (10/Tmedia) || 256&lt;br /&gt;
|-&lt;br /&gt;
| 2.6+     || 256&amp;lt;br/&amp;gt; (16/Tmedia) || 256&amp;lt;br/&amp;gt; (16/Tmedia) || 512&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Configuration  ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | FreeSBC&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | Tmedia/Tsig/Tdev&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
*[[Toolpack:Tsbc_Protocol_Stack_Settings_3.0|v3.0: SIP Signaling]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
*[[Toolpack:Protocol_Stack_Settings_D#SIP|v3.0: SIP Signaling]]&lt;br /&gt;
*[[Toolpack:Protocol_Stack_Settings_C#SIP|v2.10: SIP Signaling]]&lt;br /&gt;
*[[Toolpack:Protocol_Stack_Settings_B#SIP|v2.9: SIP Signaling]]&lt;br /&gt;
*[[Toolpack:Protocol_Stack_Settings_A#SIP|v2.8: SIP Signaling]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Session_Initiation_Protocol Wikipedia article]&lt;br /&gt;
*[http://www.sipforum.org/ SIP Forum]&lt;br /&gt;
*[[media:Tb640 sip user's guide.pdf|TelcoBridges SIP User’s Guide]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Glossary]]&lt;br /&gt;
[[Category:Revise on Major]]&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	<entry>
		<id>https://docs.telcobridges.com/tbwiki/SIP</id>
		<title>SIP</title>
		<link rel="alternate" type="text/html" href="https://docs.telcobridges.com/tbwiki/SIP"/>
				<updated>2019-03-11T13:27:45Z</updated>
		
		<summary type="html">&lt;p&gt;Abrassard: Added concepts of TLS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Session Initiation Protocol, more commonly known as SIP, is a signaling protocol for packet-based networks and is commonly used, along with H.323 to provide signaling for voice over IP (VoIP) communications. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TelcoBridges and SIP ==&lt;br /&gt;
&lt;br /&gt;
[[Toolpack]] provides support for signaling using the Session Initiation Protocol, more commonly known as SIP, for voice over IP (VoIP) communications. SIP may be used in conjunction with various [[Voice_codecs|voice codecs]] for the media component of a call. TelcoBridges [[Tmedia]] media gateways and [[Tdev]] development platforms support SIP signaling concurrently with [[SS7]], [[ISDN]] and other [[Signaling_protocols|signaling protocols]].&lt;br /&gt;
&lt;br /&gt;
SIP signaling stacks are configured for IP applications and for each [[Tmedia]] or [[Tdev]] unit requiring SIP signaling.&lt;br /&gt;
&lt;br /&gt;
Based upon your system requirements, you can configure a SIP stack to carry signaling traffic over multiple transport servers, which are IP endpoints comprised of: protocol type (UDP, TCP or TLS), port number and IP interface.&lt;br /&gt;
&lt;br /&gt;
A conceptual illustration is provided below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:SIP stack conceptual illustration.jpg| ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While TelcoBridges media gateways can perform multiple simultaneous functions such as switching and transcoding as well as deliver value-added services such as [[IVR]] or conferencing, they can also be configured to perform a single function. In this case, it is possible to configure TelcoBridges media gateway to act as a [[SIP gateway]], or a [[FreeSBC|SBC]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== TelcoBridges' SIP Implementation ===&lt;br /&gt;
TelcoBridges' SIP implementation works on top of a couple of layers, including SIP and [[TUCL]]. In the following figure, grey boxes represent entities that need allocation on the TelcoBridges equipment. The TUCL layer is a transport layer used by SIP on our architecture. TUCL presents some advantages over a simple TCP/IP stack. For instance, it adds tracing facilities to any virtual interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:TB-SIP-Architecture.jpg|400px| ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Supported SIP RFCs  ===&lt;br /&gt;
&lt;br /&gt;
TelcoBridges supports the following RFCs for SIP: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Specification &lt;br /&gt;
! TMedia SIP stack support &lt;br /&gt;
! Toolpack API Support &lt;br /&gt;
! Media Gateway Application Support&lt;br /&gt;
|-&lt;br /&gt;
| RFC 2327 Session Description Protocol &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 2833 RTP Payload for DTMF Digits, Telephony Tones and Telephony Signals &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 2976 SIP INFO Method &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial: For DTMF Tones exchange only&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3204 MIME media types for ISUP and QSIG Objects &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3261 Session Initiate Protocol &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3262 Reliability of Provisional Responses in the Session Initiation Protocol (SIP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3263 Session Initiation Protocol (SIP): Locating SIP Servers &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3264 An Offer/Answer Model with the Session Description Protocol (SDP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial ('Indicating capabilities' not supported)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3265 Session Initiation Protocol (SIP)-Specific Event Notification &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3311 The Session Initiation Protocol (SIP) UPDATE Method &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (Only For Session Timer Refresh) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial: For Session Timer Refresh and SDP reception following a SIP INVITE that had no body&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3323 A Privacy Mechanism for the Session Initiation Protocol (SIP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial&amp;lt;sup&amp;gt;'''1'''&amp;lt;sup&amp;gt; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial&amp;lt;sup&amp;gt;'''1'''&amp;lt;sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3325 Private Extensions to the Session Initiation Protocol (SIP) for Asserted Identity within Trusted Networks &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (No P-Preferred-Identity) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (No P-Preferred-Identity)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3326 The Reason Header Field for the Session Initiation Protocol (SIP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3372 Session Initiation Protocol for Telephones (SIP-T) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (no ISUP MIME bodies Encryption support)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (no ISUP MIME bodies Encryption support)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3389 Real-time Transport Protocol (RTP) Payload for Comfort Noise (CN) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3398 ISUP-SIP Mapping &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3515 Refer Method &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3551 RTP Profile for Audio and Video Conferences with Minimal Control&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (For supported audio codecs, single channel)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (For supported audio codecs, single channel)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3555 MIME Type Registration of RTP Payload Formats&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (For supported audio codecs)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (For supported audio codecs)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3578 Overlap &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (Conversion of ISUP Overlap Signalling into SIP en-bloc Signalling) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (Conversion of ISUP Overlap Signalling into SIP en-bloc Signalling)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3581 An Extension to the Session Initiation Protocol (SIP) for Symmetric Response Routing &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3665 Session Initiation Protocol (SIP) Basic Call Flow Examples &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial* &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial*&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3666 Public Switched Telephone Network (PSTN) Call Flows &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3764 enumservice registration for Session Initiation Protocol (SIP) Addresses-of-Record &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3891 &amp;quot;Replaces&amp;quot; Header &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 3892 Referred-By Mechanism &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
| RFC 4028 Session Timers in the Session Initiation Protocol (SIP) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 4694 Number Portability Parameters for the &amp;quot;tel&amp;quot; URI &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Partial (relay of rn and npdi SIP&amp;amp;lt;-&amp;amp;gt;SS7)&lt;br /&gt;
|-&lt;br /&gt;
| RFC 4733 RTP Payload for DTMF Digits, Telephony Tones and Telephony Signals &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Complete&lt;br /&gt;
|-&lt;br /&gt;
| RFC 5806 Diversion Indication in SIP &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Yes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Unconditional forward scenario&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
['''1'''] For more information please contact [[Support:Contacting TelcoBridges technical support|customer support]].&lt;br /&gt;
&lt;br /&gt;
== Maximum Capacity ==&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! !!Release !! SIP SAP !! SIP Transport Server !! SIP NAP&lt;br /&gt;
|- &lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TMG800 &lt;br /&gt;
| 2.2-2.5 || 4 || 10 || 256&lt;br /&gt;
|-&lt;br /&gt;
| 2.6+     || 16 || 16 || 512&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TMG3200 &lt;br /&gt;
| 2.2-2.5 || 4 || 10 || 256&lt;br /&gt;
|-&lt;br /&gt;
| 2.6+     || 16 || 16 || 512&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TMG7800&lt;br /&gt;
| 2.2-2.5 || 64 &amp;lt;br/&amp;gt; (4/Tmedia) || 160&amp;lt;br/&amp;gt; (10/Tmedia) || 256&lt;br /&gt;
|-&lt;br /&gt;
| 2.6+     || 256&amp;lt;br/&amp;gt; (16/Tmedia) || 256&amp;lt;br/&amp;gt; (16/Tmedia) || 512&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Configuration  ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | FreeSBC&lt;br /&gt;
! width=&amp;quot;200&amp;quot; style=&amp;quot;background: rgb(239, 239, 239) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;&amp;quot; | Tmedia/Tsig/Tdev&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
*[[Toolpack:Tsbc_Protocol_Stack_Settings_3.0|v3.0: SIP Signaling]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
*[[Toolpack:Protocol_Stack_Settings_D#SIP|v3.0: SIP Signaling]]&lt;br /&gt;
*[[Toolpack:Protocol_Stack_Settings_C#SIP|v2.10: SIP Signaling]]&lt;br /&gt;
*[[Toolpack:Protocol_Stack_Settings_B#SIP|v2.9: SIP Signaling]]&lt;br /&gt;
*[[Toolpack:Protocol_Stack_Settings_A#SIP|v2.8: SIP Signaling]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Session_Initiation_Protocol Wikipedia article]&lt;br /&gt;
*[http://www.sipforum.org/ SIP Forum]&lt;br /&gt;
*[[media:Tb640 sip user's guide.pdf|TelcoBridges SIP User’s Guide]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Glossary]]&lt;br /&gt;
[[Category:Revise on Major]]&lt;/div&gt;</summary>
		<author><name>Abrassard</name></author>	</entry>

	</feed>