Core Extensions
Session Interface
Object Model
_genesys.session Object
Every SCXML session instance running in the orchestration platform will have an object with a set of common orchestration logic properties. These properties are maintained by the orchestration platform, but they can be set or updated by the orchestration logic itself. They are also used by the orchestration platform for orchestration logic reporting and management functionality. The name of the object will be "_genesys.session". This is the set of properties for the object:
Name |
Access |
Type |
Default Value |
Valid Values |
Description |
---|---|---|---|---|---|
server |
read only |
genesys.session.server object |
none |
This is the Genesys server information on which this session is running. | |
tenant |
read only |
string |
none |
This is the name of the tenant that this session is associated with. It can be changed with the _genesys.session.setTenant() function. |
_genesys.session.server Object
Every SCXML session instance running in the orchestration platform will have a global root object from which an application will have access to platform server information. This object is maintained by the orchestration platform. The name of the object will be "_genesys.session.server". This is the set of properties for the object:
Name |
Access |
Type |
Default Value |
Valid Values |
Description |
---|---|---|---|---|---|
name |
read only |
string |
none |
This is the configuration layer application name for the active platform server running this session. | |
cluster |
read only |
string |
none |
This is the configuration layer application name of the platform cluster (that is, the primary platform server) running this session. |
_genesys.session.lookupseq ENUM Object
This represents the lookupsequence enumeration. This enumeration is maintained by the orchestration platform. This is the set of properties for the object:
Name |
Access |
Type |
Default Value |
Valid Values |
Description |
---|---|---|---|---|---|
StartFromStrategy |
Read only |
Integer |
None |
-1 |
The lookup starts from the routing strategy |
StartFromCDN |
Read only |
Integer |
None |
0 |
The lookup starts from the CDN |
StartFromTserver |
Read only |
Integer |
None |
1 |
The lookup starts from the T-Server |
StartFromTenant |
Read only |
Integer |
None |
2 |
The lookup starts from the Tenant |
StartFromRouter |
Read only |
Integer |
None |
3 |
The lookup starts from the URS |
_genesys.session.day ENUM Object
This represents the day enumeration. This enumeration is maintained by the orchestration platform. This is the set of properties for the object:
Name |
Access |
Type |
Default Value |
Valid Values |
Description |
---|---|---|---|---|---|
Sunday |
read only |
integer |
none |
0 |
This represents Sunday. |
Monday |
read only |
integer |
none |
1 |
This represent Monday. |
Tuesday |
read only |
integer |
none |
2 |
This represents Tuesday. |
Wednesday |
read only |
integer |
none |
3 |
This represents Wednesday. |
Thursday |
read only |
integer |
none |
4 |
This represents Thursday. |
Friday |
read only |
integer |
none |
5 |
This represents Friday. |
Saturday |
read only |
integer |
none |
6 |
This represents Saturday. |
Functions
_genesys.session.dateInZone
This function returns the current date in the specified time zone. The results will be in the xml date datatype format (that is, yyyy-mm-dd). This can be compared with other variables that use the same time format.
date _genesys.session.dateInZone(tzone)
Parameters:
- tzone: STRING which can be a variable or a constant - This parameter is the name of a time zone configured in the configuration layer.
Returns: date
: xml date datatype - This value represents the current date, based on the time zone specified. For example, "if (_genesys.dateInZone("EST") == "2009-01-28")".
_genesys.session.timeInZone
This function returns the current time in the specified time zone; that is, the number of minutes elapsed since the last midnight (00:00 AM) in the specified time zone. The results will be in the xml time datatype format (that is, hh:mm:ss or hh:mm). This can be compared with other variables that use the same time format.
time _genesys.session.timeInZone(tzone)
Parameters:
- tzone: STRING which can be a variable or a constant - This parameter is the name of a time zone configured in the configuration layer.
Returns: time: xml time datatype - This value represents the current time, based on the time zone specified. For example, "if (_genesys.timeInZone("EST") == "17:00:00")".
_genesys.session.dayInZone
This function returns the current day of the week in the specified time zone. The results will be a value from the _genesys.session.day enumeration. This can be compared with other objects that use the same enumeration object.
day _genesys.session.dayInZone(tzone)
Parameters:
- tzone: STRING which can be a variable or a constant - This parameter is the name of a time zone configured in the configuration layer.
Returns: day: genesys.session.day ENUM OBJECT which can be a variable or a constant - This value represents the current day of the week, based on the time zone specified. For example, "if (_genesys.session.dayInZone("PST") == 5)".
_genesys.session.isSpecialDay
This function checks to see if the current day and time is defined in the configuration layer as a special day.
value _genesys.session.isSpecialDay(stat_table, stat_day, zone, useTime)
Parameters:
- stat_table: STRING which can be a variable or a constant - This parameter is the stat table in the configuration layer which this function will check.
- stat_day: STRING which can be a variable or a constant - This parameter is optional. If it is specified, the platform inquires from the configuration layer whether the specified statistical day is configured for the specified statistical table and whether the current date meets the definition of the statistical day. If this parameter is not specified, the platform inquires from configuration layer whether the current date meets the definition of any of the statistical days configured for the specified statistical table.
- zone: STRING which can be a variable or a constant - This parameter is optional. It defines the timezone to be used to determine if the given day is a special one. If this parameter is not specified, then the current date and time are used in the current TimeZone. If this parameter is specified, then the specified time zone will be used to calculate the adjusted date and time.
- useTime: BOOLEAN which can be a variable or a constant - This parameter is optional. It specifies whether or not to use the time limits specified within the stat day definition in the configuration layer.
Returns: value
: BOOLEAN - This indicates if the current day and time is special, based on configuration information.
_genesys.session.getConfigOption
This function allows the use of customized configuration options from the configuration layer and is obtained via URS - the user can configure any option name that is different from the standard options and then use its value in the session. In particular, you can specify any options you like in addition to the required ones and then give them meaning in the logic. This function retrieves the current value of any platform configuration option for use in the session. The search for the option starts with the object properties given by lookup sequence (the DN or resource that triggered the start of the session, the media server controlling this DN, the tenant to which they belong, or the orchestration platform). If the option is not found there, the search continues in the object properties corresponding to greater values of lookup sequence, in increasing order, until the option is found.
The key should be located within a section called __ROUTER__ of the corresponding objects from which the function will search. Failure to provide the key within such a section of the objects will result in an empty string being returned. Please refer to the Universal Routing Reference Manual for more details on setting URS Options and supported sections where options may be located from.
value _genesys.session.getConfigOption(ixnid, key, lookupseq)
Parameters:
- ixnid: STRING which can be a variable or a constant - This parameter is mandatory. It defines the ID of the interaction which should have this action applied.
- key: STRING which can be a variable or a constant - This parameter is mandatory. It is the key name of the configuration option in the configuration layer, it should be present under the required section of the objects, i.e. __ROUTER__
- lookupseq: genesys.session.lookupseq ENUM OBJECT which can be a variable or a constant - This parameter is mandatory. It defines the lookup sequence to use while searching the configuration layer..
Returns: value
: STRING - This is the value of the configuration option key. The empty string is returned if the option is not found.
_genesys.session.getServerVersion
Starting with ORS 8.1.400.24, this function allows you to retrieve the Orchestration Server version.
- Parameters: None
- Returns: STRING (version of Orchestration Server)
_genesys.session.getValue
This function searches an object tree to find a specific property and returns the value of that property. This is needed for properties like _genesys.ixn.interactions[x].udata or _genesys.ixn.interactions[x].xdata.
object _genesys.session.getValue(object rObj, string key)
Parameters:
- rObj: OBJECT which can be a variable or a constant - This parameter is the object which is going to be searched.
- key: STRING which can be a variable or a constant - This parameter is the name of property to search for.
Returns: value
: OBJECT - This is the value of the property. An empty object is returned if no property was found in the object tree.
_genesys.session.setOptions
This function is an override for platform-level configuration options. It enables the session to take control of certain options, instead of leaving them under the control of the platform or of functional modules. These changes only affect the current session and are not applied to the entire platform.
Note: Using this function may negatively impact URS performance.
void _genesys.session.setOptions(ixnid, option, value)
Parameters:
- ixnid: STRING which can be a variable or a constant - This parameter is mandatory. It defines the ID of the interaction which should have this action applied.
- option: STRING which can be a variable or a constant - This parameter is the configuration layer option that is to be overridden. Previously, the options that could be overridden were as listed below. Starting with Release 8.1.400.17, this restriction is now removed.
- request_timeout (all functional module requests)
- null_value (not valid any more, because DB access will be through the
<fetch>
element) - default_object (Queue functional module)
- use_ivr_info (Queue functional module)
- default_destination (Queue functional module)
- use_agentid (Queue functional module)
- use_extrouter (Queue functional module)
- use_extrouting_type (Queue functional module)
- value: STRING which can be a variable or a constant - This parameter is the value that is to be used as the override for the option.
Returns: VOID
_genesys.session.setTenant
This function overrides the tenant for this session.
void _genesys.session.setTenant(name)
Parameters:
- name: STRING which can be a variable or a constant - This parameter is the configuration layer name of the tenant to be set.
Returns: VOID
_genesys.session.getListItemValue
A developer can create string-related lists in the Configuration Layer. For example, these lists can be used to create lists of toll-free numbers instead of references for each individual 800 number in the logic. You can logically group numbers together and name the group. Then, when you need to add or edit numbers, the logic does not need changing; you just add to or edit the list. This function looks for an element item in the configured list and returns the value of its property key.
value _genesys.session.getListItemValue(list, item, key)
Parameters:
- list: STRING which can be a variable or a constant - This parameter is the name of the list in the configuration layer which this function will try and get the appropriate value for.
- item: STRING which can be a variable or a constant - This parameter is the name of the item in the list which this function will try and get the appropriate value for.
- key: STRING which can be a variable or a constant - This parameter is optional. It is the name of the key in the list which this function will try and get the appropriate value for. If this parameter is not specified, all properties of the found list elements are returned in as an OBJECT of key/value pairs: {Key1:value1, Key2:Value2, ...}.
Returns: value
: STRING - This is the value of the key in the list that was found, or OBJECT - all key/value pairs if the key wasn't specified. If the item or key is not found, this function returns an empty string. If list object itself is not found the function returns error (i.e. raises exception).
Starting with ORS 8.1.400.49, if option functions-by-urs is false, an asterisk ('*') can be specified as the value of item in the second parameter of the _genesys.session.getListItemValue(list, item, key) function. The key parameter is then mandatory and cannot be an asterisk. In this case, ORS performs a lookup for the specified key among all items. If only one key is found, the function returns a string value that corresponds to the key. If the key is found in several items, then the function returns object: {Item1:Value1, Item2:Value2…}
_genesys.session.listLookupValue
This function checks whether a List object in the configuration layer contains a particular element item.
value _genesys.session.listLookupValue(list, item)
Parameters:
- list: STRING which can be a variable or a constant - This parameter is the name of the list in the configuration layer which will be searched to determine whether it contains the item.
- item: STRING which can be a variable or a constant - This parameter is the name of the item that will be searched for in the list.
Returns: value
: BOOLEAN - This return value indicates whether the the item is part of the list.
_genesys.session.getServerVersion
Starting from ORS 8.1.400.22, this function returns version of Orchestration Server.
value _genesys.session.getServerVersion()
Parameters: None
Returns: value
: STRING - This is the version of Orchestration Server.
Action Elements
This covers action elements that are related to SCXML sessions, but are Genesys-specific. The namespace for these session-related actions is www.genesyslab.com/modules/session .
<fetch>
This action element fetches business content or data from an application server and is an enabler for Orchestration Server Integration within a customer's environment. The content could be generated by actual "business logic" running on the application server or it could just be a static content file on the application server, which could be updated (even manually) as required to allow things to be dynamic. The business content and associated logic itself will be created based on the programming technology of the application server it is going to run on. So the application server-specific development tools will be used to create this content and associated logic. This element is used within executable content processing. This business content and associated logic will be deployed and executed on an application server. The orchestration platform will support both .NET and J2EE application servers. The form of the returned business content will be JSON.
There is no explicit context or state shared between the orchestration platform and the application server. All context or state that is needed by the business content and logic must be sent via this action element. If the needed context or state is not totally known at the time of invocation, then the developer can use the QuerySessionData web services within their business content-fetching logic to get the current orchestration logic context for the given orchestration logic session. This provides a more flexible and dynamic mechanism. It also allows the developer to optimize what context or state is needed for each business content-fetching logic "application". This element may cover web service invocations in the future. In the meantime, the customer can use business content-fetching logic as a proxy for executing web services. This is also the way to invoke both database-related actions and rules system-related actions.
In addition, this action will support ESP-based requests from Genesys Interaction Server through the ESP (External Service Protocol) protocol and access URS REST API via direct ORS-URS connection. For HTTP and HTTPS, basic authentication is supported if the username and or password is provided in the request. This will result in the request being submitted to the application server with the Authorization HTTP header element added to the message. In addition to this, for both HTTP and HTTPS additional headers may be provided by passing an ECMAScript object into the request.
Attribute Details
Name |
Required |
Type |
Default Value |
Valid Values |
Description |
---|---|---|---|---|---|
attach_ixn_data |
false |
Boolean |
true/false |
Any valid location expression which represents a string |
Introduced in 8.1.400.48. Use to enable/disable attachment of interaction properties. ORS will ignore this attribute if “method” attribute is not “’esp’”. Default value of that attribute is true. If true, ORS will populate hr UserData in the ESP request with the following interaction properties: InteractionId, ParentId, TenantId, MediaType, InteractionType, InteractionSubtype, InteractionState, IsOnline, IsLocked, Queue, Workbin, WorkbinAgentId, WorkbinAgentGroupId, WorkbinPlaceId, WorkbinPlaceGroupId, SubmittedBy, ReceivedAt, SubmittedAt, DeliveredAt, SubmittedToRouterAt, PlacedInQueueAt, MovedToQueueAt, AbandonedAt, SubmitSeq, PlaceInQueueSeq, HeldAt, IsHeld, AssignedAt, CompletedAt, AssignedTo. |
requestid |
false |
location expression |
none |
Any valid location expression which represents a string |
This is the location for the request ID that is returned as part of this request. Any data model expression evaluating to a data model location. See SCXML Location Expressions for details. The location's value will be set to an internally generated unique string identifier to be associated with the action being sent. If this attribute is not specified, the event identifier is dropped. This identifier can be tested by the completion event handler to distinguish among several outstanding requests. If this attribute is not specified, the identifier can be acquired from the completion event. Every request must receive a unique identifier. |
srcexpr |
true |
value expression |
none |
Any value expression that returns a valid string URI of the following types:
|
This value expression
will be evaluated at the time that the fetch element is executed to produce the URI to pass to the application server. The URI schemes supported are HTTP, HTTPS and File. Note: when the scheme is 'gesp', the URI will have a specific format. See the ESP based |
type |
false |
value expression |
application/json |
application/xml, application/json, text/plain |
This value expression returns a character string that specifies the type of the fetched content. Values defined by the specification are:
If method attribute is "esp" or "urs", this attribute is ignored. The type attribute in the issued HTTP request will be passed to the application server as the Accept header. See SCXML Legal Data Values and Value Expressions for details. |
method |
false |
value expression |
get |
get post esp urs put delete |
A value expression which returns a character string that indicates the HTTP method to use. See SCXML Legal Data Values and Value Expressions for details. Values defined by the specification are:
|
timeout |
false |
value expression |
0 |
A value expression which returns an integer |
A value expression which returns an integer that represents the number of seconds to wait. See SCXML Legal Data Values and Value Expressions for details. The integer returned must be interpreted as a time interval. This interval begins when |
maxage |
false |
value expression |
A value expression which returns a valid integer for the HTTP 1.1 request RFC 2616 |
The integer returned must be interpreted as a time interval. This indicates that the logic is willing to use content whose age must be no greater than the specified time in seconds (compare with 'max-age' in HTTP 1.1 RFC 2616). The logic is not willing to use stale content, unless maxstale is also provided. If method attribute is "esp" or "urs", this attribute is ignored. | |
maxstale |
false |
value expression |
A value expression which returns a valid integer for the HTTP 1.1 request RFC 2616 |
The integer in string form returned must be interpreted as a time interval. This indicates that the logic is willing to use content that has exceeded its expiration time (cf. 'max-age' in HTTP 1.1 RFC 2616). If maxstale is assigned a value, then the logic is willing to accept content that has exceeded its expiration time by no more than the specified number of seconds. If method attribute is "esp" or "urs", this attribute is ignored. | |
username (since 8.1.1) |
false |
value expression |
none |
Any expression that results in a valid string value |
This value expression returns a character string that represents the username to be used as apart of HTTP Basic Authentication as defined by HTTP 1.1 [See RFC 2616]. If method attribute is "urs", this attribute is ignored. |
password (since 8.1.1) |
false |
value expression |
none |
Any expression that results in a valid string value |
This value expression returns a character string that represents the password to be used as apart of HTTP Basic Authentication as defined by HTTP 1.1 [See RFC 2616]. If method attribute is "urs", this attribute is ignored. |
enctype |
false |
value expression |
application/x-www-form-urlencoded |
application/x-www-form-urlencoded, application/json |
This value expression returns a character string that specifies the type of encoding to be used for the content of the POST/PUT message. Values defined by the specification are:
If method attribute is "esp" or "urs", this attribute is ignored. The content type returned by the application server response will be checked against the enctype attribute. If it is different, an error.session.fetch event will be raised - the exception is the text/plain value case, in which case any type of returned value is accepted.The returned body is provided "as-is" in the content of the session.fetch.done event. The application logic is supposed to use the JSON functions to convert it into appropriate values. See SCXML Legal Data Values and Value Expressions for details. |
gdelivery |
false |
value expression |
false |
A value expression which returns a boolean value (true or false) |
A value expression which returns a boolean value that indicates whether the platform is to guarantee the execution of the |
gd_retries |
false |
value expression |
0 |
A value expression which returns a valid integer |
A value expression which returns an integer that indicates the number of times the platform should try to successfully deliver the associated HTTP request to the defined destination (srcexpr value). This attribute is ignored if the gdelivery attribute value is false. If the gdelivery attribute value is true and the gd_retries value is 0, the platform will try to delivery the associated HTTP request indefinitely. If method attribute is "urs", this attribute is ignored. See SCXML Legal Data Values and Value Expressions for details. |
gd_retry_interval |
false |
value expression |
0 |
A value expression which returns a valid integer |
A value expression which returns an integer that represents the number of seconds to wait. The integer returned must be interpreted as a time interval. This interval is the time to wait between retries. This interval begins after a failed retry. This attribute is ignored if the gdelivery attribute value is false. If method attribute is "urs", this attribute is ignored. See SCXML Legal Data Values and Value Expressions for details. |
headers |
false |
value expression |
none |
Any valid ECMAScriipt object |
A value expression which returns an ECMAScript object. Each property name within the object will be interpreted as a separate HTTP header. Its value will be obtained using toString() and appended after the property name followed by a ":" character. No checking or validation will be performed on the properties and or values provided within the object. This will not override any headers automatically added by <fetch> such as Cache-Control and is provided as a means to provide the ability to add customer header information. If method attribute is "urs", this attribute is ignored. See SCXML Legal Data Values and Value Expressions for details. |
Important Note: Any evaluated attribute, if specified, must evaluate to a valid value. Otherwise, an error.script
event will be generated. This also applies to attributes that are ignored under specific conditions.
The mapping of this action to the underlying HTTP request and response is described in the Mapping of the SCXML and Functional Module Elements to the HTTP Messages section.
The following are examples of the <session:fetch>
action.
The example below demonstrate how to use <fetch> with method=”’urs’”. If you need to call a function from the URS REST API, the example demonstrates how to specify function name, how to pass parameters, and how to retrieve the returning object. The example is applicable for any function, not only FindConfigObject as is used below.
<state id="FindPersonByEmployeeID"> <datamodel> <data id="reqid" /> </datamodel> <onentry> <script> var s_URI = 'urs/call/@' + system.InteractionID + '/func'; var message = [3, "employeeid:EID_1000"]; </script> <session:fetch requestid="_data.reqid" srcexpr="s_URI" method="'urs'"> <param name= "name" expr="'FindConfigObject'" /> <param name= "params" expr="uneval(message)" /> </session:fetch> </onentry> <transition event="session.fetch.done" target="statex"> <script> var PersonObject = eval("(" + _event.data + ")"); </script> <assign location="_interactionID" expr="eventDataObject.envelope.Parameters.InteractionId"/> </transition> <transition event="error.session.fetch" target="statey" /> </state>
Another example:
<state id="get_business_data_using_param_child"> <datamodel> <data id="reqid"/> <data id="customervalue"/> </datamodel> <onentry> <session:fetch requestid="_data.reqid" srcexpr="'www.joes.com\getbusinessdata'" timeout="30"> <param name="customerID" expr="_cv.customerid"/> </session:fetch> </onentry> <transition event="session.fetch.done" target="statex"> <assign location="customervalue" expr="_event.data.cvalue"/> </transition> <transition event="error.session.fetch" target="statey"/> </state> <state id="get_business_data_using_content_child"> <datamodel> <data id="reqid"/> <data id="complexobject"/> </datamodel> <onentry> <session:fetch requestid="_data.reqid" srcexpr="'www.joes.com\getbusinessdata'" timeout="30"> <content _expr="_data.complexobject"/> </session:fetch> </onentry> <transition event="session.fetch.done" target="statex"> <assign location="customervalue" expr="_event.data.cvalue"/> </transition> <transition event="error.session.fetch" target="statey"/> </state> <state id="get_business_data_using_basic_auth_and_headers"> <datamodel> <data id="reqid"/> <data id="customervalue"/> </datamodel> <onentry> <script> var myheaders = new Objects(); myheaders["If-Modified-Since"] = "Sat, 1 Jan 2011 20:00:00 GMT"; myheaders["X-CUSTOM-HEADER"] = "Custom header information"; </script> <session:fetch requestid="_data.reqid" srcexpr="'www.joes.com\getbusinessdata'" timeout="30" username="'bob'" password="'mysecret'" headers="myheaders" > <param name="customerID" expr="_cv.customerid"/> </session:fetch> </onentry> <transition event="session.fetch.done" target="statex"> <assign location="customervalue" expr="_event.data.cvalue"/> </transition> <transition event="error.session.fetch" target="statey"/> </state>
Children
<param>
Occurs 0 to N. See SCXML<param>
for details. This element is mutually exclusive with the<content>
element. These parameters will be submitted differently, depending on the type of message used:- HTTP GET/DELETE Message - The
<param>
elements yield a URL parameter list (name1=value1&name2=value2...) at the end of the path element. Note that if the srcexpr attribute evaluates to a URL with URL parameters, the<param>
element parameters will be concatenated to the end of the URL component. If the<param>
element value is a complex object, the value is the result of evaluating the ECMAScript toString() function of that object, which is usually the string "[object object]". As a result, instead of submitting objects directly, the application developer must explicitly submit the properties of an object, for example, "_genesys.session.server.name". The following is the mapping of the<param>
element attributes to the URL parameter list format:- name - The "name" attribute of the
<param>
element will be submitted with the given parameter value as its key. - value - The current value associated with this
<param>
element "expr" attribute:- Simple types (string, integer, boolean, or decimal) will be converted into strings.
- ECMAScript objects will be converted into the string "[object object]". Complex objects should not be used.
- name - The "name" attribute of the
- HTTP POST/PUT Message - The
<param>
elements yield different formats depending on the<fetch>
enctype attribute value. Regardless, the results will be put into the body element of the POST/PUT message:- application/x-www-form-urlcoded - The
<param>
elements for this encoding format will be transformed into a URL parameter list (name1=value1&name2=value2...) which will be inserted into the body element of the message. If the<param>
element value is a complex object, the value is the result of evaluating the ECMAScript toString() function of that object, which is usually the string "[object object]". As a result, instead of submitting objects directly, the application developer must explicitly submit the properties of an object, for example, "_genesys.session.server.name". The following is the mapping of the<param>
element attributes to the URL parameter list format:- name - The "name" attribute of the
<param>
element will be submitted with the given parameter value as its key. - value - The current value associated with this
<param>
element "expr" attribute:- Simple types (string, integer, boolean, or decimal) will be converted into strings.
- ECMAScript objects will be converted into the string "[object object]". Complex objects should not be used.
- name - The "name" attribute of the
- application/json - The
<param>
elements for this encoding format will be a JSON-formatted string which will be inserted into the body element of the message. Each<param>
element will be a top-level attribute in the format. For example,<param name="a" expr="value1"/>
<param name="b" expr="complexb"/>
<!- complexb has three properties e,f,g ->
will result in the following JSON-formatted string - {"a":value1, "b":{"e":88, "f":"john", "g":22}}.
- application/x-www-form-urlcoded - The
- ESP Message - The
<param>
element can only be used to pass request parameters on the ESP request message. If the ESP request message requires the passing of user-data parameters as well, then the<content>
element MUST be used instead. The<param>
elements will put in the Interaction Server TKVList format. The<fetch>
enctype attribute value is ignored. - urs Message - the same as for HTTP GET/DELETE
- HTTP GET/DELETE Message - The
<content>
Occurs 0 to 1. See SCXML<content>
for details. This element is mutually exclusive with the<param>
element. The content defined in this element will match the value of the<fetch>
element enctype attribute:- application/x-www-form-urlencoded - The _expr attribute cannot be used and the content of this element will be sent as is.
- application/json - The _expr attribute must be specified and must evaluate to an ECMAScript object. The object will be sent as is.
Summary of URL and JSON encoding
The following table is a summary of the rules described above.
|
URL Encoded |
JSON Encoded | ||
---|---|---|---|---|
<param> |
<content> |
<param> |
<content> | |
GET, DELETE |
Name and expression attributes of each <param> element (name and expr, correspondingly) will be evaluated, URL-encoded, and combined into a standard name-value sequence (n1=v1&n2=v2&...). Duplicate parameter names are acceptable. The following rules will be used when URL-encoding the expression attribute:
|
Content of the <content> element will be URL-encoded without prior evaluation. This element cannot be used together with <param>. |
Not supported. |
Not supported. |
POST, PUT |
Name and expression attributes of each <param> element (name and expr, correspondingly) will be evaluated, combined into a single object and then converted into the JSON string. Duplicate parameter names are acceptable, however, remember that duplicate property names in JSON string will be eliminated during evaluation. For example, the ECMAScript expression: |
Expression attribute (_expr) of the <content> element will be evaluated and converted into the JSON string. This element cannot be used together with <param>. |
Events
The following events can be generated as part of this action:
- session.fetch.done
- error.session.fetch
As of 8.1.200.50, upon successful execution of <session:fetch>, the event session.fetch.done
is generated. It is possible to retrieve the response headers of the HTTP request from this event using: _event.data.headers
. The headers are provided as key-value pairs.
ESP-Based <fetch>
Actions
For backwards compatibility purposes the platform and the <fetch>
element will support the invocation of External Service Protocol (ESP) requests and responses. In order to use the <fetch>
element for ESP-related requests, the developer needs to do the following:
gesp:[<applname>]|[\<type>\]<service>\[<method>]
The following are the meanings of the different elements of the format:
For example,
MyEmailServer\CFGEmailServer\EMail\CreateEmailOut \CFGContactServer\Contact\Update
- Specify a value of 'esp" for the method attribute.
- Construct the gesp URI with the following format for the srcexpr attribute:
- "applname" is the 3rd party application (connected to Interaction Server) that is to be used to process this request.
- "type" is the 3rd party application type that is to be used to process this request. (optional)
- "service" is the name of the service with which this request is associated.
- "method" is the specific function to be performed by the 3rd party application. (optional)
- The only way to pass request parameters and interaction user data on an ESP-based
<fetch>
action is with the<content>
element. You use the _expr attribute with an ECMAScript object which contains properties called "params" and "udata". The one with the name "udata" will be an ECMAScript object which contains the user-data parameters that you want to pass with the action. The other properties in the main ECMAScript object will be request parameters. All of these parameters will be in the Interaction Server TKVList format. - The
<fetch>
type, enctype, maxage, and maxstale attributes are ignored. - The response data content will be return as a JSON string in the session.fetch.done event.
The following is an example of the <session:fetch>
action:
<state id="updateContact"> <datamodel> <data id="reqid" /> </datamodel> <onentry> <script> var updateContactRequestContent = { params: { UseDataFromParameters: false }, udata: { TenantId: 101, ContactId: "GK4MW583K80DTE04", FirstName: "James", LastName: "Johnson" } }; </script> <session:fetch method="'esp'" requestid="_data.reqid" srcexpr="'ContactServer_801_04\\CFGContactServer\\Contact\\Update'"> <content _expr="updateContactRequestContent" /> </session:fetch> </onentry> <transition event="session.fetch.done" target="statex"> <script> var eventDataObject = eval("(" + _event.data + ")"); </script> <assign location="_interactionID" expr="eventDataObject.envelope.Parameters.InteractionId"/> </transition> <transition event="error.session.fetch" target="statey" /> </state>
For a successful ESP call the returned response will use the following conversion logic to determine how the JSON object is structured.
- The ESP JSON response will contain an
envelope
anduser_data
only if the corresponding sections are returned with the data section of the ESP response. - The ESP response containing the ESP
envelope
will containService
andMethod
properties together with the associated envelopeParameters
that will contain the key name value properties. - The ESP response containing the ESP
user_data
will contain the key name value properties if provided in the ESP response. - For both the envelope
Parameters
and also for theuser data
if any key names are duplicated in the ESP response then these will be converted to a JSON array of values. For entries that may have incompatible types but share the same name then such values will be incorporated into the same named array but provided as an object, rather than a value.
The following is an example of the above ESP-to-JSON conversion logic operating on the following ESP response.
06:22:54.082 'external_srvice_response' (501) message: attr_ref_id [int] = 294014 attr_envelope [list, size (unpacked)=604] = 'Service' [str] = "Contact" 'Method' [str] = "Identify" 'Parameters' [list] = (size=228) 'ContactCreated' [str] = "false" 'ContactIdList' [str] = "0005Ua6CJC69002J" 'ContactIdList' [str] = "0005Ua6CJC69002N" 'ContactIdList' [str] = "0005Ub6CJC6H0001" 'ContactIdList' [str] = "0005Ub6CJC6H0004" 'ContactIdList' [str] = "0005Ub6CJC6H0007" 'NumberOfContactsFound' [int] = 5
The following would be the JSON representation of the successful ESP call.
{ "envelope": { "Service": "Contact", "Method": "Identify", "Parameters": { "ContactCreated": "false", "ContactIdList": [ "0005Ua6CJC69002J", "0005Ua6CJC69002N", "0005Ub6CJC6H0001", "0005Ub6CJC6H0004", "0005Ub6CJC6H0007"], "NumberOfContactsFound": 5 } } }
For ESP calls that return user data in addition to an enevelope, the following would be expected to be represented.
{ "envelope": { "Service": "Contact", "Method": "Identify", "Parameters": { "ContactCreated": "false", "ContactIdList": "0005Ub6CJC6H0001", "NumberOfContactsFound": 1 } }, "user_data": { "FirstName": "James", "ContactId": "0005Ub6CJC6H0001", "LastName": "Johnson" } }
Guaranteed Delivery of the <fetch>
Action
When a web service request is made to the external service using <fetch>
, the orchestration platform guarantees delivery of such a request. That is, the orchestration platform handles situations in which normal web service requests cannot be fulfilled.
Here are some situations in which a web service request cannot be fulfilled:
- Cannot establish a connection to a given URI
- Received a redirect response when making a request to a given URI
- Received an error response when making a request to a given URI
- No response received to the web service request during timeout
To handle these situations, the orchestration platform would queue web service requests, and retry making the request within the configured timeout period. The orchestration platform would queue web service requests on the basis of their URIs. Note that this functionality addresses both cases of:
- Temporary unavailability of the external service
- Unavailability of one of the nodes in the load-balanced external service
Important Note: If the session exits a state that has an outstanding <fetch>
action, then the outstanding <fetch>
action will be terminated. Also if an invoked session with an outstanding <fetch>
action terminates, then the outstanding <fetch>
action will be terminated.
Mapping of the SCXML and Functional Module Elements to the HTTP Messages
The following sections cover the mapping of the SCXML and functional module element's attributes into the corresponding HTTP message elements.
Get/Delete message
Here is an example of the <fetch>
action including basic authentication and optional headers:
<script> var myheaders = new Object(); myheaders["If-Modified-Since"] = "Sat, 1 Jan 2011 20:00:00 GMT"; myheaders["X-CUSTOM-HEADER"] = "Custom header information"; </script> <session:fetch requestid="_data.reqid" srcexpr="'http://www.business1.com/data2/content'" type="'text/plain'" method="'get or delete'" timeout="100" maxstale="10" maxage="20" username="'open'" password="'sesame'" headers="myheaders"> <param name="param1" expr="'value1'"/> <param name="p2" expr="'v2'"/> </session:fetch>
Here is how it maps to an HTTP GET/DELETE message:
GET/DELETE /data2/content?param1=value1&p2=v2 HTTP/1.1 Host: www.business1.com Cache-Control: max-age=10, max-stale=10 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== If-Modified-Since: Sat, 1 Jan 2011 20:00:00 GMT X-CUSTOM-HEADER: Custom header information ...
Mapping Summary:
- The results of evaluating the
srcexpr
attribute yields the host and path elements of the HTTP message. - The result of evaluating the child
<param>
elements yields the URL parameter list at the end of the path. Note that if thesrcexpr
attribute evaluates to a URL with URL parameters, we would concatenate the<param>
element parameters to them. If the<param>
element value is a complex object, the value is the result of evaluating thetoString()
function of that object, which is usually[object object]
. - The result of evaluating the
maxage
attribute yields theCache-Control
header with themax-age
directive. - The result of evaluating the
maxstale
attribute yields theCache-Control
header with themax-stale
directive. - The result of evaluating the
username
andpassword
yields the addition of the Authorization header with the type specified asbasic
and theusername
andpassword
base64 encoded. - The result of providing
header
yields aheader
element for each of the items provided within the supplied object. No validation will occur on this and the headers will be appended "as-is". - The result of evaluating the
type
attribute yields theAccept
header. Also the data type returned by the application server in the HTTP response will be checked against the type value. If it is different, anerror.session.fetch
will be raised - an exception that istext-plain
, which means any type of returned value is accepted. - There is no HTTP body for the GET request.
Note: The Basic authentication
and optional
headers will operate exactly the same for POST
or PUT
types.
POST/PUT Message
Here is an example of the <fetch>
action with enctype = application/x-www-form-urlcoded:
<session:fetch requestid="_data.reqid" srcexpr="'http://www.business1.com/data2/content'" type="'text/plain'" method="'post or put'" timeout="100" maxstale="10" maxage="20" enctype="'application/x-www-form-urlencoded'"> <param name="param1" expr="'value1'"/> <param name="p2" expr="'v2'"/> <param name="p3" expr="v3"/> </session:fetch>
Note: v3 is an object with two properties: "a" and "b". v3.a = 4 and v3.b = 5. Here is how it maps to an HTTP POST/PUT message:
POST/PUT /data2/content HTTP/1.1 Host: www.business1.com Cache-Control: max-age=10, max-stale=10 Content-Type=application/x-www-form-urlencoded Content-Length=xx param1=value1&p2=v2&p3=[object object] ...
Here is an example of the <fetch>
action with enctype = application/json:
<session:fetch requestid="_data.reqid" srcexpr="'http://www.business1.com/data2/content'" type="'text/plain'" method="'post or put'" timeout="100" maxstale="10" maxage="20" enctype="'application/json'"> <param name="param1" expr="'value1'"/> <parm name="p2" expr="'v2'"/> <parm name="p3" expr="v3"/> </session:fetch>
Note: v3 is an object with two properties "a" and "b". v3.a = 4 and v3.b = 5. Here is how it maps to an HTTP POST/PUT message:
POST/PUT /data2/content HTTP/1.1 Host: www.business1.com Cache-Control: max-age=10, max-stale=10 Content-Type=application/json Content-Length=xx {"param1":"value1","p2":"v2","p3":{"a":4,"b":5}} ...
Mapping Summary:
- The results of evaluating the
srcexpr
attribute yields the host and path elements of the HTTP message. - The results of the
<param>
elements depend on theenctype
attribute. Note: theContent-Length
header value will be set to the total length of the resulting body element. application/x-www-form-urlcoded
- The result of evaluating the<param>
elements yields the body element in the formatp1=v1&p2=v2&p3=v3..., where p1, p2, p3,...
are the names in the<param>
elements, andv1
,v2
, andv3
are values that result from evaluating the correspondingexpr
attributes. If one of the values is not a simple type, we would put the result of the "toString()
" function in the body, as in theGET
case.application/json
- The result of evaluating the<param>
elements yields the body element formatted in JSON format, where each<parameter>
name should appear as a top-level attribute.- The result of evaluating the
maxage
attribute yields theCache-Control
header with themax-age
directive. - The result of evaluating the
maxstale
attribute yields theCache-Control
header with themax-stale
directive. - The result of evaluating the
enctype
attribute yields theContent-Type
header value. - The result of evaluating the
type
attribute yields theAccept
header. Also the data type returned by the application server in the HTTP response will be checked against the type value. If it is different, anerror.session.fetch
will be raised - this exception istext-plain
, which means any type of returned value is accepted.
<start>
This starts an independent SCXML document and session and runs completely independently of the starting (that is, parent) session. If the starting session ends, the started session does not, and vice versa. Session content is not shared between the sessions. Any session or 3rd party application can terminate (for example, <terminate>
) this started session, as long as they have the session ID. When this session terminates, a done event will be fired by the orchestration platform for all interested parties (other sessions, and so on).
Attribute Details
Name |
Required |
Type |
Default Value |
Valid Values |
Description |
---|---|---|---|---|---|
sessionid |
false |
location expression |
none |
Any value location that represents a valid string field |
This is the location for the session ID that is returned as part of this request. Any data model expression evaluating to a data model location. See SCXML Location Expressions for details. The location's value will be set to an internally generated unique string identifier to be associated with the newly created session. This ID is immediately populated by the platform and can be used on subsequent elements ( |
src |
true |
value expression |
none |
Any value expression that returns a valid URI |
This value expression returns a character string that represents the URI of the SCXML document. The URI schemes supported are HTTP, HTTPS and File. See SCXML Legal Data Values and Value Expressions for details. Starting with 8.1.400.09, Orchestration Server provides the ability to use the Enhanced Routing Script object when starting a new session by the
|
idealtime |
false |
value expression |
none |
Any expression that results in a valid integer for the dateTime value |
This value expression returns a dateTime value which will represent the date and time that this session is to be started. This value should be the time as returned by the ECMAScript Date(...).getTime() function, which is given in the number of milliseconds since 00:00:00 UTC on January 1, 1970. See SCXML Legal Data Values and Value Expressions for details. |
prewindow |
false |
value expression |
none |
Any expression that results in a valid integer for the duration value |
This value expression returns a duration value which will represent the time window prior to the ideal time for which the session could be started. For details on the duration type, see the duration datatype . See SCXML Legal Data Values and Value Expressions for details. |
postwindow |
false |
value expression |
none |
Any expression that results in a valid integer for the duration value |
This value expression returns a duration value which will represent the time window after the ideal time for which the session could be started. For details on the duration type, see the duration datatype . See SCXML Legal Data Values and Value Expressions for details. |
The following is an example:
<state id="Starting_a_new_session"> <datamodel> <data id="newsession"/> </datamodel> <onentry> <session:start src="'www.genesyslab.com\session\orchapp1'" sessionid="_data.newsessid" /> </onentry> <transition event="session.start.done" target="statex"> <send event="'start.event'" target="_data.newsessid"/> </transition> <transition event="error.session.start" target="statey"/> </state>
Children
<param>
Occurs 0 to N - This contains data to be passed to the newly created session. The use of this element will follow the same rules as the SCXML<invoke>
element definition.
Events
The following events can be generated as part of this action:
- session.start.done
- error.session.start
- session.restored
<updatestart>
This action updates the starting time of the SCXML session. It can only be used after the session is started using the idealtime attribute and if the requested session has not been started yet.
Attribute Details
Name |
Required |
Type |
Default Value |
Valid Values |
Description |
---|---|---|---|---|---|
sessionid |
true |
value expression |
none |
Any value expression which returns a valid string. |
A value expression which returns the session ID to be updated. See SCXML Legal Data Values and Value Expressions for details. |
idealtime |
false |
value expression |
none |
Any expression that results in a valid integer for the dateTime value |
This value expression returns a dateTime value which will represent the updated date and time that this session is to be started. This value should be the time as returned by the ECMAScript Date(...).getTime() function, which is given in the number of milliseconds since 00:00:00 UTC on January 1, 1970. See SCXML Legal Data Values and Value Expressions for details. |
prewindow |
false |
value expression |
none |
Any expression that results in a valid integer for the duration value |
This value expression returns a duration value which will represent the updated time window prior to the ideal time for which the session could be started. For details on the duration type, see the duration datatype. See SCXML Legal Data Values and Value Expressions for details. |
postwindow |
false |
value expression |
none |
Any expression that results in a valid integer for the duration value |
This value expression returns a duration value which will represent the updated time window after the ideal time for which the session could be started. For details on the duration type, see the duration datatype . See SCXML Legal Data Values and Value Expressions for details. |
Children
None
Events
The following events can be generated as part of this action:
- session.updatestart.done
- error.session.updatestart
<terminate>
This action terminates an SCXML session from an unrelated SCXML session. As a result of termination, the orchestration platform sends the done event to the invoking SCXML session (if it is still running). It will also be used to cancel a scheduled session.
Attribute Details
Name |
Required |
Type |
Default Value |
Valid Values |
Description |
---|---|---|---|---|---|
sessionid |
true |
value expression |
none |
Any value expression which returns a valid string. |
A value expression which returns the session ID to be terminated. See SCXML Legal Data Values and Value Expressions for details. |
Children
None
Events
The following events can be generated as part of this action:
- session.terminate.done
- error.session.terminate
<cancel>
This action terminates a pending fetch action request <session:fetch>
. This is used to allow the application to ensure that any guaranteed delivery fetch requests are terminated. This action should be put in the <onexit>
element where these types of fetch actions are invoked.
Attribute Details
Name |
Required |
Type |
Default Value |
Valid Values |
Description |
---|---|---|---|---|---|
requestid |
true |
value expression |
none |
Any valid value expression which returns a valid string. |
This is the request ID of the outstanding |
Children
None
Events
The following events can be generated as part of this action:
- session.cancel.done
- error.session.cancel
Events
The event namespace convention is session.xxxx The following are the session action result events:
Event |
Attributes |
Description |
---|---|---|
session.fetch.done |
This event indicates the success of the request and that the data location has been updated with the returned content in JSON format. | |
requestid |
This is the ID of the | |
content |
This is the returned content. Its format is based on the | |
hints |
This is the protocol-specific data associated with the fetch response (for example, HTTP header data). Its format is based on the | |
headers (8.1.200.50) |
This is a collection of response headers, presented as key-value pairs. HTTP header data found in the fetch response can be accessed here. | |
error.session.fetch |
This indicates that an error occurred while trying to perform the fetch request. | |
requestid |
This is the ID associated with the request. | |
error |
This is the type of error that occurred. The following is a specific error code:
| |
description |
This is a more detailed description of the error | |
session.start.done |
This event reflects the results of | |
sessionid |
This is the ID of the SCXML session that has been started. | |
error.session.start |
This indicates that an error occurred while trying to perform the | |
sessionid |
This is the ID of the SCXML session that was supposed to have started. | |
error |
This is the type of error that occurred. | |
description |
This is a more detailed description of the error | |
session.terminate.done |
This event reflects the results of | |
sessionid |
This is the ID of the SCXML session that has terminated. | |
error.session.terminate |
This indicates that an error occurred while trying to perform the | |
error |
This is the type of error that occurred. | |
sessionid |
This is the ID associated with a fetch request. | |
description |
This is a more detailed description of the error | |
session.updatestart.done |
This event reflects the results of | |
sessionid |
This is the ID of the SCXML session that was updated. | |
error.session.updatestart |
This indicates that an error occurred while trying to perform the | |
error |
This is the type of error that occurred. | |
description |
This is a more detailed description of the error. | |
session.cancel.done |
This event reflects the results of | |
requestid |
This is the ID associated with a fetch request. | |
error.session.cancel |
This indicates that an error occurred while trying to perform the | |
requestid |
This is the ID associated with a fetch request. | |
error |
This is the type of error that occurred. | |
description |
This is a more detailed description of the error |
The following are the session asynchronous events:
Event |
Attributes |
Description |
---|---|---|
done.xxx |
This event indicates that a started session was finished or was terminated. The xxx part of the event is different depending on how the session was started.
| |
session.restored |
This event indicated that a session was restored from a previous checkpoint and some state processing may be lost. | |
sessionid |
This is the session ID of the session that is being restored. | |
type |
This is the type of event. The only possible value is "external" | |
session.terminating |
This event indicates that the session is being terminated because of a hung condition.This is only sent when a session is being terminated by the platform due to an error condition (hung condition, infinite loop, and so on). This gives the session the ability to graceful terminate itself. So this event is sent by the platform to a session in trouble. A done.xxx will not be sent at all in this condition. | |
sessionid |
This is the session ID of the session that is being terminated. | |
reason |
This is the reason the platform is terminating the session. The following is the set of reasons:
| |
session.cancelled |
This event indicates that the session is being cancelled from a | |
sessionid |
This is the session ID of the session that is being terminated. |
In addition to the above listed asynchronous session events, the following events are also available:
- session.recovered
- session.ixnrecovered
- session.restarted
Though the above three events are separate events, they are grouped together as they all signal applications about session run failures on the original ORS instance. They indicate that the session (and as a result the interaction/event processing) was aborted unexpectedly. The reason could be a crash, termination, switchover, or any other factor). And after that processing was resumed on another ORS instance – it could either be the same ORS instance after a restart, or a backup instance switching to the primary mode.
If one of these events is received in a session, the SCXML application could analyze current conditions, and make some corrections in the application logic. The first two events - session.recovered and session.ixnrecovered – can be seen only if session persistence is enabled and working. The third event - session.restarted – does not require session persistence. Moreover, when a session restart is requested in ORS, persistence for this session will be suppressed even if configured.
Event |
Attributes |
Description |
---|---|---|
session.recovered |
The session.recovered event could be received as a result of proactive session recovery upon changing ORS work mode to primary. In order to perform this, in addition to enabling persistence, the SCXML application should be marked as subjected to proactive recovery. In many cases, proactive session recovery is not required. Important
Proactive session recovery is not recommended for sessions processing multi-media interactions (because of specifics of working with Interaction Server).The session.recovered event has no payload/properties, and is sent out-of-band to a proactively recovered session to guarantee it is the very first event in such a session after recovery. | |
session.ixnrecovered |
The session.ixnrecovered event could be received if a session recovers on a new ORS instance due to an interaction related event. Or, if a session has already been recovered proactively (usually not a case), this event indicates that the new ORS instance restores association between the interaction and the session receiving it. Session recovery by an interaction related event (or recovery on demand) is more frequently used in a live production environment than proactive recovery. In case of session recovery by an interaction related event, it is guaranteed that it is the very first event after restoring the particular session. | |
interactionid (of type String) |
This is the ID of the interaction re-associated with a given session. Upon processing this event, the restored SCXML session could analyze related interaction properties (for example, user data) and jump to the appropriate SCXML state, or perform other execution logic corrections. | |
session.restarted |
The session.restarted event could be received when the Recovery of Voice Calls Without Persistence functionality is configured for a particular or all SCXML applications. It is applicable only for sessions processing voice calls (sessions started by voice call related events). No session persistence is needed at all in this case. When a session restarts, it is guaranteed that the session.restarted event is the very first event in the restarted session. The event has no payload/properties. Upon ORS switchover, a new primary ORS instance restarts existing voice sessions if it is requested to do so. For those restarted sessions, the generated events are the same as when a call arrives on the loaded DN – the same set of session startup events (interaction.added, interaction.present, interaction.partystatechanged) are regenerated. There is no event prehistory – session life starts from scratch with one important exclusion. It is guaranteed that the very first event in the restarted session will be the session.restarted event. Whereas there is no such event in the original session. A restarted session is expected to raise an internal flag upon processing this event in the same state where the interaction.added event is handled. Further, if a flag is set, the session could analyze data when the startup interaction.added event is received and processed, and make a reasonable move to a desired SCXML state to avoid repeating what was already done with the call before restarting the session. Probably, the easiest way to achieve that is setting/checking a milestone mark in call user data. Important User data is not updated upon every SCXML state exit – the milestone mark should be updated upon completion of certain logical units in strategy only. And consequent jumps could be made to re-entrant/independent parts of the strategy. There could also be other ways of making a decision on which part of the strategy to jump to, in a restarted session, if required. |
Web Services Interface
Action Elements
<response>
This action is used to send a response to a request-based event from an external application (for details see Send Request to SCXML Session). It is recommended that you use this action element within the <transition>
element associated with event processing for the given request. If not, you may encounter network-related timeouts and potential performance issues.
Attribute Details
Name |
Required |
Type |
Default Value |
Valid Values |
Description |
---|---|---|---|---|---|
requestid |
true |
value expression |
none |
This value expression returns the corresponding request ID which this response is for. Note: this must be the sendid property from the associated request event (that is, _event.sendid). See SCXML Legal Data Values and Value Expressions for details. | |
type |
false |
value expression |
positive |
positive negative |
This value expression returns the type of response this is. Values defined are:
See SCXML Legal Data Values and Value Expressions for details. |
resultcode |
false |
value expression |
none |
any expression that results in a valid string |
This value expression returns a string which will represent the result code associated with the response. See SCXML Legal Data Values and Value Expressions for details. |
headers (since 8.1.200.50) |
false |
value expression |
none |
any expression that evaluates to an iterable collection of key-value pairs |
This value expression defines custom headers (if any) to be included with the HTTP response. |
The following is an example of the response processing in the <transition>
element:
<state id="processing_requests_in_transition"> <transition event="DoFunctionX" cond="_event.data.paramtype == 'application/json' && _event.data.param !=''"> <script> <! - do specific function x logic -> </script> <ws:response requestid="_event.sendid"> <param name="op1" expr="ovar1"/> <param name="op2" expr="ovar2"/> </ws:response> </transition> <transition event="DoFunctionX" cond="_event.data.paramtype != 'application/json' || _event.data.param ==''"> <ws:response requestid="_event.sendid" type="negative" resultcode="invalidparameter"/> </transition> </state>
The following is an example of the response processing in a sub-state model:
<state id="processing_requests_in_substate_model"> <datamodel> <data id="reqid"/> <data id="functionXparms"/> </datamodel> <transition event="DoFunctionX" cond="_event.data.paramtype == 'application/json' && _event.data.param !=''" target="functionX'> <script> _data.reqid = _event.sendid; _data.functionXparms = _event.data.param; </script> </transition> <transition event="DoFunctionX" cond="_event.data.paramtype != 'application/json' || _event.data.param ==''"> <ws:response requestid="_event.sendid" type="negative" resultcode="invalidparameter"/> </transition> <! - This is the substate model to execute the processing associated with function X -> <state id="functionX" initial="fXStep1"> <state id="fXStep1"> </state> ... <final> <onentry> <ws:response requestid="_event.sendid"> <param name="op1" expr="ovar1"/> <param name="op2" expr="ovar2"/> </ws:response> </onentry> </final> </state> </state>
Children
<param>
(Since 8.1.200.25) Occurs 0 to N - This contains data to be passed in the HTTP response.
Events
None
HTTP Mappings
Here is an example of a positive <response>
action:
<ws:response requestid="_event.sendid"> <param name="param1" expr="'value1'"/> <parm name="p2" expr="'v2'"/> <parm name="p3" expr="v3"/> </ws:response>
Here is how it maps to an HTTP GET Response message:
HTTP/1.1 200 Content-Type=application/json Content-Length=xx {"param1":"value1","p2":"v2","p3":{"a":4,"b":5}} ...
Here is an example of a negative <response>
action:
<ws:response requestid="_event.sendid" type="negative" resultcode="invalidparameter"> <param name="description" expr="'Invalid value for parm2'"/> </ws:response>
Here is how it maps to an HTTP GET Response message:
HTTP/1.1 500 invalidparameter Content-Type=application/json Content-Length=xx {"description":"Invalid value for parm2"} ...
Mapping Summary:
- The result of evaluating the
<param>
elements yields the body element formatted in JSON format, where each<parameter>
name should appear as a top-level attribute. Note: theContent-Length
header value will be set to the total length of the resulting body element. - The
Content-Type
header value will always be "application/json
". - The
Status-Code
header value will either be "200
" for positive responses or "500
" for negative responses. - The
resultcode
attribute will be mapped to theReason-Phrase
header element.
Here is an example of a positive <response>
action:
<ws:response requestid="_event.sendid"> <param name="param1" expr="'value1'"/> <parm name="p2" expr="'v2'"/> <parm name="p3" expr="v3"/> </ws:response>
Here is how it maps to an HTTP POST Response message:
HTTP/1.1 200 Content-Type=application/json Content-Length=xx {"param1":"value1","p2":"v2","p3":{"a":4,"b":5}} ...
Here is an example of a negative <response>
action:
<ws:response requestid="_event.sendid" type="negative" resultcode="invalidparameter"> <param name="description" expr="'Invalid value for parm2'"/> </ws:response>
Here is how it maps to an HTTP POST Response message:
HTTP/1.1 500 invalidparameter Content-Type=application/json Content-Length=xx {"description":"Invalid value for parm2"} ...
Mapping Summary:
- The result of evaluating the
<param>
elements yields the body element formatted in JSON format, where each<parameter>
name should appear as a top-level attribute. Note: theContent-Length
header value will be set to the total length of the resulting body element. - The
Content-Type
header value will always be "application/json
". - The
Status-Code
header value will either be "200
" for positive responses or "500
" for negative responses. - The
resultcode
attribute will be mapped to theReason-Phrase
header element.