An action cell performs the particular function indicated by its type. For example, Start, Play Media, and Route to Contact.
A script has one Start action cell, which is the entry point into the script and any number of action cells. The Start action cell cannot be deleted.
The Start action cell has a single outgoing link (an exit point) whilst all other action cells have a single incoming link and support for one or more exit points. Each action cell in a script is given a unique ID and you can give each cell its own unique name. You can colour action cells to make complex scripts easier to read.
The image below shows a Menu action cell with three configured exit points. Selecting an action cell (blue highlighted) displays its properties, which you must configure and save.
Properties and exit routes are unique to an action cell and are described in this manual.
In the script shown above, the Menu action cell plays an introduction prompt to the caller prompting them for a DTMF keypress and then exits along the route indicated by the caller's keypress. The prompt and keypress timeouts are configured in the action cell properties. Script execution ends when the communication is routed to a contact (options 1 to 3).
Although action cells in a script can have the same name, they are uniquely identified by a unique ID.
See also, Create a Script for Handling Incoming Communications and FLOW Action Cell Reference.
A variable is a programming element used by a FLOW script to store a value that may change each time the script is run. For example, a script that takes a CLI and uses it to look up the caller’s name would use a variable for the CLI, since its value will change with each incoming call. Variables can also be used to provide a constant value (defined by you) within a FLOW script.
A variable must fall into one of the following categories depending on how it is to be used:
Variable Category |
Description |
Set up by |
User |
Set up at script level, and available only to the script in which they were created. The values that they store can be passed as input parameters to other scripts and applications. |
You |
Set up centrally to hold values commonly used by scripts. For example, calling and called numbers. The 'Contact' fields apply to 'Dial' scripts only. |
storm |
|
Set up centrally to hold values used by all scripts that reference them. Examples include currency conversion rates, activation flags, and deactivation flags. Global variables are prefixed with a '$' symbol. |
You (in storm STUDIO). See the storm STUDIO User Guide for instructions. |
|
These reference 20 'misc' fields labelled $_Misc_1 - $Misc_20. These can be used to store information that is intended for use in storm VIEW historical reporting (CONTACT Data Record data source). Each field is limited to 1024 characters. CDR variables also includes a $_Call_Result variable for storing the completion code in an OUTBOUND campaigns. |
You |
The value of a user variable persists while the system handles a particular call or service. It is then overwritten for the next call or service. If you provide an initial value to a user variable, that value applies each time the script begins execution.
A variable must be of one of the following data types depending on the data it is required to store:
Variable Data Type |
Description |
Size/Range |
Integer |
A whole number. You can initialise a new integer variable with a value of your choice. If you do not, it is initialised with a default value of 0. The value can then be overwritten by the script's action cells at run time. |
-2,147,483,647 to 2,147,483,647 although some action cells will not accept negative values or values above a particular threshold. |
String |
A sequence of characters. This can be text, numbers, or both. You can initialise a new string variable with a value of your choice. If you do not, it is initialised as an empty string. The value can then be overwritten by the script's action cells at run time. |
2048 bytes. The number of characters that are acceptable depends on the size of characters used. |
Boolean |
A flag that is used to indicate either True or False. You can initialise a new Boolean variable with a value of your choice. If you do not, it is initialised with a default value of False. The value can then be overwritten by the script's action cells at run time. |
TRUE or FALSE only. |
Float |
A floating point value or decimal fraction. That is, a number with a decimal point, such as '123.45'. You can initialise a new Float variable with a value of your choice. If you do not, it is initialised with a default value of 0.00. The value can then be overwritten by the script's action cells at run time. |
Any decimal number between -1.79769313486232E308 and 1.79769313486232E308 although some action cells will not accept negative values or values above a particular threshold. Only the first 16 significant digits are stored. For example, 12345678910111213141516 is stored as 1.234567891011121E22. |
A structure of elements used to store a date and time in the order Year, Month, Day of Month, Hours, Minutes, and Seconds. You can initialise a new date variable with a value of your choice. If you do not, it is initialised as an empty date. The variable's elements can be populated and changed by the script's action cells at run time. A date element value falling outside its scope (for example, 14 for month) causes FLOW to normalise the entire date to a meaningful one. If some of your scripts' date variables are populating with unexpected values, you might want to check if operations in the script are causing the dates to be normalised. See Normalisation of Date Variables to understand how FLOW applies normalisation to the elements of date variables. |
As an example, 10 minutes past 3 o'clock on the afternoon of 6 April 2021 is stored as 2021.4.6.15.10.0. You can use a format specifier in an action cell to present a single digit as a double digit. For example, applying the format specifier %02d to the 'Seconds' element presents '0' seconds as '00'. Some action cells (such as Format String) allow you to format variables using format specifiers. |
|
Call Data |
Call data that is organised as a structure during a call. |
See Call Data. |
A single variable containing multiple data values of a particular data type. You cannot initialise an array variable on creation. It is initially empty but can be populated at run time by the Add To Array action cell. |
50 values (This can be increased on request. Consult your local support representative.) See also, Array Variables below. |
|
Complex data that is organised as a structure. Object data types are derived from an OpenAPI specification and you can manage these by importing object definitions into FLOW using storm STUDIO. Only schemas where 'type=object' are used. You cannot initialise an object variable on creation. Its empty structure can be populated at run time by other action cells. |
See Object Variables below. |
|
Used to provide an email template to an agent working in DTA, pre-populated with the following values: To address From address CC address Subject Body An email template variable is populated using an Assign Variable action cell, and incorporated into the workflow using the Route to Contact action cell. |
|
An array variable provides a means of storing and manipulating multiple data values in a single variable rather than having to create multiple variables of other types. For example, consider a script that retrieves records of customer information data values such as customer account numbers, customer names, contact addresses, contact numbers, and VIP customers from an integrated application such as storm DATA MANAGEMENT. Rather than creating several string variables to store the retrieved data, you can consider storing the same data in a single array variable. Since grouped data in an array variable is much easier to locate, update, and manipulate than doing so across separate variables, your scripts can benefit from making better complex data-driven routing decisions. An array variable's members must all be of the same data type and this is determined when the array is defined. An array can support any one of the Integer, String, Float, Boolean, Date, and Object data types.
To illustrate, you could populate a single string array variable with the following customer details rather than create five string variables.
[ACC_012345, Freddie Davies, 23 Privet Drive, 07700900722, Yes]
Further along in the script, the array variable may update with the following three customer data values:
[ACC_006456, Piers Hudson, 8 Felix Lane]
FLOW provides a dedicated set of Array action cells for populating and manipulating data in array variables. You can use these to return the number of data values in an array, as well as to read, update, add, and remove data values.
In the Array action cells, you select stored data values by means of index numbers. You can think of array values as being index numbered from left to right from the first value (positive indexes) or from right to left starting from the last value (negative indexes). The first or only value in an array is always at index position 0 and the last value is always at index position -1. Shown below is the index numbering in an array of five values:
Index |
0 |
1 |
2 |
3 |
4 |
|
-5 |
-4 |
-3 |
-2 |
-1 |
Array |
Value A |
Value B |
Value C |
Value D |
Value E |
The array indexing allows you to select a value relative to the start or end of the array. In the illustration, you can refer to value C as being at index location 2 or -3, whichever is more convenient.
Note: you cannot nest an array variable inside another array variable.
An object variable stores multiple data values of various types in a structure. For example, an object variable named Customer1Details might store a particular customer's personal details as shown below.
firstName = Elroy
lastName = Keefe
age = 43
gender = Male
contactNumber1 = 07700900763
contactNumber2 = 01632960238
Each item is called an object member and can be an integer, string, Boolean, float, date, array, or another object. The example object variable above has six object members of types string and integer, and the object itself is of type 'CustomerDetails'. You can use action cells (such as Assign Variable, Get Date, and DATA MANAGEMENT) to populate and change the data values of object members.
If your service is required to store another customer's personal details, you can create another object variable of type 'CustomerDetails' and call it, say, Customer2Details. By virtue of being an object of type 'CustomerDetails', it will store the data for customer 2 across the same six data members.
In more complex structures, data is stored in object sub-members. For example, a variation of the 'CustomerDetails' object type named 'CustomerFullDetails' might store customer address information in the five sub-members of the 'address' member as shown below.
firstName
lastName
address
houseNumber
street
city
postcode
country
age
gender
contactNumber1
contactNumber2
You can reference an entire object variable in the property fields of action cells that support object variables. Object variables are particularly useful for sending and receiving data to and from RESTful APIs (see the REST API action cell) and also for passing data to a subsidiary FLOW service (see the Start and Run FLOW Service action cells).
You can use an object variable's members in any action cell property field that supports that variable type. For example, with reference to the 'CustomerDetails' object type example above, the object member lastName can be used in any action cell property field that supports the string variable type.
'CustomerDetails' and 'CustomerFullDetails' are just two simple examples of object types. Any object type containing any number of members can be defined for storing different types of data. If you need to use object variables in your services, you must define them according to the OpenAPI specification. They can then be imported into FLOW via storm STUDIO as described in the storm STUDIO User Guide.
Note: object types are grouped according to the title of their associated OpenAPI specifications. This means that an object type named 'CustomerDetails', for example, could appear in more than one group.
Note: if your OpenAPI specification document contains one or more objects that are defined explicitly as 'object' (an anonymous object), you will not be able to import the document into FLOW unless you modify your document and carry out the workaround described in Working With Anonymous Objects.
Note: you must ensure that the case of the object definitions in the OpenAPI specification matches the case of the objects returned by the API in the response body of the REST API action cell. For example, if the API is expected to return Pascal Case, then the specification document must also use Pascal Case.
See also, Use Variables in a Script.
An event counter is an entity that is placed on an exit route and which increments every time FLOW execution passes it. Event counters are made available as live data sources in storm VIEW, helping analysts to monitor usage and performance of parts of a script. For example, the number of callers who choose a particular IVR option, or the number of callers who are using mobiles or landlines can be reported. See the storm VIEW User Guide for information on how to display counter events sent from FLOW.
The following types of event counters are available.
Counter Type |
Description |
Snapshot Summation |
A whole number. Increments a counter by ‘1’ or another specified value every time a route is executed and then decrements when script execution ends. |
Vote Count Accumulation |
Increments a counter by ‘1’ or another specified value every time a route is executed. This can be used to increment a variable holding a value such as a transaction amount, for example. |
Numeric Stream |
Sends a numeric value to VIEW, which remains at the current value until the next update replaces it. This can be used to send the value of the latest donation received during a fund-raising campaign, for example. |
Data Stream |
Sends a string of characters to VIEW. This can be used to send the last number dialled during a campaign, for example. |
You may include up to five event counters in a script. (This can be increased on request. Consult your local support representative.)
A symbol in the Counters panel indicates that there are one or more invalid counters in the script. This can happen if a counter is referring to a variable that has been deleted (typically a global variable). Invalid counters must be resolved before you are allowed to commit the script.
See also, Configure Real-Time Event Counters.