Logical expressions in messages
Description
tip
If you're using multiple logical operators in a single if expression, make sure to wrap each pair of conditions in parentheses — this is required for correct parsing.
Correct syntax example:
<html>
{if param1 and (param2 and (param3 and param4))} <!--true-->
if true
{else}
if false
{end}
</html>
```
**Example that will cause a parsing error:**
```
<html>
{if param1 and param2 and param3 and param4} <!--false-->
if true
{else}
if false
{end}
</html>
```
The core of highly personalized targeted messages are conditional expressions.
They are based on if → then → else logic and display different content depending on conditions.
{if lead.field in json.promo_actions1}
You can use data variables both in conditions and in output blocks. This significantly reduces message duplication for segmented audiences.
Example: setting special discounts for VIP customers of a specific shop, while all other recipients receive a default offer.
Congratulations! Your premium discount is 42%!— VIP customersSpecial offer! Get a 20% discount for your second purchase!— all others
Two conditions inside a single message are enough.
- Check if the customer has the
"best_buy_type"field and belongs to the required shop. - Check whether premium products were purchased.
<!-- Condition 1: profile has "shop_name" and "best_buy_type" -->
{if lead.shop_name and lead.best_buy_type}
<!-- Condition 2: shop_name equals "my_shop" -->
{if lead.shop_name equal "my_shop"}
<!-- Condition 3: best_buy_type contains "premium" -->
{if lead.best_buy_type contains "premium"}
<p>Congratulations! Your premium discount is 42%!</p>
{else}
<p>Special offer! Get a 20% discount for your second purchase!</p>
{end}
{else}
<p>Special offer! Get a 20% discount for your second purchase!</p>
{end}
{else}
<p>Special offer! Get a 20% discount for your second purchase!</p>
{end}
Examples
Conditions
Simple condition
{if param1}
if true
{else}
if false
{end}
Complex condition
Example 1:
{if param1 in array["par1" "par2"] and ( 5 equal length("par 3") or false )}
if true
{else}
if false
{end}
Example 2 using apicontent:
{if apicontent.field_1 not_equal apicontent.field_2 and ( apicontent.field_1 or apicontent.field_2 )}
if true
{else}
if false
{end}
Example 3:
{if crypt("md5" lead._fname "salt") like "123b003aa39d110d1333b37af9889e10" and crypt("base58" lead.lottery_id) like json.crypted_winner}
if true
{else}
if false
{end}
Example 4:
{if iseven(lead.count) and iseven(lead.count2) equal false}
if true
{else}
if false
{end}
Check field and cancel sending if missing
{if lead.some_field}
some_field is not empty
{else}
{cancel}
{end}
Loops
Simple loop
{for array[1 "2" 3.3]}
{.}
{else}
if empty array
{end}
Loop with variables
{for $index, $el = array[1 "2" 3.3]}
{$index}: {$el}
{else}
if empty array
{end}
Value matching conditions
Equal
{if param1 equal param2}
if true
{else}
if false
{end}
Not equal
{if param1 not_equal param2}
if true
{else}
if false
{end}
String is equal (case insensitive)
{if param1 like param2}
if true
{else}
if false
{end}
String is not equal (case insensitive)
{if param1 not_like param2}
if true
{else}
if false
{end}
String contains (case insensitive)
{if param1 contains param2}
if true
{else}
if false
{end}
String doesn't contain (case insensitive)
{if param1 not_contains param2}
if true
{else}
if false
{end}
Numbers and dates comparison
More than number/date
{if 0 gt 1}
if true
{else}
if false
{end}
More than or equal to number/date
{if 0 gte 1}
if true
{else}
if false
{end}
Less than number/date
{if 0 lt 1}
if true
{else}
if false
{end}
Less than or equal to number/date
{if 0 lte 1}
if true
{else}
if false
{end}
Arrays and tags fields
Element is in array
{if param1 in array["par1" "par2"]}
if true
{else}
if false
{end}
Element is in tags field
{if param1 in lead.TagsField}
if true
{else}
if false
{end}
Element is not in array
{if param1 not_in array["par1" "par2"]}
if true
{else}
if false
{end}
Element is not in tags field
{if param1 not_in lead.TagsField}
if true
{else}
if false
{end}
All elements are in first array
{if array["par1" "par2"] all_in array["par1" "par2"]}
if true
{else}
if false
{end}
Not all elements are in first array
{if array["par1" "par2"] not_all_in array["par1" "par2"]}
if true
{else}
if false
{end}
At least one match in the arrays
{if array["par1" "par2"] any_of array["par1" "par2"]}
if true
{else}
if false
{end}
No matches in the arrays
{if array["par1" "par2"] not_any_of array["par1" "par2"]}
if true
{else}
if false
{end}