CopiaFacts supports conditional processing of most command files, but their principal use is in infobox (.IIF) files. Conditional commands are most useful in connection with $type decision infoboxes which are used to analyze responses to IVR prompt messages, but have many other applications also.
Other advanced uses of conditional processing are described in the CopiaFacts Scripting entry in the Features section.
Note that the conditionals in .FS files are processed when the file is first read by CopiaFacts; the .FS files written back into the SENT, FAIL and (for retries) TOSEND directories will reflect the conditional processing which occurred on first reading of the file.
Variable Expansion
All values and filenames on these commands are subject to variable-expansion using the normal @ syntax. Examples:
$if 06/2013 $in @date4
...
$endif
$ifn @myvar1 = @myvar2
...
$endif
$if @class > 100
$next_box 2345
$else
$next_box 1234
$endif
$ifn X $in @class
$image_password dist.ndx 2
$endif
Quoting Parameters
Operands for comparison should not normally be surrounded by double-quotes; the double-quotes are not stripped before the comparison is done.
$set_var namevar "My Name"
...
$if @namevar = My Name
...
$if |@value| $in |0|1|2|3|5|8|13|21|
$if |@response| $in |y|yes|accept|
$if {@response} $in {y} {yes} {accept}
$if "@myvar" = "ValueWithTrailingSpaces "
Nesting Conditionals
Conditional commands may be nested up to 32 levels deep. The proper terminating $endif commands must always be supplied. For example:
$if @myvar1 = foo
$if @myvar2 = bar
...
$else
...
$endif
$else
$ife @FFBASE\images\@mynum.TIF
...
$endif
$endif
Indenting your $if commands as shown makes it much easier to balance the $else and $endif statements. The COPIAEDIT program can automatically indent conditional commands (press F9).
Testing variables set from DTMF
![]() | IMPORTANT: Any variable set by a $get_var command will not have its value available for testing in the same .IIF file. This is because the user interaction to set the variable does not occur until after the first infobox has been completely processed. To test a value which has been input by the caller, use $next_box to transfer control to a new $type decision infobox, in which you can use the appropriate $if statements. For example: |
;infobox 9123
$type question
$image_desc standard
$get_var varname2 3 5
$if @EXPERT = Y
$validate none
$else
$validate digits
$endif
$next_box 9000
;infobox 9000
$type decision
$if @varname1 = @varname2
$next_box 2222
$else
$next_box 3333
$endif
Using $next_box
There is one more potential problem with constructing conditional statements in .IIF files: if you have ever done any computer programming, you may be tempted to treat $next_box like a "go to", which it is not. The following example illustrates this error:
;infobox 777 *** incorrect example ***
$type decision
$if @value = 23
$next_box 2300
$endif
$next_box 4567 ; this should have been in an $else group
In the above example, when the value is 23 control does not immediately transfer to box 2300. Instead the 2300 gets overridden by the 4567 when the second $next_box command is processed. The correct way to construct this type of .IIF file is shown in the example infobox 9000 above.
Configuration File Variables
Inside the configuration file, the most common variable use is for isolating version-specific commands, and selecting nodes. For example:
$if @FFVERSION > 910000
$voip ... ... ...
$endif
$if @NODEID = M1
$var_def M1VAR VALUE
$endif
$if EMAIL $in @NODEID
$email_esender "steve@copia.com"
$endif
It is important to remember that @NODEID is only defined in the COPIAFACTS engine, and that these conditionals are anyway ignored in FAXFACTS.CFG by other programs. Also, many commands in FAXFACTS.CFG are required to be globally defined. Use conditionals in this file with great care.
To define node-specific variables in FAXFACTS.CFG, you can also use $environment, which has a nodename parameter, and also supports variables which take values at specific times only.