Routing script tutorial:Mini Development Guide
Call object
Get
Those function are used to get the call parameters. The possible parameters are described in the section "Call parameters"
called_number = caf_call.get :called
List_params
This function is used to retrieve the list of supported call parameters. For example to extract all the possible call params from the the call object and put it in hash.
caf_call.list_params.each {|param| call[param] = caf_call.get param }
Accept
This function is used to accept a call. It takes 2 arguments, the call parameters (hash) and the route parameters (hash).
Apply route remapping rules
caf_call.accept out_call, route
Refuse
This function is used to refuse a call with a reason code argument parameters :
caf_call.refuse :reason => :temporary_failure
The supported values are described in the section "Reason values".
Call parameters
The following call parameters are available in the call object:
- calling
- calling_noa
- calling_npi
- calling_display_type
- calling_display
- calling_presentation
- calling_screening
- calling_category
- private_display
- private_display_type
- private_address
- called
- called_noa
- called_npi
- redirecting_number_forward_enabled
- redirecting_number_noa
- redirecting_number_npi
- redirecting_number_presentation
- redirecting_number_screening
- redirecting_number_reason
- redirecting_number_counter
- original_called_number
- original_called_number_noa
- original_called_number_npi
- original_called_number_presentation
- original_called_number_screening
- original_called_number_reason
- original_called_number_counter
- nap
- uui
- uui_forward_enabled
- oli
- request_uri
- request_uri_forward_enabled
Notice: All values are documented in the noa_npi_remap.rb script and may change between major release.
Noa values
- unknown_number
- international_number
- national_number
- subscriber_number
- network_specific
- network_routing_national_format
- network_routing_international_format
- abbreviated_number
- subscriber_number_operator_requested
- national_number_operator_requested
- international_number_operator_requested
- no_number_present_operator_requested
- no_number_present_cut_through_call_to_carrier
- test_line_test_code
- non_unique_subscriber_number
- non_unique_national_number
- non_unique_international_number
- call_950_number
Those values will be remapped to the protocol specific NOA value. To provide protocol specific value:
- call_params[:called_noa] = 0x70
or
- call_params[:called_noa] = 112
Npi values
- unknown_number
- isdn
- telephony
- private
- data
- telex
- national
Calling Display Type values
- unspecified => Type is unspecified.
- calling_party_name => Type is 0xB1.
Those values will be remapped to the protocol specific Display Information Type value. To provide protocol specific value:
- call_params[:calling_display_type] = 0xB1
or
- call_params[:calling_display_type] = 177
Calling Display value
- call_params[:calling_display] = "Roger Fluffy"
Presentation values
- unspecified
- not_available
- allowed
- restricted
- addr_restricted
- name_restricted
Screening values
- unspecified
- no
- pass
- fail
- network_provided
Redirecting number reason values
ISDN:
- unknown
- busy
- no_reply
- deflection
- dte_out_of_order
- forwarding_by_called_dte
- unconditional
SS7:
- unknown
- busy
- no_reply
- unconditional
- deflection
- deflection_immediate
- mobile_not_reachable
UUI (user-to-user indication) values
Byte array printed as hexadecimal string (each byte printed as two hexadecimal characters). Example: "00ac3eff51" would represent a 5 bytes UUI
OLI (originating line information) values
The OLI parameter is a string that represents an integer value from 0 to 255.
redirecting_number_forward_enabled values
Controls forwarding or discarding of redirecting number to outgoing call leg.
Values for this parameter are "0", "1", "false" or "true. 0/false: Redirecting number (and original called number) is not forwarded to outgoing call leg 1/true: Redirecting number (and original called number) is forwarded to outgoing call leg The value for this parameter at input of routing script depends on the "Forward redirecting number" parameter in the "Advanced" section of the Gateway configuration page of the Web Portal. The script may change this value to override the Gateway configuration.
uui_forward_enabled values
Controls forwarding or discarding of UUI to outgoing call leg.
Values for this parameter are "0", "1", "false" or "true. 0/false: UUI is not forwarded to outgoing call leg 1/true: UUI is forwarded to outgoing call leg The value for this parameter at input of routing script depends on the "Forward UUI" parameter in the "Advanced" section of the Gateway configuration page of the Web Portal. The script may change this value to override the Gateway configuration.
request_uri
Enables access to the Request-Line URI.
For example, if the Request-Line is:
Request-Line: INVITE sip:4175162082@172.22.45.13:5060;user=phone;transport=udp SIP/2.0
Then the retrieved request_uri will be "sip:4175162082@172.22.45.13:5060;user=phone;transport=udp SIP/2.0".
In the routing scripts, to retrieve only the called number, this script can be used:
if call_params[:request_uri] && call_params[:request_uri] =~ /sip:(.*)@.*/ call_params[:called] = $1 end
request_uri_forward_enabled values
Controls forwarding or discarding of request uri to outgoing call leg.The request uri is the information in the "Request-Line:" of the SIP INVITE message.
Values for this parameter are "0", "1", "false" or "true.
0/false: Request uri is not forwarded to outgoing call leg
1/true: Request uri is forwarded to outgoing call leg
The value for this parameter at input of routing script is always false.
Route parameters
All route may have these parameters:
- calling
- called
- nap
- remapped_calling
- remapped_called
- remapped_nap
- remapped_profile
Additionally it is possible to add dynamic route attributes in the web portal. These can be referenced by their name.
Reason values
All CMC reason codes are available for use by the routing scripts. See the TBCMC_CALL_REASON_CODE enum in the tbcmc_call.h file.
Notice: These values may change between major release.
/* isdn/ss7 reason code style */ /* Toolpack engine will convert reason code from sip to isdn/ss7 or isdn/ss7 to sip according to RFC3398 */ UNALLOCATED_NUMBER NO_ROUTE_TO_NETWORK NO_ROUTE_TO_DESTINATION SEND_SPECIAL_TONE MISDIALLED_TRUNK_PREFIX CHANNEL_UNACCEPTABLE CALL_AWARDED_IN_ESTABLISHED_CHANNEL PREEMPTION REATTEMPT NORMAL_CALL_CLEARING USER_BUSY NO_USER_RESPONDING NO_ANSWER_FROM_USER SUBSCRIBER_ABSENT CALL_REJECTED NUMBER_CHANGED REDIRECTION EXCHANGE_ROUTING_ERROR NON_SELECTED_USER_CLEARING DESTINATION_OUT_OF_ORDER ADDRESS_INCOMPLETE FACILITY_REJECTED RESPONSE_TO_STATUS_ENQUIRY NORMAL_UNSPECIFIED NO_CIRCUIT_AVAILABLE NETWORK_OUT_OF_ORDER FRAME_MODE_OUT_OF_SERVICE FRAME_MODE_CONN_OPERATIONAL TEMPORARY_FAILURE SWITCHING_EQUIP_CONGESTION ACCESS_INFO_DISCARDED REQUESTED_CIRCUIT_NOT_AVAILABLE PRECEDENCE_CALL_BLOCKED RESOURCE_UNAVAILABLE QOS_NOT_AVAILABLE REQUESTED_FACILITY_NOT_SUBSCRIBED OUTGOING_CALLS_BARRED OUTGOING_CALLS_BARRED_WITHIN_CUG INCOMING_CALLS_BARRED INCOMING_CALLS_BARRED_WITHIN_CUG BEARER_CAP_NOT_AUTHORIZED BEARER_CAP_NOT_AVAILABLE INCONSISTENCY_ACCESS_INFO SERVICE_NOT_AVAILABLE BEARER_CAP_NOT_IMPLEMENTED CHANNEL_TYPE_NOT_IMPLEMENTED REQUESTED_FACILITY_NOT_IMPLEMENTED ONLY_RESTRICTED_DIGITAL_INFO SERVICE_NOT_IMPLEMENTED INVALID_CALL_REFERENCE CHANNEL_DOES_NOT_EXIST CALL_IDENTITY_DOES_NOT_EXIST CALL_IDENTITY_IN_USE NO_CALL_SUSPENDED CALL_HAS_BEEN_CLEARED USER_NOT_MEMBER_OF_CUG INCOMPATIBLE_DESTINATION NON_EXISTANT_CUG INVALID_TRANSIT_NETWORK INVALID_MESSAGE_UNSPECIFIED MANDATORY_IE_MISSING MESSAGE_TYPE_NON_EXISTENT MESSAGE_NOT_COMPATIBLE_WITH_CALL_STATE IE_NON_EXISTENT INVALID_IE_CONTENT MSG_NOT_COMPATIBLE_WITH_CALL_STATE RECOVERY_ON_TIMER_EXPIRY PARAMETER_NON_EXISTENT_PASSED_ON MESSAGE_WITH_NON_RECOGNIZED_PARAMETERS_DISCARDED PROTOCOL_ERROR INTERWORKING_UNSPECIFIED /* Toolpack specific errors */ NORMAL RESOURCE_ERROR TIMEOUT NO_ROUTE CALL_COLLISION SYNC_DROP SIGNALING_ERROR LOCALLY_REJECTED INTERFACE_NOT_AVAILABLE RESET_IN_PROGRESS ADAPTER_REJECT MISSING_INVALID_IE INCOMING_ONLY SYSTEM_CONFIGURATION_CHANGED RESOURCE_NO_MORE_AVAILABLE INCOMPATIBLE_MEDIA RES_ALLOC_FAILED DATA_PATH_NOT_AVAILABLE
Nap status
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.
Notice: These values may change between major release.
#define NAP_STATS_FIELDS \ /* Field, szName, szDescription, szOptions */ \ ( SIGNALING_TYPE, "signaling_type", "Signaling type.", "" ) \ ( INCOMING_CALL_CNT, "inst_incoming_call_cnt", "Instantaneous Count of incoming calls.", "" ) \ ( OUTGOING_CALL_CNT, "inst_outgoing_call_cnt", "Instantaneous Count of outgoing calls.", "" ) \ ( AVAILABLE_CNT, "available_cnt", "Number of available circuits or channels.", "" ) \ ( UNAVAILABLE_CNT, "unavailable_cnt", "Number of unavailable circuits or channels.", "" ) \ ( AVAILABILITY_PCT, "availability_percent", "Percentage of available circuits or channels.", "" ) \ ( USAGE_PCT, "usage_percent", "Percentage of used circuits or channels.", "" ) \ ( TOTAL_INCOMING_CALL_CNT, "total_incoming_call_cnt", "Total Count of incoming calls.", "" ) \ ( ASR_STRUCT, "asr_statistics_struct", "Detailed Answer-Seizure Rate Statistics.", "" ) \ ( GLOBAL_ASR_PCT, "global_asr_percent", "Global calculated ASR percentage.", "" ) \ ( TOTAL_OUTGOING_CALL_CNT, "total_outgoing_call_cnt", "Total Count of outgoing calls.", "" ) \ ( LAST_24H_ASR_PCT, "last_24h_asr_percent", "Last 24 hours calculated ASR percentage.", "" ) \ ( LAST_24H_OUTGOING_CALL_CNT, "last_24h_outgoing_call_cnt", "Last 24 hours outgoing calls.", "" ) \ ( HOUR_ASR_PCT, "current_hour_asr_percent", "Current hour calculated ASR percentage.", "" ) \ ( HOUR_OUTGOING_CALL_CNT, "current_hour_outgoing_call_cnt", "Current hour outgoing calls.", "" ) \ ( LAST_HOUR_ASR_PCT, "last_hour_asr_percent", "Last hour calculated ASR percentage.", "" ) \ ( LAST_HOUR_OUTGOING_CALL_CNT, "last_hour_outgoing_call_cnt", "Last hour outgoing calls.", "" ) \ ( AVAILABILITY_DETECTION_STRUCT, "availability_detection_struct", "Detailed availibility detection Statistics", "" ) \ ( POLL_REMOTE_PROXY, "poll_remote_proxy", "Remote proxy polling enabled", "" ) \ ( IS_AVAILABLE, "is_available", "Remote proxy actually available or not", "" ) \ ( TIME_SINCE_POLLING, "time_since_polling", "Time since the last availibility polling", "" ) \ ( TIME_AVAILABLE_SECONDS, "time_available_seconds", "Number of seconds since the NAP is available", "x" ) \ ( TIME_UNAVAILABLE_SECONDS, "time_unavailable_seconds", "Number of seconds since the NAP is unavailable", "x" ) \ ( REGISTRATION_STRUCT, "registration_struct", "Detailed registration Statistics", "" ) \ ( REGISTER_TO_PROXY, "register_to_proxy", "Register to proxy enabled", "" ) \ ( IS_REGISTERED, "registered", "Actually registered or not", "" ) \ ( TIME_SINCE_REFRESH, "time_since_refresh", "Time since the last refresh", "" ) \ ( TIME_REGISTERED_SECONDS, "time_registered_seconds", "Number of seconds since the NAP is registered", "x" ) \ ( TIME_NOT_REGISTERED_SECONDS, "time_not_registered_seconds", "Number of seconds since the NAP is not registered", "x" ) \ /*!< Nap Status Fields */
If the nap status is part of a substructure, it's name in the routing scripts must be composed of the structure name appended by an underscore and the field name.
For example the name to use for the global ASR percentage is:
asr_statistics_struct_global_asr_percent
It is also possible to add dynamic nap attributes in the web portal. These can be referenced by their name.
Test parameters
@call_params
That variable should contain a hash of call parameters that will passed to the routing script. This is equivalent to the incoming call parameters.
@nap_list
A list of hash containing the nap statuses. This is equivalent to the nap statuses at the time the call is to be routed.
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.
Back to Routing Script Tutorial.