Choice state
A Choice state adds conditional logic to a ZIS flow.
"PickChoice": {"Type": "Choice","Choices": [{"Variable": "$.input.value","StringEquals": "Choice A","Next": "NextStateA"},{"Variable": "$.input.value","StringEquals": "Choice B","Next": "NextStateB"}],"Default": "NextStateC"}
Supported properties
In addition to common state properties, a Choice state supports the following properties.
| Name | Type | Mandatory | Description |
|---|---|---|---|
| Choices | array | true | Array of choice rule objects. These rules determine the next state in the ZIS flow. Must contain at least one choice rule object |
| Default | string | false | Next state to run if no choice rules in Choices are true |
Choice rules
A choice rule object contains a boolean expression. The expression is a
comparison that evaluates to true or false. When run, the Choice
state evaluates each rule in the Choices array in the order provided. The ZIS
flow runs the Next state of the first rule that evaluates to true. If no rule
in the Choices array is true, the flow runs the Default state.
A choice rule object requires the following properties:
- A
Variablethat contains a JSON reference path to an input value - A comparison operator
- The
Nextstate to run in the ZIS flow if the rule evaluates to true
The object also supports an optional logical operator.
Comparisons
To evaluate a rule, a Choice state compares the input Variable to the value of
the comparison operator. For example, the following state compares
$.ticket.priority to a static StringEquals value.
"Choice.CheckTicketPriority": {"Type": "Choice","Choices": [{"Variable": "$.ticket.priority","StringEquals": "Urgent","Next": "EscalateTicketStep"}],"Default": "NormalTicketStep"}
To compare the input variable to a reference path, append Path to the
StringEquals key.
Note: Some comparison operators don't support a Path suffix. See
comparison operators.
"Choice.CheckTicketPriority": {"Type": "Choice","Choices": [{"Variable": "$.ticket.priority","StringEqualsPath": "$.settings.ticket_priority","Next": "EscalateTicketStep"}],"Default": "NormalTicketStep"}
Comparison operators
A Choice state supports the following comparison operators.
| Comparison operator | Path comparison operator |
|---|---|
| StringEquals | StringEqualsPath |
| StringLessThan | |
| StringGreaterThan | |
| StringLessThanEquals | |
| StringGreaterThanEquals | |
| NumericEquals | NumericEqualsPath |
| NumericLessThan | NumericLessThanPath |
| NumericGreaterThan | NumericGreaterThanPath |
| NumericLessThanEquals | NumericLessThanEqualsPath |
| NumericGreaterThanEquals | NumericGreaterThanEqualsPath |
| BooleanEquals | BooleanEqualsPath |
| TimestampEquals | |
| TimestampLessThan | |
| TimestampGreaterThan | |
| TimestampLessThanEquals | |
| TimestampGreaterThanEquals | |
| IsPresent | |
| IsNull |
Logical operators
Use logical operators to combine or negate choice rules in a choice rule object. A Choice state supports the following logical operators:
NotAndOr
Not example:
"Choice.TicketNotClosed": {"Type": "Choice","Choices": [{"Not": {"Variable": "$.jq_result","StringEquals": "Closed"},"Next": "ActiveTicketStep"}],"Default": "ClosedTicketStep"}
And example:
"Choice.WaitingUrgentTicket": {"Type": "Choice","Choices": [{"And": [{"Variable": "$.ticket.status","StringEquals": "New"},{"Variable": "$.ticket.priority","StringEquals": "Urgent"}],"Next": "EscalateTicketStep"}],"Default": "NormalTicketStep"}
Or example:
"Choice.TicketTopPriorities": {"Type": "Choice","Choices": [{"Or": [{"Variable": "$.ticket.priority","StringEquals": "High"},{"Variable": "$.ticket.priority","StringEquals": "Urgent"}],"Next": "EscalateTicketStep"}],"Default": "NormalTicketStep"}
Example
For an example of a Choice state in a ZIS flow, see Using conditional branching in a ZIS flow.
Limitations
A ZIS Choice state doesn't support all comparison operators from the Amazon State Language. For supported operators, see Comparison operators.