Ask AI
English EN
Go to Watbot

Expressions

Inside {{ ... }} you can do more than insert a value — you can calculate, compare or pick text based on a condition:

{{ $age >= 18 ? "Welcome!" : "Access from age 18" }}
10% off: ${{ $price * 0.9 }}
{{ upper(first_name) ~ ", hello!" }}

What an expression is made of

What How to write it Example
Contact variable $name $city
Variable with spaces in its name var("name") var("Client name")
Contact data name without $ first_name, phone
Global variable global("name") global("Rate (USD)")
Text in quotes "..." or '...' "Good afternoon"
Number digits, decimal part after a dot 10, 0.9
Boolean true, false
Empty value null
Function name(arguments) round($price, 2)

Nothing is replaced inside quotes: {{ "price $a" }} outputs price $a.

Arithmetic

Operator Operation Example Result
+ addition {{ 2 + 3 }} 5
- subtraction {{ 10 - 4 }} 6
* multiplication {{ 3 * 4 }} 12
/ division {{ 10 / 4 }} 2.5
% remainder {{ 10 % 3 }} 1
** power {{ 2 ** 10 }} 1024

Parentheses change the order of operations: {{ ($price + $delivery) * 2 }}.

Decimals are shown without extra digits: {{ 0.1 + 0.2 }} gives 0.3. To round, use round; to format with separators, use number_format.

Comparisons

Operator Meaning
== equal
!= not equal
>, >= greater than, greater than or equal
<, <= less than, less than or equal

If both sides are numbers — even written as text, like variable values — they are compared as numbers: "10" > 9 is true.

A comparison on its own outputs true or false: {{ $age >= 18 }}.

Logic

Operator Meaning
and or && and
or or || or
not or ! not
{{ $age >= 18 and $city == "London" ? "Visit our office" : "We work online" }}

Condition

condition ? if_yes : if_no — picks one of two options:

{{ $points >= 100 ? "You've earned a gift" : (100 - $points) ~ " points to go for a gift" }}

The short form value ?: fallback outputs the value if it isn't empty, otherwise the fallback:

Hello, {{ first_name ?: "friend" }}!

Fallback for missing data

value ?? fallback — if there is no value at all (the contact has no phone number, the variable isn't set), the fallback is inserted:

Phone: {{ phone ?? "not provided" }}

Working with text

Operator Operation Example
~ join text {{ first_name ~ " " ~ last_name }}
contains contains {{ $answer contains "yes" ? "Great!" : "Too bad" }}
starts with starts with {{ phone starts with "+44" ? "UK" : "Another country" }}
ends with ends with {{ email ends with "@gmail.com" }}
in is in a list {{ $city in ["London", "Manchester"] ? "Delivery available" : "Pickup only" }}
not in is not in a list {{ $plan not in ["pro", "business"] }}

contains, starts with and ends with are case-sensitive. To ignore case, convert the text to one case: {{ lower($answer) contains "yes" }}.

Functions inside expressions

Functions can be nested and combined with operators:

{{ capitalize(lower(var("Client name"))) }}
{{ round(($price + $delivery) * 0.9, 2) }}
${{ number_format(global("Rate (USD)") * $total, 2) }}

See the function reference for the full list.

What you can't do

Expressions have no loops, no assignments and no access to the platform's internal data — only operators and functions from the reference. See Errors and limits for details.